]> Nishi Git Mirror - gwion.git/commitdiff
:bug: Fix @now const
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Sat, 6 Jun 2020 09:31:32 +0000 (11:31 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Sat, 6 Jun 2020 09:31:32 +0000 (11:31 +0200)
include/import.h
src/lib/opfunc.c
src/lib/prim.c

index 6c9056a720cc236e8f88fee4400348b0d006070e..eab366a8429f98e87959d675070d17136022ffcf 100644 (file)
@@ -47,7 +47,6 @@ OP_CHECK(opck_unary_meta2);
 OP_CHECK(opck_unary);
 OP_CHECK(opck_post);
 OP_CHECK(opck_rassign);
-OP_CHECK(opck_rhs_emit_var);
 OP_CHECK(opck_basic_cast);
 OP_CHECK(opck_usr_implicit);
 OP_CHECK(opck_new);
index 9868d64e908f8b42b875304cdd2a64e706a0d2e1..5f98c8fbe0cc8f32f15daa8e9f10e01b0d97f3af 100644 (file)
@@ -33,12 +33,6 @@ OP_CHECK(opck_const_rhs) {
   return bin->rhs->info->type;
 }
 
-OP_CHECK(opck_rhs_emit_var) {
-  const Exp_Binary* bin = (Exp_Binary*)data;
-  exp_setvar(bin->rhs, 1);
-  return bin->rhs->info->type;
-}
-
 OP_CHECK(opck_rassign) {
   const Exp_Binary* bin = (Exp_Binary*)data;
   if(opck_const_rhs(env, data, mut) == env->gwion->type[et_null])
index e8deb93c2fb6bff476996d0b47f011465d166a54..49eb2126378b170e605750f023da2414f7af4623 100644 (file)
@@ -221,6 +221,21 @@ static GWION_IMPORT(dur) {
   return gwi_oper_end(gwi, "<=",           float_le);
 }
 
+
+static inline int is_now(const Env env, const Exp exp) {
+  return exp->exp_type == ae_exp_primary &&
+    exp->d.prim.prim_type == ae_prim_id &&
+    exp->d.prim.d.var == insert_symbol("now");
+}
+
+static OP_CHECK(opck_now) {
+  const Exp_Binary* bin = (Exp_Binary*)data;
+  if(!is_now(env, bin->rhs))
+    CHECK_NN(opck_const_rhs(env, data, mut))
+  exp_setvar(bin->rhs, 1);
+  return bin->rhs->info->type;
+}
+
 static GWION_IMPORT(time) {
   GWI_BB(gwi_oper_cond(gwi, "time", BranchEqFloat, BranchNeqFloat))
   GWI_BB(gwi_oper_ini(gwi, "time", "time", "time"))
@@ -231,7 +246,7 @@ static GWION_IMPORT(time) {
   CHECK_FF("=>", rassign, r_assign)
   GWI_BB(gwi_oper_end(gwi, "+",         FloatPlus))
   GWI_BB(gwi_oper_ini(gwi,  "dur",  "@now", "time"))
-  _CHECK_OP("=>", rhs_emit_var, Time_Advance)
+  _CHECK_OP("=>", now, Time_Advance)
   GWI_BB(gwi_oper_ini(gwi, "time", "time", "int"))
   GWI_BB(gwi_oper_end(gwi, ">",           float_gt))
   GWI_BB(gwi_oper_end(gwi, ">=",             float_ge))