ANN m_bool type_engine_check_prog(const Env, const Ast);
ANN m_bool traverse_func_template(const Env, const Func_Def);
ANN2(1,3) void env_err(const Env, const loc_t pos, const m_str fmt, ...);
+ANN Value global_string(const Env env, const m_str str);
#endif
STRING(o) = "";
}
-ANN Type check_prim_str(const Env, const m_str *);
ID_CHECK(check_funcpp) {
((Exp_Primary*)prim)->prim_type = ae_prim_str;
((Exp_Primary*)prim)->d.str = env->func ? env->func->name : env->class_def ?
env->class_def->name : env->name;
- return check_prim_str(env, &prim->d.str);
+ ((Exp_Primary*)prim)->value = global_string(env, prim->d.str);
+ return prim->value->type;
}
static GACK(gack_string) {
nspc_add_value_front(base->e->owner, sym, v);
return v;
}
+
+ANN Value global_string(const Env env, const m_str str) {
+ char c[strlen(str) + 8];
+ sprintf(c, "%s:string", str);
+ const Symbol sym = insert_symbol(c);
+ const Value v = nspc_lookup_value0(env->global_nspc, sym);
+ if(v)
+ return v;
+ const Value value = new_value(env->gwion->mp, env->gwion->type[et_string], s_name(sym));
+ nspc_add_value_front(env->global_nspc, sym, value);
+ return value;
+}
return v->type;
}
-ANN static inline Value prim_str_value(const Env env, const Symbol sym) {
- const Value v = nspc_lookup_value0(env->global_nspc, sym);
- if(v)
- return v;
- const Value value = new_value(env->gwion->mp, env->gwion->type[et_string], s_name(sym));
- nspc_add_value_front(env->global_nspc, sym, value);
- return value;
-}
-
ANN Type check_prim_str(const Env env, const m_str *data) {
- if(!prim_self(data)->value) {
- const m_str str = *data;
- char c[strlen(str) + 8];
- sprintf(c, "%s:string", str);
- prim_self(data)->value = prim_str_value(env, insert_symbol(c));
- }
+ if(!prim_self(data)->value)
+ prim_self(data)->value = global_string(env, *data);
return env->gwion->type[et_string];// prim->value
}