layout/build-class
Symbol: layout/build-class
Use-case: Class expression block syntax. Lowers to
(build-class NAME SUPERS (begin BODY)). The form evaluates to the new
class object and does not bind NAME (see
compile/build-class). To bind it,
store the value with var, write class NAME: to
build and bind in one step, or global class to bind at the module.
The superclass list may be omitted; when missing, the expansion uses () (nil).
Behaviour: No peers. Parses header as (build-class NAME) or
(build-class NAME SUPERS). When supers are omitted, uses nil so the
result is (build-class NAME () BODY). When present, SUPERS is the
parsed form (e.g. a single base or a parenthesized list). Raises
LayoutError if the header has fewer than two elements (missing name) or
more than three (extra forms after supers).
Syntax:
build-class NAME:
BODY
;; -> (build-class NAME () (begin BODY))
build-class NAME (Base1 Base2):
BODY
;; -> (build-class NAME (Base1 Base2) (begin BODY))
Examples:
build-class C:
x
;; -> (build-class C () (begin x))
build-class C (Base):
x
;; -> (build-class C (Base) (begin x))
var Point:
build-class Point:
var x 0
var y 0
;; -> (var Point (build-class Point () (begin (var x 0) (var y 0))))
Also: special form build-class.