Fixed an non-optimized grouping bug

This commit is contained in:
2022-08-07 16:46:54 +01:00
parent 072d9c59cc
commit 3b89e216cc
5 changed files with 19 additions and 3 deletions

View File

@@ -68,9 +68,9 @@ void writeCompiler(Compiler* compiler, Node* node) {
break; break;
case NODE_GROUPING: case NODE_GROUPING:
compiler->bytecode[compiler->count++] = OP_GROUPING_BEGIN; //1 byte compiler->bytecode[compiler->count++] = (unsigned char)OP_GROUPING_BEGIN; //1 byte
writeCompiler(compiler, node->grouping.child); writeCompiler(compiler, node->grouping.child);
compiler->bytecode[compiler->count++] = OP_GROUPING_END; //1 byte compiler->bytecode[compiler->count++] = (unsigned char)OP_GROUPING_END; //1 byte
break; break;
} }
} }

View File

@@ -60,6 +60,15 @@ void emitNodeBinary(Node** nodeHandle, Node* rhs, Opcode opcode) {
*nodeHandle = tmp; *nodeHandle = tmp;
} }
void emitNodeGrouping(Node** nodeHandle) {
Node* tmp = ALLOCATE(Node, 1);
tmp->type = NODE_GROUPING;
tmp->grouping.child = NULL;
*nodeHandle = tmp;
}
void printNode(Node* node) { void printNode(Node* node) {
switch(node->type) { switch(node->type) {
case NODE_LITERAL: case NODE_LITERAL:

View File

@@ -49,6 +49,7 @@ void freeNode(Node* node);
void emitNodeLiteral(Node** nodeHandle, Literal literal); void emitNodeLiteral(Node** nodeHandle, Literal literal);
void emitNodeUnary(Node** nodeHandle, Opcode opcode); void emitNodeUnary(Node** nodeHandle, Opcode opcode);
void emitNodeBinary(Node** nodeHandle, Node* rhs, Opcode opcode); void emitNodeBinary(Node** nodeHandle, Node* rhs, Opcode opcode);
void emitNodeGrouping(Node** nodeHandle);
void printNode(Node* node); void printNode(Node* node);

View File

@@ -143,7 +143,7 @@ static Opcode grouping(Parser* parser, Node** nodeHandle, bool canBeAssigned) {
} }
//process the result without optimisations //process the result without optimisations
emitNodeUnary(nodeHandle, NODE_GROUPING); emitNodeGrouping(nodeHandle);
nodeHandle = &((*nodeHandle)->unary.child); //re-align after append nodeHandle = &((*nodeHandle)->unary.child); //re-align after append
(*nodeHandle) = tmpNode; (*nodeHandle) = tmpNode;
return OP_EOF; return OP_EOF;

View File

@@ -133,6 +133,12 @@ void repl() {
int size = 0; int size = 0;
char* tb = collateCompiler(&compiler, &size); char* tb = collateCompiler(&compiler, &size);
// for (int i = 0; i < size; i++) {
// printf("%d ", tb[i]);
// }
// printf("\n");
//run the bytecode //run the bytecode
initInterpreter(&interpreter, tb, size); initInterpreter(&interpreter, tb, size);
runInterpreter(&interpreter); runInterpreter(&interpreter);