X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ast.c;h=1e2836f8e2c39181b949d733e85503606b7e5703;hp=aa7050914fb5475219664cb51dd82cc5b6f58dae;hb=9823b294dfaa7176cd78b5f758f6f8a3ee10e879;hpb=489ad486bcbb04da48715c4f59aa3da8dd5983a6 diff --git a/ast.c b/ast.c old mode 100755 new mode 100644 index aa70509..1e2836f --- a/ast.c +++ b/ast.c @@ -316,8 +316,10 @@ ast_value* ast_value_new(lex_ctx ctx, const char *name, int t) self->isfield = false; self->cvq = CV_NONE; self->hasvalue = false; - self->uses = 0; + self->isimm = false; + self->uses = 0; memset(&self->constval, 0, sizeof(self->constval)); + self->initlist = NULL; self->ir_v = NULL; self->ir_values = NULL; @@ -361,6 +363,20 @@ void ast_value_delete(ast_value* self) if (self->desc) mem_d(self->desc); + if (self->initlist) { + if (self->expression.next->expression.vtype == TYPE_STRING) { + /* strings are allocated, free them */ + size_t i, len = vec_size(self->initlist); + /* in theory, len should be expression.count + * but let's not take any chances */ + for (i = 0; i < len; ++i) { + if (self->initlist[i].vstring) + mem_d(self->initlist[i].vstring); + } + } + vec_free(self->initlist); + } + ast_expression_delete((ast_expression*)self); mem_d(self); }