From 21fbf1493d722af5610370b25223b390ba7edbd0 Mon Sep 17 00:00:00 2001 From: Kyle Gunger Date: Wed, 3 Nov 2021 14:02:59 -0400 Subject: [EXEC] Refactor, stub + Stub code for eval funcs added + Refactor of libtnsl stub --- src/texec/eval.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++- src/texec/libtnsl.go | 9 ++++++--- src/texec/worldbuilder.go | 2 +- 3 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/texec/eval.go b/src/texec/eval.go index f863c5d..769f1ee 100644 --- a/src/texec/eval.go +++ b/src/texec/eval.go @@ -19,11 +19,59 @@ package texec import "strings" import "tparse" +// Check if a block is the main function func isMain(artifact tparse.Node) bool { return false } -// EvalTNSL starts the evaluation on the World's main function with the given flags passed to the program +// Check if a block is control flow +func isCF(artifact tparse.Node) bool { + +} + +// Get the control flow's name +func cfType(artifact tparse.Node) string { + +} + +// Get type as string from nodes +func evalType(artifact tparse.Node) string { + return "" +} + +// Returns generated value and general "type" of value (string, number, character) +func evalLiteral(artifact tparse.Node) (interface{}, string) { + +} + +// Evaluates a definition and sets up a TVariable in the context's var map +func evalDef(artifact tparse.Node, ctx *TContext) { + vars := len(ctx.VarMap) - 1 + + t := evalType(artifact.Sub[0]) + + for i := 0; i < len(artifact.Sub[1].Sub); i++ { + if artifact.Sub[1].Sub[i].Data.Data == "=" { + artifact.Sub[1].Sub[i].Sub[0] + } + } +} + +// Evaluates a value statement +func evalValue(artifact tparse.Node, ctx *TContext) { + vars := len(ctx.VarMap) - 1 +} + +// Evaluates control flow +func evalCF(artifact tparse.Node, ctx *TContext) {} + +// Evaluate a block (Assume that all blocks have only one output for now) +func evalBlock(artifact tparse.Node, ctx *TContext) TVariable { + +} + + +// EvalTNSL starts the evaluation on the root TModule's main function with the given flags passed to the program func EvalTNSL(world *TModule, f string) { flags := strings.Split(f, " ") } \ No newline at end of file diff --git a/src/texec/libtnsl.go b/src/texec/libtnsl.go index bf5fcd5..c881cea 100644 --- a/src/texec/libtnsl.go +++ b/src/texec/libtnsl.go @@ -107,8 +107,8 @@ func topen_file(in TVariable, out *TVariable) { // tnsl.io.File.close func tfile_close(file *TVariable) { - if (*file).Type == "tnsl.io.File" { - ((*file).Data).(*os.File).Close() + if file.Type == "tnsl.io.File" { + (file.Data).(*os.File).Close() } } @@ -123,9 +123,12 @@ func tfile_read(file, out *TVariable) { // tnsl.io.File.write func tfile_write(file, in *TVariable) { - b := []byte{1} + b := []byte{0} if in.Data == "uint8" || in.Data == "int8" { 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)) } (file.Data).(*os.File).Write(b) } diff --git a/src/texec/worldbuilder.go b/src/texec/worldbuilder.go index e0fefa4..f3cd6e6 100644 --- a/src/texec/worldbuilder.go +++ b/src/texec/worldbuilder.go @@ -22,7 +22,7 @@ import ( ) /** - worldbuilder.go - take in a file name and construct a TWorld based on it. + worldbuilder.go - take in a file name and construct a root TModule based on it. */ func parseFile(p string) tparse.Node { -- cgit v1.2.3