mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Fixed an non-optimized grouping bug
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user