]> Nishi Git Mirror - gwion.git/commitdiff
:art: Remove t_vararg
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 8 Mar 2020 16:53:06 +0000 (17:53 +0100)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 8 Mar 2020 16:54:58 +0000 (17:54 +0100)
include/env/type.h
include/specialid.h
src/lib/vararg.c

index 89fbb445779960c77cdecbaacd650291634a477b..deaa596bbd79e7e57e849b2871e146e689431840 100644 (file)
@@ -49,7 +49,7 @@ ANN m_uint get_depth(const Type type);
 typedef enum {
   et_void, et_int, et_bool, et_char, et_float,
   et_null, et_object, et_shred, et_fork, et_event, et_ugen, et_string, et_ptr, et_array, et_gack,
-  et_function, et_fptr, et_varloop, et_vararg, et_lambda, et_class, et_union, et_undefined, et_auto,
+  et_function, et_fptr, et_varloop, et_lambda, et_class, et_union, et_undefined, et_auto,
   MAX_TYPE
 } type_enum;
 #endif
index 69c5809e9a8340c70fbf313f09012a71c5ee7099..8deeb2fe48da816dbe7fb4031f71e36f68632dd6 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef __SPECIALID
 #define __SPECIALID
 
-//typedef struct SpecialId_* SpecialId;
 struct SpecialId_;
 typedef Type (*idck)(const Env, const Exp_Primary*);
 typedef Instr (*idem)(const Emitter, const Exp_Primary*);
@@ -19,6 +18,7 @@ struct SpecialId_ {
 
 ANN static inline Type specialid_type(const Env env,
     struct SpecialId_ *spid, const Exp_Primary* prim) {
+  exp_self(prim)->type = spid->type;
   if(spid->is_const)
     exp_self(prim)->meta = ae_meta_value;
   return spid->ck ? spid->ck(env, prim) : spid->type;
index e57026c6e82f277d76ce7e8cbc96fd057c675c53..e8b76e47ba59ec0117f80378583a37539285a74b 100644 (file)
@@ -105,7 +105,7 @@ static FREEARG(freearg_vararg) {
 
 static ID_CHECK(idck_vararg) {
   if(env->func && GET_FLAG(env->func->def, variadic))
-    return env->gwion->type[et_vararg];
+    return exp_self(prim)->type;
   ERR_O(exp_self(prim)->pos, _("'vararg' must be used inside variadic function"))
 }
 
@@ -162,7 +162,6 @@ GWION_IMPORT(vararg) {
   GWI_BB(gwi_set_global_type(gwi, t_varloop, et_varloop))
   const Type t_vararg  = gwi_class_spe(gwi, "@Vararg", 0);
   gwi_gack(gwi, t_vararg, gack_vararg);
-  gwi->gwion->type[et_vararg] = t_vararg; // use func
   GWI_BB(gwi_union_ini(gwi, NULL, NULL))
   GWI_BB(gwi_union_add(gwi, "@VarLoop",  "start"))
   GWI_BB(gwi_union_add(gwi, "@VarLoop",  "end"))