diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-08-18 14:44:15 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-08-18 14:44:15 -0400 |
| commit | f4b04a1b8cd882e25fee592c819650c9b7e8566b (patch) | |
| tree | dcecb8b4f83d569ebb00beb79988222d195b8f4c /typecheck.c | |
| parent | 04603308af3a2984d42eaa9e301cac0ffbded2a4 (diff) | |
Improved syntax for dollar-string literals
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); |
