refactor assign ast.
diff --git a/ast.go b/ast.go
index 137c29a..4525136 100644
--- a/ast.go
+++ b/ast.go
@@ -1,5 +1,7 @@
package main
+import "fmt"
+
type AST interface {
eval(*Evaluator)
show()
@@ -10,24 +12,28 @@
lineno int
}
-const (
- ASSIGN_SIMPLE = iota // :=
- ASSIGN_RECURSIVE // =
- ASSIGN_APPEND // +=
- ASSIGN_CONDITIONAL // ?=
-)
-
type AssignAST struct {
ASTBase
- lhs string
- rhs string
- assign_type int
+ lhs string
+ rhs string
+ op string
}
func (ast *AssignAST) eval(ev *Evaluator) {
ev.evalAssign(ast)
}
+func (ast *AssignAST) evalRHS(ev *Evaluator) string {
+ switch ast.op {
+ case ":=":
+ return ev.evalExpr(ast.rhs)
+ case "=":
+ return ast.rhs
+ default: // "+=", "?="
+ panic(fmt.Sprintf("not implemented assign op: %q", ast.op))
+ }
+}
+
func (ast *AssignAST) show() {
Log("%s=%s", ast.lhs, ast.rhs)
}