]> Nishi Git Mirror - gwion.git/commitdiff
:art: update
authorfennecdjay <fennecdjay@gmail.com>
Wed, 1 Feb 2023 15:16:03 +0000 (16:16 +0100)
committerfennecdjay <fennecdjay@gmail.com>
Wed, 1 Feb 2023 15:16:03 +0000 (16:16 +0100)
include/vm.h
src/emit/emit.c
tests/error/array_invalid1.gw
tests/error/array_mutable.gw
util

index c1a7597ab2bb015020c9d45820387bd3101dd96a..54cac88147f5503810b800666d19c6e99ab94b24 100644 (file)
@@ -137,7 +137,7 @@ ANN uint32_t gw_rand(uint32_t s[2]);
 ANN void     gw_seed(uint32_t s[2], const uint64_t);
 ANN bool     handle(VM_Shred shred, const m_str effect);
 #define xfun_handle(shred, effect) {\
-  shred->mem -= ((Instr)vector_at(&shred->code->instr, shred->pc-1))->m_val2; \
+/*  shred->mem -= ((Instr)vector_at(&shred->code->instr, shred->pc-1))->m_val2; */\
   handle(shred, effect); \
 }
 
index 30b300d3427fc75df9c0737876b5edc60ae1d109..5d0cd104eb6920a26d9b621bafaf39ad8d965ad9 100644 (file)
@@ -139,12 +139,12 @@ ANN void emit_object_release(const Emitter emit, const m_uint offset) {
 ANN void emit_compound_release(const Emitter emit, const Type t, const m_uint offset) {
   if(tflag(t, tflag_compound))
     return emit_object_release(emit, offset);
-  if(tflag(t, tflag_release))
-    emit_struct_release(emit, t, offset);
+  emit_struct_release(emit, t, offset);
 }
 
 ANN void emit_struct_release(const Emitter emit, const Type type,
                              const m_uint offset) {
+  if(!tflag(type, tflag_release)) return;
   const Instr instr = emit_add_instr(emit, StructReleaseMem);
   instr->m_val = offset;
   instr->m_val2 = (m_uint)type;
@@ -788,13 +788,13 @@ ANN static void emit_gack_type(const Emitter emit, const Exp e) {
       (e->exp_type == ae_exp_primary && e->d.prim.prim_type == ae_prim_str))
      return;
   const m_bool isobj = isa(e->type, emit->gwion->type[et_object]) > 0;
-  if (isobj && (tflag(e->type, tflag_ref) || !GET_FLAG(e->type, final)))
+  if (isobj  && (tflag(e->type, tflag_ref) || !GET_FLAG(e->type, final)))
     emit_add_instr(emit, GackType);
 }
 
 ANN /*static*/ m_bool emit_interp(const Emitter emit, const Exp exp) {
   emit_pushimm(emit, 0);
-  emit_local(emit, emit->gwion->type[et_int]);
+  //emit_local(emit, emit->gwion->type[et_int]);
   Exp e = exp, next = NULL;
   do {
     next    = e->next;
index 490d340e9b578fd43aa2480a3c5dd75d4def00f8..4a1bb88bb41e2840a8312b671c53b39f3074f497 100644 (file)
@@ -1,2 +1,2 @@
-#! [contains] invalid format for array init
+#! [contains] invalid array access
 [ [1,2] [3,4] ];
index f69954c647a281dd9008ce1b23addab11d9dcbbc..33e53b2211c339a3974726581cf823a2ae421e4f 100644 (file)
@@ -1,2 +1,2 @@
 #! [contains] non-mutable
-[1,2,3,4] :=> [1][1];
+4 :=> [1][1];
diff --git a/util b/util
index d12448118cc4366fb8871f1f149626969fad775a..19c13d54cf5ed8f8e8ce63cca357da3fca28c6ad 160000 (submodule)
--- a/util
+++ b/util
@@ -1 +1 @@
-Subproject commit d12448118cc4366fb8871f1f149626969fad775a
+Subproject commit 19c13d54cf5ed8f8e8ce63cca357da3fca28c6ad