]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Few fixes
authorfennecdjay <astor.jeremie@wanadoo.fr>
Sat, 4 May 2019 08:40:36 +0000 (10:40 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Sat, 4 May 2019 08:40:36 +0000 (10:40 +0200)
src/emit/emit.c
src/lib/engine.c
src/lib/prim.c
src/vm/shreduler.c

index d0b548587c944dfba20826106845ecfdd25953a8..2964fc16ce70e86e7460dc69a150a04b718844fa 100644 (file)
@@ -570,8 +570,8 @@ ANN static m_bool emit_exp_decl_non_static(const Emitter emit, const Var_Decl va
     const Instr assign = emit_add_instr(emit, ObjectAssign);
     assign->m_val = emit_var;
     const size_t missing_depth = type->array_depth - (array ? array->depth : 0);
-//    if((is_array || missing_depth) && !emit->env->scope->depth)
-//      ADD_REF(type)
+    if((is_array || missing_depth) && !emit->env->scope->depth)
+      ADD_REF(type)
     if(missing_depth) {
       const Instr push = emit_add_instr(emit, Reg2Reg);
       push->m_val = -(1 + missing_depth) * SZ_INT;
index 2f1e71c16f29184bba0269e5896ba99cacecbca0..d212c85ee0c8f777132b7c81a55ac91f94e79a99 100644 (file)
 #include "parser.h"
 
 static FREEARG(freearg_switchini) {
-  free_vector(((Gwion)gwion)->p, (Vector)instr->m_val);
-  free_map(((Gwion)gwion)->p, (Map)instr->m_val2);
+  if(instr->m_val)
+    free_vector(((Gwion)gwion)->p, (Vector)instr->m_val);
+  if(instr->m_val2)
+    free_map(((Gwion)gwion)->p, (Map)instr->m_val2);
 }
 
 static FREEARG(freearg_switchbranch) {
@@ -108,4 +110,4 @@ ANN m_bool type_engine_init(VM* vm, const Vector plug_dirs) {
   }
   free_loc(vm->gwion->p, gwi.loc);
   return GW_OK;
-}
\ No newline at end of file
+}
index 3ce66da9511209f689ae2dac188f43508a7a6ce6..f930d6bbdd8de08ecc48d143e2459db0a5f0ca99 100644 (file)
@@ -120,7 +120,7 @@ static GWION_IMPORT(values) {
   gwi_item_ini(gwi, "time", "t_zero");
   gwi_item_end(gwi, ae_flag_const, t_zero);
   gwi_item_ini(gwi, "@now", "now");
-  gwi_item_end(gwi, 0, NULL);
+  gwi_item_end(gwi, ae_flag_const, NULL);
   return GW_OK;
 }
 
@@ -231,7 +231,7 @@ static GWION_IMPORT(time) {
   CHECK_FF(chuck, rassign, r_assign)
   CHECK_BB(gwi_oper_end(gwi, op_add,         FloatPlus))
   CHECK_BB(gwi_oper_ini(gwi,  "dur",  "@now", "time"))
-  _CHECK_OP(chuck, rassign, Time_Advance)
+  _CHECK_OP(chuck, rhs_emit_var, Time_Advance)
   CHECK_BB(gwi_oper_ini(gwi,  "@now",  "@now", NULL))
   _CHECK_OP(chuck, chuck_now, NULL)
   CHECK_BB(gwi_oper_ini(gwi, NULL, "@now", NULL))
index b961a5a919686d1bc2095020ff56a6b69c4cb266..dcb4c6c0d6bcef591a2692f4b2ebf7971e84ff62 100644 (file)
@@ -50,6 +50,7 @@ ANN static void unwind(const VM_Shred shred) {
       if(shred->mem <= (((m_bit*)(shred) + sizeof(struct VM_Shred_) + SIZEOF_REG)))break;
     } else break;
   }
+  shred->code = code;
 }
 
 ANN static inline void shreduler_child(const Vector v) {