From 33395d6a887c73d7056644f2ec5998dcf88f3e48 Mon Sep 17 00:00:00 2001 From: fennecdjay Date: Fri, 12 Apr 2019 11:37:31 +0200 Subject: [PATCH] :bug: Array bug fixes --- src/emit/emit.c | 3 +-- src/parse/check.c | 3 ++- src/parse/scan1.c | 2 ++ src/parse/scan2.c | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/emit/emit.c b/src/emit/emit.c index 81fdbf9c..5403af73 100644 --- a/src/emit/emit.c +++ b/src/emit/emit.c @@ -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; } diff --git a/src/parse/check.c b/src/parse/check.c index 27609151..85369e03 100644 --- a/src/parse/check.c +++ b/src/parse/check.c @@ -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) { diff --git a/src/parse/scan1.c b/src/parse/scan1.c index 7c2d40c4..3cf598b5 100644 --- a/src/parse/scan1.c +++ b/src/parse/scan1.c @@ -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; } diff --git a/src/parse/scan2.c b/src/parse/scan2.c index b53811c0..ca8e30c8 100644 --- a/src/parse/scan2.c +++ b/src/parse/scan2.c @@ -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; } -- 2.43.0