we in era3 boys; overhauled expression system, and variables are now in maps

This commit is contained in:
Neemek 2026-07-09 23:10:49 +02:00
parent bf29e6c3dd
commit 43e450c207
Signed by: neemek
GPG key ID: 84FFE4D7D40AB25E
14 changed files with 945 additions and 452 deletions

View file

@ -63,7 +63,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"_",
&ReferenceNode{"_", 0, 0},
&BinaryNode{
BinaryAddition,
&FloatNode{
@ -93,7 +93,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"hello",
&ReferenceNode{"hello", 0, 0},
&StringNode{
"Hello world!",
"\"Hello world!\"",
@ -118,7 +118,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"a",
&ReferenceNode{"a", 0, 0},
&BinaryNode{
BinaryAddition,
&FloatNode{
@ -173,7 +173,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"_",
&ReferenceNode{"_", 0, 0},
&BinaryNode{
BinarySubtraction,
&BinaryNode{
@ -253,7 +253,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"_",
&ReferenceNode{"_", 0, 0},
&BinaryNode{
BinaryEquality,
&FloatNode{
@ -304,7 +304,7 @@ func GetTokenTestData() map[string]TokenTestData {
do: &BlockNode{
[]Node{
&AssignNode{
"b",
&ReferenceNode{"b", 0, 0},
&FloatNode{
1,
0, 0,
@ -357,7 +357,7 @@ func GetTokenTestData() map[string]TokenTestData {
do: &BlockNode{
[]Node{
&AssignNode{
"b",
&ReferenceNode{"b", 0, 0},
&FloatNode{
1,
0, 0,
@ -371,7 +371,7 @@ func GetTokenTestData() map[string]TokenTestData {
otherwise: &BlockNode{
[]Node{
&AssignNode{
"b",
&ReferenceNode{"b", 0, 0},
&FloatNode{
0,
0, 0,
@ -432,7 +432,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"a",
&ReferenceNode{"a", 0, 0},
&FunctionNode{
"*",
[]FunctionParameter{
@ -503,7 +503,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"a",
&ReferenceNode{"a", 0, 0},
&FunctionNode{
"a",
[]FunctionParameter{
@ -559,7 +559,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"p",
&ReferenceNode{"p", 0, 0},
&AccessNode{
&ReferenceNode{
"a",
@ -607,7 +607,7 @@ func GetTokenTestData() map[string]TokenTestData {
&BlockNode{
[]Node{
&AssignNode{
"data",
&ReferenceNode{"data", 0, 0},
&ListNode{
[]Node{
&ReferenceNode{
@ -749,11 +749,8 @@ func NodeEquality(t *testing.T, n1 Node, n2 Node) {
NodeEquality(t, n1.(*LoopNode).do, n2.(*LoopNode).do)
case AssignNodeType:
if n1.(*AssignNode).name != n2.(*AssignNode).name {
t.Errorf("Assigned value name is not the same (%s and %s)", n1.(*AssignNode).name, n2.(*AssignNode).name)
} else {
t.Logf("Assigned value name matches (%s)", n1.(*AssignNode).name)
}
t.Logf("Checking if value destination matches")
NodeEquality(t, n1.(*AssignNode).dest, n2.(*AssignNode).dest)
if n1.(*AssignNode).declare != n2.(*AssignNode).declare {
t.Errorf("Not same type of assigning (1: %v; 2: %v)", n1.(*AssignNode).declare, n2.(*AssignNode).declare)
@ -762,22 +759,18 @@ func NodeEquality(t *testing.T, n1 Node, n2 Node) {
t.Logf("Checking equality of assignment values")
NodeEquality(t, n1.(*AssignNode).value, n2.(*AssignNode).value)
case CallNodeType:
n := n1.(*CallNode)
m := n2.(*CallNode)
case InvokeNodeType:
n := n1.(*InvokeNode)
m := n2.(*InvokeNode)
NodeEquality(t, n.source, m.source)
if n.keep == m.keep {
t.Logf("Call node keep modifier doesn't match (%v and %v)", n.keep, m.keep)
}
if len(n.args) != len(m.args) {
t.Fatalf("Call node arguments count does not match (%d and %d)", len(n.args), m.args)
}
for i, arg := range m.args {
NodeEquality(t, n1.(*CallNode).args[i], arg)
NodeEquality(t, n1.(*InvokeNode).args[i], arg)
}
case FunctionNodeType:
@ -958,7 +951,7 @@ func TestParser_Parse(t *testing.T) {
tree, err := p.Parse("")
if err != nil {
t.Fatalf("Unexpected error(s): %s", err.(ParsingError).Description)
t.Fatalf("Unexpected error(s): %s", err.(ParsingError).Format())
}
t.Logf("Checking parsed tree")