1818// ps_ast_node
1919// =============================================================================
2020
21+ bool ps_ast_node_check_group (const ps_ast_node * node , ps_ast_node_group expected_group )
22+ {
23+ if (node -> group != expected_group )
24+ {
25+ ps_ast_debug_line ("Error: expected AST node group %s but got %s\n" , ps_ast_node_get_group_name (expected_group ),
26+ ps_ast_node_get_group_name (node -> group ));
27+ return false;
28+ }
29+ return true;
30+ }
31+
32+ bool ps_ast_node_check_kind (const ps_ast_node * node , ps_ast_node_kind expected_kind )
33+ {
34+ if (node -> kind != expected_kind )
35+ {
36+ ps_ast_debug_line ("Error: expected AST node kind %s but got %s\n" , ps_ast_node_get_kind_name (expected_kind ),
37+ ps_ast_node_get_kind_name (node -> kind ));
38+ return false;
39+ }
40+ return true;
41+ }
42+
2143ps_ast_node * ps_ast_create_node (ps_ast_node_group group , ps_ast_node_kind kind , uint16_t line , uint16_t column ,
2244 size_t size )
2345{
@@ -86,7 +108,7 @@ ps_ast_node *ps_ast_free_node(ps_ast_node *node)
86108// PS_AST_BLOCK
87109// =============================================================================
88110
89- ps_ast_block * ps_ast_create_block (uint16_t line , uint16_t column , ps_ast_node_kind kind , char * name )
111+ ps_ast_block * ps_ast_create_block (uint16_t line , uint16_t column , ps_ast_node_kind kind , const char * name )
90112{
91113 assert (kind == PS_AST_PROGRAM || kind == PS_AST_PROCEDURE || kind == PS_AST_FUNCTION || kind == PS_AST_UNIT );
92114 ps_ast_block * block = (ps_ast_block * )ps_ast_create_node (PS_AST_BLOCK , kind , line , column , sizeof (ps_ast_block ));
@@ -162,8 +184,8 @@ ps_ast_node *ps_ast_free_statement_list(ps_ast_statement_list *statement_list)
162184ps_ast_assignment * ps_ast_create_assignment (uint16_t line , uint16_t column , ps_ast_node * lvalue ,
163185 ps_ast_node * expression )
164186{
165- assert (lvalue != NULL && ps_ast_check_group (lvalue , PS_AST_LVALUE ));
166- assert (expression != NULL && ps_ast_check_group (expression , PS_AST_EXPRESSION ));
187+ assert (lvalue != NULL && ps_ast_node_check_group (lvalue , PS_AST_LVALUE ));
188+ assert (expression != NULL && ps_ast_node_check_group (expression , PS_AST_EXPRESSION ));
167189 ps_ast_assignment * assignment = (ps_ast_assignment * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_ASSIGNMENT , line ,
168190 column , sizeof (ps_ast_assignment ));
169191 if (assignment == NULL )
@@ -190,9 +212,9 @@ ps_ast_node *ps_ast_free_assignment(ps_ast_assignment *assignment)
190212ps_ast_if * ps_ast_create_if (uint16_t line , uint16_t column , ps_ast_node * condition , ps_ast_statement_list * then_branch ,
191213 ps_ast_statement_list * else_branch )
192214{
193- assert (condition != NULL && ps_ast_check_group (condition , PS_AST_EXPRESSION ));
194- assert (then_branch != NULL && ps_ast_check_group ( then_branch , PS_AST_STATEMENT ));
195- assert (else_branch == NULL || ps_ast_check_group ( else_branch , PS_AST_STATEMENT ));
215+ assert (condition != NULL && ps_ast_node_check_group (condition , PS_AST_EXPRESSION ));
216+ assert (then_branch != NULL && ps_ast_node_check_group (( ps_ast_node * ) then_branch , PS_AST_STATEMENT ));
217+ assert (else_branch == NULL || ps_ast_node_check_group (( ps_ast_node * ) else_branch , PS_AST_STATEMENT ));
196218 ps_ast_if * if_statement =
197219 (ps_ast_if * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_IF , line , column , sizeof (ps_ast_if ));
198220 if (if_statement == NULL )
@@ -220,8 +242,8 @@ ps_ast_node *ps_ast_free_if(ps_ast_if *if_statement)
220242
221243ps_ast_while * ps_ast_create_while (uint16_t line , uint16_t column , ps_ast_node * condition , ps_ast_statement_list * body )
222244{
223- assert (condition != NULL && ps_ast_check_group (condition , PS_AST_EXPRESSION ));
224- assert (body != NULL && ps_ast_check_group ( body , PS_AST_STATEMENT ));
245+ assert (condition != NULL && ps_ast_node_check_group (condition , PS_AST_EXPRESSION ));
246+ assert (body != NULL && ps_ast_node_check_group (( ps_ast_node * ) body , PS_AST_STATEMENT ));
225247 ps_ast_while * while_statement =
226248 (ps_ast_while * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_WHILE , line , column , sizeof (ps_ast_while ));
227249 if (while_statement == NULL )
@@ -247,8 +269,8 @@ ps_ast_node *ps_ast_free_while(ps_ast_while *while_statement)
247269
248270ps_ast_repeat * ps_ast_create_repeat (uint16_t line , uint16_t column , ps_ast_statement_list * body , ps_ast_node * condition )
249271{
250- assert (body != NULL && ps_ast_check_group ( body , PS_AST_STATEMENT ));
251- assert (condition != NULL && ps_ast_check_group (condition , PS_AST_EXPRESSION ));
272+ assert (body != NULL && ps_ast_node_check_group (( ps_ast_node * ) body , PS_AST_STATEMENT ));
273+ assert (condition != NULL && ps_ast_node_check_group (condition , PS_AST_EXPRESSION ));
252274 ps_ast_repeat * repeat_statement =
253275 (ps_ast_repeat * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_REPEAT , line , column , sizeof (ps_ast_repeat ));
254276 if (repeat_statement == NULL )
@@ -276,10 +298,10 @@ ps_ast_for *ps_ast_create_for(uint16_t line, uint16_t column, ps_ast_variable_si
276298 ps_ast_node * end , int step , ps_ast_statement_list * body )
277299{
278300 assert (variable != NULL );
279- assert (ps_ast_check_kind ( variable , PS_AST_LVALUE_SIMPLE ));
280- assert (start != NULL && ps_ast_check_group ( start , PS_AST_EXPRESSION ));
281- assert (end != NULL && ps_ast_check_group ( end , PS_AST_EXPRESSION ));
282- assert (body != NULL && ps_ast_check_group ( body , PS_AST_STATEMENT ));
301+ assert (ps_ast_node_check_kind (( ps_ast_node * ) variable , PS_AST_LVALUE_SIMPLE ));
302+ assert (start != NULL && ps_ast_node_check_group (( ps_ast_node * ) start , PS_AST_EXPRESSION ));
303+ assert (end != NULL && ps_ast_node_check_group (( ps_ast_node * ) end , PS_AST_EXPRESSION ));
304+ assert (body != NULL && ps_ast_node_check_group (( ps_ast_node * ) body , PS_AST_STATEMENT ));
283305 assert (step == 1 || step == -1 );
284306 ps_ast_for * for_statement =
285307 (ps_ast_for * )ps_ast_create_node (PS_AST_STATEMENT , PS_AST_FOR , line , column , sizeof (ps_ast_for ));
@@ -370,7 +392,7 @@ ps_ast_unary_operation *ps_ast_create_unary_operation(uint16_t line, uint16_t co
370392 ps_ast_node * operand )
371393{
372394 assert (operator == PS_OP_NEG || operator == PS_OP_NOT );
373- assert (operand != NULL && ps_ast_check_group (operand , PS_AST_EXPRESSION ));
395+ assert (operand != NULL && ps_ast_node_check_group (operand , PS_AST_EXPRESSION ));
374396 ps_ast_unary_operation * unary_operation = (ps_ast_unary_operation * )ps_ast_create_node (
375397 PS_AST_EXPRESSION , PS_AST_UNARY_OPERATION , line , column , sizeof (ps_ast_unary_operation ));
376398 if (unary_operation == NULL )
@@ -399,8 +421,8 @@ ps_ast_binary_operation *ps_ast_create_binary_operation(uint16_t line, uint16_t
399421 operator == PS_OP_AND || operator == PS_OP_SHL || operator == PS_OP_SHR || operator == PS_OP_EQ ||
400422 operator == PS_OP_GE || operator == PS_OP_GT || operator == PS_OP_LE || operator == PS_OP_LT ||
401423 operator == PS_OP_NE );
402- assert (left != NULL && ps_ast_check_group ( left , PS_AST_EXPRESSION ));
403- assert (right != NULL && ps_ast_check_group ( right , PS_AST_EXPRESSION ));
424+ assert (left != NULL && ps_ast_node_check_group (( ps_ast_node * ) left , PS_AST_EXPRESSION ));
425+ assert (right != NULL && ps_ast_node_check_group (( ps_ast_node * ) right , PS_AST_EXPRESSION ));
404426 ps_ast_binary_operation * binary_operation = (ps_ast_binary_operation * )ps_ast_create_node (
405427 PS_AST_EXPRESSION , PS_AST_BINARY_OPERATION , line , column , sizeof (ps_ast_binary_operation ));
406428 if (binary_operation == NULL )
0 commit comments