]> Nishi Git Mirror - gwion.git/commitdiff
:art: Various Improvments
authorfennecdjay <astor.jeremie@wanadoo.fr>
Wed, 10 Apr 2019 16:04:59 +0000 (18:04 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Wed, 10 Apr 2019 16:04:59 +0000 (18:04 +0200)
ast
src/arg.c
src/main.c
tests/error/array_assign_exp.gw [new file with mode: 0644]
tests/error/array_mutable.gw [new file with mode: 0644]

diff --git a/ast b/ast
index b032c9500ff15c8b20a01f3abcb3e1751d4b465f..c32bbfb803ba875ce098b18f5f4e09f97040a5f2 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit b032c9500ff15c8b20a01f3abcb3e1751d4b465f
+Subproject commit c32bbfb803ba875ce098b18f5f4e09f97040a5f2
index ed3c154246782adb9e1c7ff759f5c3b40ee9a346..cff9b59c4e6200846cd42dde65fd790f0adfd4e4 100644 (file)
--- a/src/arg.c
+++ b/src/arg.c
@@ -15,16 +15,28 @@ ANN static inline void config_end(const Vector config) {
   }
 }
 
+ANN static m_str plug_dir(void) {
+  const m_str home = getenv("HOME");
+  const size_t sz = strlen(home);
+  const m_str pdir = "/.gwplug";
+  m_str plug_dir = (m_str)xmalloc(sz + strlen(pdir) + 1);
+  strcpy(plug_dir, home);
+  strcpy(plug_dir + sz, pdir);
+  return plug_dir;
+}
+
 ANN static void arg_init(Arg* arg) {
   vector_init(&arg->add);
   vector_init(&arg->lib);
   vector_init(&arg->mod);
   vector_init(&arg->config);
-  vector_add(&arg->lib, (vtype)GWPLUG_DIR);
+//  vector_add(&arg->lib, (vtype)GWPLUG_DIR);
+  vector_add(&arg->lib, (vtype)plug_dir());
 }
 
 ANN void arg_release(Arg* arg) {
   vector_release(&arg->add);
+  xfree((m_str)vector_front(&arg->lib));
   vector_release(&arg->lib);
   vector_release(&arg->mod);
   config_end(&arg->config);
index 7201af6fd66791e804a9b75424cc600e2fdf3bc7..4bae788907f668b2963e8888185633945e01fc6e 100644 (file)
 #include<locale.h>
 #endif
 
-static jmp_buf jmp;
-static struct Gwion_ gwion;
+//static jmp_buf jmp;
+//static struct Gwion_ gwion;
 
 static void sig(int unused NUSED) {
-  gwion.vm->bbq->is_running = 0;
-  longjmp(jmp, 1);
+//  gwion.vm->bbq->is_running = 0;
+//  longjmp(jmp, 1);
+#ifdef BUILD_ON_WINDOWS
+  exit(EXIT_FAILURE);
+#else
+  pthread_exit(NULL);
+#endif
 }
 
 int main(int argc, char** argv) {
@@ -26,10 +31,12 @@ int main(int argc, char** argv) {
   Arg arg = { .argc=argc, .argv=argv, .loop=-1 };
   signal(SIGINT, sig);
   signal(SIGTERM, sig);
+  struct Gwion_ gwion = {};
   const m_bool ini = gwion_ini(&gwion, &arg);
   arg_release(&arg);
-  if(setjmp(jmp) == 0 && ini > 0)
+  if(/*setjmp(jmp) == 0 && */ini > 0)
     gwion_run(&gwion);
   gwion_end(&gwion);
+  THREAD_RETURN(EXIT_SUCCESS);
   return EXIT_SUCCESS;
 }
diff --git a/tests/error/array_assign_exp.gw b/tests/error/array_assign_exp.gw
new file mode 100644 (file)
index 0000000..15365ef
--- /dev/null
@@ -0,0 +1,2 @@
+// [contains] do not provide array
+[1,2,3,4] @=> int loop[1];
diff --git a/tests/error/array_mutable.gw b/tests/error/array_mutable.gw
new file mode 100644 (file)
index 0000000..744b193
--- /dev/null
@@ -0,0 +1,2 @@
+// [contains] non-mutable
+[1,2,3,4] @=> [1][1];