]> Nishi Git Mirror - gwion.git/commitdiff
:art: gwi_register_pass
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 12 Nov 2019 12:38:37 +0000 (13:38 +0100)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 12 Nov 2019 12:38:37 +0000 (13:38 +0100)
include/import/special.h
include/pass.h
src/import/special.c
src/lib/array.c
src/lib/func.c
src/lib/tuple.c
src/lib/vararg.c
tests/import/pass.c [new file with mode: 0644]
tests/sh/import.sh

index 428a3f82af510d75c38ae944e030444f4a456862..afb9654db3864900664baf9c1323569dfc31aa13 100644 (file)
@@ -1,9 +1,12 @@
 #ifndef __IMPORT_SPECIAL
 #define __IMPORT_SPECIAL
 
+#include "pass.h"
+
 #define FREEARG(a) ANN void a(Instr instr  NUSED, void *gwion NUSED)
 typedef void (*f_freearg)(Instr, void*);
-ANN void register_freearg(const Gwi, const f_instr, const f_freearg);
+ANN void gwi_register_freearg(const Gwi, const f_instr, const f_freearg);
+ANN void gwi_register_pass(const Gwi, const m_str, const compilation_pass);
 ANN void gwi_reserve(const Gwi, const m_str);
 typedef struct SpecialId_* SpecialId;
 ANN void gwi_specialid(const Gwi gwi, const m_str id, const SpecialId);
index b8bc7e6561fc471c3376004e459e1ec9b78431e9..e4552089c99e58fbaa14cd35d481decd3859e74a 100644 (file)
@@ -1,5 +1,7 @@
 #ifndef __GWIONPASS
 #define __GWIONPASS
+
+// change this to gwion ?
 typedef m_bool (*compilation_pass)(Env, Ast);
 
 ANN void pass_register(const Gwion, const m_str, const compilation_pass);
index 4a7be1402c2fe2c6ce3fb6bddae8da15f7bc80c2..87133f8b2accb9218c0da12d34be6ea9bd4ae19c 100644 (file)
 #include "gwi.h"
 #include "parser.h"
 #include "specialid.h"
+#include "pass.h"
 
-ANN void register_freearg(const Gwi gwi, const f_instr _exec, const f_freearg _free) {
+ANN void gwi_register_freearg(const Gwi gwi, const f_instr _exec, const f_freearg _free) {
   map_set(&gwi->gwion->data->freearg, (vtype)_exec, (vtype)_free);
 }
 
+ANN void gwi_register_pass(const Gwi gwi, const m_str name, const compilation_pass pass) {
+  pass_register(gwi->gwion, name, pass);
+}
+
 ANN void gwi_reserve(const Gwi gwi, const m_str str) {
   vector_add(&gwi->gwion->data->reserved, (vtype)insert_symbol(gwi->gwion->st, str));
 }
index e352c22d2f82de3b8b9bc187aa102316c300e0f8..ad5a5a0e82ae9098f87885a1063eeb4a155b20fd 100644 (file)
@@ -219,7 +219,7 @@ GWION_IMPORT(array) {
   GWI_BB(gwi_oper_add(gwi, opck_array_cast))
   GWI_BB(gwi_oper_emi(gwi, opem_basic_cast))
   GWI_BB(gwi_oper_end(gwi, "$", NULL))
-  register_freearg(gwi, ArrayAlloc, freearg_array);
+  gwi_register_freearg(gwi, ArrayAlloc, freearg_array);
   return GW_OK;
 }
 
index 3130b193d5e236d4d284c72fda7e677983638971..4e1043050fd7e377ad4816a1ac2c7c883c0eebc3 100644 (file)
@@ -314,8 +314,8 @@ GWION_IMPORT(func) {
   GWI_BB(gwi_oper_add(gwi, opck_spork))
   GWI_BB(gwi_oper_emi(gwi, opem_spork))
   GWI_BB(gwi_oper_end(gwi, "fork", NULL))
-  register_freearg(gwi, SporkIni, freearg_xork);
-  register_freearg(gwi, ForkIni, freearg_xork);
-  register_freearg(gwi, DotTmpl, freearg_dottmpl);
+  gwi_register_freearg(gwi, SporkIni, freearg_xork);
+  gwi_register_freearg(gwi, ForkIni, freearg_xork);
+  gwi_register_freearg(gwi, DotTmpl, freearg_dottmpl);
   return GW_OK;
 }
index 9182190d6db6b68bdf3ecc1ebc5ad0d6b80ad552..832474ecacce12d9b314cfde6fdbca9f220abba2 100644 (file)
@@ -366,6 +366,6 @@ SET_FLAG(t_tuple, checked | ae_flag_scan2 | ae_flag_check | ae_flag_emit);
   GWI_BB(gwi_oper_add(gwi, opck_at_tuple))
   GWI_BB(gwi_oper_emi(gwi, opem_at_tuple))
   GWI_BB(gwi_oper_end(gwi, "@=>", NULL))
-  register_freearg(gwi, TupleUnpack, freearg_tuple_at);
+  gwi_register_freearg(gwi, TupleUnpack, freearg_tuple_at);
   return GW_OK;
 }
index ba52aa5c9900411524d26d91068682ccef5935af..69621f9bdf75ab80704e5460c8ceba77be6573e9 100644 (file)
@@ -113,7 +113,7 @@ GWION_IMPORT(vararg) {
   GWI_BB(gwi_oper_ini(gwi, "Object", "VarObject", NULL))
   GWI_BB(gwi_oper_add(gwi, at_varobj))
   GWI_BB(gwi_oper_end(gwi, "@=>", VarargAssign))
-  register_freearg(gwi, VarargIni, freearg_vararg);
+  gwi_register_freearg(gwi, VarargIni, freearg_vararg);
   struct SpecialId_ spid = { .type=t_vararg, .exec=RegPushImm, .is_const=1, .ck=idck_vararg};
   gwi_specialid(gwi, "vararg", &spid);
   return GW_OK;
diff --git a/tests/import/pass.c b/tests/import/pass.c
new file mode 100644 (file)
index 0000000..72be714
--- /dev/null
@@ -0,0 +1,19 @@
+#include "gwion_util.h"
+#include "gwion_ast.h"
+#include "gwion_env.h"
+#include "vm.h"
+#include "object.h"
+#include "instr.h"
+#include "gwion.h"
+#include "operator.h"
+#include "import.h"
+#include "gwi.h"
+
+ANN static m_bool pass(Env nv NUSED, Ast ast NUSED) {
+  return GW_OK;
+}
+
+GWION_IMPORT(array_test) {
+  gwi_register_pass(gwi, "dummy", pass);
+  return GW_OK;
+}
index 8ee56bf299aac8cb8687e99e6fc99321940dac50..e4b35b689dd623e5f626acb05f36873540c9af94 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/bash
-# [test] #73
+# [test] #74
 
 n=0
 [ "$1" ] && n="$1"