mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-03-22 10:41:43 +00:00
removing some left-over alloc checks
This commit is contained in:
parent
f860759758
commit
72106b0982
3 changed files with 14 additions and 59 deletions
63
ast.c
63
ast.c
|
@ -103,10 +103,6 @@ ast_value* ast_value_copy(const ast_value *self)
|
|||
ast_value *cp = ast_value_new(self->expression.node.context, self->name, self->expression.vtype);
|
||||
if (self->expression.next) {
|
||||
cp->expression.next = ast_type_copy(self->expression.node.context, self->expression.next);
|
||||
if (!cp->expression.next) {
|
||||
ast_value_delete(cp);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
fromex = &self->expression;
|
||||
selfex = &cp->expression;
|
||||
|
@ -114,16 +110,12 @@ ast_value* ast_value_copy(const ast_value *self)
|
|||
selfex->flags = fromex->flags;
|
||||
for (i = 0; i < vec_size(fromex->params); ++i) {
|
||||
ast_value *v = ast_value_copy(fromex->params[i]);
|
||||
if (!v) {
|
||||
ast_value_delete(cp);
|
||||
return NULL;
|
||||
}
|
||||
vec_push(selfex->params, v);
|
||||
}
|
||||
return cp;
|
||||
}
|
||||
|
||||
bool ast_type_adopt_impl(ast_expression *self, const ast_expression *other)
|
||||
void ast_type_adopt_impl(ast_expression *self, const ast_expression *other)
|
||||
{
|
||||
size_t i;
|
||||
const ast_expression_common *fromex;
|
||||
|
@ -131,8 +123,6 @@ bool ast_type_adopt_impl(ast_expression *self, const ast_expression *other)
|
|||
self->expression.vtype = other->expression.vtype;
|
||||
if (other->expression.next) {
|
||||
self->expression.next = (ast_expression*)ast_type_copy(ast_ctx(self), other->expression.next);
|
||||
if (!self->expression.next)
|
||||
return false;
|
||||
}
|
||||
fromex = &other->expression;
|
||||
selfex = &self->expression;
|
||||
|
@ -140,11 +130,8 @@ bool ast_type_adopt_impl(ast_expression *self, const ast_expression *other)
|
|||
selfex->flags = fromex->flags;
|
||||
for (i = 0; i < vec_size(fromex->params); ++i) {
|
||||
ast_value *v = ast_value_copy(fromex->params[i]);
|
||||
if (!v)
|
||||
return false;
|
||||
vec_push(selfex->params, v);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static ast_expression* ast_shallow_type(lex_ctx ctx, int vtype)
|
||||
|
@ -178,13 +165,7 @@ ast_expression* ast_type_copy(lex_ctx ctx, const ast_expression *ex)
|
|||
|
||||
selfex->vtype = fromex->vtype;
|
||||
if (fromex->next)
|
||||
{
|
||||
selfex->next = ast_type_copy(ctx, fromex->next);
|
||||
if (!selfex->next) {
|
||||
ast_expression_delete_full(self);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
selfex->next = NULL;
|
||||
|
||||
|
@ -192,10 +173,6 @@ ast_expression* ast_type_copy(lex_ctx ctx, const ast_expression *ex)
|
|||
selfex->flags = fromex->flags;
|
||||
for (i = 0; i < vec_size(fromex->params); ++i) {
|
||||
ast_value *v = ast_value_copy(fromex->params[i]);
|
||||
if (!v) {
|
||||
ast_expression_delete_full(self);
|
||||
return NULL;
|
||||
}
|
||||
vec_push(selfex->params, v);
|
||||
}
|
||||
|
||||
|
@ -455,11 +432,7 @@ ast_binstore* ast_binstore_new(lex_ctx ctx, int storop, int op,
|
|||
|
||||
self->keep_dest = false;
|
||||
|
||||
if (!ast_type_adopt(self, left)) {
|
||||
ast_delete(self);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ast_type_adopt(self, left);
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -545,11 +518,7 @@ ast_entfield* ast_entfield_new_force(lex_ctx ctx, ast_expression *entity, ast_ex
|
|||
ast_propagate_effects(self, entity);
|
||||
ast_propagate_effects(self, field);
|
||||
|
||||
if (!ast_type_adopt(self, outtype)) {
|
||||
ast_entfield_delete(self);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ast_type_adopt(self, outtype);
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -641,10 +610,7 @@ ast_array_index* ast_array_index_new(lex_ctx ctx, ast_expression *array, ast_exp
|
|||
ast_propagate_effects(self, array);
|
||||
ast_propagate_effects(self, index);
|
||||
|
||||
if (!ast_type_adopt(self, outtype)) {
|
||||
ast_array_index_delete(self);
|
||||
return NULL;
|
||||
}
|
||||
ast_type_adopt(self, outtype);
|
||||
if (array->expression.vtype == TYPE_FIELD && outtype->expression.vtype == TYPE_ARRAY) {
|
||||
if (self->expression.vtype != TYPE_ARRAY) {
|
||||
compile_error(ast_ctx(self), "array_index node on type");
|
||||
|
@ -721,10 +687,7 @@ ast_ternary* ast_ternary_new(lex_ctx ctx, ast_expression *cond, ast_expression *
|
|||
|
||||
if (ontrue->expression.vtype == TYPE_NIL)
|
||||
exprtype = onfalse;
|
||||
if (!ast_type_adopt(self, exprtype)) {
|
||||
ast_ternary_delete(self);
|
||||
return NULL;
|
||||
}
|
||||
ast_type_adopt(self, exprtype);
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -978,10 +941,7 @@ ast_store* ast_store_new(lex_ctx ctx, int op,
|
|||
self->dest = dest;
|
||||
self->source = source;
|
||||
|
||||
if (!ast_type_adopt(self, dest)) {
|
||||
ast_delete(self);
|
||||
return NULL;
|
||||
}
|
||||
ast_type_adopt(self, dest);
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -1015,10 +975,7 @@ bool ast_block_add_expr(ast_block *self, ast_expression *e)
|
|||
ast_delete(self->expression.next);
|
||||
self->expression.next = NULL;
|
||||
}
|
||||
if (!ast_type_adopt(self, e)) {
|
||||
compile_error(ast_ctx(self), "internal error: failed to adopt type");
|
||||
return false;
|
||||
}
|
||||
ast_type_adopt(self, e);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1044,13 +1001,11 @@ void ast_block_delete(ast_block *self)
|
|||
mem_d(self);
|
||||
}
|
||||
|
||||
bool ast_block_set_type(ast_block *self, ast_expression *from)
|
||||
void ast_block_set_type(ast_block *self, ast_expression *from)
|
||||
{
|
||||
if (self->expression.next)
|
||||
ast_delete(self->expression.next);
|
||||
if (!ast_type_adopt(self, from))
|
||||
return false;
|
||||
return true;
|
||||
ast_type_adopt(self, from);
|
||||
}
|
||||
|
||||
ast_function* ast_function_new(lex_ctx ctx, const char *name, ast_value *vtype)
|
||||
|
|
4
ast.h
4
ast.h
|
@ -215,7 +215,7 @@ void ast_value_params_add(ast_value*, ast_value*);
|
|||
bool ast_compare_type(ast_expression *a, ast_expression *b);
|
||||
ast_expression* ast_type_copy(lex_ctx ctx, const ast_expression *ex);
|
||||
#define ast_type_adopt(a, b) ast_type_adopt_impl((ast_expression*)(a), (ast_expression*)(b))
|
||||
bool ast_type_adopt_impl(ast_expression *self, const ast_expression *other);
|
||||
void ast_type_adopt_impl(ast_expression *self, const ast_expression *other);
|
||||
void ast_type_to_string(ast_expression *e, char *buf, size_t bufsize);
|
||||
|
||||
/* Binary
|
||||
|
@ -597,7 +597,7 @@ struct ast_block_s
|
|||
};
|
||||
ast_block* ast_block_new(lex_ctx ctx);
|
||||
void ast_block_delete(ast_block*);
|
||||
bool ast_block_set_type(ast_block*, ast_expression *from);
|
||||
void ast_block_set_type(ast_block*, ast_expression *from);
|
||||
|
||||
bool ast_block_codegen(ast_block*, ast_function*, bool lvalue, ir_value**);
|
||||
void ast_block_collect(ast_block*, ast_expression*);
|
||||
|
|
6
parser.c
6
parser.c
|
@ -671,8 +671,7 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
|
|||
return false;
|
||||
}
|
||||
}
|
||||
if (!ast_block_set_type(blocks[0], exprs[1]))
|
||||
return false;
|
||||
ast_block_set_type(blocks[0], exprs[1]);
|
||||
|
||||
vec_push(sy->out, syblock(ctx, blocks[0]));
|
||||
return true;
|
||||
|
@ -3856,11 +3855,12 @@ static bool parse_function_body(parser_t *parser, ast_value *var)
|
|||
ast_expression *functype = fld_think->expression.next;
|
||||
|
||||
thinkfunc = ast_value_new(parser_ctx(parser), parser_tokval(parser), functype->expression.vtype);
|
||||
if (!thinkfunc || !ast_type_adopt(thinkfunc, functype)) {
|
||||
if (!thinkfunc) { /* || !ast_type_adopt(thinkfunc, functype)*/
|
||||
ast_unref(framenum);
|
||||
parseerror(parser, "failed to create implicit prototype for `%s`", parser_tokval(parser));
|
||||
return false;
|
||||
}
|
||||
ast_type_adopt(thinkfunc, functype);
|
||||
|
||||
if (!parser_next(parser)) {
|
||||
ast_unref(framenum);
|
||||
|
|
Loading…
Reference in a new issue