summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2021-11-03 14:02:59 -0400
committerKyle Gunger <kgunger12@gmail.com>2021-11-03 14:02:59 -0400
commit21fbf1493d722af5610370b25223b390ba7edbd0 (patch)
tree12203fdfa3b47fccf37338e8bae229c4d828e705
parent92b72f0357c553add6f010626e85268428ad5eb5 (diff)
[EXEC] Refactor, stub
+ Stub code for eval funcs added + Refactor of libtnsl stub
-rw-r--r--src/texec/eval.go50
-rw-r--r--src/texec/libtnsl.go9
-rw-r--r--src/texec/worldbuilder.go2
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 {