]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve import system 220/head
authorfennecdjay <fennecdjay@gwion.tk>
Sun, 8 Nov 2020 15:52:26 +0000 (16:52 +0100)
committerfennecdjay <fennecdjay@gwion.tk>
Sun, 8 Nov 2020 15:52:26 +0000 (16:52 +0100)
src/env/env.c
src/import/import_checker.c
src/import/import_tdef.c
src/lib/engine.c
src/lib/shred.c
src/lib/string.c
src/lib/vararg.c

index b7fba8159d48bcf5f76b60f4823c6373341f7fa0..b4729d3d284c24f5ce29edb83bf15f23024491d5 100644 (file)
@@ -79,17 +79,14 @@ ANN void env_pop(const Env env, const m_uint scope) {
 }
 
 ANN void env_add_type(const Env env, const Type type) {
-  const Type v_type = type_copy(env->gwion->mp, env->gwion->type[et_class]);
-  type_addref(v_type);
-  v_type->e->d.base_type = type;
+  type->e->owner = env->curr;
+  type->e->owner_class = env->class_def; // t owner_class ?
   const Symbol sym = insert_symbol(type->name);
   nspc_add_type_front(env->curr, sym, type);
-  const Value v = new_value(env->gwion->mp, v_type, s_name(sym));
-  SET_FLAG(v, const | ae_flag_global);
-  set_vflag(v, vflag_valid | vflag_builtin);
-  nspc_add_value(env->curr, insert_symbol(type->name), v);
-  v->from->owner = type->e->owner = env->curr;
-  v->from->owner_class = type->e->owner_class = env->class_def; // t owner_class ?
+  const Value v = mk_class(env, type);
+  SET_FLAG(v, global);
+  set_vflag(v, vflag_builtin);
+  set_tflag(type, tflag_scan0 | tflag_scan1 | tflag_scan2 | tflag_check | tflag_emit);
   type->xid = ++env->scope->type_xid;
 }
 
index efd1db709a20cb78101a334a1d9c968dbaf46c27..4b556234350facf0914176921ffa3e2784c944ba 100644 (file)
@@ -218,10 +218,8 @@ ANN Type_Decl* str2decl(const Gwion gwion, const m_str str, const loc_t pos) {
 ANN Type str2type(const Gwion gwion, const m_str str, const loc_t pos) {
   DECL_OO(Type_Decl *, td, = str2decl(gwion, str, pos))
   const Type t = known_type(gwion->env, td);
-  if(t)
-    return t;
   free_type_decl(gwion->mp, td);
-  return NULL;
+  return t;
 }
 
 ANN static inline m_bool ac_finish(const Gwion gwion, const struct AC *ac) {
index 32006abc9f4d317bf73cb9cce9f606a253d37e0d..cfd2b7bf53e2c0a60a1f05b515233bf7da542dbf 100644 (file)
@@ -34,6 +34,7 @@ ANN Type gwi_typedef_end(const Gwi gwi, const ae_flag flag) {
   gwi->ck->tmpl = NULL;
   const m_bool ret = traverse_type_def(gwi->gwion->env, tdef);
   const Type t = tdef->type;
+  set_tflag(t, tflag_scan0 | tflag_scan1 | tflag_scan2 | tflag_check | tflag_emit);
   free_type_def(gwi->gwion->mp, tdef);
   ck_end(gwi);
   return ret > 0 ? t : NULL;
index a438d67e55d7d7fe8c11d363411720d77054c186..9d55f6ebf4081e9625847f78a5b5e2e58f3dfcb3 100644 (file)
@@ -77,7 +77,6 @@ ANN static m_bool import_core_libs(const Gwi gwi) {
   set_tflag(t_class, tflag_infer);
   GWI_BB(gwi_set_global_type(gwi, t_class, et_class))
   GWI_BB(gwi_gack(gwi, t_class, gack_class)) // not working yet
-  GWI_BB(gwi_add_type(gwi, t_class))
   GWI_BB(gwi_oper_ini(gwi, (m_str)OP_ANY_TYPE, (m_str)OP_ANY_TYPE, NULL))
   GWI_BB(gwi_oper_add(gwi, opck_object_dot))
   GWI_BB(gwi_oper_emi(gwi, opem_object_dot))
index e0948c8ac59d1081deb6a2be594b5b339b589bb4..a9c9ddcb605a39b9038720364d9618466059397c 100644 (file)
@@ -374,7 +374,7 @@ GWION_IMPORT(shred) {
   GWI_BB(gwi_func_end(gwi, shred_now, ae_flag_none))
   GWI_BB(gwi_class_end(gwi))
   SET_FLAG(t_shred, abstract | ae_flag_final);
-  gwi_set_global_type(gwi, t_shred, et_shred);
+  gwi->gwion->type[et_shred] = t_shred;
 
   struct SpecialId_ spid = { .type=t_shred, .exec=RegPushMe, .is_const=1 };
   gwi_specialid(gwi, "me", &spid);
index 7893c8387c44a99fb2583d4e49f9ccc6b87e8953..db68d0ed4a1fe588ab5538033fa600edaf9a18a0 100644 (file)
@@ -377,9 +377,9 @@ static MFUN(string_erase) {
 
 GWION_IMPORT(string) {
   const Type t_string = gwi_class_ini(gwi, "string", NULL);
+  gwi->gwion->type[et_string] = t_string; // use func
   gwi_class_xtor(gwi, string_ctor, NULL);
   GWI_BB(gwi_gack(gwi, t_string, gack_string))
-  gwi->gwion->type[et_string] = t_string; // use func
 
   gwi_item_ini(gwi, "@internal", "@data");
   GWI_BB(gwi_item_end(gwi,   ae_flag_const, NULL))
index c5a4789867f0e719c55d363bc4d7730c41b9b30a..41177b4832ea6bc157e3a6db5e99e43fce97a2b5 100644 (file)
@@ -173,7 +173,7 @@ GWION_IMPORT(vararg) {
   GWI_BB(gwi_func_end(gwi, mfun_vararg_cpy, ae_flag_none))
   GWI_BB(gwi_class_end(gwi))
   SET_FLAG(t_vararg, abstract | ae_flag_final);
-  GWI_BB(gwi_set_global_type(gwi, t_vararg, et_vararg))
+  gwi->gwion->type[et_vararg] = t_vararg;
   GWI_BB(gwi_oper_ini(gwi, "nonnull Vararg", (m_str)OP_ANY_TYPE, NULL))
   GWI_BB(gwi_oper_add(gwi, opck_vararg_cast))
   GWI_BB(gwi_oper_emi(gwi, opem_vararg_cast))