33. 用于错误宏操作的 Boost 软件包

Apply 模块实现了各种基础结构,简化了宏的编写。

所有函数和符号都在 “macro_boost ”模块中,使用 require 可以访问该模块。

require daslib/macro_boost
CapturedVariable

CapturedVariable 字段是

variable

ast::Variable ?

expression

ast::ExprVar ?

eref

bool

将捕获的变量与使用该变量的 ExprVar 一起存储

33.1. 功能注释

MacroVerifyMacro
该宏将 macro_verify(expr,message,prog,at)转换为以下代码::
if !expr

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

33.2. 调用宏

return_skip_lockcheck

与常规 return <- 类似,但不检查锁

33.3. 实现细节

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

与校验相同,只是校验会产生宏错误,然后返回 [[ExpressionPtr]]

33.4. 未分类

capture_block(expr: ExpressionPtr)

capture_block returns array< macro_boost::CapturedVariable >

argument

argument type

expr

ExpressionPtr

收集表达式中所有捕获的变量。

collect_finally(expr: ExpressionPtr; alwaysFor: bool const)

collect_finally returns array< ast::ExprBlock ?>

argument

argument type

expr

ExpressionPtr

alwaysFor

bool const

收集表达式中的所有最后代码块。 返回 ExprBlock? 的数组,其中包含所有带有 finally 部分的块 不进入 “make_block ”表达式,如 lambda 或 “block ”表达式。

collect_labels(expr: ExpressionPtr)

collect_labels returns array<int>

argument

argument type

expr

ExpressionPtr

收集表达式中的所有标签。返回包含标签索引的整数数组 不用于 “make_block ”表达式,如 lambda 或 “block ”表达式。