]> Nishi Git Mirror - gwion.git/commitdiff
:art: mark arg value
authorJérémie Astor <fennecdjay@gmail.com>
Fri, 29 Apr 2022 21:37:52 +0000 (23:37 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Fri, 29 Apr 2022 21:37:52 +0000 (23:37 +0200)
include/env/value.h
src/parse/check.c
src/parse/scan2.c

index dcae4d854b06e0728b473a957cc9bbe9c3699c81..67d269425d6662fd96bd33ff0f67d67a638e7f47 100644 (file)
@@ -19,7 +19,8 @@ enum vflag {
   vflag_member   = 1 << 6,
   vflag_inner    = 1 << 7, // value is in a scope
   vflag_release  = 1 << 8,
-  vflag_assigned = 1 << 9
+  vflag_assigned = 1 << 9,
+  vflag_arg      = 1 << 10
   //  vflag_used = 1 << 3
 } __attribute__((packed));
 
index d1338583c434895f117b5cc28caab00ed63bcd53..814f18ca7085b4d1a471123c30de7562c90f38ec 100644 (file)
@@ -306,7 +306,7 @@ ANN static Value check_non_res_value(const Env env, const Symbol *data) {
     return v;
   } else if (SAFE_FLAG(env->class_def, global) ||
              (env->func && GET_FLAG(env->func->def->base, global))) {
-    if (!value || !is_value_global(env, value))
+    if (!value || !(is_value_global(env, value) || vflag(value, vflag_arg)))
       ERR_O(prim_pos(data),
             _("non-global variable '%s' used from global function/class."),
             s_name(var))
index 6ce4a975b004d5d777322ed623b9651cbca26016..e45c28a26048308349c19b427d98e4b000fc0278 100644 (file)
@@ -49,14 +49,13 @@ ANN m_bool scan2_exp_decl(const Env env, const Exp_Decl *decl) {
 
 ANN static m_bool scan2_args(const Func_Def f) {
   Arg_List   args   = f->base->args;
-  const bool global = GET_FLAG(f->base, global);
   for(uint32_t i = 0; i < args->len; i++) {
     Arg *arg = mp_vector_at(args, Arg, i);
     const Value v   = arg->var_decl.value;
     v->from->offset = f->stack_depth;
-    //f->stack_depth += v->type->size;
+    // when can there be no type?
     f->stack_depth += v->type ? v->type->size : SZ_INT;
-    if (global) SET_FLAG(v, global);
+    set_vflag(v, vflag_arg);
   }
   return GW_OK;
 }