]> Nishi Git Mirror - gwion.git/commitdiff
:art: Introduce nspc_add_xxx_front()
authorfennecdjay <astor.jeremie@wanadoo.fr>
Mon, 23 Sep 2019 22:14:27 +0000 (00:14 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Mon, 23 Sep 2019 22:14:27 +0000 (00:14 +0200)
include/nspc.h
src/lib/object.c
src/lib/tuple.c
src/oo/env.c
src/oo/type.c
src/parse/check.c
src/parse/scan0.c
src/parse/template.c
src/parse/type_decl.c

index 2814097d12227efc39ade16f0b529e92ba6fb360..cc59e8aaec0cb56f7f907e9e3db83eea8db06693 100644 (file)
@@ -47,6 +47,9 @@ describe_lookup1(A, b)                                                         \
 static inline ANN void nspc_add_##b(const Nspc n, const Symbol s, const A a) { \
   scope_add(n->info->b, (vtype)s, (vtype)a);                                  \
 }                                                                              \
+static inline ANN void nspc_add_##b##_front(const Nspc n, const Symbol s, const A a) { \
+  map_set(&n->info->b->map, (vtype)s, (vtype)a);                                       \
+}                                                                                    \
 ANN static inline void nspc_push_##b(MemPool p, const Nspc n) { scope_push(p, n->info->b); }\
 ANN static inline void nspc_pop_##b (MemPool p, const Nspc n) { scope_pop (p, n->info->b); }\
 describe_lookups(A, b)
index fc5cad828335b8e3520f126f805fef83c014e084..a3c47ddb7774579e7ab47e31a5e6ad650397b91a 100644 (file)
@@ -163,7 +163,7 @@ static inline Type new_force_type(MemPool p, const Type t, const Symbol sym) {
     ADD_REF(ret->nspc)
   ret->name = s_name(sym);
   ret->flag = t->flag | ae_flag_force;
-  map_set(&t->e->owner->info->type->map, (vtype)sym, (vtype)ret);
+  nspc_add_type_front(t->e->owner, sym, ret);
   return ret;
  }
 
index a7d94469b5c630b54ae93cc9842529184f8bb61e..f6d50ba73d07d54cd85bdbdd63e9be307ba4c7fa 100644 (file)
@@ -304,7 +304,7 @@ ANN Type tuple_type(const Env env, const Vector v, const loc_t pos) {
   SET_FLAG(cdef->base.type, abstract);
   cdef->base.type->e->tuple->list = tlbase;
   CHECK_BO(traverse_cdef(env, cdef))
-  map_set(&env->curr->info->type->map, (vtype)sym, (vtype)cdef->base.type);
+  nspc_add_type_front(env->curr, sym, cdef->base.type);
   return cdef->base.type;
 }
 
index 0dda4c35fd928f7f763f60265265fe37f01efe01..0b8e059839a3cfabdd75cab453c3dd807c5ecd6c 100644 (file)
@@ -86,7 +86,7 @@ ANN void env_add_type(const Env env, const Type type) {
   v_type->e->d.base_type = type;
   SET_FLAG(type, builtin);
   const Symbol sym = insert_symbol(type->name);
-  map_set(&env->curr->info->type->map, (vtype)sym, (vtype)type);
+  nspc_add_type_front(env->curr, sym, type);
   const Value v = new_value(env->gwion->mp, v_type, s_name(sym));
   SET_FLAG(v, checked | ae_flag_const | ae_flag_global | ae_flag_builtin);
   nspc_add_value(env->curr, insert_symbol(type->name), v);
index 87c9d9001173bd327fa43c34826367def3647930..418d0fb4682d5d498b5c52e2b05dd1a8276c0b56 100644 (file)
@@ -124,7 +124,7 @@ ANN Type array_type(const Env env, const Type base, const m_uint depth) {
   ADD_REF(t->nspc);
   SET_FLAG(t, checked);
   t->e->owner = base->e->owner;
-  map_set(&base->e->owner->info->type->map, (vtype)sym, (vtype)t);
+  nspc_add_type_front(base->e->owner, sym, t);
   return t;
 }
 
index 30a4638e1fd98333a2b946740a915fe6217753e3..33b194fbfafc0a703adb7cc2f070015a1a5dac5c 100644 (file)
@@ -244,7 +244,7 @@ ANN static inline Value prim_str_value(const Env env, const Symbol sym) {
   if(v)
     return v;
   const Value value = new_value(env->gwion->mp, t_string, s_name(sym));
-  map_set(&env->global_nspc->info->value->map, (vtype)sym, (vtype)value);
+  nspc_add_value_front(env->global_nspc, sym, value);
   return value;
 }
 
@@ -573,7 +573,7 @@ CHECK_BO(check_call(env, exp))
         m_func = find_func_match(env, fbase->func, exp->args);
         nspc_pop_type(env->gwion->mp, env->curr);
         if(!value && m_func)
-          map_set(&v->owner->info->type->map, (vtype)sym, (vtype)actual_type(m_func->value_ref->type));
+          nspc_add_type_front(v->owner, sym, actual_type(m_func->value_ref->type));
       }
       free_fptr_def(env->gwion->mp, fptr); // ???? related
     }
