]> Nishi Git Mirror - gwion.git/commitdiff
:art: Add global types array
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 24 Sep 2019 20:41:15 +0000 (22:41 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 24 Sep 2019 20:41:15 +0000 (22:41 +0200)
include/gwion.h
include/import.h
include/type.h
src/gwion.c
src/lib/engine.c
src/lib/import.c
src/plug.c

index 18046403f3171517cfc3a8015f894b9e7c763332..f7393e36462cc161a5bbf2293c8cec48b85fc6f2 100644 (file)
@@ -15,6 +15,7 @@ struct Gwion_ {
   struct GwionData_ *data;
   SymTable *st;
   MemPool mp;
+  Type *type;
 };
 
 ANN m_bool gwion_ini(const Gwion, struct Arg_*);
index 8db7f5742307d2bc159dacbdd1582268b7df2c66..d3bc83e97d27015a9888586f30fc0959bb0f36c6 100644 (file)
@@ -33,6 +33,7 @@ typedef struct Gwi_* Gwi;
 ANN VM* gwi_vm(const Gwi);
 ANN2(1,2) ANEW Type gwi_mk_type(const Gwi, const m_str, const m_uint, const Type);
 ANN m_int gwi_add_type(const Gwi gwi, Type type);
+ANN m_int gwi_set_global_type(const Gwi gwi, const Type type, const type_enum te);
 ANN2(1,2)m_int gwi_class_ini(const Gwi gwi, const Type type, const f_xtor pre_ctor, const f_xtor dtor);
 ANN m_int gwi_class_ext(const Gwi gwi, Type_Decl* td);
 ANN m_int gwi_class_end(const Gwi gwi);
index e55834ac29e1ae26fff267c3d5dde778378739b2..05f79e1f3c71720f8209dfb3fb012f9b383fce63 100644 (file)
@@ -52,5 +52,11 @@ ANN static inline m_bool is_fptr(const Type t) {
   return isa(actual_type(t), t_fptr) > 0;
 }
 ANN m_uint get_depth(const Type type);
-#endif
 
+typedef enum {
+  et_void, et_int, et_bool, et_float, et_dur, et_time, et_now, et_complex, et_polar, et_vec3, et_vec4,
+  et_null, et_object, et_shred, et_fork, et_event, et_ugen, et_string, et_ptr, et_array, zt_gack,
+  et_function, et_fptr, et_varloop, et_vararg, et_lambda, et_class, et_union, et_undefined, et_auto, et_tuple,
+  MAX_TYPE
+} type_enum;
+#endif
index e26a9202907c316d942ca3476da99b0c96c44bcd..e59489751d9b5e0e703058970cb619cec99870fe 100644 (file)
@@ -57,6 +57,7 @@ ANN VM* gwion_cpy(const VM* src) {
   gwion->data = src->gwion->data;
   gwion->st = src->gwion->st;
   gwion->mp = src->gwion->mp;
+  gwion->type = src->gwion->type;
   return gwion->vm;
 }
 
@@ -72,6 +73,7 @@ ANN m_bool gwion_ini(const Gwion gwion, Arg* arg) {
   gwion->env->gwion = gwion;
   gwion->vm->bbq->si = new_soundinfo(gwion->mp);
   gwion->data = new_gwiondata(gwion->mp);
+  gwion->type = xmalloc(MAX_TYPE * sizeof(struct Type_));
   pass_default(gwion);
   arg->si = gwion->vm->bbq->si;
   const m_bool ret = arg_parse(gwion, arg);
@@ -108,6 +110,7 @@ ANN void gwion_end(const Gwion gwion) {
   free_plug(gwion);
   free_gwiondata(gwion->mp, gwion->data);
   free_symbols(gwion->st);
+  xfree(gwion->type);
   mempool_end(gwion->mp);
 }
 
index 03e67e03b2c34290aea095d373e302231bd2cda9..824f6114b95a77fe0f2de5417b3bc6fa72884c94 100644 (file)
@@ -45,7 +45,7 @@ ANN static m_bool import_core_libs(const Gwi gwi) {
   GWI_BB(gwi_add_type(gwi, t_auto))
   SET_FLAG(t_class, abstract);
   GWI_OB((t_void  = gwi_mk_type(gwi, "void", 0, NULL)))
-  GWI_BB(gwi_add_type(gwi, t_void))
+  GWI_BB(gwi_set_global_type(gwi, t_void, et_void))
   GWI_OB((t_null  = gwi_mk_type(gwi, "@null",  SZ_INT, NULL)))
   GWI_BB(gwi_add_type(gwi, t_null))
   GWI_OB((t_function = gwi_mk_type(gwi, "@function", SZ_INT, NULL)))
index 6391fce571c786761a8fa9dcac4c49dece19f262..e9c8cefad943808ad386b516b576aa773fa066be 100644 (file)
@@ -198,6 +198,12 @@ ANN m_int gwi_add_type(const Gwi gwi, const Type type) {
   return (m_int)type->xid;
 }
 
+ANN m_int gwi_set_global_type(const Gwi gwi, const Type type, const type_enum te) {
+  GWI_BB(gwi_add_type(gwi, type))
+  gwi->gwion->type[te] = type;
+  return GW_OK;
+}
+
 ANN2(1,2) static void import_class_ini(const Env env, const Type type,
     const f_xtor pre_ctor, const f_xtor dtor) {
   type->nspc = new_nspc(env->gwion->mp, type->name);
index e3611a15d41fc66ebfbb50cfa79af5d7a6d63847..19313806cb579bda5dd19c61b27aad722668f08b 100644 (file)
@@ -14,6 +14,7 @@
 #include "operator.h"
 #include "instr.h"
 #include "object.h"
+#include "type.h"
 #include "import.h"
 
 typedef m_bool (*import)(Gwi);