]> Nishi Git Mirror - gwion.git/commitdiff
:art: '$' operator fixes
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Mon, 30 Mar 2020 23:46:42 +0000 (01:46 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Mon, 30 Mar 2020 23:46:42 +0000 (01:46 +0200)
include/import.h
src/lib/array.c
src/lib/func.c
src/lib/opfunc.c
src/lib/prim.c

index d11c2e9dff2f4d589a4c20a85d3ad3edf42b0b89..a5502758c95c176d84cff3a9653f9d55887acab3 100644 (file)
@@ -49,9 +49,9 @@ OP_CHECK(opck_post);
 OP_CHECK(opck_rassign);
 OP_CHECK(opck_rhs_emit_var);
 OP_CHECK(opck_basic_cast);
+OP_CHECK(opck_simple_cast);
 OP_CHECK(opck_usr_implicit);
 OP_CHECK(opck_new);
-OP_EMIT(opem_basic_cast);
 OP_EMIT(opem_new);
 
 #endif
index 47383c7966d38a77af32f89303498cb45a24b720..93ca736852ad92636705c9db0006df6b9a4130d2 100644 (file)
@@ -332,10 +332,8 @@ GWION_IMPORT(array) {
   GWI_BB(gwi_oper_end(gwi, "<<", NULL))
   GWI_BB(gwi_oper_ini(gwi, "@Array", "@Array", NULL))
   GWI_BB(gwi_oper_add(gwi, opck_array_cast))
-  GWI_BB(gwi_oper_emi(gwi, opem_basic_cast))
   GWI_BB(gwi_oper_end(gwi, "$", NULL))
   GWI_BB(gwi_oper_ini(gwi, "nonnull @Array", "int", "int"))
-//  GWI_BB(gwi_oper_ini(gwi, "@Array", "int", "int"))
   GWI_BB(gwi_oper_add(gwi, opck_array_slice))
   GWI_BB(gwi_oper_emi(gwi, opem_array_slice))
   GWI_BB(gwi_oper_end(gwi, "@slice", NULL))
index 098321406b4dc52da3529f3f6e16e7d1630918ea..1c3588eb5000dfefda3155fb55b50f7c13927e33 100644 (file)
@@ -230,7 +230,6 @@ static void member_fptr(const Emitter emit) {
 }
 
 static OP_EMIT(opem_fptr_cast) {
-  CHECK_OO(opem_basic_cast(emit, data))
   Exp_Cast* cast = (Exp_Cast*)data;
   if(exp_self(cast)->info->type->e->d.func->def->base->tmpl)
     fptr_instr(emit, cast->exp->info->type->e->d.func, 1);
index 9d10e5376d5ca709f9105a5c2b4096648544e7f3..979afb03ea20dd04f3fa066e1d222ee9cf450a27 100644 (file)
@@ -16,16 +16,17 @@ OP_CHECK(opck_basic_cast) {
      exp_self(cast)->info->type : env->gwion->type[et_null];
 }
 
+OP_CHECK(opck_simple_cast) {
+  const Exp_Cast* cast = (Exp_Cast*)data;
+  return cast->exp->info->cast_to =  exp_self(cast)->info->type;
+}
+
 OP_CHECK(opck_usr_implicit) {
   struct Implicit* imp = (struct Implicit*)data;
   imp->e->info->cast_to = imp->t;
   return imp->t;
 }
 
-OP_EMIT(opem_basic_cast) {
-  return (Instr)GW_OK;
-}
-
 OP_CHECK(opck_const_rhs) {
   const Exp_Binary* bin = (Exp_Binary*)data;
   const m_str access = exp_access(bin->rhs);
index e82f46697bf56b09c21e7d171ba1f399ae83d955..b6081a86a36f3e529d986fc1f0b40635ce635969 100644 (file)
@@ -166,7 +166,7 @@ static GWION_IMPORT(intfloat) {
   CHECK_IF("-=>", rassign, r_minus)
   CHECK_IF("*=>", rassign, r_mul)
   CHECK_IF("/=>", rassign, r_div)
-  _CHECK_OP("$", basic_cast, CastI2F)
+  _CHECK_OP("$", simple_cast, CastI2F)
   _CHECK_OP("@implicit", implicit_i2f, CastI2F)
   return GW_OK;
 }
@@ -191,7 +191,7 @@ static GWION_IMPORT(floatint) {
   CHECK_FI("-=>", rassign, r_minus)
   CHECK_FI("*=>", rassign, r_mul)
   CHECK_FI("/=>", rassign, r_div)
-  _CHECK_OP("$", basic_cast, CastF2I)
+  _CHECK_OP("$", simple_cast, CastF2I)
   _CHECK_OP("@implicit", implicit_f2i, CastF2I)
   return GW_OK;
 }