Added virtual symbol SymVariable translated from general real SymIdentifier symbol

This commit is contained in:
Celestino Amoroso 2024-05-20 06:05:24 +02:00
parent e5c5920db0
commit 7c8dbb0ac7
7 changed files with 12 additions and 32 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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)

View File

@ -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{})

View File

@ -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 {

View File

@ -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)

View File

@ -72,6 +72,7 @@ const (
SymIdentifier
SymBool
SymInteger
SymVariable
SymFloat
SymFraction
SymString