aboutsummaryrefslogtreecommitdiff
path: root/typecheck.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-06-16 18:43:37 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-06-16 18:43:37 -0400
commitae538ba9ebf5bfdd7ac1fc8b589200dbc20334c0 (patch)
tree9cb574b8c37f2418b506b586f2a9ca02bd8a2447 /typecheck.c
parent28de9aeb84e4257773b6d7f4c4cb04a0c1e10d40 (diff)
Properly produce an error for `foo := use -lbaz`
Diffstat (limited to 'typecheck.c')
-rw-r--r--typecheck.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/typecheck.c b/typecheck.c
index d3ce2da6..a803907a 100644
--- a/typecheck.c
+++ b/typecheck.c
@@ -238,10 +238,13 @@ void bind_statement(env_t *env, ast_t *statement)
const char *name = Match(decl->var, Var)->name;
if (get_binding(env, name))
code_err(decl->var, "A %T called '%s' has already been defined", get_binding(env, name)->type, name);
- if (decl->value->tag == Use || decl->value->tag == Import)
+ if (decl->value->tag == Use || decl->value->tag == Import) {
+ if (decl->value->tag == Use && strncmp(Match(decl->value, Use)->name, "-l", 2) == 0)
+ code_err(statement, "External library files specified with -l can't be assigned to a variable");
(void)load_module(env, decl->value);
- else
+ } else {
bind_statement(env, decl->value);
+ }
type_t *type = get_type(env, decl->value);
CORD prefix = namespace_prefix(env->libname, env->namespace);
CORD code = CORD_cat(prefix ? prefix : "$", name);