]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Array bug fixes
authorfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 12 Apr 2019 09:37:31 +0000 (11:37 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 12 Apr 2019 09:37:31 +0000 (11:37 +0200)
src/emit/emit.c
src/parse/check.c
src/parse/scan1.c
src/parse/scan2.c

index 81fdbf9c89c31206fdd5da82513a081cb63bdefe..5403af730ed0124d807b62a73e85ef03ebd63f20 100644 (file)
@@ -367,12 +367,11 @@ ANN static m_bool prim_array(const Emitter emit, const Exp_Primary * primary) {
   do ++count;
   while((e = e->next));
   const Type type = array->type;
-  const Type base = array_base(type);
   const Instr push = emit_add_instr(emit, RegSetImm);
   push->m_val = count;
   const Instr instr = emit_add_instr(emit, ArrayInit);
   instr->m_val = (m_uint)type;
-  instr->m_val2 = base->size;
+  instr->m_val2 = type->array_depth == 1 ? array_base(type)->size : SZ_INT;
   emit_add_instr(emit, GcAdd);
   return GW_OK;
 }
index 27609151663c2d8ae26d80f1004a430ef24c2a50..85369e0316a876320f1d1742531925517ad74008 100644 (file)
@@ -689,7 +689,8 @@ ANN static Type check_exp_dot(const Env env, Exp_Dot* member) { GWDEBUG_EXE
   if(!value) {
     env_err(env, member->base->pos,
           "class '%s' has no member '%s'", the_base->name, str);
-    did_you_mean_type(member->t_base, str);
+    if(member->t_base->nspc)
+      did_you_mean_type(member->t_base, str);
     return NULL;
   }
   if(!env->class_def || isa(env->class_def, value->owner_class) < 0) {
index 7c2d40c4c5dba4c9de327d8dbb98990e1b9524e2..3cf598b53e84c8cc6eabe817d3e64638418b87e2 100644 (file)
@@ -104,6 +104,8 @@ ANN static inline m_bool scan1_exp_binary(const Env env, const Exp_Binary* bin)
 ANN static inline m_bool scan1_exp_primary(const Env env, const Exp_Primary* prim) { GWDEBUG_EXE
   if(prim->primary_type == ae_primary_hack)
     return scan1_exp(env, prim->d.exp);
+  if(prim->primary_type == ae_primary_array && prim->d.array->exp)
+    return scan1_exp(env, prim->d.array->exp);
   return GW_OK;
 }
 
index b53811c07d16e4a9ea713ce6033ff361acecbb6b..ca8e30c8b27cd9ddad5f8b879f30ef5e10c78212 100644 (file)
@@ -147,7 +147,8 @@ ANN static inline m_bool scan2_exp_primary(const Env env, const Exp_Primary* pri
     const Value v = prim_value(env, prim->d.var);
     if(v)
       SET_FLAG(v, used);
-  }
+  } else if(prim->primary_type == ae_primary_array && prim->d.array->exp)
+    return scan2_exp(env, prim->d.array->exp);
   return GW_OK;
 }