aboutsummaryrefslogtreecommitdiff
path: root/typecheck.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-08-18 14:44:15 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-08-18 14:44:15 -0400
commitf4b04a1b8cd882e25fee592c819650c9b7e8566b (patch)
treedcecb8b4f83d569ebb00beb79988222d195b8f4c /typecheck.c
parent04603308af3a2984d42eaa9e301cac0ffbded2a4 (diff)
Improved syntax for dollar-string literals
Diffstat (limited to 'typecheck.c')
-rw-r--r--typecheck.c9
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);