forked from cosmonaut/wraith-lang
Disambiguates scopes where ordering matters vs ones where it doesn't
parent
743828450c
commit
252dc9b87f
|
@ -43,7 +43,7 @@ IdNode* MakeIdTree(Node *astNode, IdNode *parent) {
|
|||
|
||||
case IfStatement: {
|
||||
Node *stmtSeq = astNode->children[1];
|
||||
IdNode *ifNode = MakeIdNode(LexicalScope, "if", parent);
|
||||
IdNode *ifNode = MakeIdNode(OrderedScope, "if", parent);
|
||||
for (i = 0; i < stmtSeq->childCount; i++) {
|
||||
AddChildToNode(ifNode, MakeIdTree(stmtSeq->children[i], ifNode));
|
||||
}
|
||||
|
@ -53,9 +53,9 @@ IdNode* MakeIdTree(Node *astNode, IdNode *parent) {
|
|||
case IfElseStatement: {
|
||||
Node *ifNode = astNode->children[0];
|
||||
Node *elseStmts = astNode->children[1];
|
||||
IdNode *ifElseNode = MakeIdNode(LexicalScope, "if-else", parent);
|
||||
IdNode *ifElseNode = MakeIdNode(OrderedScope, "if-else", parent);
|
||||
IdNode *ifBranch = MakeIdTree(ifNode, ifElseNode);
|
||||
IdNode *elseBranch = MakeIdNode(LexicalScope, "else", ifElseNode);
|
||||
IdNode *elseBranch = MakeIdNode(OrderedScope, "else", ifElseNode);
|
||||
|
||||
AddChildToNode(ifElseNode, ifBranch);
|
||||
AddChildToNode(ifElseNode, elseBranch);
|
||||
|
@ -69,7 +69,7 @@ IdNode* MakeIdTree(Node *astNode, IdNode *parent) {
|
|||
case ForLoop: {
|
||||
Node *loopDecl = astNode->children[0];
|
||||
Node *loopBody = astNode->children[3];
|
||||
IdNode *loopNode = MakeIdNode(LexicalScope, "for-loop", parent);
|
||||
IdNode *loopNode = MakeIdNode(OrderedScope, "for-loop", parent);
|
||||
AddChildToNode(loopNode, MakeIdTree(loopDecl, loopNode));
|
||||
for (i = 0; i < loopBody->childCount; i++) {
|
||||
AddChildToNode(loopNode, MakeIdTree(loopBody->children[i], loopNode));
|
||||
|
@ -111,7 +111,7 @@ IdNode* MakeIdTree(Node *astNode, IdNode *parent) {
|
|||
}
|
||||
|
||||
case DeclarationSequence: {
|
||||
IdNode *declSeqNode = MakeIdNode(LexicalScope, "", parent);
|
||||
IdNode *declSeqNode = MakeIdNode(UnorderedScope, "", parent);
|
||||
for (i = 0; i < astNode->childCount; i++) {
|
||||
AddChildToNode(declSeqNode, MakeIdTree(astNode->children[i], declSeqNode));
|
||||
}
|
||||
|
@ -130,8 +130,11 @@ void PrintIdNode(IdNode *node) {
|
|||
}
|
||||
|
||||
switch(node->type) {
|
||||
case LexicalScope:
|
||||
printf("Scope (%s)\n", node->name);
|
||||
case OrderedScope:
|
||||
printf("OrderedScope (%s)\n", node->name);
|
||||
break;
|
||||
case UnorderedScope:
|
||||
printf("UnorderedScope (%s)\n", node->name);
|
||||
break;
|
||||
case Struct:
|
||||
printf("%s : %s\n", node->name, TypeTagToString(node->typeTag));
|
||||
|
@ -177,7 +180,7 @@ int PrintAncestors(IdNode *node) {
|
|||
return indent;
|
||||
}
|
||||
|
||||
IdNode* FindId(IdNode *root, NodeType targetType, char *targetName) {
|
||||
IdNode* LookdownId(IdNode *root, NodeType targetType, char *targetName) {
|
||||
if (root == NULL) {
|
||||
fprintf(stderr, "wraith: Attempted to call FindId on a null value.\n");
|
||||
return NULL;
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
#include "ast.h"
|
||||
|
||||
typedef enum NodeType {
|
||||
LexicalScope,
|
||||
UnorderedScope,
|
||||
OrderedScope,
|
||||
Struct,
|
||||
Function,
|
||||
Variable
|
||||
|
@ -30,10 +31,11 @@ typedef struct IdStatus {
|
|||
} IdStatus;
|
||||
|
||||
|
||||
IdNode* FindId(IdNode *root, NodeType targetType, char *targetName);
|
||||
IdNode* MakeIdTree(Node *astNode, IdNode *parent);
|
||||
void PrintIdTree(IdNode *tree, uint32_t tabCount);
|
||||
int PrintAncestors(IdNode *node);
|
||||
IdNode* LookdownId(IdNode *root, NodeType targetType, char *targetName);
|
||||
IdNode* LookupId(IdNode *node, IdNode *prev, char* target);
|
||||
|
||||
//IdStatus CheckIds(Node *root);
|
||||
|
||||
|
|
Loading…
Reference in New Issue