(void)!parser_t_locals_add(parser, vx);
(void)!parser_t_locals_add(parser, vy);
(void)!parser_t_locals_add(parser, vz);
+ if (!ast_block_locals_add(localblock, var) ||
+ !ast_block_collect(localblock, vx.var) ||
+ !ast_block_collect(localblock, vy.var) ||
+ !ast_block_collect(localblock, vz.var))
+ {
+ parser_pop_local(parser);
+ parser_pop_local(parser);
+ parser_pop_local(parser);
+ parser_pop_local(parser);
+ ast_value_delete(var);
+ return false;
+ }
}
}
else
ast_value_delete(var);
return false;
}
- }
- if (localblock && !ast_block_locals_add(localblock, var))
- {
- parser_pop_local(parser);
- ast_value_delete(var);
- return false;
+ if (localblock && !ast_block_locals_add(localblock, var))
+ {
+ parser_pop_local(parser);
+ ast_value_delete(var);
+ return false;
+ }
}
if (!parser_next(parser)) {
else if (!parser->errors)
parseerror(parser, "parse error\n");
lex_close(parser->lex);
- mem_d(parser);
return false;
}
}
for (i = 0; i < parser->imm_float_count; ++i) {
ast_delete(parser->imm_float[i]);
}
+ for (i = 0; i < parser->fields_count; ++i) {
+ ast_delete(parser->fields[i].var);
+ mem_d(parser->fields[i].name);
+ }
for (i = 0; i < parser->globals_count; ++i) {
ast_delete(parser->globals[i].var);
mem_d(parser->globals[i].name);
}
+ MEM_VECTOR_CLEAR(parser, functions);
+ MEM_VECTOR_CLEAR(parser, imm_vector);
+ MEM_VECTOR_CLEAR(parser, imm_string);
+ MEM_VECTOR_CLEAR(parser, imm_float);
MEM_VECTOR_CLEAR(parser, globals);
+ MEM_VECTOR_CLEAR(parser, fields);
+ MEM_VECTOR_CLEAR(parser, locals);
mem_d(parser);
}