replace leading _ for private symbols with keyword hide
This commit is contained in:
+37
-11
@@ -7353,13 +7353,38 @@ imports_are_file_local :: proc(t: ^testing.T) {
|
||||
}
|
||||
|
||||
@(test)
|
||||
leading_underscore_declarations_are_file_hidden :: proc(t: ^testing.T) {
|
||||
hide_is_rejected_outside_named_top_level_declarations :: proc(t: ^testing.T) {
|
||||
cases := [?]string{
|
||||
`hide import "../dep"`,
|
||||
`hide dep :: import "../dep"`,
|
||||
`hide func() void {}`,
|
||||
`main func(hide value i32) void {}`,
|
||||
`Box :: struct { hide i32 }`,
|
||||
`main func() void { hide value i32 = 1 }`,
|
||||
}
|
||||
for text in cases {
|
||||
source_file := source.Source{path="test.bro", text=text}
|
||||
diagnostics := source.init_diagnostics(&source_file)
|
||||
defer source.destroy_diagnostics(&diagnostics)
|
||||
symbols := symbol.init_table()
|
||||
defer symbol.destroy_table(&symbols)
|
||||
stream := lexer.lex(&source_file, &diagnostics, &symbols)
|
||||
defer delete(stream.items)
|
||||
module := parser.parse(&stream, &source_file, &diagnostics)
|
||||
defer ast.destroy_module(&module)
|
||||
|
||||
testing.expect(t, len(diagnostics.items) > 0)
|
||||
}
|
||||
}
|
||||
|
||||
@(test)
|
||||
hide_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)
|
||||
testing.expect_value(t, state.exit_code, 9)
|
||||
}
|
||||
|
||||
@(test)
|
||||
@@ -7382,11 +7407,11 @@ file_hidden_declarations_are_not_package_members :: proc(t: ^testing.T) {
|
||||
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'")
|
||||
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)
|
||||
@@ -7513,8 +7538,8 @@ RenamedBox :: alias dep.Box
|
||||
RenamedPoint :: alias dep.Point
|
||||
counter :: alias dep.counter
|
||||
answer :: alias dep.answer
|
||||
_local_answer :: alias dep.answer
|
||||
local_answer func() i32 { return _local_answer() }
|
||||
hide local_answer_alias :: alias dep.answer
|
||||
local_answer func() i32 { return local_answer_alias() }
|
||||
Scalar :: alias i32
|
||||
MaybePoint :: alias ?@dep.Point
|
||||
Concrete :: alias dep.Box(i32)
|
||||
@@ -7567,14 +7592,14 @@ declaration_aliases_diagnose_invalid_targets :: proc(t: ^testing.T) {
|
||||
testing.expect(t, os.make_directory(directory) == nil)
|
||||
}
|
||||
dep_text := `visible func() i32 { return 1 }
|
||||
_hidden func() i32 { return 2 }
|
||||
hide hidden_target func() i32 { return 2 }
|
||||
ambiguous func() i32 { return 3 }
|
||||
ambiguous i32 :: 4
|
||||
`
|
||||
facade_text := `dep :: import "../dep"
|
||||
gone :: import "../gone"
|
||||
missing :: alias dep.missing
|
||||
hidden :: alias dep._hidden
|
||||
hidden :: alias dep.hidden_target
|
||||
unknown :: alias nope.visible
|
||||
unavailable :: alias gone.visible
|
||||
ambiguous :: alias dep.ambiguous
|
||||
@@ -10589,6 +10614,7 @@ main func() i32 {
|
||||
@(test)
|
||||
keywords_are_valid_enum_members_and_tagged_union_variants :: proc(t: ^testing.T) {
|
||||
testing.expect(t, token.is_keyword(.Keyword_Func))
|
||||
testing.expect(t, token.is_keyword(.Keyword_Hide))
|
||||
testing.expect(t, token.is_keyword(.Keyword_C_Longdouble))
|
||||
testing.expect(t, !token.is_keyword(.Identifier))
|
||||
testing.expect(t, !token.is_keyword(.Underscore))
|
||||
|
||||
Reference in New Issue
Block a user