ANN static m_bool check_stmt_list(const Env env, Stmt_List list);
ANN m_bool check_class_def(const Env env, const Class_Def class_def);
-ANN static m_bool _check_implicit(const Env env, const m_str str,
- const Exp e, const Type t) {
- 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;
- return GW_OK;
-}
-
ANN static m_bool check_internal(const Env env, const Symbol sym,
const Exp e, const Type t) {
struct Implicit imp = { .e=e, .t=t, .pos=e->pos };
CHECK_OB(check_exp(env, array->exp))
m_uint depth = 0;
Exp e = array->exp;
- const Type t_int = env->gwion->type[et_int];
- do CHECK_BB(_check_implicit(env, "@access", e, t_int))
+ const Symbol sym = insert_symbol("@access");
+ do CHECK_BB(check_internal(env, sym, e, env->gwion->type[et_int]))
while(++(depth) && (e = e->next));
if(depth != array->depth)
ERR_B(array->exp->pos, _("invalid array acces expression."))
}
ANN static inline m_bool cond_type(const Env env, const Exp e) {
- const m_str str = "@repeat";
+ const Symbol sym = insert_symbol("@repeat");
const Type t_int = env->gwion->type[et_int];
- return _check_implicit(env, str, e, t_int);
+ return check_internal(env, sym, e, t_int);
}
#define stmt_func_xxx(name, type, prolog, exp) describe_stmt_func(check, name, type, prolog, exp)