package-private visibility
This commit is contained in:
+17
-25
@@ -1251,12 +1251,12 @@ load_package :: proc(
|
||||
|
||||
declaration_conflicts :: proc(module: ^ast.Module, pkg: ast.Package_Id, file: ast.File_Id, name: symbol.Id) -> bool {
|
||||
for function in module.functions {
|
||||
if function.pkg == pkg && function.name == name && (!function.file_hidden || function.file == file) {
|
||||
if function.pkg == pkg && function.name == name {
|
||||
return true
|
||||
}
|
||||
}
|
||||
for global in module.globals {
|
||||
if global.pkg == pkg && global.name == name && (!global.file_hidden || global.file == file) {
|
||||
if global.pkg == pkg && global.name == name {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -1327,8 +1327,7 @@ find_visible_enum_global :: proc(
|
||||
public_only := false,
|
||||
) -> ast.Global_Id {
|
||||
for global, index in module.globals {
|
||||
if global.pkg == pkg && global.name == name &&
|
||||
(!global.file_hidden || !public_only && global.file == file) {
|
||||
if global.pkg == pkg && global.name == name && (!global.package_hidden || !public_only) {
|
||||
return ast.global_id(index)
|
||||
}
|
||||
}
|
||||
@@ -1449,26 +1448,20 @@ resolve_enum_values :: proc(state: ^State) {
|
||||
}
|
||||
}
|
||||
|
||||
alias_declarations_conflict :: proc(left_file: ast.File_Id, left_hidden: bool, right_file: ast.File_Id, right_hidden: bool) -> bool {
|
||||
return left_file == right_file if left_hidden && right_hidden else true
|
||||
}
|
||||
|
||||
alias_conflicts_with_declaration :: proc(module: ^ast.Module, alias: ast.Declaration_Alias) -> bool {
|
||||
for function in module.functions {
|
||||
if function.pkg == alias.pkg && function.name == alias.name &&
|
||||
alias_declarations_conflict(alias.file, alias.file_hidden, function.file, function.file_hidden) {
|
||||
if function.pkg == alias.pkg && function.name == alias.name {
|
||||
return true
|
||||
}
|
||||
}
|
||||
for global in module.globals {
|
||||
if global.pkg == alias.pkg && global.name == alias.name &&
|
||||
alias_declarations_conflict(alias.file, alias.file_hidden, global.file, global.file_hidden) {
|
||||
if global.pkg == alias.pkg && global.name == alias.name {
|
||||
return true
|
||||
}
|
||||
}
|
||||
for item in module.type_store.nodes {
|
||||
if item.declared && item.pkg == u32(alias.pkg) && item.name == u32(alias.name) &&
|
||||
alias_declarations_conflict(alias.file, alias.file_hidden, ast.File_Id(item.file), item.file_hidden) {
|
||||
if item.declared && item.pkg == u32(alias.pkg) && item.name == u32(alias.name) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -1480,7 +1473,7 @@ direct_alias_target :: proc(module: ^ast.Module, pkg: ast.Package_Id, name: symb
|
||||
target: u32
|
||||
kinds := 0
|
||||
for function, index in module.functions {
|
||||
if function.pkg == pkg && function.name == name && !function.generated && !function.file_hidden {
|
||||
if function.pkg == pkg && function.name == name && !function.generated && !function.package_hidden {
|
||||
kind = .Function
|
||||
target = u32(ast.function_id(index))
|
||||
kinds += 1
|
||||
@@ -1488,7 +1481,7 @@ direct_alias_target :: proc(module: ^ast.Module, pkg: ast.Package_Id, name: symb
|
||||
}
|
||||
}
|
||||
for global, index in module.globals {
|
||||
if global.pkg == pkg && global.name == name && !global.file_hidden {
|
||||
if global.pkg == pkg && global.name == name && !global.package_hidden {
|
||||
kind = .Global
|
||||
target = u32(ast.global_id(index))
|
||||
kinds += 1
|
||||
@@ -1507,22 +1500,22 @@ direct_alias_target :: proc(module: ^ast.Module, pkg: ast.Package_Id, name: symb
|
||||
|
||||
hidden_alias_target_exists :: proc(module: ^ast.Module, pkg: ast.Package_Id, name: symbol.Id) -> bool {
|
||||
for function in module.functions {
|
||||
if function.pkg == pkg && function.name == name && function.file_hidden {
|
||||
if function.pkg == pkg && function.name == name && function.package_hidden {
|
||||
return true
|
||||
}
|
||||
}
|
||||
for global in module.globals {
|
||||
if global.pkg == pkg && global.name == name && global.file_hidden {
|
||||
if global.pkg == pkg && global.name == name && global.package_hidden {
|
||||
return true
|
||||
}
|
||||
}
|
||||
for item in module.type_store.nodes {
|
||||
if item.declared && item.pkg == u32(pkg) && item.name == u32(name) && item.file_hidden {
|
||||
if item.declared && item.pkg == u32(pkg) && item.name == u32(name) && item.package_hidden {
|
||||
return true
|
||||
}
|
||||
}
|
||||
for alias in module.aliases {
|
||||
if alias.valid && alias.pkg == pkg && alias.name == name && alias.file_hidden {
|
||||
if alias.valid && alias.pkg == pkg && alias.name == name && alias.package_hidden {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -1531,7 +1524,7 @@ hidden_alias_target_exists :: proc(module: ^ast.Module, pkg: ast.Package_Id, nam
|
||||
|
||||
find_public_alias :: proc(module: ^ast.Module, pkg: ast.Package_Id, name: symbol.Id) -> int {
|
||||
for alias, index in module.aliases {
|
||||
if alias.valid && alias.pkg == pkg && alias.name == name && !alias.file_hidden {
|
||||
if alias.valid && alias.pkg == pkg && alias.name == name && !alias.package_hidden {
|
||||
return index
|
||||
}
|
||||
}
|
||||
@@ -1592,7 +1585,7 @@ resolve_declaration_alias :: proc(state: ^State, index: int, states: []u8) -> bo
|
||||
alias.diagnostic = source.addf(
|
||||
state.diagnostics,
|
||||
alias.span,
|
||||
"package member '%s.%s' is file-hidden",
|
||||
"package member '%s.%s' is package-hidden",
|
||||
symbol.resolve(state.symbols, alias.qualifier),
|
||||
symbol.resolve(state.symbols, alias.member),
|
||||
)
|
||||
@@ -1618,8 +1611,7 @@ validate_declaration_aliases :: proc(state: ^State) {
|
||||
continue
|
||||
}
|
||||
for previous in state.module.aliases[:index] {
|
||||
if previous.pkg == alias.pkg && previous.name == alias.name &&
|
||||
alias_declarations_conflict(alias.file, alias.file_hidden, previous.file, previous.file_hidden) {
|
||||
if previous.pkg == alias.pkg && previous.name == alias.name {
|
||||
alias.diagnostic = source.addf(state.diagnostics, alias.span, "duplicate declaration alias '%s'", name)
|
||||
alias.valid = false
|
||||
break
|
||||
@@ -1669,9 +1661,9 @@ validate_declaration_aliases :: proc(state: ^State) {
|
||||
u32(alias.pkg),
|
||||
u32(alias.name),
|
||||
file=u32(alias.file),
|
||||
file_hidden=alias.file_hidden,
|
||||
package_hidden=alias.package_hidden,
|
||||
)
|
||||
if !types.define_alias(&state.module.type_store, id, types.Type(alias.target)) {
|
||||
if !types.define_alias(&state.module.type_store, id, types.Type(alias.target), alias.package_hidden) {
|
||||
alias.diagnostic = source.addf(state.diagnostics, alias.span, "duplicate type declaration '%s'", symbol.resolve(state.symbols, alias.name))
|
||||
alias.valid = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user