@@ -45,31 +45,41 @@ ctr_object* ctr_cwlk_message(ctr_tnode* paramNode) {
45
45
char * message ;
46
46
ctr_tlistitem * argumentList ;
47
47
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 ;
73
83
}
74
84
while (li -> next ) {
75
85
ctr_argument * a ;
@@ -133,46 +143,60 @@ ctr_object* ctr_cwlk_assignment(ctr_tnode* node) {
133
143
*/
134
144
ctr_object * ctr_cwlk_expr (ctr_tnode * node , char * wasReturn ) {
135
145
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 );
169
193
}
194
+ result = ctr_build_nil ();
195
+ break ;
196
+ default :
197
+ printf ("Runtime Error. Invalid parse node: %d %s \n" , node -> type ,node -> value );
170
198
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 ;
176
200
}
177
201
return result ;
178
202
}
0 commit comments