]> Nishi Git Mirror - gwion.git/commitdiff
:art: Add Object conditionnal
authorJérémie Astor <fennecdjay@gmail.com>
Sun, 5 Sep 2021 21:23:48 +0000 (23:23 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sun, 5 Sep 2021 21:23:48 +0000 (23:23 +0200)
include/instr.h
src/vm/vm_code.c

index 82bf384f2c4950ecd797f7a081153971b500b830..6f268351f2690fada6c222399efeb9797b579451 100644 (file)
@@ -36,6 +36,7 @@ struct Instr_ {
 #define BYTECODE_SZ                                                            \
   ((2 * sizeof(unsigned)) + sizeof(struct Instr_) - SZ_INT * 2)
 
+ANN void free_instr(const Gwion, const Instr);
 INSTR(EOC);
 INSTR(DTOR_EOC);
 INSTR(DtorReturn);
index 48191711f5a548cc3e195ffab233b740d589f42c..1f8906b64f147f3cfe2f3fda04bedd7c6916ed9b 100644 (file)
 #include "operator.h"
 #include "import.h"
 
+ANN void free_instr(const Gwion gwion, const Instr instr) {
+  const f_freearg f     = (f_freearg)(
+      map_get(&gwion->data->freearg, instr->opcode)
+              ?: map_get(&gwion->data->freearg, (vtype)instr->execute));
+  if (f) f(instr, gwion);
+  mp_free(gwion->mp, Instr, instr);
+}
+
 ANN void free_code_instr(const Vector v, const Gwion gwion) {
   for (m_uint i = vector_size(v) + 1; --i;) {
     const Instr     instr = (Instr)vector_at(v, i - 1);
-    const f_freearg f     = (f_freearg)(
-        map_get(&gwion->data->freearg, instr->opcode)
-                ?: map_get(&gwion->data->freearg, (vtype)instr->execute));
-    if (f) f(instr, gwion);
-    mp_free(gwion->mp, Instr, instr);
+    free_instr(gwion, instr);
   }
 }