]> Nishi Git Mirror - gwion.git/commitdiff
:art: Test compile.c
authorfennecdjay <astor.jeremie@wanadoo.fr>
Wed, 9 Oct 2019 18:31:04 +0000 (20:31 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Wed, 9 Oct 2019 18:31:04 +0000 (20:31 +0200)
include/compile.h
src/compile.c
tests/import/compile_file.c [new file with mode: 0644]
tests/import/compile_string.c [new file with mode: 0644]
tests/import/get_module.c [new file with mode: 0644]
tests/import/rm_me.gw [new file with mode: 0644]

index 7e8649888a8c245123fe12bb5e08c35107eebfda..acb61b928ee5d315494f03f7508697d6842749b1 100644 (file)
@@ -1,9 +1,6 @@
 #ifndef __COMPILE
 #define __COMPILE
-//m_bool check_filename(struct Gwion_* vm, const m_str filename);
-m_bool check_string(struct Gwion_* vm, const m_str filename, const m_str data);
-//m_bool check_file(struct Gwion_* vm, const m_str filename, FILE* file);
 m_uint compile_filename(struct Gwion_* vm, const m_str filename);
 m_uint compile_string(struct Gwion_* vm, const m_str filename, const m_str data);
-//m_uint compile_file(struct Gwion_* vm, const m_str filename, FILE* file);
+m_uint compile_file(struct Gwion_* vm, const m_str filename, FILE* file);
 #endif
index e17d5c1fc38fd5b49f6685ff9676e4e20cafa1bb..04615afefb360b281fc095b9db5ff50ef23d0b8d 100644 (file)
@@ -53,7 +53,7 @@ static inline void compiler_error(MemPool p, const struct Compiler* c) {
 static void compiler_clean(MemPool p, const struct Compiler* c) {
   if(c->name)
     xfree(c->name);
-  if(c->file)
+  if(c->type == COMPILE_MSTR && c->file)
     fclose(c->file);
   if(c->ast)
     free_ast(p, c->ast);
@@ -64,9 +64,11 @@ static m_bool _compiler_open(struct Compiler* c) {
     m_str name = c->name;
     c->name = realpath(name, NULL);
     xfree(name);
-    return c->name ? !!(c->file = fopen(c->name, "r")) : -1;
-  } else if(c->type == COMPILE_MSTR)
-    return (c->file = fmemopen(c->data, strlen(c->data) + 1, "r")) ? 1 : - 1;
+    return c->name ? !!(c->file = fopen(c->name, "r")) : GW_ERROR;
+  } else if(c->type == COMPILE_MSTR) {
+    c->file = fmemopen(c->data, strlen(c->data), "r");
+    return c->file ? GW_OK : GW_ERROR;
+  }
   return GW_OK;
 }
 
@@ -127,9 +129,7 @@ m_uint compile_string(struct Gwion_* vm, const m_str filename, const m_str data)
   return compile(vm, &c);
 }
 
-/*
 m_uint compile_file(struct Gwion_* vm, const m_str filename, FILE* file) {
-  struct Compiler c = { .base=filename, .type=COMPILE_MSTR, .file=file };
+  struct Compiler c = { .base=filename, .type=COMPILE_FILE, .file=file };
   return compile(vm, &c);
 }
-*/
diff --git a/tests/import/compile_file.c b/tests/import/compile_file.c
new file mode 100644 (file)
index 0000000..32e91d2
--- /dev/null
@@ -0,0 +1,26 @@
+#include "gwion_util.h"
+#include "gwion_ast.h"
+#include "oo.h"
+#include "vm.h"
+#include "env.h"
+#include "type.h"
+#include "object.h"
+#include "instr.h"
+#include "gwion.h"
+#include "value.h"
+#include "operator.h"
+#include "import.h"
+#include "gwi.h"
+#include "compile.h"
+
+#define _XOPEN_SOURCE 500
+#include <string.h>
+GWION_IMPORT(compile_string) {
+  DECL_OB(FILE *,file, = fopen("rm_me.gw", "w+"))
+  fprintf(file, "1;");
+  rewind(file);
+  const m_bool ret = compile_file(gwi->gwion, __FILE__, file) ?
+      GW_OK : GW_ERROR;
+  fclose(file);
+  return ret;
+}
diff --git a/tests/import/compile_string.c b/tests/import/compile_string.c
new file mode 100644 (file)
index 0000000..3d0cb0e
--- /dev/null
@@ -0,0 +1,21 @@
+#include "gwion_util.h"
+#include "gwion_ast.h"
+#include "oo.h"
+#include "vm.h"
+#include "env.h"
+#include "type.h"
+#include "object.h"
+#include "instr.h"
+#include "gwion.h"
+#include "value.h"
+#include "operator.h"
+#include "import.h"
+#include "gwi.h"
+#include "compile.h"
+
+#define _XOPEN_SOURCE 500
+#include <string.h>
+GWION_IMPORT(compile_string) {
+  return compile_string(gwi->gwion, __FILE__, "1;") ?
+      GW_OK : GW_ERROR;
+}
diff --git a/tests/import/get_module.c b/tests/import/get_module.c
new file mode 100644 (file)
index 0000000..2d58570
--- /dev/null
@@ -0,0 +1,33 @@
+#include <stdlib.h>
+#include <unistd.h>
+#include "gwion_util.h"
+#include "gwion_ast.h"
+#include "oo.h"
+#include "env.h"
+#include "vm.h"
+#include "type.h"
+#include "value.h"
+#include "object.h"
+#include "driver.h"
+#include "gwion.h"
+#include "instr.h"
+#include "operator.h"
+#include "import.h"
+#include "gwi.h"
+#include "plug.h"
+
+GWMODSTR(dummy_module);
+
+GWMODINI(dummy_module) {
+  puts(__func__);
+  return NULL;
+}
+GWMODEND(dummy_module) {
+  puts(__func__);
+}
+
+GWION_IMPORT(dummy_module) {
+  GWI_OB(get_module(gwi->gwion, "dummy"))
+  get_module(gwi->gwion, "non_existant_module");
+  return GW_OK;
+}
diff --git a/tests/import/rm_me.gw b/tests/import/rm_me.gw
new file mode 100644 (file)
index 0000000..6912615
--- /dev/null
@@ -0,0 +1 @@
+1;
\ No newline at end of file