]> Nishi Git Mirror - gwion.git/commitdiff
:art: Fox Ptr and Ref size
authorJérémie Astor <fennecdjay@gmail.com>
Mon, 23 Aug 2021 19:57:14 +0000 (21:57 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Mon, 23 Aug 2021 19:57:14 +0000 (21:57 +0200)
src/lib/ptr.c
src/lib/ref.c

index 1a0ace409667a053e1094ca2c999869d6fa70944..bdc2cc7dcde78258ad1777ff0d992479579d5753 100644 (file)
@@ -37,7 +37,8 @@ static OP_CHECK(opck_ptr_assign) {
     Type u = bin->rhs->type;
     do {
       const Type base = ptr_base(env, u);
-      if (isa(t, base) > 0) return t;
+//      if (isa(t, base) > 0) return t;
+      if (isa(t, base) > 0) return bin->rhs->type;
     } while ((u = u->info->parent) && u->info->cdef->base.tmpl->call);
   } while ((t = t->info->parent));
   return env->gwion->type[et_error];
@@ -147,6 +148,7 @@ static OP_CHECK(opck_ptr_scan) {
   if (exists) return exists != env->gwion->type[et_error] ? exists : NULL;
   const Type base = known_type(env, ts->td->types->td);
   const Type t    = new_type(env->gwion->mp, s_name(info.name), base);
+  t->size = SZ_INT;
   t->info->parent = env->gwion->type[et_ptr];
   SET_FLAG(t, abstract | ae_flag_final);
   t->info->tuple = new_tupleform(env->gwion->mp, NULL);
index ba22c2d33366b810cba4bee9299bbc291a51ca63..9acd182012aca5aad9bbb9809d5e928532c5bc55 100644 (file)
@@ -69,6 +69,7 @@ static OP_CHECK(opck_ref_scan) {
   if (exists) return exists != env->gwion->type[et_error] ? exists : NULL;
   const Type base = known_type(env, ts->td->types->td);
   const Type t    = new_type(env->gwion->mp, s_name(info.name), base);
+  t->size = SZ_INT;
   SET_FLAG(t, abstract | ae_flag_final);
   set_tflag(t, tflag_infer);
   set_tflag(t, tflag_noret);