-Subproject commit 0112a154df71cafe08e69427e0d8487cb9bdcafb
+Subproject commit 25337f99739d1844469e6fc2f3c07feda0d99b40
struct Arg_;
struct Gwion_ {
PlugInfo* plug;
-// sym
// mem
Env env;
Emitter emit;
ANN static m_uint vararg_size(const Exp_Call* exp_call, const Vector kinds) {
Exp e = exp_call->args;
- Arg_List l = exp_call->m_func->def->arg_list;
+ Arg_List l = exp_call->m_func->def->args;
m_uint size = 0;
while(e) {
if(!l) {
ANN static m_bool emit_vararg(const Emitter emit, const Exp_Dot* member) { GWDEBUG_EXE
m_uint offset = emit->env->class_def ? SZ_INT : 0;
- Arg_List l = emit->env->func->def->arg_list;
+ Arg_List l = emit->env->func->def->args;
const m_str str = s_name(member->xid);
while(l) {
offset += l->type->size;
}
ANN static m_bool emit_func_def_body(const Emitter emit, const Func_Def func_def) { GWDEBUG_EXE
- if(func_def->arg_list)
- emit_func_def_args(emit, func_def->arg_list);
+ if(func_def->args)
+ emit_func_def_args(emit, func_def->args);
if(GET_FLAG(func_def, variadic))
stack_alloc(emit);
if(func_def->d.code->d.stmt_code.stmt_list)
gwion->emit = src->gwion->emit;
gwion->env = src->gwion->env;
gwion->freearg = src->gwion->freearg;
+ gwion->st = src->gwion->st;
return gwion->vm;
}
ANN m_bool gwion_ini(const Gwion gwion, Arg* arg) {
Exp_Lambda *l, const Func_Def def) {
const m_uint scope = ((l->owner = owner)) ?
env_push_type(env, owner) : env->scope->depth;
- Arg_List base = def->arg_list, arg = l->arg;
+ Arg_List base = def->args, arg = l->arg;
while(base && arg) {
arg->td = base->td;
base = base->next;
CHECK_OO(v)
const Func_Def base = v->d.func_ref->def;
const Func_Def def = new_func_def(base->td, insert_symbol(env->gwion->st, v->name),
- base->arg_list, base->d.code, base->flag);
+ base->args, base->d.code, base->flag);
def->tmpl = new_tmpl_list(base->tmpl->list, dt->overload);
SET_FLAG(def, template);
return def;
const m_bool implicit, const m_bool specific) {
do {
Exp e = args;
- Arg_List e1 = func->def->arg_list;
+ Arg_List e1 = func->def->args;
while(e) {
if(!e1) {
if(GET_FLAG(func->def, variadic))
continue;
base = value->d.func_ref->def;
def = new_func_def(base->td, insert_symbol(v->name),
- base->arg_list, base->d.code, base->flag);
+ base->args, base->d.code, base->flag);
def->tmpl = new_tmpl_list(base->tmpl->list, (m_int)i);
SET_FLAG(def, template);
}
Func up = f->d.func;
do {
gw_err("(%s)\t", up->name);
- const Arg_List e = up->def->arg_list;
+ const Arg_List e = up->def->args;
e ? print_arg(e) : (void)gw_err("\033[32mvoid\033[0m");
gw_err("\n");
} while((up = up->next));
Type_List tl[type_number];
ID_List list = value->d.func_ref->def->tmpl->list;
while(list) {
- Arg_List arg = value->d.func_ref->def->arg_list;
+ Arg_List arg = value->d.func_ref->def->args;
Exp template_arg = args;
while(arg && template_arg) {
char path[id_list_len(arg->td->xid)];
}
ANN static void operator_func(const Func f) {
- const Arg_List a = f->def->arg_list;
+ const Arg_List a = f->def->args;
const m_bool is_unary = GET_FLAG(f->def, unary);
const Type l = is_unary ? NULL : a->type;
const Type r = is_unary ? a->type : a->next ? a->next->type : NULL;
env->func = func;
++env->scope->depth;
nspc_push_value(env->curr);
- if(!f->arg_list)
+ if(!f->args)
UNSET_FLAG(f->func, pure);
else
- ret = check_func_args(env, f->arg_list);
+ ret = check_func_args(env, f->args);
if(ret > 0) {
const Value variadic = GET_FLAG(f, variadic) ? set_variadic(env) : NULL;
if(!GET_FLAG(f, builtin) && check_stmt_code(env, &f->d.code->d.stmt_code) < 0)
ERR_B(f->td->xid->pos, "dtor must be in class def!!")
if(f->td)
CHECK_OB((f->ret_type = known_type(env, f->td)))
- if(f->arg_list)
- CHECK_BB(scan1_args(env, f->arg_list))
+ if(f->args)
+ CHECK_BB(scan1_args(env, f->args))
if(!GET_FLAG(f, builtin))
CHECK_BB(scan1_stmt_code(env, &f->d.code->d.stmt_code))
if(GET_FLAG(f, op) && env->class_def)
}
ANN static m_bool scan2_args(const Env env, const Func_Def f) { GWDEBUG_EXE
- Arg_List list = f->arg_list;
+ Arg_List list = f->args;
do {
const Var_Decl var = list->var_decl;
if(var->array)
ANN m_bool scan2_stmt_fptr(const Env env, const Stmt_Fptr ptr) { GWDEBUG_EXE
struct Func_Def_ d = { .stack_depth=0 };
- d.arg_list = ptr->args;
- if(d.arg_list)
+ d.args = ptr->args;
+ if(d.args)
CHECK_BB(scan2_args(env, &d))
const Func_Def def = new_func_def(ptr->td, ptr->xid, ptr->args, NULL, ptr->td->flag);
def->ret_type = ptr->ret_type;
}
ANN static m_bool scan2_func_def_op(const Env env, const Func_Def f) { GWDEBUG_EXE
- assert(f->arg_list);
+ assert(f->args);
const Operator op = name2op(s_name(f->name));
const Type l = GET_FLAG(f, unary) ? NULL :
- f->arg_list->var_decl->value->type;
- const Type r = GET_FLAG(f, unary) ? f->arg_list->var_decl->value->type :
- f->arg_list->next ? f->arg_list->next->var_decl->value->type : NULL;
+ f->args->var_decl->value->type;
+ const Type r = GET_FLAG(f, unary) ? f->args->var_decl->value->type :
+ f->args->next ? f->args->next->var_decl->value->type : NULL;
struct Op_Import opi = { .op=op, .lhs=l, .rhs=r, .ret=f->ret_type };
CHECK_BB(env_add_op(env, &opi))
if(env->class_def) {
if(GET_FLAG(func->def, variadic))
f->stack_depth += SZ_INT;
f->ret_type = type_decl_resolve(env, f->td);
- return (f->arg_list && f->arg_list->type) ? scan2_args(env, f) : GW_OK;
+ return (f->args && f->args->type) ? scan2_args(env, f) : GW_OK;
}
}
const Func base = get_func(env, f);
} else {
f->func = base;
}
- if(f->arg_list)
+ if(f->args)
CHECK_BB(scan2_args(env, f))
if(!GET_FLAG(f, builtin) && f->d.code->d.stmt_code.stmt_list)
CHECK_BB(scan2_func_def_code(env, f))
#include "object.h"
#include "import.h"
#include "instr.h"
+#include "vm.h"
+#include "gwion.h"
+#include "gwi.h"
GWION_IMPORT(extend_array_test) {
Type t_array_ext;
CHECK_OB((t_array_ext = gwi_mk_type(gwi, "ArrayExt", SZ_INT, NULL)))
CHECK_BB(gwi_class_ini(gwi, t_array_ext, NULL, NULL))
- Type_Decl* td = new_type_decl(new_id_list(insert_symbol("float"), 0), 0);
+ Type_Decl* td = new_type_decl(new_id_list(insert_symbol(gwi->gwion->st, "float"), 0), 0);
Exp e = new_exp_prim_int(1, 0);
Array_Sub array = new_array_sub(e);
add_type_decl_array(td, array);
#include "object.h"
#include "instr.h"
#include "import.h"
+#include "vm.h"
+#include "gwion.h"
+#include "gwi.h"
static CTOR(ev_ctor) { printf(" %p this to test ctor\n", (void*)o); }
Type t_ev ;
CHECK_OB((t_ev = gwi_mk_type(gwi, "Ev", SZ_INT , NULL)))
CHECK_BB(gwi_class_ini(gwi, t_ev, ev_ctor, NULL))
- Type_Decl* td = new_type_decl(new_id_list(insert_symbol("Event"), 0), 0);
+ Type_Decl* td = new_type_decl(new_id_list(insert_symbol(gwi->gwion->st, "Event"), 0), 0);
CHECK_BB(gwi_class_ext(gwi, td))
CHECK_BB(gwi_class_end(gwi))
return GW_OK;
#include "object.h"
#include "instr.h"
#include "import.h"
+#include "vm.h"
+#include "gwion.h"
+#include "gwi.h"
GWION_IMPORT(extend_pair_test) {
m_str types[] = { "A", "B" };
CHECK_BB(gwi_tmpl_ini(gwi, 2, types))
CHECK_BB(gwi_class_ini(gwi, t_pair_ext, NULL, NULL))
CHECK_BB(gwi_tmpl_end(gwi))
- Type_Decl* td = new_type_decl(new_id_list(insert_symbol("Pair"), 0), 0);
- Type_Decl* td0 = new_type_decl(new_id_list(insert_symbol("A"), 0), 0);
- Type_Decl* td1 = new_type_decl(new_id_list(insert_symbol("B"), 0), 0);
+ Type_Decl* td = new_type_decl(new_id_list(insert_symbol(gwi->gwion->st, "Pair"), 0), 0);
+ Type_Decl* td0 = new_type_decl(new_id_list(insert_symbol(gwi->gwion->st, "A"), 0), 0);
+ Type_Decl* td1 = new_type_decl(new_id_list(insert_symbol(gwi->gwion->st, "B"), 0), 0);
Type_List tl1 = new_type_list(td1, NULL);
Type_List tl0 = new_type_list(td0, tl1);
td->types = tl0;