From 763226a8dc0a5003ebb4c70ec43970745c8cdc02 Mon Sep 17 00:00:00 2001 From: fennecdjay Date: Tue, 1 Oct 2019 21:40:31 +0200 Subject: [PATCH] :art: inline check_implicit in is_int --- src/parse/check.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/parse/check.c b/src/parse/check.c index 0688d540..6bcd6278 100644 --- a/src/parse/check.c +++ b/src/parse/check.c @@ -402,10 +402,22 @@ ANN static Type at_depth(const Env env, const Array_Sub array) { } static inline m_bool index_is_int(const Env env, Exp e, m_uint *depth) { - do if(isa(e->type, env->gwion->type[et_int]) < 0) - ERR_B(e->pos, _("array index %i must be of type 'int', not '%s'"), - *depth, e->type->name) +// do if(isa(e->type, env->gwion->type[et_int]) < 0) +// ERR_B(e->pos, _("array index %i must be of type 'int', not '%s'"), +// *depth, e->type->name) + + // do CHECK_BB(check_implicit(env, "@access", e, env->gwion->type[et_int])) + + const m_str str = "@access"; + const Type t = env->gwion->type[et_int]; + do { + struct Implicit imp = { .e=e, .t=t, .pos=e->pos }; + struct Op_Import opi = { .op=insert_symbol(str), .lhs=e->type, + .rhs=t, .data=(uintptr_t)&imp, .pos=e->pos }; + CHECK_OB(op_check(env, &opi)) + e->nspc = env->curr; + } while(++(*depth) && (e = e->next)); return GW_OK; } -- 2.43.0