]> Nishi Git Mirror - gwion.git/commitdiff
:art: Fix mk_types
authorfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 11 Oct 2019 00:47:10 +0000 (02:47 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Fri, 11 Oct 2019 00:47:10 +0000 (02:47 +0200)
examples/binary_tmpl.gw
src/parse/check.c

index 1746eb9445c7ae5514e06026abcf3cd04f13090b..3fb4c19daa5f624ac6c779176191733a8bc22d3f 100644 (file)
@@ -1,6 +1,11 @@
+class C {
+  class D {
+  }
+}
 fun void test<~A~>(A a) { <<< a >>>; }
 1 => test;
 1.3 => test;
 test(1);
 @(23) => test;
 test(1.3);
+C->D d => test;
index 6ce23e61f67fa7587341e9eb8b09dd7d97df80ec..1956864a1e69c1008f24250e7f2c20fcc60782c3 100644 (file)
@@ -421,6 +421,7 @@ ANN static Type_List mk_type_list(const Env env, const Type type) {
   vector_init(&v);
   vector_add(&v, (vtype)insert_symbol(type->name));
   Nspc nspc = type->e->owner;
+// TODO: simplify this
   while(nspc && nspc != env->curr && nspc != env->global_nspc) {
     const Type t = nspc_lookup_type0(nspc->parent, insert_symbol(nspc->name));
     if(!t)
@@ -429,8 +430,8 @@ ANN static Type_List mk_type_list(const Env env, const Type type) {
     nspc = nspc->parent;
   }
   ID_List id = NULL;
-  for(m_uint i = vector_size(&v) + 1; --i;)
-    id = prepend_id_list(env->gwion->mp, (Symbol)vector_at(&v, i - 1), id, new_loc(env->gwion->mp, __LINE__));
+  for(m_uint i = 0 ; i < vector_size(&v); ++i)
+    id = prepend_id_list(env->gwion->mp, (Symbol)vector_at(&v, i), id, new_loc(env->gwion->mp, __LINE__));
   vector_release(&v);
   assert(id);
   Type_Decl* td = new_type_decl(env->gwion->mp, id);