_ prefixed top-level symbols now file-local

This commit is contained in:
2026-07-11 23:37:30 +02:00
parent 6dd6b7ff54
commit 220b1c6e82
15 changed files with 282 additions and 90 deletions
+43
View File
@@ -6645,6 +6645,49 @@ imports_are_file_local :: proc(t: ^testing.T) {
testing.expect(t, !state.success)
}
@(test)
leading_underscore_declarations_are_file_hidden :: proc(t: ^testing.T) {
output := "/tmp/brolang-test-hidden-declarations"
defer _ = os.remove(output)
status := compiler_core.compile_package("examples/packages/hidden_valid/app", output)
testing.expect_value(t, status, 0)
state := run_executable(output)
testing.expect_value(t, state.exit_code, 7)
}
@(test)
file_hidden_declarations_are_not_package_members :: proc(t: ^testing.T) {
sources := source.init_store()
defer source.destroy_store(&sources)
diagnostics := source.init_store_diagnostics(&sources)
defer source.destroy_diagnostics(&diagnostics)
symbols := symbol.init_table()
defer symbol.destroy_table(&symbols)
module, loaded := loader.load("examples/packages/hidden_invalid/app", &sources, &diagnostics, &symbols)
defer ast.destroy_module(&module)
hir_module := checker.check(&module, &diagnostics, &symbols)
defer hir.destroy_module(&hir_module)
testing.expect(t, loaded)
found_sibling := false
found_sibling_value := false
found_sibling_type := false
found_import := false
found_collision := false
for diagnostic in diagnostics.items {
found_sibling = found_sibling || strings.contains(diagnostic.message, "unresolved function '_sibling'")
found_sibling_value = found_sibling_value || strings.contains(diagnostic.message, "unresolved global '_sibling_value'")
found_sibling_type = found_sibling_type || strings.contains(diagnostic.message, "unknown or opaque record type '_Sibling'")
found_import = found_import || strings.contains(diagnostic.message, "package 'dep' has no member '_secret'")
found_collision = found_collision || strings.contains(diagnostic.message, "duplicate function '_collision'")
}
testing.expect(t, found_sibling)
testing.expect(t, found_sibling_value)
testing.expect(t, found_sibling_type)
testing.expect(t, found_import)
testing.expect(t, found_collision)
}
@(test)
package_import_cycles_are_valid :: proc(t: ^testing.T) {
output := "/tmp/brolang-test-package-cycle"