aboutsummaryrefslogtreecommitdiff
path: root/cm/ex01.lua
blob: f92ec2ae4652eeddc820c0a97c8f3abddb404cc2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- Environment is loaded with the utils (as metatable.__index)
-- Global vars (aka properties on env) will be read as decls

-- TERMINOLOGY:
-- decl: a property somewhere, the property name and the value makes up the declaration
-- type: a value (perhaps a part of a decl), which contains a type tag ("struct", "union", "alias", etc.) and extra info for that kind of type

-- _struct, _union, _alias, etc. are type construction helpers.
-- They take the essential info, and returns a value properly decorated. For example it might just add a property {_tag="struct"}, or perhaps more.

-- name implied by property key here
Bar = _struct({
    -- _t: Loads another type by its name. Return the type, or a placeholder if the type is not yet available
    --     Useful recursive definitions
    --     Undefined type errors generated on the referential resolution pass (i.e. not immediately)
    field1 = _t("i32"),
    field2 = _t("string"),
    -- Deferred loading as described above
    compound_field = _t("Foo"),
})

uint32 = _alias(_t("u32"))

-- Note, defined after Bar!
Foo = _struct({
    n = _t("i32"),
})