case opid1(','):
if (blocks[0]) {
- vec_push(blocks[0]->exprs, exprs[1]);
+ ast_block_add_expr(blocks[0], exprs[1]);
} else {
blocks[0] = ast_block_new(ctx);
- vec_push(blocks[0]->exprs, exprs[0]);
- vec_push(blocks[0]->exprs, exprs[1]);
+ ast_block_add_expr(blocks[0], exprs[0]);
+ ast_block_add_expr(blocks[0], exprs[1]);
}
if (!ast_block_set_type(blocks[0], exprs[1]))
return false;
increment = parse_expression_leave(parser, false);
if (!increment)
goto onerr;
- if (!ast_istype(increment, ast_store) &&
- !ast_istype(increment, ast_call) &&
- !ast_istype(increment, ast_binstore))
- {
+ if (!ast_side_effects(increment)) {
if (genwarning(ast_ctx(increment), WARN_EFFECTLESS_STATEMENT, "statement has no effect"))
goto onerr;
}
}
if (!expr)
continue;
- vec_push(caseblock->exprs, expr);
+ ast_block_add_expr(caseblock, expr);
}
}
if (!exp)
return false;
*out = exp;
- if (!ast_istype(exp, ast_store) &&
- !ast_istype(exp, ast_call) &&
- !ast_istype(exp, ast_binstore))
- {
+ if (!ast_side_effects(exp)) {
if (genwarning(ast_ctx(exp), WARN_EFFECTLESS_STATEMENT, "statement has no effect"))
return false;
}
}
if (!expr)
continue;
- vec_push(block->exprs, expr);
+ ast_block_add_expr(block, expr);
}
if (parser->tok != '}') {
if (store_think) ast_delete(store_think);
retval = false;
}
- vec_push(block->exprs, (ast_expression*)store_frame);
- vec_push(block->exprs, (ast_expression*)store_nextthink);
- vec_push(block->exprs, (ast_expression*)store_think);
+ ast_block_add_expr(block, (ast_expression*)store_frame);
+ ast_block_add_expr(block, (ast_expression*)store_nextthink);
+ ast_block_add_expr(block, (ast_expression*)store_think);
}
if (!retval) {
return NULL;
}
- vec_push(block->exprs, (ast_expression*)st);
+ ast_block_add_expr(block, (ast_expression*)st);
ret = ast_return_new(ctx, NULL);
if (!ret) {
return NULL;
}
- vec_push(block->exprs, (ast_expression*)ret);
+ ast_block_add_expr(block, (ast_expression*)ret);
return (ast_expression*)block;
} else {
return NULL;
}
- vec_push(block->exprs, (ast_expression*)st);
+ ast_block_add_expr(block, (ast_expression*)st);
ret = ast_return_new(ctx, NULL);
if (!ret) {
return NULL;
}
- vec_push(block->exprs, (ast_expression*)ret);
+ ast_block_add_expr(block, (ast_expression*)ret);
return (ast_expression*)block;
} else {
goto cleanup;
}
- vec_push(func->blocks[0]->exprs, root);
+ ast_block_add_expr(func->blocks[0], root);
array->setter = fval;
return true;
cleanup:
goto cleanup;
}
- vec_push(func->blocks[0]->exprs, root);
+ ast_block_add_expr(func->blocks[0], root);
array->setter = fval;
return true;
cleanup:
goto cleanup;
}
- vec_push(func->blocks[0]->exprs, root);
+ ast_block_add_expr(func->blocks[0], root);
array->getter = fval;
return true;
cleanup:
else {
if (vec_size(sy.out) != 1 && vec_size(sy.ops) != 0)
parseerror(parser, "internal error: leaked operands");
- vec_push(localblock->exprs, (ast_expression*)sy.out[0].out);
+ ast_block_add_expr(localblock, (ast_expression*)sy.out[0].out);
}
vec_free(sy.out);
vec_free(sy.ops);