]> Nishi Git Mirror - gwion.git/commitdiff
:art: Use gwi_class_spe
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 5 Nov 2019 20:16:12 +0000 (21:16 +0100)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 5 Nov 2019 20:16:12 +0000 (21:16 +0100)
include/import/cdef.h
plug
src/import/cdef.c
src/lib/complex.c
src/lib/vec.c

index e02cde16ee4e459c2bc2612a89eac6dde645f377..032854930482b53327d2cbe78e4702a374afee7a 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __IMPORT_CLASS
 #define __IMPORT_CLASS
 ANN2(1,2) Type gwi_class_ini(const Gwi gwi, const m_str, const m_str parent);
+ANN2(1,2) Type gwi_class_spe(const Gwi gwi, const m_str, const m_uint size);
 ANN2(1) void gwi_class_xtor(const Gwi gwi, const f_xtor ctor, const f_xtor dtor);
 ANN m_int gwi_class_end(const Gwi gwi);
 #endif
diff --git a/plug b/plug
index d0ae737367053420e17b8494a6a1922e1196758e..a2fd43e0ce60fec336694a2a6be0a90d09cfc072 160000 (submodule)
--- a/plug
+++ b/plug
@@ -1 +1 @@
-Subproject commit d0ae737367053420e17b8494a6a1922e1196758e
+Subproject commit a2fd43e0ce60fec336694a2a6be0a90d09cfc072
index 11a6b7d17381d9818ebcc66271ba9b17f1277808..c45eb33106ee7a650be9b10edc8036c6cd04e608 100644 (file)
@@ -44,7 +44,6 @@ ANN2(1,2) static void import_class_ini(const Env env, const Type t) {
   env_push_type(env, t);
 }
 
-
 ANN2(1) void gwi_class_xtor(const Gwi gwi, const f_xtor ctor, const f_xtor dtor) {
   const Type t = gwi->gwion->env->class_def;
   if(ctor)
@@ -53,6 +52,13 @@ ANN2(1) void gwi_class_xtor(const Gwi gwi, const f_xtor ctor, const f_xtor dtor)
     mk_xtor(gwi->gwion->mp, t, (m_uint)dtor, ae_flag_dtor);
 }
 
+ANN static Type type_finish(const Gwi gwi, const Type t) {
+  SET_FLAG(t, scan1 | ae_flag_scan2 | ae_flag_check | ae_flag_emit);
+  gwi_add_type(gwi, t);
+  import_class_ini(gwi->gwion->env, t);
+  return t;
+}
+
 ANN2(1,2) Type gwi_class_ini(const Gwi gwi, const m_str name, const m_str parent) {
   struct ImportCK ck = { .name=name };
   CHECK_BO(check_typename_def(gwi, &ck))
@@ -63,7 +69,7 @@ ANN2(1,2) Type gwi_class_ini(const Gwi gwi, const m_str name, const m_str parent
   const Type p = known_type(gwi->gwion->env, td); // check
   if(tmpl)
     nspc_pop_type(gwi->gwion->mp, gwi->gwion->env->curr);
-  const Type t = new_type(gwi->gwion->mp, gwi->gwion->env->scope->type_xid, s_name(ck.sym), p);
+  const Type t = new_type(gwi->gwion->mp, ++gwi->gwion->env->scope->type_xid, s_name(ck.sym), p);
   t->e->def = new_class_def(gwi->gwion->mp, 0, ck.sym, td, NULL, loc(gwi));
   t->e->def->base.tmpl = tmpl;
   t->e->def->base.type = t;
@@ -72,11 +78,14 @@ ANN2(1,2) Type gwi_class_ini(const Gwi gwi, const m_str name, const m_str parent
     SET_FLAG(t, typedef);
   if(ck.tmpl)
     SET_FLAG(t, template);
-  else
-    SET_FLAG(t, scan1 | ae_flag_scan2 | ae_flag_check | ae_flag_emit);
-  gwi_add_type(gwi, t);
-  import_class_ini(gwi->gwion->env, t);
-  return t;
+  return type_finish(gwi, t);
+}
+
+ANN Type gwi_class_spe(const Gwi gwi, const m_str name, const m_uint size) {
+  CHECK_OO(str2sym(gwi, name))
+  const Type t = new_type(gwi->gwion->mp, ++gwi->gwion->env->scope->type_xid, name, NULL);
+  t->size = size;
+  return type_finish(gwi, t);
 }
 
 ANN m_int gwi_class_end(const Gwi gwi) {
index a3fba347eda634edc844688ecb4e1ac8a8f75dce..e2efac55acd1b5beac3f75de7bbb13b4963bd2f0 100644 (file)
@@ -126,8 +126,7 @@ static GACK(gack_polar) {
 
 GWION_IMPORT(complex) {
 // should be special
-  const Type t_complex = gwi_class_ini(gwi, "complex", NULL);
-  t_complex->e->parent = NULL;
+  const Type t_complex = gwi_class_spe(gwi, "complex", SZ_COMPLEX);
   GWI_BB(gwi_gack(gwi, t_complex, gack_complex))
   gwi->gwion->type[et_complex] = t_complex; // use func
        gwi_item_ini(gwi, "float", "re");
@@ -136,8 +135,7 @@ GWION_IMPORT(complex) {
   GWI_BB(gwi_item_end(gwi,   ae_flag_member, NULL))
   GWI_BB(gwi_class_end(gwi))
 // should be special
-  const Type t_polar   = gwi_class_ini(gwi,  "polar", NULL);
-  t_polar->e->parent = NULL;
+  const Type t_polar   = gwi_class_spe(gwi, "polar", SZ_COMPLEX);
   gwi->gwion->type[et_polar] = t_polar;
   GWI_BB(gwi_gack(gwi, t_polar, gack_polar))
   GWI_BB(gwi_item_ini(gwi, "float", "mod"))
index 1a246182037c93b1a2cd7a9bb41383b89a131fdd..4ac56f667ab82e53c0937558063f379b96ab8e0c 100644 (file)
@@ -164,9 +164,7 @@ static GACK(gack_vec3) {
 }
 
 GWION_IMPORT(vec3) {
-  const Type t_vec3 = gwi_class_ini(gwi, "Vec3", NULL);
-t_vec3->size = SZ_VEC3;
-t_vec3->e->parent = NULL;
+  const Type t_vec3 = gwi_class_spe(gwi, "Vec3", SZ_VEC3);
   gwi->gwion->type[et_vec3] = t_vec3;
   GWI_BB(gwi_gack(gwi, t_vec3, gack_vec3))
   vecx_base(gwi);
@@ -314,10 +312,7 @@ static GACK(gack_vec4) {
 }
 
 GWION_IMPORT(vec4) {
-// should be special (gwi, "Vec4", SZ_VEC4)
-  const Type t_vec4 = gwi_class_ini(gwi, "Vec4", NULL);
-t_vec4->size = SZ_VEC4;
-t_vec4->e->parent = NULL;
+  const Type t_vec4 = gwi_class_spe(gwi, "Vec4", SZ_VEC4);
   gwi->gwion->type[et_vec4] = t_vec4;
   GWI_BB(gwi_gack(gwi, t_vec4, gack_vec4))
   vecx_base(gwi);