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