]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve Shred
authorfennecdjay <astor.jeremie@wanadoo.fr>
Thu, 11 Jul 2019 13:59:38 +0000 (15:59 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Thu, 11 Jul 2019 13:59:38 +0000 (15:59 +0200)
examples/implicit_fptr.gw [new file with mode: 0644]
examples/implicit_fptr_class.gw [new file with mode: 0644]
examples/implicit_fptr_tmpl.gw [new file with mode: 0644]
examples/shred.gw
src/lib/shred.c

diff --git a/examples/implicit_fptr.gw b/examples/implicit_fptr.gw
new file mode 100644 (file)
index 0000000..5184a94
--- /dev/null
@@ -0,0 +1,8 @@
+typedef void t_ptr();
+fun void test(t_ptr p) {
+   <<< p >>>;
+}
+fun void test() {
+}
+
+test => test;
diff --git a/examples/implicit_fptr_class.gw b/examples/implicit_fptr_class.gw
new file mode 100644 (file)
index 0000000..8c1f0fc
--- /dev/null
@@ -0,0 +1,11 @@
+class C {
+typedef void t_ptr();
+fun void test(t_ptr p) {
+   <<< p >>>;
+}
+fun void test() {
+}
+
+test => test;
+}
+C c;
diff --git a/examples/implicit_fptr_tmpl.gw b/examples/implicit_fptr_tmpl.gw
new file mode 100644 (file)
index 0000000..621474f
--- /dev/null
@@ -0,0 +1,8 @@
+typedef void t_ptr<~A~>();
+fun void test(t_ptr p) {
+   <<< p >>>;
+}
+fun void t<~A~>() {
+}
+
+t => test;
index 29c873c16fb1834891d865f7230363ebbee2a34d..cb479da39fac0179e4cfb064b712e7743e7d839e 100644 (file)
@@ -12,3 +12,10 @@ for (int i; i < me.args(); i++)
 #!me.exit();
 #! call to non existant arg
 <<< me.arg(-1) >>>;
+<<< me.dir()  >>>;
+<<< me.path() >>>;
+<<< me.name() >>>;
+
+<<< me.code_dir()  >>>;
+<<< me.code_path() >>>;
+<<< me.code_name() >>>;
index 3e23a30c43af07be20644417489d1954f90ba52c..41a6a722685c04f7684c2019be8724e4b12b9df6 100644 (file)
@@ -102,6 +102,15 @@ static MFUN(shred_arg) {
 #define PATH_CHR '\\'
 #endif
 
+#define describe_name(name, src) \
+static MFUN(shred##name##_name) { \
+  const VM_Shred s = ME(o); \
+  const m_str str = code_name((src), 0); \
+  *(m_uint*)RETURN = (m_uint)new_string(shred->info->mp, shred, str); \
+}
+describe_name(, s->info->name)
+describe_name(_code, s->code->name)
+
 #define describe_path_and_dir(name, src) \
 static MFUN(shred##name##_path) { \
   const VM_Shred s = ME(o); \
@@ -254,12 +263,18 @@ GWION_IMPORT(shred) {
   gwi_func_arg(gwi, "int", "n");
   CHECK_BB(gwi_func_end(gwi, 0))
 
+  gwi_func_ini(gwi, "string", "name", shred_name);
+  CHECK_BB(gwi_func_end(gwi, 0))
+
   gwi_func_ini(gwi, "string", "path", shred_path);
   CHECK_BB(gwi_func_end(gwi, 0))
 
   gwi_func_ini(gwi, "string", "dir", shred_dir);
   CHECK_BB(gwi_func_end(gwi, 0))
 
+  gwi_func_ini(gwi, "string", "code_name", shred_code_name);
+  CHECK_BB(gwi_func_end(gwi, 0))
+
   gwi_func_ini(gwi, "string", "code_path", shred_code_path);
   CHECK_BB(gwi_func_end(gwi, 0))