]> Nishi Git Mirror - gwion.git/commitdiff
:art: Start fixing
authorJérémie Astor <fennecdjay@gmail.com>
Tue, 10 Aug 2021 09:06:31 +0000 (11:06 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Tue, 10 Aug 2021 09:06:31 +0000 (11:06 +0200)
src/emit/emit.c
src/parse/check.c
src/parse/scan0.c

index 2144d6c53bfa3d4b9a5a4636928da111a63bd649..a09eeab82ee0b7c2d8fa8cc971216a7b4296727b 100644 (file)
@@ -1277,7 +1277,16 @@ ANN m_bool traverse_dot_tmpl(const Emitter emit, const struct dottmpl_ *dt) {
 }
 
 static inline m_bool push_func_code(const Emitter emit, const Func f) {
-  if (!vector_size(&emit->code->instr)) return GW_OK;
+  if (!vector_size(&emit->code->instr)) {
+    if(fflag(f, fflag_tmpl)) {
+    // we are sporking a template
+    // assume static call for now
+    const Instr instr = emit_add_instr(emit, RegSetImm);
+    instr->m_val  = (m_uint)f->code;
+    instr->m_val2  = (m_uint)-SZ_INT;
+    }
+    return GW_OK;
+  }
   const Instr instr = (Instr)vector_back(&emit->code->instr);
   if (instr->opcode == eDotTmplVal) {
     size_t len = strlen(f->name);
@@ -1484,7 +1493,7 @@ ANN m_bool emit_exp_call1(const Emitter emit, const Func f,
     push_func_code(emit, f);
   else if (vector_size(&emit->code->instr)) {
     const Instr back = (Instr)vector_back(&emit->code->instr);
-    if ((f_instr)(m_uint)back->opcode == DotFunc) back->m_val = f->vt_index;
+    if (back->opcode == eDotFunc) back->m_val = f->vt_index;
   }
   if (vector_size(&emit->code->instr) && vflag(f->value_ref, vflag_member) &&
       is_fptr(emit->gwion, f->value_ref->type)) {
index 75535e964b348739605d13514918025a1102571e..ac361855df4461b92e03dbc3976f3b6482f8f8ef 100644 (file)
@@ -628,6 +628,7 @@ static void function_alternative(const Env env, const Type f, const Exp args,
     print_current_args(args);
   else
     gw_err(_("and not:\n  {G}void{0}\n"));
+  if (env->context) env->context->error = true;
 }
 
 ANN static m_uint get_type_number(Specialized_List list) {
index 7cdfa37dbcd9461c6795d375f8d0a6fe64c245e1..a72980bb0768951bc74cf107143987765c9704fb 100644 (file)
@@ -345,7 +345,6 @@ ANN static Type scan0_class_def_init(const Env env, const Class_Def cdef) {
   t->flag |= cdef->flag;
   //  add_type(env, t->info->value->from->owner, t);
   cdef_flag(cdef, t);
-  if (cdef->base.ext && cdef->base.ext->array) set_tflag(t, tflag_typedef);
   return t;
 }