ludic/examples/lang/resources.ludic
Orkuncakilkaya e543525eb7 feat(lang): L9 resource files - registry ... from
registry NAME of RECORD [as PREFIX] from "file.lres" fills a registry from a data
file of key { field: value } entries, read at compile time with the record as its
schema: every entry is checked like a def, errors name the resource file's line,
nested records and lists of them are bare { } / [{ }] typed by their fields, and
values are expressions in the registry's module. The entries are compiled in, so
nothing parses at start-up and a build that succeeds has validated its resources.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 14:00:20 +03:00

24 lines
886 B
Text

# resources.ludic — L9: a registry whose entries live in a resource file. `from` names the file;
# it is read when the program is compiled, every entry checked against the record (the schema),
# and compiled in - so a mistake is a compile error at the resource file's line, and nothing parses
# at start-up. A field whose type is a record, or a list of them, takes a bare `{ ... }`.
#
# Running it prints: 2 Axe 2 Split 10 0 1
program Resources {
numbers float
property Use {
verb: string = ""
minutes: int = 0
}
property Tool {
key: string = ""
name: string = ""
weight: float = 0.0
uses: []Use = null
}
registry Tools of Tool as TL from "data/tools.lres"
entry {
let axe = Tools[TL_AXE]
print(`{TL_COUNT} {axe.name} {len(axe.uses)} {axe.uses[1].verb} {axe.uses[1].minutes} {len(Tools[TL_LANTERN].uses)} {tools_find("lantern")}`)
}
}