summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2022-01-19 14:38:18 -0500
committerKyle Gunger <kgunger12@gmail.com>2022-01-19 14:38:18 -0500
commit567aa820e32be95d9c566315d776c1f12fa8ffbe (patch)
treef313e7b1ddc0914618bab364b6f409f9cc69f973 /src
parentb955c8e9c9b56295be6b8ff65fe55df35eac3b6f (diff)
[EVAL] Fill out evalBlock
Diffstat (limited to 'src')
-rw-r--r--src/texec/eval.go64
1 files changed, 31 insertions, 33 deletions
diff --git a/src/texec/eval.go b/src/texec/eval.go
index 3b9e1fb..7db07b0 100644
--- a/src/texec/eval.go
+++ b/src/texec/eval.go
@@ -265,33 +265,6 @@ func getIntLiteral(v tparse.Node) int {
return int(i)
}
-func getCompositeLiteral(v tparse.Node) []interface{} {
- out := []interface{}{}
-
- if v.Data.Data != "comp" || v.Data.Type != 10 {
- return out
- }
-
- var add interface{}
- for i := 0; i < len(v.Sub); i++ {
- if v.Sub[i].Data.Type == tparse.LITERAL {
- dat := []rune(v.Sub[i].Data.Data)
- if dat[0] == '"' {
- add = getStringLiteral(v.Sub[i])
- } else if dat[0] == '\'' {
- add = getCharLiteral(v.Sub[i])
- } else {
- add = getIntLiteral(v.Sub[i])
- }
- } else if v.Sub[i].Data.Data == "comp" && v.Sub[i].Data.Type == 10 {
- add = getCompositeLiteral(v.Sub[i])
- }
- out = append(out, add)
- }
-
- return out
-}
-
func getLiteral(v tparse.Node, t TType) interface{} {
if equateType(t, tInt) {
@@ -302,7 +275,7 @@ func getLiteral(v tparse.Node, t TType) interface{} {
return getStringLiteral(v)
}
- return getCompositeLiteral(v)
+ return nil
}
@@ -330,14 +303,39 @@ func resolveArtifact(a TArtifact, ctx *TContext, root *TModule) *TVariable {
// Value statement parsing
// Get a value from nodes. Must specify type of value to generate.
-func evalValue(v tparse.Node, t TType) TVariable {
- return TVariable{}
+func evalValue(v tparse.Node, ctx *TContext) TVariable {
+ return TVariable{tNull, nil}
}
-func evalBlock(b tparse.Node, m TArtifact, params []TVariable) TVariable {
- //ctx := TContext { m, make(VarMap) }
-
+// Get a value from nodes. Must specify type of value to generate.
+func evalDef(v tparse.Node, ctx *TContext) {
+}
+
+// Get a value from nodes. Must specify type of value to generate.
+func evalCF(v tparse.Node, ctx *TContext) (bool, TVariable) {
+ //scopeVars := []string{}
+ return false, TVariable{tNull, nil}
+}
+
+func evalBlock(b tparse.Node, m TArtifact, params []TVariable) TVariable {
+ ctx := TContext { m, make(VarMap) }
+
+ for i := 0; i < len(b.Sub); i++ {
+ switch b.Sub[i].Data.Data {
+ case "define":
+ evalDef(b.Sub[i], &ctx)
+ case "value":
+ evalValue(b.Sub[i], &ctx)
+ case "block":
+ ret, val := evalCF(b.Sub[i], &ctx)
+ if ret {
+ return val
+ }
+ case "return":
+ return evalValue(b.Sub[i].Sub[0], &ctx)
+ }
+ }
return TVariable{tNull, nil}
}