]> Nishi Git Mirror - gwion.git/commitdiff
:art: More fixes and tests
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 9 Jul 2019 17:01:45 +0000 (19:01 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 9 Jul 2019 17:01:45 +0000 (19:01 +0200)
25 files changed:
src/arg.gcda
src/arg.gcno
src/compile.gcda
src/compile.gcno
src/gwion.gcda
src/gwion.gcno
src/gwiondata.gcda
src/gwiondata.gcno
src/lib/func.c
src/main.gcda
src/main.gcno
src/parse/check.c
src/parse/scan1.c
src/parse/scan2.c
src/plug.gcda
src/plug.gcno
src/soundinfo.gcda
src/soundinfo.gcno
tests/import/driver.so [deleted file]
tests/import/test.log
tests/tree/array_cast.gw [new file with mode: 0644]
tests/tree/did_you_mean_type.gw [new file with mode: 0644]
tests/tree/push_func.gw [new file with mode: 0644]
tests/tree/reddit.gw [new file with mode: 0644]
tests/tree/template_fptr.gw [new file with mode: 0644]

index 3dcc1be1753c780ac1b0ff78b7b65572a2dfe459..bf449aee3bb98e1109a43e981caf545abf9770ed 100644 (file)
Binary files a/src/arg.gcda and b/src/arg.gcda differ
index 4b9a987eaf14c13cdb1d160100447e72f66e3b4f..38f07084fca7019cdcc9d8b42711f16f1dc25302 100644 (file)
Binary files a/src/arg.gcno and b/src/arg.gcno differ
index d73115463110ad3aed16bf365cc7e9d9d73388bd..6b4cdd62b09f824fbb385e7b9ea57c664dd612ed 100644 (file)
Binary files a/src/compile.gcda and b/src/compile.gcda differ
index 411f835521e342beb33934f7affbac0107de2acd..d69f6e16d049a3a6ee5d49c30f94952f5d111535 100644 (file)
Binary files a/src/compile.gcno and b/src/compile.gcno differ
index d0363d621ff30e26039326b7591b3bae83827d39..1a44e2f8051c62d0fbb2ef87c6445a97ca50c154 100644 (file)
Binary files a/src/gwion.gcda and b/src/gwion.gcda differ
index 6c8e11e1b66f55d2bb4a97b733c50f5c39f6e6de..db0a66d4ed87b7ea57a2b8bb23b7fb77e8e1380b 100644 (file)
Binary files a/src/gwion.gcno and b/src/gwion.gcno differ
index 8a97751765194fc59d80ca21f0ac4c42d5dbc03b..74199b69bc0c1cab507e6dbb248905b7b07ff7dc 100644 (file)
Binary files a/src/gwiondata.gcda and b/src/gwiondata.gcda differ
index 5f90c6e373d2a3315ffbc57c9c4e74abd14f808a..83192df2f47fc818f887bcdf783e3cac80749e74 100644 (file)
Binary files a/src/gwiondata.gcno and b/src/gwiondata.gcno differ
index 4d8cc62b97818bacfcd9e1a256813ae9ea1b7c23..657d336d947a9235413b16167861bee0f6573448 100644 (file)
@@ -67,20 +67,20 @@ struct FptrInfo {
 ANN static m_bool fptr_tmpl_push(const Env env, struct FptrInfo *info) {
   if(!info->rhs->def->base->tmpl)
     return GW_OK;
-// some kind of template_match ?
   ID_List t0 = info->lhs->def->base->tmpl->list,
           t1 = info->rhs->def->base->tmpl->list;
-nspc_push_type(env->gwion->mp, env->curr);
+  nspc_push_type(env->gwion->mp, env->curr);
   while(t0) {
-//    CHECK_OB(t1)
-nspc_add_type(env->curr, t0->xid, t_undefined);//
-nspc_add_type(env->curr, t1->xid, t_undefined);//
+   if(!t1) {
+     nspc_pop_type(env->gwion->mp, env->curr);
+     return GW_ERROR;
+   }
+   nspc_add_type(env->curr, t0->xid, t_undefined);
+   nspc_add_type(env->curr, t1->xid, t_undefined);
     t0 = t0->next;
     t1 = t1->next;
   }
-//  CHECK_BB(template_push_types(env, info->lhs->def->base->tmpl))
-//  return template_push_types(env, info->rhs->def->base->tmpl);
-return GW_OK;//
+  return GW_OK;
 }
 
 
@@ -146,10 +146,8 @@ ANN static Type fptr_type(const Env env, struct FptrInfo *info) {
       if(fptr_rettype(env, info) > 0 &&
            fptr_arity(info) && fptr_args(env, base) > 0)
       type = info->lhs->value_ref->type;
-      if(info->rhs->def->base->tmpl) {
-//        nspc_pop_type(env->gwion->mp, env->curr);
+      if(info->rhs->def->base->tmpl)
         nspc_pop_type(env->gwion->mp, env->curr);
-      }
     }
   }
   return type;
index 1bd518d875d6a85a3783cde2156e2b4266bc65cf..5fce5e273cbc5a4c320d35f4b7d7335ac40cc5aa 100644 (file)
Binary files a/src/main.gcda and b/src/main.gcda differ
index 6293d5742f6d765c65ca83ec7a7aea76df4d6def..d737dff5e3aeae9fc2fd71b8cb1a081c96243d42 100644 (file)
Binary files a/src/main.gcno and b/src/main.gcno differ
index a3e565ebf88f28337c5002db983e9ef4aced3fca..f20143abf45ccb1e4b1014a83e1de670944bfc3f 100644 (file)
@@ -367,9 +367,7 @@ ANN2(1,2) static Func find_func_match_actual(const Env env, Func func, const Exp
         CHECK_OO(func->next);
         return find_func_match_actual(env, func->next, args, implicit, specific);
       }
-      if(e1->type == t_undefined ||
-(GET_FLAG(func, template) && isa(actual_type(func->value_ref->type), t_fptr) > 0)
-) {
+      if(e1->type == t_undefined || (GET_FLAG(func, template) && is_fptr(func->value_ref->type))) {
         if(func->value_ref->owner_class)
           CHECK_BO(template_push_types(env, func->value_ref->owner_class->e->def->base.tmpl))
         e1->type = known_type(env, e1->td);
@@ -381,7 +379,6 @@ ANN2(1,2) static Func find_func_match_actual(const Env env, Func func, const Exp
       e = e->next;
       e1 = e1->next;
     }
-printf("end %p %p\n", e1, func);
     if(!e1)
       return func;
   } while((func = func->next));
@@ -469,11 +466,10 @@ ANN static Func _find_template_match(const Env env, const Value v, const Exp_Cal
       m_func = find_func_match(env, fbase->func, exp->args);
       nspc_pop_type(env->gwion->mp, env->curr);
       if(!value && m_func) {
-printf("m_func %p\n", m_func);
-if(!m_func->def->base->ret_type)
-CHECK_BO(traverse_func_def(env, m_func->def))
+        if(!m_func->def->base->ret_type)
+          CHECK_BO(traverse_func_def(env, m_func->def))
         map_set(&v->owner->info->type->map, (vtype)sym, (vtype)actual_type(m_func->value_ref->type));
-}
+      }
     }
     free_stmt(env->gwion->mp, stmt);
   }
