]> Nishi Git Mirror - gwion.git/commitdiff
:art: few stuff [prepare jit]
authorJérémie Astor <fennecdjay@gmail.com>
Sun, 11 Jul 2021 18:53:43 +0000 (20:53 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sun, 11 Jul 2021 18:53:43 +0000 (20:53 +0200)
include/env/type.h
src/import/import_type.c
src/lib/array.c
src/lib/engine.c
src/lib/prim.c

index e1ded1a252937bd08eab8dd748b4ee520899a9d2..7806a0aec61426117d07eef1e9ba1297794f0f05 100644 (file)
@@ -36,6 +36,7 @@ enum tflag {
   tflag_distinct = 1 << 17,
   tflag_noret    = 1 << 18,
   tflag_contract = 1 << 19,
+  tflag_float    = 1 << 20,
 } __attribute__((packed));
 
 struct Type_ {
index 34fe9b8ae6f5e4fe0e87f47e2427e6b9ccd15d3b..ed6fa92bb8268662e6277fdfa70cb67b75be6dd0 100644 (file)
@@ -42,6 +42,8 @@ Type gwi_mk_type(const Gwi gwi, const m_str name, const m_uint size,
   const Type parent = get_parent(gwi, parent_name);
   const Type t      = new_type(gwi->gwion->mp, name, parent);
   t->size           = size;
+  if(safe_tflag(parent, tflag_float))
+    set_tflag(t, tflag_float);
   return t;
 }
 
index d01765f77bd937e0965b5067432c045e3da3ad4c..701505a328ccd769b000a83505254278c0845a6c 100644 (file)
@@ -921,7 +921,7 @@ ANN static M_Object do_alloc_array_loop(const VM_Shred shred, ArrayInfo *info,
 ANN static M_Object do_alloc_array(const VM_Shred shred, ArrayInfo *info) {
   const m_int cap = *(m_int *)REG(info->depth * SZ_INT);
   if (cap < 0) {
-    gw_err("[gwion](VM): NegativeArraySize: while allocating arrays...\n");
+    gw_err("{-}[{0}{+}Gwion{0}{-}](VM):{0} NegativeArraySize: while allocating arrays...\n");
     return NULL;
   }
   const M_Object base = do_alloc_array_object(shred->info->mp, info, cap);
@@ -949,7 +949,7 @@ INSTR(ArrayAlloc) {
   if (info->is_obj) aai.data = init_array(shred, info, &num_obj);
   const M_Object ref = do_alloc_array(shred, &aai);
   if (!ref) {
-    gw_err("[Gwion](VM): (note: in shred[id=%" UINT_F ":%s])\n",
+    gw_err("{-}[{0}{+}Gwion{0}{-}](VM):{0} (note: in shred[id=%" UINT_F ":%s])\n",
            shred->tick->xid, shred->code->name);
     vm_shred_exit(shred);
     if (info->is_obj) free(aai.data);
index 300ffe76182ca9c1dca5a85cdd90913b1627b7e9..a984cf3ae3c168514edefbcbe0d1be2c7f5ff8e1 100644 (file)
@@ -112,16 +112,19 @@ ANN static m_bool import_core_libs(const Gwi gwi) {
   const Type t_float = gwi_mk_type(gwi, "float", SZ_FLOAT, NULL);
   GWI_BB(gwi_gack(gwi, t_float, gack_float))
   GWI_BB(gwi_set_global_type(gwi, t_float, et_float))
+  set_tflag(t_float, tflag_float);
 
   gwidoc(gwi, "represent duration.");
   const Type t_dur = gwi_mk_type(gwi, "dur", SZ_FLOAT, NULL);
   GWI_BB(gwi_gack(gwi, t_dur, gack_float))
   GWI_BB(gwi_add_type(gwi, t_dur))
+  set_tflag(t_dur, tflag_float);
 
   gwidoc(gwi, "represent time.");
   const Type t_time = gwi_mk_type(gwi, "time", SZ_FLOAT, NULL);
   GWI_BB(gwi_gack(gwi, t_time, gack_float))
   GWI_BB(gwi_add_type(gwi, t_time))
+  set_tflag(t_time, tflag_float);
 
   gwidoc(gwi, "internal time for `{/}now{0}{-}`.");
   const Type t_now = gwi_mk_type(gwi, "@now", SZ_FLOAT, "time");
index 60bbdc1990c123a2a697d528442383c771aec1ae..eff1c19ebfb08ae440f63e8fcc25c93b922cb756 100644 (file)
@@ -437,7 +437,9 @@ static GWION_IMPORT(dur) {
   CHECK_FF("*=>", rassign, r_mul)
   CHECK_FF("/=>", rassign, r_div)
 
-  GWI_BB(gwi_oper_ini(gwi, "dur", "dur", "int"))
+  GWI_BB(gwi_oper_ini(gwi, "dur", "dur", "bool"))
+  GWI_BB(gwi_oper_end(gwi, "==", float_eq))
+  GWI_BB(gwi_oper_end(gwi, "!=", float_neq))
   GWI_BB(gwi_oper_end(gwi, ">", float_gt))
   GWI_BB(gwi_oper_end(gwi, ">=", float_ge))
   GWI_BB(gwi_oper_end(gwi, "<", float_lt))
@@ -476,7 +478,7 @@ static GWION_IMPORT(time) {
   GWI_BB(gwi_oper_end(gwi, "+", float_add))
   GWI_BB(gwi_oper_ini(gwi, "dur", "@now", "time"))
   _CHECK_OP("=>", now, Time_Advance)
-  GWI_BB(gwi_oper_ini(gwi, "time", "time", "int"))
+  GWI_BB(gwi_oper_ini(gwi, "time", "time", "bool"))
   GWI_BB(gwi_oper_end(gwi, ">", float_gt))
   GWI_BB(gwi_oper_end(gwi, ">=", float_ge))
   GWI_BB(gwi_oper_end(gwi, "<", float_lt))