Skip to content

Building CPS ​

Unlike Tree-IL, the CPS language is built to be constructed and deconstructed with abstract macros instead of via procedural constructors or accessors, or instead of S-expression matching.

Deconstruction and matching is handled adequately by the match form from (ice-9 match). See Pattern Matching. Construction is handled by a set of mutually builder macros: build-term, build-cont, and build-exp.

In the following interface definitions, consider term and exp to be built by build-term or build-exp, respectively. Consider any other name to be evaluated as a Scheme expression. Many of these forms recognize unquote in some contexts, to splice in a previously-built value; see the specifications below for full details.

Scheme Syntax: build-term ,val ​

Scheme Syntax: build-term ($continue k src exp) ​

Scheme Syntax: build-exp ,val ​

Scheme Syntax: build-exp ($const val) ​

Scheme Syntax: build-exp ($prim name) ​

Scheme Syntax: build-exp ($fun kentry) ​

Scheme Syntax: build-exp ($const-fun kentry) ​

Scheme Syntax: build-exp ($code kentry) ​

Scheme Syntax: build-exp ($rec names syms funs) ​

Scheme Syntax: build-exp ($call proc (arg ...)) ​

Scheme Syntax: build-exp ($call proc args) ​

Scheme Syntax: build-exp ($callk k proc (arg ...)) ​

Scheme Syntax: build-exp ($callk k proc args) ​

Scheme Syntax: build-exp ($primcall name param (arg ...)) ​

Scheme Syntax: build-exp ($primcall name param args) ​

Scheme Syntax: build-exp ($values (arg ...)) ​

Scheme Syntax: build-exp ($values args) ​

Scheme Syntax: build-exp ($prompt escape? tag handler) ​

Scheme Syntax: build-term ($branch kf kt src op param (arg ...)) ​

Scheme Syntax: build-term ($branch kf kt src op param args) ​

Scheme Syntax: build-term ($switch kf kt* src arg) ​

Scheme Syntax: build-term ($throw src op param (arg ...)) ​

Scheme Syntax: build-term ($throw src op param args) ​

Scheme Syntax: build-term ($prompt k kh src escape? tag) ​

Scheme Syntax: build-cont ,val ​

Scheme Syntax: build-cont ($kargs (name ...) (sym ...) term) ​

Scheme Syntax: build-cont ($kargs names syms term) ​

Scheme Syntax: build-cont ($kreceive req rest kargs) ​

Scheme Syntax: build-cont ($kfun src meta self ktail kclause) ​

Scheme Syntax: build-cont ($kclause ,arity kbody kalt) ​

Scheme Syntax: build-cont ($kclause (req opt rest kw aok?) kbody) ​

Construct a CPS term, expression, or continuation.

There are a few more miscellaneous interfaces as well.

Scheme Procedure: make-arity req opt rest kw allow-other-keywords? ​

A procedural constructor for $arity objects.

Scheme Syntax: rewrite-term val (pat term) ... ​

Scheme Syntax: rewrite-exp val (pat exp) ... ​

Scheme Syntax: rewrite-cont val (pat cont) ... ​

Match val against the series of patterns pat..., using match. The body of the matching clause should be a template in the syntax of build-term, build-exp, or build-cont, respectively.