]> Nishi Git Mirror - gwion.git/commitdiff
:art: Move templates to the right, C part
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 13 Sep 2020 20:56:45 +0000 (22:56 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Sun, 13 Sep 2020 20:56:45 +0000 (22:56 +0200)
20 files changed:
ast
src/import/checker.c
src/lib/ptr.c
src/lib/shred.c
tests/import/class_template_invalid.c
tests/import/fptr_tmpl.c
tests/import/fptr_tmpl_fail.c
tests/import/func_fail3.c
tests/import/func_fail4.c
tests/import/func_tmpl.c
tests/import/func_tmpl_fail.c
tests/import/invalid_names.c
tests/import/invalid_names3.c
tests/import/op_already_imported.gw
tests/import/typedef_fail.c
tests/import/typedef_tmpl.c
tests/import/union_tmpl.c
tests/import/union_tmpl_fail.c
tests/import/union_tmpl_fail2.c
tests/import/union_tmpl_fail3.c

diff --git a/ast b/ast
index 80bf35b35aebe23fc18ebc57b5db627ba26a0167..39ad675551cd32f3ad2125f3cf9afe6ac416c99e 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit 80bf35b35aebe23fc18ebc57b5db627ba26a0167
+Subproject commit 39ad675551cd32f3ad2125f3cf9afe6ac416c99e
index 3a584d8d6e8bc48ce530dab2f0d1434db5fd0920..d371e8ab92832ef9a407759ac72cd927dc750b7d 100644 (file)
@@ -59,7 +59,7 @@ ANN static Symbol __str2sym(const Gwi gwi, struct td_checker *tdc) {
 
 ANN static inline Symbol _str2sym(const Gwi gwi, struct td_checker *tdc, const m_str path) {
   const Symbol sym = __str2sym(gwi, tdc);
-  if(*tdc->str)
+  if(*tdc->str && *tdc->str != '<')
     GWI_ERR_O(_("illegal character '%c' in path '%s'."), *tdc->str, path)
   return sym;
 }
@@ -126,14 +126,11 @@ ANN static ID_List __tmpl_list(const Gwi gwi, struct td_checker *tdc) {
 
 ANN m_bool check_typename_def(const Gwi gwi, ImportCK *ck) {
   struct td_checker tdc = { .str= ck->name };
+  if(!(ck->sym = _str2sym(gwi, &tdc, tdc.str)))
+    return GW_ERROR;
   ID_List il = __tmpl_list(gwi, &tdc);
   if(il == (ID_List)GW_ERROR)
     return GW_ERROR;
-  if(!(ck->sym = _str2sym(gwi, &tdc, tdc.str))) {
-    if(il)
-      free_id_list(gwi->gwion->mp, il);
-    return GW_ERROR;
-  }
   ck->tmpl = il;
   ck->name = s_name(ck->sym);
   return GW_OK;
@@ -194,7 +191,7 @@ ANN Type_List __str2tl(const Gwi gwi, struct td_checker *tdc) {
   return new_type_list(gwi->gwion->mp, td, next);
 }
 
-ANN Type_List td_tmpl(const Gwi gwi, struct td_checker *tdc) {
+ANN static Type_List td_tmpl(const Gwi gwi, struct td_checker *tdc) {
   if(*tdc->str != '<')
     return NULL; // GW_PASS
   ++tdc->str;
@@ -224,22 +221,14 @@ ANN static void ac_add_exp(struct AC *ac, const Exp exp) {
 
 
 ANN Type_Decl* _str2decl(const Gwi gwi, struct td_checker *tdc) {
+  DECL_OO(const Symbol, sym, = __str2sym(gwi, tdc))
+  struct AC ac = { .str = tdc->str };
+  CHECK_BO(ac_run(gwi, &ac))
+  tdc->str = ac.str;
   Type_List tl = td_tmpl(gwi, tdc);
   if(tl == (Type_List)GW_ERROR)
     return NULL;
   Type_Decl *next = NULL;
-  const Symbol sym = __str2sym(gwi, tdc);
-  if(!sym) {
-    if(tl)
-      free_type_list(gwi->gwion->mp, tl);
-    return NULL;
-  }
-  struct AC ac = { .str = tdc->str };
-  if(ac_run(gwi, &ac) < 0) {
-    if(tl)free_type_list(gwi->gwion->mp, tl);
-    return NULL;
-  }
-  tdc->str = ac.str;
   if(*tdc->str == '.') {
     ++tdc->str;
     if(!(next =  _str2decl(gwi, tdc))) {
index 7b43095b9100505dbe536fc48e07154eb6d25703..9395b348305c0ebb16643170e860a683b1bb11a3 100644 (file)
@@ -158,8 +158,7 @@ GWION_IMPORT(ptr) {
   GWI_BB(gwi_oper_ini(gwi, "@Ptr", NULL, NULL))
   GWI_BB(gwi_oper_add(gwi, opck_ptr_scan))
   GWI_BB(gwi_oper_end(gwi, "@scan", NULL))
-  const Type t_ptr = gwi_class_ini(gwi, "<~A~>Ptr", "@Ptr");
-//  const Type t_ptr = gwi_class_ini(gwi, "<~A~>Ptr", NULL);
+  const Type t_ptr = gwi_class_ini(gwi, "Ptr<~A~>", "@Ptr");
   gwi->gwion->type[et_ptr] = t_ptr;
   GWI_BB(gwi_item_ini(gwi, "@internal", "@val"))
   GWI_BB(gwi_item_end(gwi, 0, NULL))
index 33dadda8370fce5325f46a56e18713dc4cf8d51f..d0a105c70e79f142277af801ec9b2b5899e4a39a 100644 (file)
@@ -403,7 +403,7 @@ GWION_IMPORT(shred) {
   GWI_BB(gwi_class_end(gwi))
   SET_FLAG((t_fork), abstract);
 
-  const Type t_typed = gwi_class_ini(gwi,  "<~A~>TypedFork", "Fork");
+  const Type t_typed = gwi_class_ini(gwi,  "TypedFork<~A~>", "Fork");
   gwi_item_ini(gwi, "A", "retval");
   GWI_BB((gwi_item_end(gwi, ae_flag_const, NULL)))
   GWI_BB(gwi_class_end(gwi))
index 0d61fc3bc345d3c129c4ba7969bdcba1dc750fba..e3c6335b7bc20d0f67980562b617fd9e9a01caac 100644 (file)
@@ -15,16 +15,16 @@ static m_int o_map_value;
 #define MAP_VAL(a) *((M_Object*)(a->data + o_map_value))
 
 GWION_IMPORT(class_template) {
-  GWI_OB(gwi_class_ini(gwi, "<~A,B~>ClassTemplate", NULL))
+  GWI_OB(gwi_class_ini(gwi, "ClassTemplate<~A,B~>", NULL))
     GWI_BB(gwi_item_ini(gwi, "A[]", "key"))
     GWI_BB((o_map_key = gwi_item_end(gwi, ae_flag_member | ae_flag_template, NULL)))
     GWI_BB(gwi_item_ini(gwi, "B[]", "value"))
     GWI_BB((o_map_value = gwi_item_end(gwi, ae_flag_member, NULL)))
-   GWI_BB(gwi_func_ini(gwi, "int", "<~C,D~>test"))
+   GWI_BB(gwi_func_ini(gwi, "int", "test<~C,D~>"))
    GWI_BB(gwi_func_end(gwi, (f_xfun)1, ae_flag_none))
 
   GWI_BB(gwi_class_end(gwi))
-  GWI_BB(gwi_item_ini(gwi, "<~Ptr<~int~>,int[]~>ClassTemplate", "testObject"))
+  GWI_BB(gwi_item_ini(gwi, "ClassTemplate<~<~int~>Ptr,int[]~>", "testObject"))
   GWI_BB(gwi_item_end(gwi, ae_flag_none, NULL))
   return GW_OK;
 }
index e9b6a8d33a8b47173f3abab45779b66a4d1d210a..6fdcc1d6030f4fe2b53ffc50f8daa2d3bf30f39c 100644 (file)
@@ -11,7 +11,7 @@
 GWION_IMPORT(typedef_test) {
   Type t_func_typedef;
   GWI_OB((t_func_typedef = gwi_mk_type(gwi, "FuncTypedef", SZ_INT , NULL)))
-  GWI_BB(gwi_fptr_ini(gwi, "int", "<~A~>test"))
+  GWI_BB(gwi_fptr_ini(gwi, "int", "test<~test~>"))
   GWI_OB(gwi_fptr_end(gwi, 0))
   return GW_OK;
 }
index 5ddd4a42d7f5708ec2aeb5fe75b8801e1dfc1835..2ec528c32ce4d47fb39588f2a6978b745ec85b3e 100644 (file)
@@ -9,7 +9,7 @@
 #include "import.h"
 
 GWION_IMPORT(typedef_test) {
-  GWI_BB(gwi_fptr_ini(gwi, "int~", "<~A~>test"))
+  GWI_BB(gwi_fptr_ini(gwi, "int~", "test<~A~>"))
   GWI_OB(gwi_fptr_end(gwi, 0))
   return GW_OK;
 }
index 3088d539cd876d5c72850322d2bb25be3a97b49e..09402e9a2dd8ecee805685778b1ee7fa16fd4f20 100644 (file)
@@ -10,7 +10,7 @@
 #include "instr.h"
 
 GWION_IMPORT(too_many_args) {
-  GWI_BB(gwi_func_ini(gwi, "<~int~>Ptr", "<~A~>test"))
+  GWI_BB(gwi_func_ini(gwi, "Ptr<~int~>", "test<~A~>"))
   GWI_BB(gwi_func_ini(gwi, "int", "test"))
   GWI_BB(gwi_func_arg(gwi, "int", "i[][]"))
   GWI_BB(gwi_func_end(gwi, (f_xfun)1, ae_flag_none))
index 9781f087b2be0d3d8754e534e2dcb8c7f7424fc5..06c7f384c2861f8ac344d144b95920e7838ccbdb 100644 (file)
@@ -10,7 +10,7 @@
 #include "instr.h"
 
 GWION_IMPORT(too_many_args) {
-  GWI_BB(gwi_func_ini(gwi, "<~int~>Ptr", "<~A~>test"))
+  GWI_BB(gwi_func_ini(gwi, "Ptr<~int~>", "test<~A~>"))
   GWI_BB(gwi_func_arg(gwi, "int", "i[][]"))
   GWI_BB(gwi_item_end(gwi, ae_flag_none, NULL))
   return GW_OK;
index edb848410cab965b332f4ece51ce1f7ee613850d..0214bd24a2a24fce620e8ed4306a054d2bb9c10b 100644 (file)
@@ -14,7 +14,7 @@ static SFUN(func_tmpl_xfun) {
 }
 
 GWION_IMPORT(func_tmpl) {
-  GWI_BB(gwi_func_ini(gwi, "int[]", "<~A~>test"))
+  GWI_BB(gwi_func_ini(gwi, "int[]", "test<~A~>"))
   GWI_BB(gwi_func_arg(gwi, "A", "i"))
   GWI_BB(gwi_func_end(gwi, func_tmpl_xfun, ae_flag_none))
   return GW_OK;
index ca5a35d357784ed4eb6c1694412b65511bd65852..f01dddad1c611116b7f6ab0157cd817197497358 100644 (file)
@@ -14,7 +14,7 @@ static SFUN(func_tmpl_xfun) {
 }
 
 GWION_IMPORT(func_tmpl) {
-  GWI_BB(gwi_func_ini(gwi, "voit", "<~A~>test"))
+  GWI_BB(gwi_func_ini(gwi, "voit", "test<~A~>"))
   GWI_BB(gwi_func_end(gwi, func_tmpl_xfun, ae_flag_none))
   return GW_OK;
 }
index 16b3b628a7a18aa40db7133723f58311cb7c08c0..66ec9711d00824d77bd6600e60df1d055d7ab974 100644 (file)
@@ -22,7 +22,7 @@ GWION_IMPORT(trig) {
   const Type t2 = gwi_mk_type(gwi, "T<a>", SZ_INT, NULL);
   gwi_add_type(gwi, t2);
 
-  const Type t3 = gwi_mk_type(gwi, "<~a~>T", SZ_INT, NULL);
+  const Type t3 = gwi_mk_type(gwi, "T<~a~>", SZ_INT, NULL);
   gwi_add_type(gwi, t3);
 
   return GW_OK;
index 11989406ef679b87dc21b54b3fddeb6b9a8055c0..02c7033afa1ec35cdeddd353dce45bf508dd185f 100644 (file)
@@ -13,6 +13,6 @@
 #include "gwi.h"
 
 GWION_IMPORT(trig) {
-  DECL_OB(const Type, t0, = gwi_mk_type(gwi, "<~a~>T", SZ_INT, NULL))
+  DECL_OB(const Type, t0, = gwi_mk_type(gwi, "T<~a~>", SZ_INT, NULL))
   return gwi_add_type(gwi, t0);
 }
index 2aeb3617f81d81925b534fa60460ac54b29dc02b..2bfc227d69c812ae23ed37a96028cbb925d3845f 100644 (file)
@@ -1,2 +1,2 @@
 #! [contains] already imported
-<<<1 >>>;
+<<< 1 >>>;
index fed34adcab8a64c065b2fd2a9344a3ac4d36dc3f..e3151146ceadadd25c17bebc60070952048714a8 100644 (file)
@@ -9,7 +9,7 @@
 #include "import.h"
 
 GWION_IMPORT(typedef_test) {
-  GWI_BB(gwi_typedef_ini(gwi, "int", "<~A~>Typedef"))
-  GWI_BB(gwi_typedef_ini(gwi, "int", "<~A~>Typedef"))
+  GWI_BB(gwi_typedef_ini(gwi, "int", "Typedef<~A~>"))
+  GWI_BB(gwi_typedef_ini(gwi, "int", "Typedef<~A~>"))
   return GW_OK;
 }
index a395b7bef9497d9a59a8a4390bcb174373ce66e1..1ae96db9070b5e250ca718ddecece593aa5db767 100644 (file)
@@ -9,7 +9,7 @@
 #include "import.h"
 
 GWION_IMPORT(typedef_test) {
-  GWI_BB(gwi_typedef_ini(gwi, "<~A~>Ptr", "<~A~>Typedef"))
+  GWI_BB(gwi_typedef_ini(gwi, "Ptr<~A~>", "Typedef<~A~>"))
   GWI_OB(gwi_typedef_end(gwi, ae_flag_none))
   return GW_OK;
 }
index 341379d318c7d0174eb4e1e6f1b63916597f7a30..aa65700d0abef5bde899ea844e5c0eb38c2713e7 100644 (file)
@@ -9,7 +9,7 @@
 #include "import.h"
 
 GWION_IMPORT(union_test) {
-  GWI_BB(gwi_union_ini(gwi, "<~A~>U", NULL))
+  GWI_BB(gwi_union_ini(gwi, "U<~A~>", NULL))
   GWI_BB(gwi_union_add(gwi,"float", "f"))
   GWI_BB(gwi_union_add(gwi,"int", "i"))
   GWI_BB(gwi_union_add(gwi,"A", "a"))
index 05314645dabc1cdfdb85f577fd0016f20e102390..57da35a86a8e630a45b00fb0a697b08b0b2b21be 100644 (file)
@@ -9,7 +9,7 @@
 #include "import.h"
 
 GWION_IMPORT(union_test) {
-  GWI_BB(gwi_union_ini(gwi, "<~A~>U", "My"))
+  GWI_BB(gwi_union_ini(gwi, "U<~A~>", "My"))
   GWI_BB(gwi_union_add(gwi,"float", "f"))
   GWI_BB(gwi_union_add(gwi,"int", "i"))
   GWI_BB(gwi_union_add(gwi,"A", "a"))
index 47bb3be6daec97e01f4c6b3dc19b704783fb9c81..994dd3ee22b697d47abdc29f7900382881a7ec63 100644 (file)
@@ -9,11 +9,11 @@
 #include "import.h"
 
 GWION_IMPORT(union_test) {
-  GWI_BB(gwi_union_ini(gwi, "<~A~>U", NULL))
+  GWI_BB(gwi_union_ini(gwi, "U<~A~>", NULL))
   GWI_BB(gwi_union_add(gwi,"float", "f"))
   GWI_BB(gwi_union_add(gwi,"int", "i"))
   GWI_BB(gwi_union_add(gwi,"A", "a"))
-  GWI_BB(gwi_union_ini(gwi, "<~A~>U", NULL))
+  GWI_BB(gwi_union_ini(gwi, "U<~A~>", NULL))
   GWI_OB(gwi_union_end(gwi, 0))
   return GW_OK;
 }
index b3736a820238d18be4af3701971dd3ec2e742dbe..f8fa4eb9884b45b47beb859c294f3c3b1030fb39 100644 (file)
@@ -9,7 +9,7 @@
 #include "import.h"
 
 GWION_IMPORT(union_test) {
-  GWI_BB(gwi_union_ini(gwi, "<~A~>U", "Test"))
+  GWI_BB(gwi_union_ini(gwi, "U<~A~>", "Test"))
   GWI_BB(gwi_union_add(gwi,"float", "f"))
   GWI_BB(gwi_union_add(gwi,"int", "i"))
   GWI_BB(gwi_union_add(gwi,"A", "a"))