diff options
Diffstat (limited to 'typecheck.c')
| -rw-r--r-- | typecheck.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/typecheck.c b/typecheck.c index 3e7084c8..b79b903c 100644 --- a/typecheck.c +++ b/typecheck.c @@ -525,7 +525,14 @@ type_t *get_type(env_t *env, ast_t *ast) case TextLiteral: return TEXT_TYPE; case TextJoin: { const char *lang = Match(ast, TextJoin)->lang; - return lang ? Match(get_binding(env, lang)->type, TypeInfoType)->type : TEXT_TYPE; + if (lang) { + binding_t *b = get_binding(env, lang); + if (!b || b->type->tag != TypeInfoType || Match(b->type, TypeInfoType)->type->tag != TextType) + code_err(ast, "There is no text language called '%s'", lang); + return Match(get_binding(env, lang)->type, TypeInfoType)->type; + } else { + return TEXT_TYPE; + } } case Var: { auto var = Match(ast, Var); |
