@@ -118,15 +118,32 @@ extern "C"
118118 ps_ast_node * condition ; /** @brief Loop until condition is true */
119119 } ps_ast_repeat ;
120120
121+ /** @brief Lvalue: simple variable */
122+ /** @example I, Total, ... */
123+ typedef struct s_ps_ast_variable_simple
124+ {
125+ PS_AST_NODE_COMMON
126+ ps_symbol * variable ; /** @brief Symbol being referenced */
127+ } ps_ast_variable_simple ;
128+
129+ /** @brief Lvalue: array value, like A[I], A[I, J, K], ... */
130+ typedef struct s_ps_ast_variable_array
131+ {
132+ PS_AST_NODE_COMMON
133+ ps_symbol * variable ; /** @brief Array being referenced */
134+ size_t n_indexes ; /** @brief Number of dimensions */
135+ ps_ast_node * * indexes ; /** @brief Values for each dimension */
136+ } ps_ast_variable_array ;
137+
121138 /** @brief FOR statement */
122139 typedef struct s_ps_ast_for
123140 {
124141 PS_AST_NODE_COMMON
125- ps_ast_node * variable ; /** @brief Loop variable */
126- ps_ast_node * start ; /** @brief Start value */
127- ps_ast_node * end ; /** @brief End value */
128- int step ; /** @brief Step value: 1 for "TO", -1 for "DOWNTO" */
129- ps_ast_statement_list * body ; /** @brief Statements to execute for each value of loop variable */
142+ ps_ast_variable_simple * variable ; /** @brief Loop variable *must* be a simple variable */
143+ ps_ast_node * start ; /** @brief Start value */
144+ ps_ast_node * end ; /** @brief End value */
145+ int step ; /** @brief Step value: 1 for "TO", -1 for "DOWNTO" */
146+ ps_ast_statement_list * body ; /** @brief Statements to execute for each value of loop variable */
130147 } ps_ast_for ;
131148
132149 /** @brief Argument for procedure or function call */
@@ -160,23 +177,6 @@ extern "C"
160177 ps_value value ;
161178 } ps_ast_value ;
162179
163- /** @brief Lvalue: simple variable */
164- /** @example I, Total, ... */
165- typedef struct s_ps_ast_variable_simple
166- {
167- PS_AST_NODE_COMMON
168- ps_symbol * variable ; /** @brief Symbol being referenced */
169- } ps_ast_variable_simple ;
170-
171- /** @brief Lvalue: array value, like A[I], A[I, J, K], ... */
172- typedef struct s_ps_ast_variable_array
173- {
174- PS_AST_NODE_COMMON
175- ps_symbol * variable ; /** @brief Array being referenced */
176- size_t n_indexes ; /** @brief Number of dimensions */
177- ps_ast_node * * indexes ; /** @brief Values for each dimension */
178- } ps_ast_variable_array ;
179-
180180 /** @brief Unary operation: operator and operand */
181181 typedef struct s_ps_ast_unary_operation
182182 {
@@ -220,16 +220,17 @@ extern "C"
220220 ps_ast_block * ps_ast_create_block (uint16_t line , uint16_t column , ps_ast_node_kind kind , char * name );
221221 ps_ast_statement_list * ps_ast_create_statement_list (uint16_t line , uint16_t column , size_t count );
222222 ps_ast_assignment * ps_ast_create_assignment (uint16_t line , uint16_t column , ps_ast_node * lvalue ,ps_ast_node * expression );
223- ps_ast_if * ps_ast_create_if (uint16_t line , uint16_t column , ps_ast_node_kind kind , ps_ast_node * condition , ps_ast_statement_list * then_branch , ps_ast_statement_list * else_branch );
224- ps_ast_while * ps_ast_create_while (uint16_t line , uint16_t column , ps_ast_node_kind kind , ps_ast_node * condition , ps_ast_statement_list * body );
223+ ps_ast_if * ps_ast_create_if (uint16_t line , uint16_t column , ps_ast_node * condition , ps_ast_statement_list * then_branch , ps_ast_statement_list * else_branch );
224+ ps_ast_while * ps_ast_create_while (uint16_t line , uint16_t column , ps_ast_node * condition , ps_ast_statement_list * body );
225225 ps_ast_repeat * ps_ast_create_repeat (uint16_t line , uint16_t column , ps_ast_statement_list * body , ps_ast_node * condition );
226- ps_ast_for * ps_ast_create_for (uint16_t line , uint16_t column , ps_ast_node_group group , ps_ast_node_kind kind , ps_ast_node * variable , ps_ast_node * start , ps_ast_node * end , int step , ps_ast_statement_list * body );
226+ ps_ast_for * ps_ast_create_for (uint16_t line , uint16_t column , ps_ast_variable_simple * variable , ps_ast_node * start , ps_ast_node * end , int step , ps_ast_statement_list * body );
227227 ps_ast_call * ps_ast_create_call (uint16_t line , uint16_t column , ps_ast_node_kind kind , ps_symbol * executable , size_t n_args , ps_ast_argument * args [] );
228228 ps_ast_unary_operation * ps_ast_create_unary_operation (uint16_t line , uint16_t column , ps_operator_unary operator , ps_ast_node * operand );
229229 ps_ast_binary_operation * ps_ast_create_binary_operation (uint16_t line , uint16_t column , ps_operator_binary operator , ps_ast_node * left , ps_ast_node * right );
230230 ps_ast_value * ps_ast_create_rvalue_const (uint16_t line , uint16_t column , ps_value value );
231231 ps_ast_variable_simple * ps_ast_create_variable_simple (uint16_t line , uint16_t column , ps_ast_node_kind kind , ps_symbol * variable );
232- ps_ast_variable_array * ps_ast_create_variable_array (uint16_t line , uint16_t column , ps_ast_node_kind kind , ps_symbol * symbol , size_t n_indexes , ps_ast_node * indexes );
232+ ps_ast_variable_array * ps_ast_create_variable_array (uint16_t line , uint16_t column , ps_ast_node_kind kind , ps_symbol * symbol , size_t n_indexes , ps_ast_node * * indexes );
233+ ps_ast_argument * ps_ast_create_argument (uint16_t line , uint16_t column , ps_ast_node_kind kind , ps_ast_node * arg );
233234 // clang-format on
234235
235236 /** @brief Free an AST node and all its children */
0 commit comments