index b05e8d764175bd7e50d562c0c40213b9250387cc..6036a898f18fafd817e894160077466617867abc 100644 (file)
@@ -15,7 +15,7 @@
 #include "parser.h"
 
 static inline void add_type(const Env env, const Nspc nspc, const Type t) {
-  map_set(&nspc->info->type->map, (m_uint)insert_symbol(t->name), (m_uint)t);
+  nspc_add_type_front(nspc, insert_symbol(t->name), t);
 }
 
 ANN static Value mk_class(const Env env, const Type base) {
@@ -25,7 +25,7 @@ ANN static Value mk_class(const Env env, const Type base) {
   t->e->d.base_type = base;
   v->owner = base->e->owner;
   SET_FLAG(v, const | ae_flag_checked);
-  map_set(&base->e->owner->info->value->map, (vtype)sym, (vtype)v);
+  nspc_add_value_front(base->e->owner, sym, v);
   return v;
 }
 
index 2293c36627d854f062bfb86181bddff80096b3f6..11cc1942fc1427663b6dcb54af4c1291a103b983 100644 (file)
@@ -201,7 +201,7 @@ ANN Type scan_type(const Env env, const Type t, const Type_Decl* type) {
       a->base.tmpl = mk_tmpl(env, t, t->e->def->base.tmpl, type->types);
       if(t->e->parent !=  t_union) {
         CHECK_BO(scan0_class_def(env, a))
-        map_set(&env->curr->info->type->map, (vtype)a->base.xid, (vtype)a->base.type);
+        nspc_add_type_front(env->curr, a->base.xid, a->base.type);
       } else {
         a->union_def = new_union_def(env->gwion->mp, a->list,
           loc_cpy(env->gwion->mp, t->e->def->pos));
@@ -232,7 +232,7 @@ ANN Type scan_type(const Env env, const Type t, const Type_Decl* type) {
       ret->e->parent = t;
       ret->name = s_name(sym);
       SET_FLAG(ret, func);
-      map_set(&t->e->owner->info->type->map, (vtype)sym, (vtype)ret);
+      nspc_add_type_front(t->e->owner, sym, ret);
       const Func_Def def = cpy_func_def(env->gwion->mp, t->e->d.func->def);
       const Func func = ret->e->d.func = new_func(env->gwion->mp, s_name(sym), def);
       const Value value = new_value(env->gwion->mp, ret, s_name(sym));
@@ -243,7 +243,7 @@ ANN Type scan_type(const Env env, const Type t, const Type_Decl* type) {
       func->value_ref = value;
       func->def->base->tmpl = mk_tmpl(env, t, t->e->d.func->def->base->tmpl, type->types);
       def->base->func = func;
-      map_set(&t->e->owner->info->value->map, (vtype)sym, (vtype)value); // to base ?
+      nspc_add_value_front(t->e->owner, sym, value);
       return ret;
     }
     ERR_O(type->xid->pos,
index d361f3171c2edaf2b0c816adcfe22aa2f8144b2a..21675e7a0fcfb702597f9f5bd87d574424048c81 100644 (file)
@@ -29,7 +29,7 @@ ANN Type type_nonnull(const Env env, const Type base) {
   t->name = s_name(sym);
   t->flag = base->flag;
   SET_FLAG(t, nonnull);
-  map_set(&t->e->owner->info->type->map, (vtype)sym, (vtype)t);
+  nspc_add_type_front(t->e->owner, sym, t);
   return t;
 }