]> Nishi Git Mirror - gwion.git/commitdiff
:art: Update
authorJérémie Astor <fennecdjay@gmail.com>
Thu, 3 Jun 2021 16:35:13 +0000 (18:35 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Thu, 3 Jun 2021 16:35:13 +0000 (18:35 +0200)
ast
include/opcode.h
opcode.txt
src/env/type.c
src/lib/array.c
src/parse/check.c
src/vm/vm.c

diff --git a/ast b/ast
index b1fe9221196f766a5b3d11f6021340d747cab95c..269c530719fc73ae9427a01b379b184f2596911e 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit b1fe9221196f766a5b3d11f6021340d747cab95c
+Subproject commit 269c530719fc73ae9427a01b379b184f2596911e
index f734353354720dbb9e2d2d98eb6674ec0cfecaca..7eec1cff7ae7a66d75d9b5d892c157229ce57780 100644 (file)
@@ -152,7 +152,6 @@ enum {
   eArrayAccess,
   eArrayGet,
   eArrayAddr,
-  eArrayValid,
   eObjectInstantiate,
   eRegAddRef,
   eRegAddRefAddr,
@@ -352,7 +351,6 @@ enum {
 #define  ArrayAccess          (f_instr)eArrayAccess
 #define  ArrayGet             (f_instr)eArrayGet
 #define  ArrayAddr            (f_instr)eArrayAddr
-#define  ArrayValid           (f_instr)eArrayValid
 #define  ObjectInstantiate    (f_instr)eObjectInstantiate
 #define  RegAddRef            (f_instr)eRegAddRef
 #define  RegAddRefAddr        (f_instr)eRegAddRefAddr
index efce167a6b23a035585d36de9dd45f7e5b5cae6b..cbb5d5d75b0d1adc767276dff765aaf2f9688faf 100644 (file)
@@ -149,7 +149,6 @@ ArrayTop
 ArrayAccess
 ArrayGet
 ArrayAddr
-ArrayValid
 ObjectInstantiate
 RegAddRef
 RegAddRefAddr
index 547f2fef942344a9b22e9db9e809ec8f03b26f0f..24b8a7a913b62fb6bf5666d047564d7ed8fd238f 100644 (file)
@@ -16,9 +16,11 @@ ANN void free_type(const Type a, struct Gwion_ *const gwion) {
   if(freeable(a)) {
     if(tflag(a, tflag_udef))
       free_union_def(gwion->mp, a->info->udef);
-    if(tflag(a, tflag_cdef))
+    else if(tflag(a, tflag_cdef))
       class_def_cleaner(gwion, a->info->cdef);
   }
+  if(a->effects.ptr)
+    vector_release(&a->effects);
   if(a->nspc)
     nspc_remref(a->nspc, gwion);
   if(a->info->tuple)
index 8a6697def8c1cd9c269a0489f1cb2c09c52fce22..1d27375306b9d12852dd9579b60e76c8c11b79e9 100644 (file)
@@ -326,13 +326,13 @@ ANN static void array_finish(const Emitter emit, const m_uint depth,
                const m_uint size, const m_bool is_var) {
   const Instr get = emit_add_instr(emit, is_var ? ArrayAddr : ArrayGet);
   get->m_val = depth * SZ_INT;
-  emit_add_instr(emit, ArrayValid);
+//  emit_add_instr(emit, ArrayValid);
   const Instr push = emit_add_instr(emit, RegMove);
   push->m_val = is_var ? SZ_INT : size;
 }
 
 ANN static inline m_bool array_do(const  Emitter emit, const Array_Sub array, const m_bool is_var) {
-  emit_gc(emit, -SZ_INT);
+//  emit_gc(emit, -SZ_INT);
   CHECK_BB(emit_exp(emit, array->exp));
   array_loop(emit, array->depth);
   array_finish(emit, array->depth, array->type->size, is_var);
index 5a2ff50e04797eeef8fde81c897d3fef9ea3f3de..63d9b558bf37883b1007560aaa94efeea23c4e0d 100644 (file)
@@ -1709,7 +1709,8 @@ ANN static m_bool _check_class_def(const Env env, const Class_Def cdef) {
         env_err(env, v->from->loc, _("recursive type"));
         env->context->error = false;
         env_err(env, value->from->loc, _("recursive type"));
-       env->context->error = true;
+        env->context->error = true;
+type_remref(t, env->gwion);
 return GW_ERROR;
 }
 }
index ba830d1fe6fa2e88a85b29527ecb072218004c66..deaff7b4d23a1c5847d4d9a28820eaf815a8d1f2 100644 (file)
@@ -406,7 +406,7 @@ ANN void vm_run(const VM* vm) { // lgtm [cpp/use-of-goto]
     &&regmove, &&regtomem, &&regtomemother, &&overflow, &&funcusrend, &&funcmemberend,
     &&sporkini, &&forkini, &&sporkfunc, &&sporkmemberfptr, &&sporkexp, &&sporkend,
     &&brancheqint, &&branchneint, &&brancheqfloat, &&branchnefloat, &&unroll,
-    &&arrayappend, &&autounrollinit, &&autoloop, &&arraytop, &&arrayaccess, &&arrayget, &&arrayaddr, &&arrayvalid,
+    &&arrayappend, &&autounrollinit, &&autoloop, &&arraytop, &&arrayaccess, &&arrayget, &&arrayaddr,
     &&newobj, &&addref, &&addrefaddr, &&structaddref, &&structaddrefaddr, &&objassign, &&assign, &&remref,
     &&except, &&allocmemberaddr, &&dotmember, &&dotfloat, &&dotother, &&dotaddr,
     &&unioncheck, &&unionint, &&unionfloat, &&unionother, &&unionaddr,
@@ -855,11 +855,6 @@ PRAGMA_PUSH()
   *(m_bit**)(reg + (m_int)VAL2) = m_vector_addr(ARRAY(a.obj), *(m_int*)(reg + VAL));
 PRAGMA_POP()
   DISPATCH()
-arrayvalid:
-// are we sure it is the array ?
-// rather increase ref
-  vector_pop(&shred->gc);
-  DISPATCH()
 newobj:
   *(M_Object*)reg = new_object(vm->gwion->mp, NULL, (Type)VAL2);
   reg += SZ_INT;