]> Nishi Git Mirror - gwion.git/commitdiff
:art: Use valuefrom
authorfennecdjay <astor.jeremie@wanadoo.fr>
Thu, 26 Sep 2019 00:11:54 +0000 (02:11 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Thu, 26 Sep 2019 00:11:54 +0000 (02:11 +0200)
include/value.h
src/parse/did_you_mean.c
src/parse/scan0.c
src/parse/scan1.c
src/parse/scan2.c

index 14cf3d9d1cf13dd158b2681ae1bbd92f969240dc..2f592d39ceee25ac32032a659f166a46ce86fcc4 100644 (file)
@@ -20,4 +20,5 @@ struct Value_ {
 };
 
 ANEW ANN Value new_value(MemPool p, const Type type, const m_str name);
+ANN void valuefrom(const Env, struct ValueFrom_*);
 #endif
index bfb959f159c275192386ef6d1cc3ecbacb7b33ec..d46dcd778c995dfb14ad793578643632e2633099 100644 (file)
@@ -3,6 +3,7 @@
 #include "gwion_util.h"
 #include "gwion_ast.h"
 #include "oo.h"
+#include "env.h"
 #include "nspc.h"
 #include "value.h"
 #include "env.h"
index 43d8ba52328b03990bc8bf9e1dc661e738c2b165..6e08e540091deea169aa84ee31dd87c076d1a153 100644 (file)
@@ -230,10 +230,7 @@ ANN m_bool scan0_union_def(const Env env, const Union_Def udef) {
     const Type t = union_type(env, nspc, udef->type_xid ?: udef->xid,
        !!udef->type_xid);
     udef->value = new_value(env->gwion->mp, t, s_name(udef->xid));
-// set owner ?
-    udef->value->from->owner_class = env->class_def;
-    udef->value->from->owner = nspc;
-    udef->value->from->ctx = env->context;
+    valuefrom(env, udef->value->from);
     nspc_add_value(nspc, udef->xid, udef->value);
     add_type(env, nspc, t);
     SET_FLAG(t, scan1 | ae_flag_union);
@@ -259,9 +256,7 @@ ANN m_bool scan0_union_def(const Env env, const Union_Def udef) {
     const Symbol sym = insert_symbol(name);
     const Type t = union_type(env, nspc, sym, 1);
     udef->value = new_value(env->gwion->mp, t, s_name(sym));
-    udef->value->from->owner_class = env->class_def;
-    udef->value->from->owner = nspc;
-    udef->value->from->ctx = env->context;
+    valuefrom(env, udef->value->from);
     nspc_add_value(nspc, udef->xid, udef->value);
     add_type(env, nspc, t);
     SET_FLAG(udef->value, checked | udef->flag);
index 7c3672fa85e6156e4e6f2a783411bd1fd436532b..092f6fb22e3c405a947c494a9d213bbed8637c6a 100644 (file)
@@ -105,10 +105,8 @@ ANN m_bool scan1_exp_decl(const Env env, const Exp_Decl* decl) {
     if(!env->scope->depth && !env->class_def)
       SET_FLAG(v, global);
     v->d.ptr = var->addr;
-// set from ?
-    v->from->owner = !env->func ? env->curr : NULL;
-    v->from->owner_class = env->scope->depth ? NULL : env->class_def;
-    v->from->ctx = env->context;
+    if(!env->scope->depth)
+      valuefrom(env, v->from);
   } while((list = list->next));
   ((Exp_Decl*)decl)->type = decl->list->self->value->type;
   if(global)
@@ -239,14 +237,11 @@ ANN m_bool scan1_enum_def(const Env env, const Enum_Def edef) {
   do {
     CHECK_BB(already_defined(env, list->xid, edef->pos))
     const Value v = new_value(env->gwion->mp, edef->t, s_name(list->xid));
+    valuefrom(env, v->from);
     if(env->class_def) {
-      v->from->owner_class = env->class_def;
       SET_FLAG(v, static);
       SET_ACCESS(edef, v)
     }
-// set from ?
-    v->from->owner = env->curr;
-    v->from->ctx = env->context;
     SET_FLAG(v, const | ae_flag_enum | ae_flag_checked);
     nspc_add_value(edef->t->e->owner, list->xid, v);
     vector_add(&edef->values, (vtype)v);
index b3f4f81e41edf27355e50809207216a9901c97ac..ca1544d86b81f272511413685fb534c8e5aaf11b 100644 (file)
@@ -70,11 +70,9 @@ ANN static m_bool scan2_args(const Env env, const Func_Def f) {
 
 ANN static Value scan2_func_assign(const Env env, const Func_Def d,
     const Func f, const Value v) {
-// set from ?
-  v->from->owner = env->curr;
-  v->from->ctx = env->context;
+  valuefrom(env, v->from);
   SET_FLAG(v, func | ae_flag_const);
-  if(!(v->from->owner_class = env->class_def))
+  if(!env->class_def)
     SET_FLAG(v, global);
   else {
     if(GET_FLAG(f, member))