diff options
-rw-r--r-- | src/texec/eval.go | 21 | ||||
-rw-r--r-- | src/texec/libtnsl.go | 2 |
2 files changed, 12 insertions, 11 deletions
diff --git a/src/texec/eval.go b/src/texec/eval.go index a8bd50f..ba936a6 100644 --- a/src/texec/eval.go +++ b/src/texec/eval.go @@ -18,13 +18,14 @@ package texec import "strings" import "tparse" +import "fmt" // Check if a block is the main function func isMain(n tparse.Node) bool { if n.Data.Data == "block" { if n.Sub[0].Data.Data == "bdef" { - for i := 0; i < len(n.Sub.Sub); i++ { - if n.Sub.Sub[i].Data.Type == tparse.DEFWORD && n.Sub.Sub[i].Data.Data == "main" { + for i := 0; i < len(n.Sub[0].Sub); i++ { + if n.Sub[0].Sub[i].Data.Type == tparse.DEFWORD && n.Sub[0].Sub[i].Data.Data == "main" { return true } } @@ -37,9 +38,9 @@ func isMain(n tparse.Node) bool { func isCF(n tparse.Node) bool { if n.Data.Data == "block" { if n.Sub[0].Data.Data == "bdef" { - for i := 0; i < len(n.Sub.Sub); i++ { - if n.Sub.Sub[i].Data.Type == tparse.KEYWORD { - if n.Sub.Sub[i].Data.Data == "if" || n.Sub.Sub[i].Data.Data == "elif" || n.Sub.Sub[i].Data.Data == "else" || n.Sub.Sub[i].Data.Data == "match" || n.Sub.Sub[i].Data.Data == "case" || n.Sub.Sub[i].Data.Data == "loop" { + for i := 0; i < len(n.Sub[0].Sub); i++ { + if n.Sub[0].Sub[i].Data.Type == tparse.KEYWORD { + if n.Sub[0].Sub[i].Data.Data == "if" || n.Sub[0].Sub[i].Data.Data == "elif" || n.Sub[0].Sub[i].Data.Data == "else" || n.Sub[0].Sub[i].Data.Data == "match" || n.Sub[0].Sub[i].Data.Data == "case" || n.Sub[0].Sub[i].Data.Data == "loop" { return true } } @@ -60,7 +61,7 @@ func defaultVaule(t string) interface{} { } // Match specific type (t) with general type (g) -func typeMatches(t, g string) { +func typeMatches(t, g string) bool { switch t { case "int", "uint", "int8", "uint8", "char", "charp": return g == "number" @@ -93,18 +94,18 @@ func evalDef(n tparse.Node, ctx *TContext) { for i := 0; i < len(n.Sub[1].Sub); i++ { name := n.Sub[1].Sub[i].Data.Data - _, prs := ctx.VarMap[name] + _, prs := ctx.VarMap[vars][name] if prs { panic(fmt.Sprintf("Attempted re-definition of a variable %v", name)) } val := defaultVaule(t) if n.Sub[1].Sub[i].Data.Data == "=" { - name = n.Sub[1].Sub[i].Sub[0] + name = n.Sub[1].Sub[i].Sub[0].Data.Data val = evalValue(n.Sub[1].Sub[i].Sub[1], ctx) } - - ctx.VarMap[name] = TVariable{t, val} + + ctx.VarMap[vars][name] = TVariable{t, val} } } diff --git a/src/texec/libtnsl.go b/src/texec/libtnsl.go index c881cea..1d36892 100644 --- a/src/texec/libtnsl.go +++ b/src/texec/libtnsl.go @@ -128,7 +128,7 @@ func tfile_write(file, in *TVariable) { b[0] = (in.Data).(byte) } else { (file.Data).(*os.File).Close() - panic(fmt.Sprintf("Failed to write to file, attempted to use unsupported type (%v)\n", out.Type)) + panic(fmt.Sprintf("Failed to write to file, attempted to use unsupported type (%v)\n", in.Type)) } (file.Data).(*os.File).Write(b) } |