self->getter = NULL;
self->desc = NULL;
+ self->argcounter = NULL;
+
return self;
}
{
if (self->name)
mem_d((void*)self->name);
+ if (self->argcounter)
+ mem_d((void*)self->argcounter);
if (self->hasvalue) {
switch (self->expression.vtype)
{
vtype->hasvalue = true;
vtype->constval.vfunc = self;
+ self->varargs = NULL;
+
return self;
}
vec_free(self->blocks);
vec_free(self->breakblocks);
vec_free(self->continueblocks);
+ if (self->varargs)
+ ast_delete(self->varargs);
mem_d(self);
}
func->flags |= IR_FLAG_HAS_ARRAYS;
- if (param) {
+ if (param && !(self->expression.flags & AST_FLAG_IS_VARARG)) {
compile_error(ast_ctx(self), "array-parameters are not supported");
return false;
}
}
}
+ if (self->varargs) {
+ if (!ast_local_codegen(self->varargs, self->ir_func, true))
+ return false;
+ }
+
if (self->builtin) {
irf->builtin = self->builtin;
return true;