]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve check_subscript
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 1 Oct 2019 23:12:21 +0000 (01:12 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 1 Oct 2019 23:12:21 +0000 (01:12 +0200)
include/parse.h
src/lib/opfunc.c
src/parse/check.c

index a3da97f2fd8ef3a14467cdc53ac4397fae812bea..8b41eed8302b821b379af8f7993a0630eb25a632 100644 (file)
@@ -90,4 +90,5 @@ xxx_cdef(traverse)
 
 __attribute__((returns_nonnull))
 ANN Type get_type(const Type t);
+ANN m_bool check_subscripts(const Env, const Array_Sub);
 #endif
index c3060eeae5535acb62682015a92dc9541f4dce62..db560281d71c9ac06dbf9b8a0573dc856ba1173b 100644 (file)
@@ -90,7 +90,6 @@ OP_CHECK(opck_post) {
   return post->exp->type;
 }
 
-ANN m_bool check_exp_array_subscripts(const Env env, const Exp exp);
 OP_CHECK(opck_new) {
   const Exp_Unary* unary = (Exp_Unary*)data;
   SET_FLAG(unary->td, ref);
@@ -101,7 +100,7 @@ OP_CHECK(opck_new) {
     ERR_N(td_pos(unary->td), _("can't use 'new' on ref type '%s'\n"), t->name)
   UNSET_FLAG(unary->td, ref);
   if(unary->td->array)
-    CHECK_BO(check_exp_array_subscripts(env, unary->td->array->exp))
+    CHECK_BO(check_subscripts(env, unary->td->array))
   return t;
 }
 
index eecbe7c220f01f01153585091e96b33f5491759a..a517c1142a23df5c180e88ca2b21eb5a06f480f9 100644 (file)
@@ -54,11 +54,12 @@ ANN static inline m_bool check_implicit(const Env env, const Exp e, const Type t
 }
 
 
-ANN m_bool check_exp_array_subscripts(Env env, Exp exp) {
-  CHECK_OB(check_exp(env, exp))
-  do if(isa(exp->type, env->gwion->type[et_int]) < 0)
-      ERR_B(exp->pos, _("incompatible array subscript type '%s' ..."), exp->type->name)
-  while((exp = exp->next));
+ANN m_bool check_subscripts(Env env, const Array_Sub array) {
+  CHECK_OB(check_exp(env, array->exp))
+  Exp e = array->exp;
+  do if(isa(e->type, env->gwion->type[et_int]) < 0)
+      ERR_B(e->pos, _("incompatible array subscript type '%s' ..."), e->type->name)
+  while((e = e->next));
   return GW_OK;
 }
 
@@ -164,7 +165,7 @@ ANN Type check_exp_decl(const Env env, const Exp_Decl* decl) {
     if(env->class_def && !env->scope->depth && env->class_def->e->parent)
       CHECK_BO(check_exp_decl_parent(env, var))
     if(var->array && var->array->exp)
-      CHECK_BO(check_exp_array_subscripts(env, var->array->exp))
+      CHECK_BO(check_subscripts(env, var->array))
     if(env->class_def)  {
       if(GET_FLAG(decl->td, member)) {
         decl_member(env, v);
@@ -1397,7 +1398,7 @@ ANN static m_bool check_class_parent(const Env env, const Class_Def cdef) {
   const Type parent = cdef->base.type->e->parent;
   const Type_Decl *td = cdef->base.ext;
   if(td->array)
-    CHECK_BB(check_exp_array_subscripts(env, td->array->exp))
+    CHECK_BB(check_subscripts(env, td->array))
   if(parent->e->def && !GET_FLAG(parent, check))
     CHECK_BB(scanx_parent(parent, traverse_cdef, env))
   if(GET_FLAG(parent, typedef))