aboutsummaryrefslogtreecommitdiff
path: root/typecheck.c
diff options
context:
space:
mode:
Diffstat (limited to 'typecheck.c')
-rw-r--r--typecheck.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/typecheck.c b/typecheck.c
index eee5f6f3..00e7c662 100644
--- a/typecheck.c
+++ b/typecheck.c
@@ -207,7 +207,7 @@ void bind_statement(env_t *env, ast_t *statement)
}
case Use: {
auto use = Match(statement, Use);
- const char *name = file_base_name(use->path);
+ const char *name = file_base_name(use->raw_path);
if (Table_str_get(*env->imports, name))
break;
@@ -217,8 +217,12 @@ void bind_statement(env_t *env, ast_t *statement)
const char *my_name = heap_strn(CORD_to_const_char_star(env->file_prefix), CORD_len(env->file_prefix)-1);
Table_str_set(module_env->imports, my_name, env);
- file_t *f = load_file(use->path);
- if (!f) errx(1, "No such file: %s", use->path);
+ const char *resolved_path = resolve_path(use->raw_path, statement->file->filename, getenv("USE_PATH"));
+ if (!resolved_path)
+ code_err(statement, "No such file exists: \"%s\"", use->raw_path);
+
+ file_t *f = load_file(resolved_path);
+ if (!f) errx(1, "No such file: %s", resolved_path);
ast_t *ast = parse_file(f, NULL);
if (!ast) errx(1, "Could not compile!");
@@ -550,7 +554,7 @@ type_t *get_type(env_t *env, ast_t *ast)
return Type(VoidType);
}
case Use: {
- const char *path = Match(ast, Use)->path;
+ const char *path = Match(ast, Use)->raw_path;
return Type(ModuleType, file_base_name(path));
}
case Return: case Stop: case Skip: {