]> Nishi Git Mirror - gwion.git/commitdiff
:art: prepare gack
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 24 Sep 2019 20:47:17 +0000 (22:47 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 24 Sep 2019 20:47:51 +0000 (22:47 +0200)
include/gack.h
src/lib/engine.c
src/lib/gack.c
src/oo/type.c
src/parse/check.c
src/parse/type_decl.c
src/vm/vm.c

index 54fc7fcb763816bd71eda5e6675829c69c5cdd28..bafbba2774d8c003eb96415d4e2e1b4b1392744c 100644 (file)
@@ -1,4 +1,4 @@
 #ifndef __GACK
 #define __GACK
-ANN void gack(const m_bit*, const Instr);
+ANN void gack(const Gwion, const m_bit*, const Instr);
 #endif
index 824f6114b95a77fe0f2de5417b3bc6fa72884c94..9780f1ad8ee25244897c4caff614bf2a3dbc0d5c 100644 (file)
@@ -44,7 +44,7 @@ ANN static m_bool import_core_libs(const Gwi gwi) {
   GWI_OB((t_auto = gwi_mk_type(gwi, "auto", SZ_INT, NULL))) // size = SZ_INT to enable declarations
   GWI_BB(gwi_add_type(gwi, t_auto))
   SET_FLAG(t_class, abstract);
-  GWI_OB((t_void  = gwi_mk_type(gwi, "void", 0, NULL)))
+  const Type t_void  = gwi_mk_type(gwi, "void", 0, NULL);
   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))
index 3749a3db3dc9fcebd85c29e6112d857d40448e1a..174be2fcbd7b3f61d5a71c432ce08be14fb1f213 100644 (file)
@@ -10,6 +10,8 @@
 #include "func.h"
 #include "object.h"
 #include "instr.h"
+#include "gwion.h"
+#include "gack.h"
 
 static void print_type(const Type type) {
   const m_bool is_func = isa(type, t_function) > 0 && isa(type, t_fptr) < 0;
@@ -104,7 +106,7 @@ ANN static void print_prim(const Type type, const m_bit* stack) {
    print_float(*(m_float*)stack);
 }
 
-ANN void gack(const m_bit* reg, const Instr instr) {
+ANN void gack(const Gwion gwion, const m_bit* reg, const Instr instr) {
   m_uint offset = instr->m_val;
   const Vector v = (Vector)instr->m_val2;
   const m_uint size = vector_size(v);
@@ -120,7 +122,7 @@ ANN void gack(const m_bit* reg, const Instr instr) {
       print_type(type);
     else if(isa(type, t_class) > 0)
       print_type(type->e->d.base_type);
-    else if(isa(type, t_void) > 0)
+    else if(isa(type, gwion->type[et_void]) > 0)
       print_string1("void");
     else
       print_prim(type, (reg-offset));
index 418d0fb4682d5d498b5c52e2b05dd1a8276c0b56..be611145b5dc5806f9bc5bf62b3da3346708b92f 100644 (file)
@@ -197,6 +197,6 @@ ANN m_uint get_depth(const Type type) {
   return depth;
 }
 
-Type t_void, t_int, t_bool, t_float, t_dur, t_time, t_now, t_complex, t_polar, t_vec3, t_vec4,
+Type t_int, t_bool, t_float, t_dur, t_time, t_now, t_complex, t_polar, t_vec3, t_vec4,
   t_null, t_object, t_shred, t_fork, t_event, t_ugen, t_string, t_ptr, t_array, t_gack,
   t_function, t_fptr, t_varloop, t_vararg, t_lambda, t_class, t_union, t_undefined, t_auto, t_tuple;
index b8cca619c92d577631db3702906843e644670b01..18b3343d15c30344dec539ee3248e47cb2dd6365 100644 (file)
@@ -340,7 +340,7 @@ ANN static Type prim_##name(const Env env NUSED, const Exp_Primary * primary NUS
 }
 describe_prim_xxx(num, t_int)
 describe_prim_xxx(float, t_float)
-describe_prim_xxx(nil, t_void)
+describe_prim_xxx(nil, env->gwion->type[et_void])
 describe_prim_xxx(unpack, t_tuple)
 
 typedef Type (*_type_func)(const Env, const void*);
@@ -491,7 +491,7 @@ ANN2(1,2) static Func find_func_match_actual(const Env env, Func func, const Exp
 
 ANN2(1, 2) static Func find_func_match(const Env env, const Func up, const Exp exp) {
   Func func;
-  const Exp args = (exp && isa(exp->type, t_void) < 0) ? exp : NULL;
+  const Exp args = (exp && isa(exp->type, env->gwion->type[et_void]) < 0) ? exp : NULL;
   if((func = find_func_match_actual(env, up, args, 0, 1)) ||
      (func = find_func_match_actual(env, up, args, 1, 1)) ||
      (func = find_func_match_actual(env, up, args, 0, 0)) ||
@@ -769,7 +769,7 @@ ANN static Type check_lambda_call(const Env env, const Exp_Call *exp) {
   if(env->class_def)
     SET_FLAG(l->def, member);
   ((Exp_Call*)exp)->m_func = l->def->base->func;
-  return l->def->base->ret_type ?: (l->def->base->ret_type = t_void);
+  return l->def->base->ret_type ?: (l->def->base->ret_type = env->gwion->type[et_void]);
 }
 
 ANN Type check_exp_call1(const Env env, const Exp_Call *exp) {
@@ -1074,7 +1074,7 @@ stmt_func_xxx(auto, Stmt_Auto,, do_stmt_auto(env, stmt))
 ANN static m_bool check_stmt_return(const Env env, const Stmt_Exp stmt) {
   if(!env->func)
     ERR_B(stmt_self(stmt)->pos, _("'return' statement found outside function definition"))
-  DECL_OB(const Type, ret_type, = stmt->val ? check_exp(env, stmt->val) : t_void)
+  DECL_OB(const Type, ret_type, = stmt->val ? check_exp(env, stmt->val) : env->gwion->type[et_void])
   if(!env->func->def->base->ret_type) {
     assert(isa(env->func->value_ref->type, t_lambda) > 0);
     env->func->def->base->ret_type = ret_type;
index 21675e7a0fcfb702597f9f5bd87d574424048c81..e01067669464bd460b5d2e38e3fb973b94f67b4f 100644 (file)
@@ -38,7 +38,7 @@ ANN Type type_decl_resolve(const Env env, const Type_Decl* td) {
   DECL_OO(const Type, t, = scan_type(env, base, td))
   const Type ret = !td->array ? t : array_type(env, t, td->array->depth);
   if(GET_FLAG(td, nonnull)) {
-    if(isa(ret, t_void) > 0)
+    if(isa(ret, env->gwion->type[et_void]) > 0)
       ERR_O(td_pos(td), _("void types can't be nonnull."))
     if(isa(ret, t_object) < 0 && isa(ret, t_function) < 0)
       return ret;
index 0ef90a006105fff2094ea4da583b2ee4477aaee7..4c127ff03a3bd0326db56fc17ff773dfc6832235 100644 (file)
@@ -821,7 +821,7 @@ gcend:
     _release(a.obj, shred);
   DISPATCH()
 gack:
-  gack(reg, (Instr)VAL);
+  gack(vm->gwion, reg, (Instr)VAL);
   DISPATCH()
 other:
 shred->code = code;