From ae538ba9ebf5bfdd7ac1fc8b589200dbc20334c0 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sun, 16 Jun 2024 18:43:37 -0400 Subject: Properly produce an error for `foo := use -lbaz` --- typecheck.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'typecheck.c') 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); -- cgit v1.2.3