Compare commits

...

2 Commits

3 changed files with 10 additions and 14 deletions

View File

@ -24,11 +24,11 @@ func TestExpr(t *testing.T) {
succeeded := 0 succeeded := 0
failed := 0 failed := 0
// inputs1 := []inputType{ inputs1 := []inputType{
// {`1 ? {"a"} : {"b"} ? ["a"] {"A"} :["b"] {"B"}`, "B", nil}, {`f = func(op){op()}; f(func(){2})`, int64(2), nil},
// } }
for i, input := range inputs { for i, input := range inputs1 {
var expr Expr var expr Expr
var gotResult any var gotResult any
var gotErr error var gotErr error

View File

@ -89,7 +89,12 @@ type funcDefFunctor struct {
func (functor *funcDefFunctor) Invoke(ctx ExprContext, name string, args []any) (result any, err error) { func (functor *funcDefFunctor) Invoke(ctx ExprContext, name string, args []any) (result any, err error) {
for i, p := range functor.params { for i, p := range functor.params {
if i < len(args) { if i < len(args) {
ctx.setVar(p, args[i]) arg := args[i]
if functor, ok := arg.(Functor); ok {
ctx.RegisterFunc(p, functor, 0, -1)
} else {
ctx.setVar(p, arg)
}
} else { } else {
ctx.setVar(p, nil) ctx.setVar(p, nil)
} }

View File

@ -176,8 +176,6 @@ func (self *parser) parseSelector(scanner *scanner, tree *ast, allowVarRef bool)
if caseTerm, err = self.parseSelectorCase(scanner, allowVarRef, false); err == nil { if caseTerm, err = self.parseSelectorCase(scanner, allowVarRef, false); err == nil {
addSelectorCase(selectorTerm, caseTerm) addSelectorCase(selectorTerm, caseTerm)
// selectorTerm.children = append(selectorTerm.children, caseTerm)
// caseTerm.parent = selectorTerm
} }
return return
} }
@ -200,7 +198,6 @@ func (self *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef
if tk.Sym == SymComment { if tk.Sym == SymComment {
continue continue
} }
//resetSelector := true
if tk.Sym == SymSemiColon { if tk.Sym == SymSemiColon {
if allowForest { if allowForest {
@ -268,15 +265,12 @@ func (self *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef
if selectorTerm == nil { if selectorTerm == nil {
err = tk.Errorf("selector-case outside of a selector context") err = tk.Errorf("selector-case outside of a selector context")
} else if caseTerm, err = self.parseSelectorCase(scanner, allowVarRef, tk.Sym == SymDoubleColon); err == nil { } else if caseTerm, err = self.parseSelectorCase(scanner, allowVarRef, tk.Sym == SymDoubleColon); err == nil {
// selectorTerm.children = append(selectorTerm.children, caseTerm)
// caseTerm.parent = selectorTerm
addSelectorCase(selectorTerm, caseTerm) addSelectorCase(selectorTerm, caseTerm)
currentTerm = caseTerm currentTerm = caseTerm
if tk.Sym == SymDoubleColon { if tk.Sym == SymDoubleColon {
selectorTerm = nil selectorTerm = nil
} }
} }
//resetSelector = tk.Sym == SymDoubleColon
default: default:
currentTerm, err = tree.addToken2(tk) currentTerm, err = tree.addToken2(tk)
} }
@ -285,9 +279,6 @@ func (self *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarRef
selectorTerm = nil selectorTerm = nil
} }
// if resetSelector {
// selectorTree = nil
// }
lastSym = tk.Sym lastSym = tk.Sym
} }
return return