@@ -78,8 +78,7 @@ ps_ast_node *ps_ast_free_node(ps_ast_node *node)
7878ps_ast_block * ps_ast_create_block (uint16_t line , uint16_t column , ps_ast_node_kind kind , char * name )
7979{
8080 assert (kind == PS_AST_PROGRAM || kind == PS_AST_PROCEDURE || kind == PS_AST_FUNCTION || kind == PS_AST_UNIT );
81- ps_ast_block * block =
82- (ps_ast_block * )ps_ast_create_node (PS_AST_GROUP_BLOCK , kind , line , column , sizeof (ps_ast_block ));
81+ ps_ast_block * block = (ps_ast_block * )ps_ast_create_node (PS_AST_BLOCK , kind , line , column , sizeof (ps_ast_block ));
8382 if (block == NULL )
8483 return NULL ;
8584 snprintf (block -> name , PS_IDENTIFIER_LEN , "%s" , name );
@@ -116,7 +115,7 @@ ps_ast_node *ps_ast_free_block(ps_ast_node *node)
116115ps_ast_statement_list * ps_ast_create_statement_list (uint16_t line , uint16_t column , size_t count )
117116{
118117 ps_ast_statement_list * list = (ps_ast_statement_list * )ps_ast_create_node (
119- PS_AST_GROUP_STATEMENT , PS_AST_STATEMENT_LIST , line , column , sizeof (ps_ast_statement_list ));
118+ PS_AST_STATEMENT , PS_AST_STATEMENT_LIST , line , column , sizeof (ps_ast_statement_list ));
120119 if (list == NULL )
121120 return NULL ;
122121 list -> count = count ;
@@ -145,10 +144,10 @@ ps_ast_statement_list *ps_ast_free_statement_list(ps_ast_statement_list *list)
145144ps_ast_assignment * ps_ast_create_assignment (uint16_t line , uint16_t column , ps_ast_node * lvalue ,
146145 ps_ast_node * expression )
147146{
148- assert (lvalue != NULL && ps_ast_check_group (lvalue , PS_AST_GROUP_LVALUE ));
149- assert (expression != NULL && ps_ast_check_group (expression , PS_AST_GROUP_EXPRESSION ));
150- ps_ast_assignment * assignment = (ps_ast_assignment * )ps_ast_create_node (PS_AST_GROUP_STATEMENT , PS_AST_ASSIGNMENT ,
151- line , column , sizeof (ps_ast_assignment ));
147+ assert (lvalue != NULL && ps_ast_check_group (lvalue , PS_AST_LVALUE ));
148+ assert (expression != NULL && ps_ast_check_group (expression , PS_AST_EXPRESSION ));
149+ ps_ast_assignment * assignment = (ps_ast_assignment * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_ASSIGNMENT , line ,
150+ column , sizeof (ps_ast_assignment ));
152151 if (assignment == NULL )
153152 return NULL ;
154153 assignment -> lvalue = lvalue ;
@@ -172,7 +171,7 @@ ps_ast_if *ps_ast_create_if(uint16_t line, uint16_t column, ps_ast_node *conditi
172171 ps_ast_node * else_branch )
173172{
174173 ps_ast_if * if_statement =
175- (ps_ast_if * )ps_ast_create_node (PS_AST_GROUP_STATEMENT , PS_AST_IF , line , column , sizeof (ps_ast_if ));
174+ (ps_ast_if * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_IF , line , column , sizeof (ps_ast_if ));
176175 if (if_statement == NULL )
177176 return NULL ;
178177 if_statement -> condition = condition ;
@@ -197,7 +196,7 @@ ps_ast_if *ps_ast_free_if(ps_ast_if *if_statement)
197196ps_ast_while * ps_ast_create_while (uint16_t line , uint16_t column , ps_ast_node * condition , ps_ast_node * body )
198197{
199198 ps_ast_while * while_statement =
200- (ps_ast_while * )ps_ast_create_node (PS_AST_GROUP_STATEMENT , PS_AST_WHILE , line , column , sizeof (ps_ast_while ));
199+ (ps_ast_while * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_WHILE , line , column , sizeof (ps_ast_while ));
201200 if (while_statement == NULL )
202201 return NULL ;
203202 while_statement -> condition = condition ;
@@ -220,7 +219,7 @@ ps_ast_while *ps_ast_free_while(ps_ast_while *while_statement)
220219ps_ast_repeat * ps_ast_create_repeat (uint16_t line , uint16_t column , ps_ast_node * body , ps_ast_node * condition )
221220{
222221 ps_ast_repeat * repeat_statement =
223- (ps_ast_repeat * )ps_ast_create_node (PS_AST_GROUP_STATEMENT , PS_AST_REPEAT , line , column , sizeof (ps_ast_repeat ));
222+ (ps_ast_repeat * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_REPEAT , line , column , sizeof (ps_ast_repeat ));
224223 if (repeat_statement == NULL )
225224 return NULL ;
226225 assert (body != NULL );
@@ -242,11 +241,11 @@ ps_ast_repeat *ps_ast_free_repeat(ps_ast_repeat *repeat_statement)
242241// PS_AST_FOR
243242// ============================================================================
244243
245- ps_ast_for * ps_ast_create_for (uint16_t line , uint16_t column , ps_ast_node * variable , ps_ast_node * start ,
244+ ps_ast_for * ps_ast_create_for (uint16_t line , uint16_t column , ps_ast_variable_simple * variable , ps_ast_node * start ,
246245 ps_ast_node * end , int step , ps_ast_node * body )
247246{
248247 ps_ast_for * for_statement =
249- (ps_ast_for * )ps_ast_create_node (PS_AST_GROUP_STATEMENT , PS_AST_FOR , line , column , sizeof (ps_ast_for ));
248+ (ps_ast_for * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_FOR , line , column , sizeof (ps_ast_for ));
250249 if (for_statement == NULL )
251250 return NULL ;
252251 for_statement -> variable = variable ;
@@ -272,10 +271,10 @@ ps_ast_for *ps_ast_free_for(ps_ast_for *for_statement)
272271// ============================================================================
273272
274273ps_ast_call * ps_ast_create_procedure_call (uint16_t line , uint16_t column , ps_symbol * executable , size_t n_args ,
275- ps_ast_node_argument * args )
274+ ps_ast_argument * args [] )
276275{
277- ps_ast_call * procedure_call = ( ps_ast_call * ) ps_ast_create_node ( PS_AST_GROUP_STATEMENT , PS_AST_PROCEDURE_CALL , line ,
278- column , sizeof (ps_ast_call ));
276+ ps_ast_call * procedure_call =
277+ ( ps_ast_call * ) ps_ast_create_node ( PS_AST_STATEMENT , PS_AST_PROCEDURE_CALL , line , column , sizeof (ps_ast_call ));
279278 if (procedure_call == NULL )
280279 return NULL ;
281280 procedure_call -> executable = executable ;
@@ -293,15 +292,36 @@ ps_ast_call *ps_ast_free_procedure_call(ps_ast_call *procedure_call)
293292 return NULL ;
294293}
295294
295+ // ============================================================================
296+ // PS_AST_ARGUMENT
297+ // ============================================================================
298+
299+ ps_ast_argument * ps_ast_create_argument (uint16_t line , uint16_t column , ps_ast_node_kind kind , ps_ast_node * arg )
300+ {
301+ ps_ast_argument * argument =
302+ (ps_ast_argument * )ps_ast_create_node (PS_AST_ARGUMENT , kind , line , column , sizeof (ps_ast_argument ));
303+ if (argument == NULL )
304+ return NULL ;
305+ argument -> arg = arg ;
306+ return argument ;
307+ }
308+
309+ ps_ast_argument * ps_ast_free_argument (ps_ast_argument * argument )
310+ {
311+ argument -> arg = ps_ast_free_node (argument -> arg );
312+ ps_memory_free (PS_MEMORY_AST , argument );
313+ return NULL ;
314+ }
315+
296316// ============================================================================
297317// PS_AST_UNARY_OPERATION
298318// ============================================================================
299319
300320ps_ast_unary_operation * ps_ast_create_unary_operation (uint16_t line , uint16_t column , ps_operator_unary operator ,
301321 ps_ast_node * operand )
302322{
303- ps_ast_unary_operation * unary_operation = ps_ast_create_node ( PS_AST_GROUP_EXPRESSION , PS_AST_UNARY_OPERATION , line ,
304- column , sizeof (ps_ast_unary_operation ));
323+ ps_ast_unary_operation * unary_operation =
324+ ps_ast_create_node ( PS_AST_EXPRESSION , PS_AST_UNARY_OPERATION , line , column , sizeof (ps_ast_unary_operation ));
305325 if (unary_operation == NULL )
306326 return NULL ;
307327 unary_operation -> operator = operator ;
@@ -324,7 +344,7 @@ ps_ast_binary_operation *ps_ast_create_binary_operation(uint16_t line, uint16_t
324344 ps_ast_node * left , ps_ast_node * right )
325345{
326346 ps_ast_binary_operation * binary_operation = (ps_ast_binary_operation * )ps_ast_create_node (
327- PS_AST_GROUP_EXPRESSION , PS_AST_BINARY_OPERATION , line , column , sizeof (ps_ast_binary_operation ));
347+ PS_AST_EXPRESSION , PS_AST_BINARY_OPERATION , line , column , sizeof (ps_ast_binary_operation ));
328348 if (binary_operation == NULL )
329349 return NULL ;
330350 binary_operation -> operator = operator ;
@@ -348,7 +368,7 @@ ps_ast_binary_operation *ps_ast_free_binary_operation(ps_ast_binary_operation *b
348368ps_ast_value * ps_ast_create_value (uint16_t line , uint16_t column , ps_value literal )
349369{
350370 ps_ast_value * value =
351- (ps_ast_value * )ps_ast_create_node (PS_AST_GROUP_EXPRESSION , PS_AST_VALUE , line , column , sizeof (ps_ast_value ));
371+ (ps_ast_value * )ps_ast_create_node (PS_AST_EXPRESSION , PS_AST_VALUE , line , column , sizeof (ps_ast_value ));
352372 if (value == NULL )
353373 return NULL ;
354374 value -> value = literal ;
@@ -369,7 +389,7 @@ ps_ast_value *ps_ast_free_value(ps_ast_value *value)
369389ps_ast_variable_simple * ps_ast_create_variable_simple (uint16_t line , uint16_t column , ps_symbol * variable )
370390{
371391 ps_ast_variable_simple * variable_simple = (ps_ast_variable_simple * )ps_ast_create_node (
372- PS_AST_GROUP_EXPRESSION , PS_AST_VARIABLE_SIMPLE , line , column , sizeof (ps_ast_variable_simple ));
392+ PS_AST_EXPRESSION , PS_AST_VARIABLE_SIMPLE , line , column , sizeof (ps_ast_variable_simple ));
373393 if (variable_simple == NULL )
374394 return NULL ;
375395 variable_simple -> variable = variable ;
@@ -390,7 +410,7 @@ ps_ast_variable_array *ps_ast_create_variable_array(uint16_t line, uint16_t colu
390410 size_t n_indexes , ps_ast_node * indexes )
391411{
392412 ps_ast_variable_array * variable_array = (ps_ast_variable_array * )ps_ast_create_node (
393- PS_AST_GROUP_EXPRESSION , PS_AST_VARIABLE_ARRAY , line , column , sizeof (ps_ast_variable_array ));
413+ PS_AST_EXPRESSION , PS_AST_VARIABLE_ARRAY , line , column , sizeof (ps_ast_variable_array ));
394414 if (variable_array == NULL )
395415 return NULL ;
396416 variable_array -> variable = variable ;
@@ -416,10 +436,10 @@ ps_ast_variable_array *ps_ast_free_variable_array(ps_ast_variable_array *variabl
416436// ============================================================================
417437
418438ps_ast_call * ps_ast_create_function_call (uint16_t line , uint16_t column , ps_symbol * executable , size_t n_args ,
419- ps_ast_node_argument * args )
439+ ps_ast_argument * args )
420440{
421- ps_ast_call * function_call = ( ps_ast_call * ) ps_ast_create_node ( PS_AST_GROUP_EXPRESSION , PS_AST_FUNCTION_CALL , line ,
422- column , sizeof (ps_ast_call ));
441+ ps_ast_call * function_call =
442+ ( ps_ast_call * ) ps_ast_create_node ( PS_AST_EXPRESSION , PS_AST_FUNCTION_CALL , line , column , sizeof (ps_ast_call ));
423443 if (function_call == NULL )
424444 return NULL ;
425445 function_call -> executable = executable ;
0 commit comments