mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Fix for issue 820 (import name is not an identifier)
This commit is contained in:
+21
-1
@@ -3747,6 +3747,19 @@ Array<ImportPathItem> find_import_path(Checker *c, AstPackage *start, AstPackage
|
|||||||
return empty_path;
|
return empty_path;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
String get_invalid_import_name(String input) {
|
||||||
|
isize slash = 0;
|
||||||
|
for (isize i = input.len-1; i >= 0; i--) {
|
||||||
|
if (input[i] == '/' || input[i] == '\\') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
slash = i;
|
||||||
|
}
|
||||||
|
input = substring(input, slash, input.len);
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
void check_add_import_decl(CheckerContext *ctx, Ast *decl) {
|
void check_add_import_decl(CheckerContext *ctx, Ast *decl) {
|
||||||
if (decl->state_flags & StateFlag_BeenHandled) return;
|
if (decl->state_flags & StateFlag_BeenHandled) return;
|
||||||
decl->state_flags |= StateFlag_BeenHandled;
|
decl->state_flags |= StateFlag_BeenHandled;
|
||||||
@@ -3804,7 +3817,14 @@ void check_add_import_decl(CheckerContext *ctx, Ast *decl) {
|
|||||||
if (id->is_using) {
|
if (id->is_using) {
|
||||||
// TODO(bill): Should this be a warning?
|
// TODO(bill): Should this be a warning?
|
||||||
} else {
|
} else {
|
||||||
error(token, "Import name, %.*s, cannot be use as an import name as it is not a valid identifier", LIT(id->import_name.string));
|
if (id->import_name.string == "") {
|
||||||
|
String invalid_name = id->fullpath;
|
||||||
|
invalid_name = get_invalid_import_name(invalid_name);
|
||||||
|
|
||||||
|
error(id->token, "Import name %.*s, is not a valid identifier. Perhaps you want to reference the package by a different name like this: import <new_name> \"%.*s\" ", LIT(invalid_name), LIT(invalid_name));
|
||||||
|
} else {
|
||||||
|
error(token, "Import name, %.*s, cannot be use as an import name as it is not a valid identifier", LIT(id->import_name.string));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
GB_ASSERT(id->import_name.pos.line != 0);
|
GB_ASSERT(id->import_name.pos.line != 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user