diff options
| author | Kyle Gunger <kgunger12@gmail.com> | 2022-04-10 17:30:30 -0400 | 
|---|---|---|
| committer | Kyle Gunger <kgunger12@gmail.com> | 2022-04-10 17:30:30 -0400 | 
| commit | ed2f9793fae7d1c018e3de463617339c68faa3c0 (patch) | |
| tree | 241b65e29d9944873e1ac4825ef025bfdf222cd3 /src | |
| parent | ad84b1068494872db2166bd81ce1f3831ead2c6b (diff) | |
A few fixes
+ Fix an error with if statements inside loops
+ Fix a parser bug with boolean operators
~ Change libtnsl stub to return integers when reading a file
~ Change libtnsl stub to return -1 on EOF or file read error
Diffstat (limited to 'src')
| -rw-r--r-- | src/texec/eval.go | 18 | ||||
| -rw-r--r-- | src/texec/libtnsl.go | 7 | ||||
| -rw-r--r-- | src/tparse/tree-value.go | 27 | 
3 files changed, 35 insertions, 17 deletions
diff --git a/src/texec/eval.go b/src/texec/eval.go index fa187ef..c39d704 100644 --- a/src/texec/eval.go +++ b/src/texec/eval.go @@ -994,10 +994,16 @@ func evalValue(v tparse.Node, ctx *VarMap) *TVariable {  		case "<":  			out.Type = tBool  			out.Data = a.Data.(float64) < b.Data.(float64) -		case ">=": +		case "!>": +			out.Type = tBool +			out.Data = a.Data.(float64) <= b.Data.(float64) +		case "!<":  			out.Type = tBool  			out.Data = a.Data.(float64) >= b.Data.(float64) -		case "<=": +		case ">==": +			out.Type = tBool +			out.Data = a.Data.(float64) >= b.Data.(float64) +		case "<==":  			out.Type = tBool  			out.Data = a.Data.(float64) <= b.Data.(float64)  		} @@ -1081,7 +1087,13 @@ func evalCF(v tparse.Node, ctx *VarMap) (bool, TVariable, int) {  					if val.Data.(bool) == true {  						i++ -						for ;i < len(v.Sub) && getNames(v.Sub[i])[0] == "else"; i++ {} +						for ;i < len(v.Sub) && v.Sub[i].Data.Data == "block"; { +							if getNames(v.Sub[i])[0] == "else" { +								i++ +							} else { +								break +							} +						}  						if i < len(v.Sub) {  							i-- diff --git a/src/texec/libtnsl.go b/src/texec/libtnsl.go index 581d15e..bb0ce7d 100644 --- a/src/texec/libtnsl.go +++ b/src/texec/libtnsl.go @@ -176,8 +176,11 @@ func tfile_close(file TVariable) {  // tnsl.io.File.read  func tfile_read(file TVariable) TVariable {  	b := []byte{1} -	(file.Data).(*os.File).Read(b) -	return TVariable{tCharp, b[0]} +	_, err := (file.Data).(*os.File).Read(b) +	if err != nil { +		return TVariable{tInt, -1} +	} +	return TVariable{tInt, int(b[0])}  }  // tnsl.io.File.write diff --git a/src/tparse/tree-value.go b/src/tparse/tree-value.go index 25982ff..7a0148a 100644 --- a/src/tparse/tree-value.go +++ b/src/tparse/tree-value.go @@ -69,27 +69,30 @@ var ORDER = map[string]int{  	"!|": 6,  	"!^": 6, +	// Truthy equality +	"==": 7, +	"!==": 7, +  	// Boolean and -	"&&": 7, +	"&&": 8,  	// Boolean or -	"||": 7, -	// Truthy equals -	"==": 7, +	"||": 8,  	// Greater than -	">": 7, +	">": 8,  	// Less than -	"<": 7, +	"<": 8, -	"!&&": 7, -	"!||": 7, -	"!==": 7, +	"!>": 8, +	"!<": 8, +	">==": 8, +	"<==": 8, -	"!>": 7, -	"!<": 7, +	"!&&": 8, +	"!||": 8,  	// Assignement -	"=": 8, +	"=": 9,  }  // Works? Please test.   |