Compare commits

...

2 Commits

3 changed files with 5 additions and 3 deletions

View File

@ -104,7 +104,7 @@ int AssembleTree(struct ASTNode* Node, int Register, int ParentOp) {
return AsAddr(Node->Value.ID);
case OP_DEREF:
return AsDeref(LeftVal, Node->Left->ExprType);
return Node->RVal ? AsDeref(LeftVal, Node->Left->ExprType) : LeftVal;
case OP_ASSIGN:
printf("Calculating for assignment..\r\n");

View File

@ -75,7 +75,7 @@ void DumpTree(struct ASTNode* node, int level) {
case OP_GREATE: fprintf(stdout, "OP_GREATE\n"); return;
case TERM_INTLITERAL: fprintf(stdout, "TERM_INTLITERAL %d\n", node->Value.IntValue); return;
case REF_IDENT:
if(node->Right)
if(node->RVal)
fprintf(stdout, "REF_IDENT rval %s\n", Symbols[node->Value.ID].Name);
else
fprintf(stdout, "REF_IDENT %s\n", Symbols[node->Value.ID].Name);
@ -85,7 +85,8 @@ void DumpTree(struct ASTNode* node, int level) {
case OP_RET: fprintf(stdout, "OP_RET\n"); return;
case OP_CALL: fprintf(stdout, "OP_CALL %s\n", Symbols[node->Value.ID].Name); return;
case OP_ADDRESS: fprintf(stdout, "OP_ADDRESS %s\n", Symbols[node->Value.ID].Name); return;
case OP_DEREF: fprintf(stdout, "OP_DEREF\n"); return;
case OP_DEREF:
fprintf(stdout, "OP_DEREF %s\n", node->RVal ? "rval" : ""); return;
case OP_SCALE: fprintf(stdout, "OP_SCALE %s\n", TypeNames[node->Value.Size]); return;
default:

View File

@ -192,6 +192,7 @@ struct ASTNode* ParsePrecedenceASTNode(int PreviousTokenPrecedence) {
if(OpType == OP_ASSIGN) {
printf("\tParsePrecedenceASTNode: Assignment statement\r\n");
RightNode->RVal = 1;
LeftNode->RVal = 0;
RightNode = MutateType(RightNode, LeftNode->ExprType, 0);
if(LeftNode == NULL)