compiler/
lib/
examples/
std/
arch/
char/
collections/
lang/
alloc/
ast/
gen/
il/
module/
parser/
resolver/
scanner/
alloc.rad
4.3 KiB
ast.rad
23.9 KiB
gen.rad
507 B
il.rad
15.3 KiB
lower.rad
287.8 KiB
module.rad
13.5 KiB
package.rad
1.2 KiB
parser.rad
82.9 KiB
resolver.rad
407.8 KiB
scanner.rad
18.3 KiB
sexpr.rad
6.3 KiB
strings.rad
2.2 KiB
types.rad
280 B
sys/
arch.rad
68 B
char.rad
855 B
collections.rad
39 B
fmt.rad
8.1 KiB
intrinsics.rad
467 B
io.rad
1.3 KiB
lang.rad
276 B
mem.rad
2.2 KiB
sys.rad
173 B
testing.rad
2.4 KiB
tests.rad
12.9 KiB
vec.rad
1.7 KiB
std.rad
281 B
scripts/
seed/
sublime/
test/
vim/
.gitignore
336 B
.gitsigners
112 B
LICENSE
1.1 KiB
Makefile
3.7 KiB
README
4.8 KiB
STYLE
2.5 KiB
std.lib
1.2 KiB
std.lib.test
347 B
lib/std/lang/package.rad
raw
| 1 | //! A *package* is a compilation unit tracked by the Radiance compiler. |
| 2 | |
| 3 | use std::mem; |
| 4 | use std::lang::ast; |
| 5 | use std::lang::module; |
| 6 | use std::lang::strings; |
| 7 | |
| 8 | /// Maximum number of packages processed in a single invocation. |
| 9 | export constant MAX_PACKAGES: u32 = 4; |
| 10 | |
| 11 | /// A compilation unit. |
| 12 | export record Package { |
| 13 | /// Package identifier (index in the package array). |
| 14 | id: u16, |
| 15 | /// Package name. |
| 16 | name: *[u8], |
| 17 | /// Root module identifier for this package, or `nil` if not yet registered. |
| 18 | // TODO: This shouldn't be optional. |
| 19 | rootModuleId: ?u16, |
| 20 | } |
| 21 | |
| 22 | /// Initialize `pkg` with the provided name and ID. |
| 23 | export fn init( |
| 24 | pkg: *mut Package, |
| 25 | id: u16, |
| 26 | name: *[u8], |
| 27 | pool: *mut strings::Pool |
| 28 | ) -> *mut Package { |
| 29 | set pkg.id = id; |
| 30 | set pkg.name = strings::intern(pool, name); |
| 31 | set pkg.rootModuleId = nil; |
| 32 | |
| 33 | return pkg; |
| 34 | } |
| 35 | |
| 36 | /// Register a module described by the file path. |
| 37 | export fn registerModule(pkg: *mut Package, graph: *mut module::ModuleGraph, filePath: *[u8]) -> u16 |
| 38 | throws (module::ModuleError) |
| 39 | { |
| 40 | let modId = try module::registerFromPath(graph, pkg.id, pkg.rootModuleId, filePath); |
| 41 | // First registered module becomes the root. |
| 42 | if pkg.rootModuleId == nil { |
| 43 | set pkg.rootModuleId = modId; |
| 44 | } |
| 45 | return modId; |
| 46 | } |