Skip to content

Commit 5a61730

Browse files
committedFeb 8, 2016
fix walker.c
1 parent 8ef8c73 commit 5a61730

File tree

1 file changed

+87
-63
lines changed

1 file changed

+87
-63
lines changed
 

‎walker.c

+87-63
Original file line numberDiff line numberDiff line change
@@ -45,31 +45,41 @@ ctr_object* ctr_cwlk_message(ctr_tnode* paramNode) {
4545
char* message;
4646
ctr_tlistitem* argumentList;
4747
ctr_object* r;
48-
if (receiverNode->type == CTR_AST_NODE_REFERENCE) {
49-
if (receiverNode->modifier == 1) {
50-
r = ctr_find_in_my(ctr_build_string(receiverNode->value, receiverNode->vlen));
51-
} else {
52-
r = ctr_find(ctr_build_string(receiverNode->value, receiverNode->vlen));
53-
}
54-
if (!r) {
55-
exit(1);
56-
}
57-
} else if (receiverNode->type == CTR_AST_NODE_LTRNIL ) {
58-
r = ctr_build_nil();
59-
} else if (receiverNode->type == CTR_AST_NODE_LTRBOOLTRUE ) {
60-
r = ctr_build_bool(1);
61-
} else if (receiverNode->type == CTR_AST_NODE_LTRBOOLFALSE ) {
62-
r = ctr_build_bool(0);
63-
} else if (receiverNode->type == CTR_AST_NODE_LTRSTRING ) {
64-
r = ctr_build_string(receiverNode->value, receiverNode->vlen);
65-
} else if (receiverNode->type == CTR_AST_NODE_LTRNUM) {
66-
r = ctr_build_number_from_string(receiverNode->value, receiverNode->vlen);
67-
} else if (receiverNode->type == CTR_AST_NODE_NESTED) {
68-
r = ctr_cwlk_expr(receiverNode, &wasReturn);
69-
} else if (receiverNode->type == CTR_AST_NODE_CODEBLOCK) {
70-
r = ctr_build_block(receiverNode);
71-
} else {
72-
printf("Cannot send message to receiver of type: %d \n", receiverNode->type);
48+
switch (receiverNode->type) {
49+
case CTR_AST_NODE_REFERENCE:
50+
if (receiverNode->modifier == 1) {
51+
r = ctr_find_in_my(ctr_build_string(receiverNode->value, receiverNode->vlen));
52+
} else {
53+
r = ctr_find(ctr_build_string(receiverNode->value, receiverNode->vlen));
54+
}
55+
if (!r) {
56+
exit(1);
57+
}
58+
break;
59+
case CTR_AST_NODE_LTRNIL:
60+
r = ctr_build_nil();
61+
break;
62+
case CTR_AST_NODE_LTRBOOLTRUE:
63+
r = ctr_build_bool(1);
64+
break;
65+
case CTR_AST_NODE_LTRBOOLFALSE:
66+
r = ctr_build_bool(0);
67+
break;
68+
case CTR_AST_NODE_LTRSTRING:
69+
r = ctr_build_string(receiverNode->value, receiverNode->vlen);
70+
break;
71+
case CTR_AST_NODE_LTRNUM:
72+
r = ctr_build_number_from_string(receiverNode->value, receiverNode->vlen);
73+
break;
74+
case CTR_AST_NODE_NESTED:
75+
r = ctr_cwlk_expr(receiverNode, &wasReturn);
76+
break;
77+
case CTR_AST_NODE_CODEBLOCK:
78+
r = ctr_build_block(receiverNode);
79+
break;
80+
default:
81+
printf("Cannot send message to receiver of type: %d \n", receiverNode->type);
82+
break;
7383
}
7484
while(li->next) {
7585
ctr_argument* a;
@@ -133,46 +143,60 @@ ctr_object* ctr_cwlk_assignment(ctr_tnode* node) {
133143
*/
134144
ctr_object* ctr_cwlk_expr(ctr_tnode* node, char* wasReturn) {
135145
ctr_object* result;
136-
if (node->type == CTR_AST_NODE_LTRSTRING) {
137-
result = ctr_build_string(node->value, node->vlen);
138-
} else if (node->type == CTR_AST_NODE_LTRBOOLTRUE) {
139-
result = ctr_build_bool(1);
140-
} else if (node->type == CTR_AST_NODE_LTRBOOLFALSE) {
141-
result = ctr_build_bool(0);
142-
} else if (node->type == CTR_AST_NODE_LTRNIL) {
143-
result = ctr_build_nil();
144-
} else if (node->type == CTR_AST_NODE_LTRNUM) {
145-
result = ctr_build_number_from_string(node->value, node->vlen);
146-
} else if (node->type == CTR_AST_NODE_CODEBLOCK) {
147-
result = ctr_build_block(node);
148-
} else if (node->type == CTR_AST_NODE_REFERENCE) {
149-
if (node->modifier == 1) {
150-
result = ctr_find_in_my(ctr_build_string(node->value, node->vlen));
151-
} else {
152-
result = ctr_find(ctr_build_string(node->value, node->vlen));
153-
}
154-
} else if (node->type == CTR_AST_NODE_EXPRMESSAGE) {
155-
result = ctr_cwlk_message(node);
156-
} else if (node->type == CTR_AST_NODE_EXPRASSIGNMENT) {
157-
result = ctr_cwlk_assignment(node);
158-
} else if (node->type == CTR_AST_NODE_RETURNFROMBLOCK) {
159-
result = ctr_cwlk_return(node);
160-
*wasReturn = 1;
161-
} else if (node->type == CTR_AST_NODE_NESTED) {
162-
result = ctr_cwlk_expr(node->nodes->node, wasReturn);
163-
} else if (node->type == CTR_AST_NODE_ENDOFPROGRAM) {
164-
if (CtrStdError) {
165-
printf("Uncatched error has occurred.\n");
166-
if (CtrStdError->info.type == CTR_OBJECT_TYPE_OTSTRING) {
167-
fwrite(CtrStdError->value.svalue->value, sizeof(char), CtrStdError->value.svalue->vlen, stdout);
168-
printf("\n");
146+
switch (node->type) {
147+
case CTR_AST_NODE_LTRSTRING:
148+
result = ctr_build_string(node->value, node->vlen);
149+
break;
150+
case CTR_AST_NODE_LTRBOOLTRUE:
151+
result = ctr_build_bool(1);
152+
break;
153+
case CTR_AST_NODE_LTRBOOLFALSE:
154+
result = ctr_build_bool(0);
155+
break;
156+
case CTR_AST_NODE_LTRNIL:
157+
result = ctr_build_nil();
158+
break;
159+
case CTR_AST_NODE_LTRNUM:
160+
result = ctr_build_number_from_string(node->value, node->vlen);
161+
break;
162+
case CTR_AST_NODE_CODEBLOCK:
163+
result = ctr_build_block(node);
164+
break;
165+
case CTR_AST_NODE_REFERENCE:
166+
if (node->modifier == 1) {
167+
result = ctr_find_in_my(ctr_build_string(node->value, node->vlen));
168+
} else {
169+
result = ctr_find(ctr_build_string(node->value, node->vlen));
170+
}
171+
break;
172+
case CTR_AST_NODE_EXPRMESSAGE:
173+
result = ctr_cwlk_message(node);
174+
break;
175+
case CTR_AST_NODE_EXPRASSIGNMENT:
176+
result = ctr_cwlk_assignment(node);
177+
break;
178+
case CTR_AST_NODE_RETURNFROMBLOCK:
179+
result = ctr_cwlk_return(node);
180+
*wasReturn = 1;
181+
break;
182+
case CTR_AST_NODE_NESTED:
183+
result = ctr_cwlk_expr(node->nodes->node, wasReturn);
184+
break;
185+
case CTR_AST_NODE_ENDOFPROGRAM:
186+
if (CtrStdError) {
187+
printf("Uncatched error has occurred.\n");
188+
if (CtrStdError->info.type == CTR_OBJECT_TYPE_OTSTRING) {
189+
fwrite(CtrStdError->value.svalue->value, sizeof(char), CtrStdError->value.svalue->vlen, stdout);
190+
printf("\n");
191+
}
192+
exit(1);
169193
}
194+
result = ctr_build_nil();
195+
break;
196+
default:
197+
printf("Runtime Error. Invalid parse node: %d %s \n", node->type,node->value);
170198
exit(1);
171-
}
172-
result = ctr_build_nil();
173-
} else {
174-
printf("Runtime Error. Invalid parse node: %d %s \n", node->type,node->value);
175-
exit(1);
199+
break;
176200
}
177201
return result;
178202
}

0 commit comments

Comments
 (0)
Please sign in to comment.