feat(lang): module NAME uses A, B - a module reaches only the modules it names
A reference from a module that declares uses into a module it does not name is refused, exported or not, naming the use and the fix. A module with no uses clause keeps the old rule; a package's module is always usable; a friend is not held to it; a cycle in the declared graph is refused; LUDIC_VIS_REPORT=1 lists the violations as uses: lines. Reseed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
dd6a449921
commit
f4533331e7
19 changed files with 53571 additions and 50826 deletions
8
examples/rejected/uses_cycle.ludic
Normal file
8
examples/rejected/uses_cycle.ludic
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# L3: two modules that each say they use the other are refused, whatever they call
|
||||
import "uses_cycle/a"
|
||||
import "uses_cycle/b"
|
||||
program UsesCycle {
|
||||
entry {
|
||||
print(two())
|
||||
}
|
||||
}
|
||||
5
examples/rejected/uses_cycle/a/index.ludic
Normal file
5
examples/rejected/uses_cycle/a/index.ludic
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# a/index.ludic - a uses b
|
||||
module a uses b
|
||||
export function one() -> int {
|
||||
return 1
|
||||
}
|
||||
5
examples/rejected/uses_cycle/b/index.ludic
Normal file
5
examples/rejected/uses_cycle/b/index.ludic
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# b/index.ludic - and b uses a: the declared graph goes round
|
||||
module b uses a
|
||||
export function two() -> int {
|
||||
return one() + 1
|
||||
}
|
||||
8
examples/rejected/uses_missing.ludic
Normal file
8
examples/rejected/uses_missing.ludic
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# L3: fishing says `uses base` and calls items.inv_add - exported, but not a module fishing names
|
||||
import "uses_valley/items"
|
||||
import "uses_valley/fishing"
|
||||
program UsesMissing {
|
||||
entry {
|
||||
print(land())
|
||||
}
|
||||
}
|
||||
5
examples/rejected/uses_valley/fishing/index.ludic
Normal file
5
examples/rejected/uses_valley/fishing/index.ludic
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# fishing/index.ludic - says it uses base, and then reaches into items
|
||||
module fishing uses base
|
||||
export function land() -> int {
|
||||
return inv_add(1)
|
||||
}
|
||||
5
examples/rejected/uses_valley/items/index.ludic
Normal file
5
examples/rejected/uses_valley/items/index.ludic
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# items/index.ludic - exports inv_add, but that is not enough for a module that says `uses`
|
||||
module items
|
||||
export function inv_add(n: int) -> int {
|
||||
return n + 1
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue