33. Boost package for the miscelanious macro manipulations

Apply module implements miscellaneous infrastructure which simplifies writing of macros.

All functions and symbols are in “macro_boost” module, use require to get access to it.

require daslib/macro_boost
CapturedVariable

CapturedVariable fields are

variable

ast::Variable ?

expression

ast::ExprVar ?

eref

bool

Stored captured variable together with the ExprVar which uses it

33.1. Function annotations

MacroVerifyMacro
This macro convert macro_verify(expr,message,prog,at) to the following code::
if !expr

macro_error(prog,at,message) return [[ExpressionPtr]]

33.2. Call macros

return_skip_lockcheck

this is similar to regular return <-, but it does not check for locks

33.3. Implementation details

macro_verify(expr: bool const; prog: ProgramPtr; at: LineInfo const; message: string const)

argument

argument type

expr

bool const

prog

ProgramPtr

at

rtti::LineInfo const

message

string const

Same as verify, only the check will produce macro error, followed by return [[ExpressionPtr]]

33.4. Uncategorized

capture_block(expr: ExpressionPtr)

capture_block returns array< macro_boost::CapturedVariable >

argument

argument type

expr

ExpressionPtr

Collect all captured variables in the expression.

collect_finally(expr: ExpressionPtr; alwaysFor: bool const)

collect_finally returns array< ast::ExprBlock ?>

argument

argument type

expr

ExpressionPtr

alwaysFor

bool const

Collect all finally blocks in the expression. Returns array of ExprBlock? with all the blocks which have finally section Does not go into ‘make_block’ expression, such as lambda, or ‘block’ expressions

collect_labels(expr: ExpressionPtr)

collect_labels returns array<int>

argument

argument type

expr

ExpressionPtr

Collect all labels in the expression. Returns array of integer with label indices Does not go into ‘make_block’ expression, such as lambda, or ‘block’ expressions