@@ -587,15 +583,11 @@ ANN static Type check_exp_call_template(const Env env, const Exp_Call *exp) {
   const Exp call = exp->func;
   const Exp args = exp->args;
   m_uint args_number = 0;
-puts("here ==");
   DECL_OO(const Value, value, = nspc_lookup_value1(call->type->e->owner, insert_symbol(call->type->name)))
-puts("after here ==");
   const m_uint type_number = get_type_number(value->d.func_ref->def->base->tmpl->list);
-printf("%s func\n", __func__) ;
   Type_List tl[type_number];
   ID_List list = value->d.func_ref->def->base->tmpl->list;
   while(list) {
-printf("%s func\n", __func__) ;
     Arg_List arg = value->d.func_ref->def->base->args;
     Exp template_arg = args;
     while(arg && template_arg) {
@@ -620,7 +612,7 @@ printf("%s func\n", __func__) ;
   DECL_OO(const Func,func, = get_template_func(env, exp, value))
   if(!func->def->base->ret_type) // template fptr
     CHECK_BO(traverse_func_def(env, func->def))
-    return func->def->base->ret_type;
+  return func->def->base->ret_type;
 }
 
 ANN static m_bool check_exp_call1_check(const Env env, const Exp exp) {
@@ -715,11 +707,7 @@ ANN static Type check_exp_call(const Env env, Exp_Call* exp) {
     CHECK_OO((exp->m_func = ret))
     return ret->def->base->ret_type;
   }
-
-  const Type t = check_exp_call1(env, exp);
-printf("here exp_call %p\n", t);
-return t;
-//  return check_exp_call1(env, exp);
+  return check_exp_call1(env, exp);
 }
 
 ANN static Type check_exp_unary(const Env env, const Exp_Unary* unary) {
index 2856ea9e235af859a05609bd2254ecd2d4df16e8..ded15f44bca4cca685d551b8e7e766e591cd4a95 100644 (file)
@@ -245,8 +245,8 @@ ANN static m_bool scan1_args(const Env env, Arg_List list) {
 ANN m_bool scan1_stmt_fptr(const Env env, const Stmt_Fptr stmt) {
   if(!stmt->type)
     CHECK_BB(scan0_stmt_fptr(env, stmt))
-  if(stmt->base->tmpl)//
-    return GW_OK;//
+  if(stmt->base->tmpl)
+    return GW_OK;
   CHECK_OB((stmt->base->ret_type = known_type(env, stmt->base->td)))
   return stmt->base->args ? scan1_args(env, stmt->base->args) : GW_OK;
 }
index 2d0af075a753f2652402ee77e0117b1cdf3fb3fa..5b5fa9891ae0e78e9d77bee4de740730ba8a06cd 100644 (file)
@@ -93,8 +93,7 @@ ANN m_bool scan2_stmt_fptr(const Env env, const Stmt_Fptr ptr) {
   ptr->type->e->d.func = ptr->base->func;
   def->base->tmpl = ptr->base->tmpl;
   SET_FLAG(ptr->value, func | ae_flag_checked);
-if(!ptr->base->tmpl)//
-  if(ptr->base->args)
+  if(!ptr->base->tmpl && ptr->base->args)
     CHECK_BB(scan2_args(env, def))
   if(env->class_def) {
     if(GET_FLAG(ptr->base->td, global)) {
index aa78ce69f691d5983376f3876f14caf6576d78a8..8b664567fd60c97db51de93ac11bfae73e6e2bfc 100644 (file)
Binary files a/src/plug.gcda and b/src/plug.gcda differ
index de8f8a67e3604c145b1c4cbe7f0ab07bdfd1b5bc..dc4198660920b242182bcccf24cca7a5d985d91b 100644 (file)
Binary files a/src/plug.gcno and b/src/plug.gcno differ
index 66d3f7d25d22fe63e535643e6e3fac0844c6e340..ade055bc0206238fcd62c146fc667641a8cc3d07 100644 (file)
Binary files a/src/soundinfo.gcda and b/src/soundinfo.gcda differ
index 6c38817e2d712e48980a868149884fe7ea917968..56f214484dc74f6f50db7695437bc3d606c2e353 100644 (file)
Binary files a/src/soundinfo.gcno and b/src/soundinfo.gcno differ
diff --git a/tests/import/driver.so b/tests/import/driver.so
deleted file mode 100755 (executable)
index f286bf3..0000000
Binary files a/tests/import/driver.so and /dev/null differ
index b584940e2fb0c9676a5d98e096ec26bdb7003d9d..8557b3a477e8e437e3df4916790301647272c67a 100644 (file)
@@ -11398,3 +11398,45 @@ global_func.gw ==22565== Memcheck, a memory error detector
 ==4349== 
 ==4349== For counts of detected and suppressed errors, rerun with: -v
 ==4349== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+/dev/null ==13821== Memcheck, a memory error detector
+==13821== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
+==13821== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
+==13821== Command: ./../../gwion -p. -d dummy /dev/null
+==13821== Parent PID: 13795
+==13821== 
+==13821== 
+==13821== HEAP SUMMARY:
+==13821==     in use at exit: 928 bytes in 10 blocks
+==13821==   total heap usage: 974 allocs, 964 frees, 7,596,796 bytes allocated
+==13821== 
+==13821== LEAK SUMMARY:
+==13821==    definitely lost: 928 bytes in 10 blocks
+==13821==    indirectly lost: 0 bytes in 0 blocks
+==13821==      possibly lost: 0 bytes in 0 blocks
+==13821==    still reachable: 0 bytes in 0 blocks
+==13821==         suppressed: 0 bytes in 0 blocks
+==13821== Rerun with --leak-check=full to see details of leaked memory
+==13821== 
+==13821== For counts of detected and suppressed errors, rerun with: -v
+==13821== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+/dev/null ==14729== Memcheck, a memory error detector
+==14729== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
+==14729== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
+==14729== Command: ./../../gwion -p. -d dummy /dev/null
+==14729== Parent PID: 13795
+==14729== 
+==14729== 
+==14729== HEAP SUMMARY:
+==14729==     in use at exit: 576 bytes in 9 blocks
+==14729==   total heap usage: 956 allocs, 947 frees, 7,590,612 bytes allocated
+==14729== 
+==14729== LEAK SUMMARY:
+==14729==    definitely lost: 576 bytes in 9 blocks
+==14729==    indirectly lost: 0 bytes in 0 blocks
+==14729==      possibly lost: 0 bytes in 0 blocks
+==14729==    still reachable: 0 bytes in 0 blocks
+==14729==         suppressed: 0 bytes in 0 blocks
+==14729== Rerun with --leak-check=full to see details of leaked memory
+==14729== 
+==14729== For counts of detected and suppressed errors, rerun with: -v
+==14729== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/tests/tree/array_cast.gw b/tests/tree/array_cast.gw
new file mode 100644 (file)
index 0000000..1b7c437
--- /dev/null
@@ -0,0 +1,2 @@
+typedef int[2] _int;
+new _int $ _int;
diff --git a/tests/tree/did_you_mean_type.gw b/tests/tree/did_you_mean_type.gw
new file mode 100644 (file)
index 0000000..73b0459
--- /dev/null
@@ -0,0 +1,4 @@
+class C {
+  <<<this.aa>>>;
+  int a;
+}
diff --git a/tests/tree/push_func.gw b/tests/tree/push_func.gw
new file mode 100644 (file)
index 0000000..2f7957f
--- /dev/null
@@ -0,0 +1 @@
+me.exit;
diff --git a/tests/tree/reddit.gw b/tests/tree/reddit.gw
new file mode 100644 (file)
index 0000000..9b4fd25
--- /dev/null
@@ -0,0 +1,8 @@
+
+#! basic math printed out (note the space after '<<<' and before '>>>'
+<<<  1 + 2 >>>;
+
+#! define and operator
+operator $@+-*%~<>^&!= void (int i, int j) { <<< i, " ", j >>>; }
+
+1 $@+-*%~<>^&!= 2;
diff --git a/tests/tree/template_fptr.gw b/tests/tree/template_fptr.gw
new file mode 100644 (file)
index 0000000..3a130d9
--- /dev/null
@@ -0,0 +1,11 @@
+typedef int ptr_t<~A~>(A);
+ptr_t ptr;
+<<<ptr>>>;
+
+fun int test<~A~>(A a) { <<< a >>>; }
+test @=> ptr;
+<<< ptr >>>;
+#!3;
+#!3 => test;
+ptr<~int~>(2);
+ptr<~float~>(2.3);