Added virtual symbol SymVariable translated from general real SymIdentifier symbol
This commit is contained in:
parent
e5c5920db0
commit
7c8dbb0ac7
@ -8,7 +8,7 @@ import "fmt"
|
||||
|
||||
// -------- variable term
|
||||
func newVarTerm(tk *Token) *term {
|
||||
return &term{
|
||||
t := &term{
|
||||
tk: *tk,
|
||||
// class: classVar,
|
||||
// kind: kindUnknown,
|
||||
@ -18,6 +18,8 @@ func newVarTerm(tk *Token) *term {
|
||||
priority: priValue,
|
||||
evalFunc: evalVar,
|
||||
}
|
||||
t.tk.Sym = SymVariable
|
||||
return t
|
||||
}
|
||||
|
||||
// -------- eval func
|
||||
|
@ -22,7 +22,7 @@ func evalAssign(ctx ExprContext, self *term) (v any, err error) {
|
||||
}
|
||||
|
||||
leftTerm := self.children[0]
|
||||
if leftTerm.tk.Sym != SymIdentifier {
|
||||
if leftTerm.tk.Sym != SymVariable {
|
||||
err = leftTerm.tk.Errorf("left operand of %q must be a variable", self.tk.source)
|
||||
return
|
||||
}
|
||||
|
@ -8,9 +8,7 @@ package expr
|
||||
|
||||
func newNullCoalesceTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
// class: classOperator,
|
||||
// kind: kindUnknown,
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priCoalesce,
|
||||
@ -26,7 +24,7 @@ func evalNullCoalesce(ctx ExprContext, self *term) (v any, err error) {
|
||||
}
|
||||
|
||||
leftTerm := self.children[0]
|
||||
if leftTerm.tk.Sym != SymIdentifier {
|
||||
if leftTerm.tk.Sym != SymVariable {
|
||||
err = leftTerm.Errorf("left operand of %q must be a variable", self.tk.source)
|
||||
return
|
||||
}
|
||||
@ -34,11 +32,7 @@ func evalNullCoalesce(ctx ExprContext, self *term) (v any, err error) {
|
||||
if leftValue, exists := ctx.GetVar(leftTerm.source()); exists {
|
||||
v = leftValue
|
||||
} else if rightValue, err = self.children[1].compute(ctx); err == nil {
|
||||
// if _, ok := rightValue.(Functor); ok {
|
||||
// err = errCoalesceNoFunc(self.children[1])
|
||||
// } else {
|
||||
v = rightValue
|
||||
// }
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -63,7 +57,7 @@ func evalAssignCoalesce(ctx ExprContext, self *term) (v any, err error) {
|
||||
}
|
||||
|
||||
leftTerm := self.children[0]
|
||||
if leftTerm.tk.Sym != SymIdentifier {
|
||||
if leftTerm.tk.Sym != SymVariable {
|
||||
err = leftTerm.Errorf("left operand of %q must be a variable", self.tk.source)
|
||||
return
|
||||
}
|
||||
@ -81,11 +75,6 @@ func evalAssignCoalesce(ctx ExprContext, self *term) (v any, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// utils
|
||||
// func errCoalesceNoFunc(t *term) error {
|
||||
// return t.Errorf("the right operand of a coalescing operation cannot be a function definition")
|
||||
// }
|
||||
|
||||
// init
|
||||
func init() {
|
||||
registerTermConstructor(SymDoubleQuestion, newNullCoalesceTerm)
|
||||
|
@ -67,20 +67,8 @@ func evalDot(ctx ExprContext, self *term) (v any, err error) {
|
||||
err = fmt.Errorf("key %v does not belong to the dictionary", rightValue)
|
||||
}
|
||||
}
|
||||
// case *dataCursor:
|
||||
// if indexTerm.symbol() == SymIdentifier {
|
||||
// opName := indexTerm.source()
|
||||
// if opName == resetName {
|
||||
// _, err = unboxedValue.Reset()
|
||||
// } else if opName == cleanName {
|
||||
// _, err = unboxedValue.Clean()
|
||||
// } else {
|
||||
// err = indexTerm.Errorf("iterators do not support command %q", opName)
|
||||
// }
|
||||
// v = err == nil
|
||||
// }
|
||||
case ExtIterator:
|
||||
if indexTerm.symbol() == SymIdentifier {
|
||||
if indexTerm.symbol() == SymVariable {
|
||||
opName := indexTerm.source()
|
||||
if unboxedValue.HasOperation(opName) {
|
||||
v, err = unboxedValue.CallOperation(opName, []any{})
|
||||
|
@ -37,7 +37,7 @@ func evalInsert(ctx ExprContext, self *term) (v any, err error) {
|
||||
list, _ := rightValue.(*ListType)
|
||||
newList := append(ListType{leftValue}, *list...)
|
||||
v = &newList
|
||||
if self.children[1].symbol() == SymIdentifier {
|
||||
if self.children[1].symbol() == SymVariable {
|
||||
ctx.UnsafeSetVar(self.children[1].source(), v)
|
||||
}
|
||||
} else {
|
||||
@ -57,7 +57,7 @@ func evalAppend(ctx ExprContext, self *term) (v any, err error) {
|
||||
list, _ := leftValue.(*ListType)
|
||||
newList := append(*list, rightValue)
|
||||
v = &newList
|
||||
if self.children[0].symbol() == SymIdentifier {
|
||||
if self.children[0].symbol() == SymVariable {
|
||||
ctx.UnsafeSetVar(self.children[0].source(), v)
|
||||
}
|
||||
} else {
|
||||
|
@ -25,7 +25,7 @@ func evalPostInc(ctx ExprContext, self *term) (v any, err error) {
|
||||
|
||||
if it, ok := childValue.(Iterator); ok {
|
||||
v, err = it.Next()
|
||||
} else if IsInteger(childValue) && self.children[0].symbol() == SymIdentifier {
|
||||
} else if IsInteger(childValue) && self.children[0].symbol() == SymVariable {
|
||||
v = childValue
|
||||
i, _ := childValue.(int64)
|
||||
ctx.SetVar(self.children[0].source(), i+1)
|
||||
|
Loading…
Reference in New Issue
Block a user