@@ -18,40 +18,34 @@ extern "C"
1818#endif
1919
2020 /* src/ps_parse.c */
21- bool ps_parse_start (ps_compiler * compiler );
22-
23- /* src/ps_parse_declaration.c */
24- bool ps_parse_program (ps_compiler * compiler );
25- bool ps_parse_uses (ps_compiler * compiler );
26- bool ps_parse_const (ps_compiler * compiler );
27- bool ps_parse_type (ps_compiler * compiler );
28- bool ps_parse_var (ps_compiler * compiler );
29- bool ps_parse_block (ps_compiler * compiler );
21+ ps_ast_node * ps_parse_start (ps_compiler * compiler );
3022
3123 /* src/ps_parse_executable.c */
32- bool ps_parse_procedure_or_function_declaration (ps_compiler * compiler , ps_symbol_kind kind );
33- bool ps_parse_procedure_or_function_call (ps_compiler * compiler , ps_symbol * executable , ps_value * result );
34- bool ps_parse_variable_reference (ps_compiler * compiler , ps_symbol * * variable );
24+ ps_ast_node * ps_parse_procedure_or_function_declaration (ps_compiler * compiler , ps_symbol_kind kind );
25+ ps_ast_node * ps_parse_procedure_or_function_call (ps_compiler * compiler , ps_symbol * executable , ps_value * result );
26+ ps_ast_node * ps_parse_variable_reference (ps_compiler * compiler , ps_symbol * * variable );
3527
3628 /* src/ps_parse_expression.c */
37- bool ps_parse_expression (ps_compiler * compiler , ps_value * result );
38- bool ps_parse_relational_expression (ps_compiler * compiler , ps_value * result );
39- bool ps_parse_and_expression (ps_compiler * compiler , ps_value * result );
40- bool ps_parse_or_expression (ps_compiler * compiler , ps_value * result );
41- bool ps_parse_simple_expression (ps_compiler * compiler , ps_value * result );
42- bool ps_parse_term (ps_compiler * compiler , ps_value * result );
43- bool ps_parse_factor (ps_compiler * compiler , ps_value * result );
44- bool ps_parse_constant_expression (ps_compiler * compiler , ps_value * constant );
45- bool ps_parse_function_call (ps_compiler * compiler , ps_symbol * function , ps_value * result );
29+ ps_ast_node * ps_parse_expression (ps_compiler * compiler , ps_value * result );
30+ ps_ast_node * ps_parse_relational_expression (ps_compiler * compiler , ps_value * result );
31+ ps_ast_node * ps_parse_and_expression (ps_compiler * compiler , ps_value * result );
32+ ps_ast_node * ps_parse_or_expression (ps_compiler * compiler , ps_value * result );
33+ ps_ast_node * ps_parse_simple_expression (ps_compiler * compiler , ps_value * result );
34+ ps_ast_node * ps_parse_term (ps_compiler * compiler , ps_value * result );
35+ ps_ast_node * ps_parse_factor (ps_compiler * compiler , ps_value * result );
36+ ps_ast_node * ps_parse_constant_expression (ps_compiler * compiler , ps_value * constant );
37+ ps_ast_node * ps_parse_function_call (ps_compiler * compiler , ps_symbol * function , ps_value * result );
4638
4739 /* src/ps_parse_type.c */
48- bool ps_parse_type_definition (ps_compiler * compiler );
49- bool ps_parse_type_reference (ps_compiler * compiler , ps_symbol * * type_symbol , const char * type_name );
50- bool ps_parse_type_reference_enum (ps_compiler * compiler , ps_symbol * * type_symbol , const char * type_name );
51- bool ps_parse_type_reference_subrange (ps_compiler * compiler , ps_symbol * * type_symbol , const char * type_name );
52- bool ps_parse_type_reference_array (ps_compiler * compiler , ps_symbol * * type_symbol , const char * type_name );
40+ ps_ast_node * ps_parse_type_definition (ps_compiler * compiler );
41+ ps_ast_node * ps_parse_type_reference (ps_compiler * compiler , ps_symbol * * type_symbol , const char * type_name );
42+ ps_ast_node * ps_parse_type_reference_enum (ps_compiler * compiler , ps_symbol * * type_symbol , const char * type_name );
43+ ps_ast_node * ps_parse_type_reference_subrange (ps_compiler * compiler , ps_symbol * * type_symbol ,
44+ const char * type_name );
45+ ps_ast_node * ps_parse_type_reference_array (ps_compiler * compiler , ps_symbol * * type_symbol , const char * type_name );
5346
5447#define PARSE_BEGIN (__PARSE__ , __PLUS__ ) \
48+ ps_ast_node *ast = NULL; \
5549 ps_lexer *lexer = ps_parser_get_lexer(compiler->parser); \
5650 static char *visit = __PARSE__; \
5751 if (compiler->debug >= COMPILER_DEBUG_TRACE) \
@@ -67,13 +61,13 @@ extern "C"
6761 fprintf(stderr, "END\t%-32s %-32s ", visit, __PLUS__); \
6862 ps_token_debug(stderr, "END", &lexer->current_token); \
6963 } \
70- return true; \
64+ return ast; \
7165 }
7266
7367#define READ_NEXT_TOKEN \
7468 { \
7569 if (!ps_lexer_read_token(lexer)) \
76- return false; \
70+ return NULL; \
7771 if (compiler->debug >= COMPILER_DEBUG_TRACE) \
7872 { \
7973 fprintf(stderr, "TOKEN\t%-32s %-32s ", "", ""); \
@@ -92,7 +86,7 @@ extern "C"
9286 } \
9387 ps_compiler_set_message(compiler, "Expected '%s'", ps_token_get_keyword(__PS_TOKEN_TYPE__)); \
9488 compiler->error = PS_ERROR_UNEXPECTED_TOKEN; \
95- return false; \
89+ return NULL; \
9690 }
9791
9892#define READ_NEXT_TOKEN_OR_CLEANUP \
@@ -129,7 +123,7 @@ extern "C"
129123 fprintf(stderr, "RETURN\t%-32s %-8d ", visit, __PS_ERROR__); \
130124 ps_token_debug(stderr, "RETURN", &lexer->current_token); \
131125 } \
132- return ps_compiler_return_false (compiler, __PS_ERROR__); \
126+ return ps_compiler_return_null (compiler, __PS_ERROR__); \
133127 }
134128
135129#define GOTO_CLEANUP (__PS_ERROR__ ) \
@@ -150,48 +144,7 @@ extern "C"
150144 fprintf(stderr, "ERROR\t%-32s %-32s ", visit, __PLUS__); \
151145 ps_token_debug(stderr, "TRACE", &lexer->current_token); \
152146 } \
153- return false; \
154- }
155-
156- #define SAVE_CURSOR (__LINE__ , __COLUMN__ ) \
157- if (!ps_lexer_get_cursor(lexer, &__LINE__, &__COLUMN__)) \
158- TRACE_ERROR("CURSOR!");
159-
160- #define SAVE_CURSOR_OR_CLEANUP (__LINE__ , __COLUMN__ ) \
161- if (compiler->debug >= COMPILER_DEBUG_TRACE) \
162- { \
163- fprintf(stderr, "CURSOR\t%-32s %-32s %d %d ", visit, "SAVE", lexer->buffer->current_line, \
164- lexer->buffer->current_column); \
165- ps_token_debug(stderr, "TRACE", &lexer->current_token); \
166- } \
167- if (!ps_lexer_get_cursor(lexer, &__LINE__, &__COLUMN__)) \
168- { \
169- if (compiler->debug >= COMPILER_DEBUG_TRACE) \
170- { \
171- fprintf(stderr, "ERROR\t%-32s %-32s ", visit, ""); \
172- ps_token_debug(stderr, "TRACE", &lexer->current_token); \
173- } \
174- goto cleanup; \
175- }
176-
177- #define RESTORE_CURSOR (__LINE__ , __COLUMN__ ) \
178- if (compiler->debug >= COMPILER_DEBUG_TRACE) \
179- { \
180- fprintf(stderr, "CURSOR\t%-32s %-32s %d %d ", visit, "RESTORE", __LINE__, __COLUMN__); \
181- ps_token_debug(stderr, "TRACE", &lexer->current_token); \
182- } \
183- if (!ps_lexer_set_cursor(lexer, __LINE__, __COLUMN__)) \
184- TRACE_ERROR("CURSOR!");
185-
186- #define TRACE_CURSOR \
187- if (compiler->debug >= COMPILER_DEBUG_TRACE) \
188- { \
189- uint16_t line = 0; \
190- uint16_t column = 0; \
191- if (!ps_lexer_get_cursor(lexer, &line, &column)) \
192- TRACE_ERROR("CURSOR"); \
193- fprintf(stderr, "CURSOR\t*** LINE=%d, COLUMN=%d ***\n", line, column); \
194- ps_token_debug(stderr, "TRACE", &lexer->current_token); \
147+ return NULL; \
195148 }
196149
197150#ifdef __cplusplus
0 commit comments