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;
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);
compiler->bytecode[compiler->count++] = OP_GROUPING_END; //1 byte
compiler->bytecode[compiler->count++] = (unsigned char)OP_GROUPING_END; //1 byte
break;
}
}

View File

@@ -60,6 +60,15 @@ void emitNodeBinary(Node** nodeHandle, Node* rhs, Opcode opcode) {
*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) {
switch(node->type) {
case NODE_LITERAL:

View File

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

View File

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

View File

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