nitron

commit a4456238d83c825cf6e634f4e57a60f647ff3e5e

Author: mesyeti <mesyeti@mesyeti.uk>

change the precedence of dot operator

 basic/source/parser.c | 48 ++++++++++++++++++++++----------------------


diff --git a/basic/source/parser.c b/basic/source/parser.c
index 91481eae18cdc53e93bed8a7d93f99843ef21ee9..9b52e190c69d437e8ba0e61b72ee3ac00f667554 100644
--- a/basic/source/parser.c
+++ b/basic/source/parser.c
@@ -129,8 +129,29 @@ 		default:             return false;
 	}
 }
 
+static Node ParseDot(Parser* p) {
+	Node left = ParseAtom(p);
+
+	while (p->tokens[p->i].type == TOKEN_DOT) {
+		TokenType op = p->tokens[p->i].type;
+		Advance(p);
+		Node right = ParseAtom(p);
+
+		Node* leftPtr  = SafeMalloc(sizeof(Node));
+		Node* rightPtr = SafeMalloc(sizeof(Node));
+		*leftPtr       = left;
+		*rightPtr      = right;
+
+		left.bin = (BinaryNode) {
+			INFO(NODE_BINARY_OP), leftPtr, rightPtr, op
+		};
+	}
+
+	return left;
+}
+
 static Node ParseFuncArray(Parser* p) {
-	Node left = ParseAtom(p);
+	Node left = ParseDot(p);
 
 	while ((p->tokens[p->i].type == TOKEN_LPAREN) || (p->tokens[p->i].type == TOKEN_LSQUARE)) {
 		if (p->tokens[p->i].type == TOKEN_LPAREN) { // function call
@@ -251,34 +272,13 @@
 	return left;
 }
 
-static Node ParseDot(Parser* p) {
+static Node ParseAssign(Parser* p) {
 	Node left = ParseComparison(p);
 
-	while (p->tokens[p->i].type == TOKEN_DOT) {
+	while (p->tokens[p->i].type == TOKEN_ASSIGN) {
 		TokenType op = p->tokens[p->i].type;
 		Advance(p);
 		Node right = ParseComparison(p);
-
-		Node* leftPtr  = SafeMalloc(sizeof(Node));
-		Node* rightPtr = SafeMalloc(sizeof(Node));
-		*leftPtr       = left;
-		*rightPtr      = right;
-
-		left.bin = (BinaryNode) {
-			INFO(NODE_BINARY_OP), leftPtr, rightPtr, op
-		};
-	}
-
-	return left;
-}
-
-static Node ParseAssign(Parser* p) {
-	Node left = ParseDot(p);
-
-	while (p->tokens[p->i].type == TOKEN_ASSIGN) {
-		TokenType op = p->tokens[p->i].type;
-		Advance(p);
-		Node right = ParseDot(p);
 
 		Node* leftPtr  = SafeMalloc(sizeof(Node));
 		Node* rightPtr = SafeMalloc(sizeof(Node));