-
Notifications
You must be signed in to change notification settings - Fork 1
/
builtin_functions.mdtlbl
74 lines (69 loc) · 3.21 KB
/
builtin_functions.mdtlbl
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#**
* 这是0.14.6添加的新功能, 在初始化时会增加一系列绑定,
* 其中绑定到的值类型为内置的函数.
*
* 以下为这些函数的作用和参数清单
*
* * `Type[var]`: 获取右侧量的类型
* * `Stringify[var]`: 将传入的Var全部转换成字符串格式的Var
* * `Concat[a b]`: 将传入的两个字符串连接
* * `Info[var]`: 以info级日志形式将传入Var输出
* * `Err[var]`: 以err级日志形式将传入Var输出
* * `Unbind[var]`: 传入一个值绑定, 返回绑定者
* * `Const[name value]`: 动态目标的进行一个const, 并泄露到上层,
* 调用者需要保证被泄漏的expand不会展开次数不同, 比如直接位于重复块中操作重复块外
* * `Binder[name value]`: 传入一个值绑定, 将其被绑定值const给给定名称
* * `BindHandle[value]`: 直接获取值绑定的句柄, 但是不进行最后一层全局常量域追踪
* * `BindHandle2[value name]`: 直接获取值绑定的句柄, 但是不进行最后一层全局常量域追踪.
* 与另一个不同的是它使用被绑定值和绑定量两个参数
* * `Debug[value]`: 以debug形式将传入值输出到日志
* * `DebugBinds[value]`: 以某种debug形式将某一个句柄的所有绑定量的值输出
* * `Exit[code]`: 直接使编译器以给定的退出码值退出
* * `Status[]`: 获取上一个内置函数的退出代码, 通常情况下, 零代表正常, 非零即异常
* * `ArgsLen[]`: 获取上层有效参数表长度
* * `SliceArgs[start end]`: 将参数切分, 但不take
* * `ArgsHandle[idx]`: 拿到指定下标的参数的const句柄, 配合Const内置函数转移其值
* * `MetaDebug[]`: 以调试形式输出编译时元数据
* * `MaxExpandDepth[]`: 获取最大展开层数限制
* * `SetMaxExpandDepth[depth]`: 设置最大展开层数限制
* * `ExpandStack[]`: 调试输出当前展开栈情况
* * `EvalNum[num]`: 尝试常量计算一个值, 失败则返回`__`
* * `IsString[str]`: 返回给定量是否是一个字符串
* * `RefArg`: 返回指定下标的上层参数句柄, 一般再用Const解开
* * `MissesMatch[enable]`: 当enable非0时, 将match失配打印日志功能开启
* * `NewBind[enable]`: 当enable非0时, 新建绑定量时将会打印日志
* * `BindSep[sep]`: 当sep非空字符串时, 绑定量将以指定分隔的形式输出
* 例如: take BindSep["%"]; a.b = 2;的a.b在take后的句柄会变成'a%b'
* NOTE: 注意, 如果选择的分隔符分隔后结果和现有var冲突可能会产生奇怪的问题,
* 或者在字符串上绑定等
* * `SetNoOp[line]`: 根据给定的字串设置noop语句生成的行,
* 包含一层简单的反斜杠解释规则:
* `\\` => `\`
* `\'` => `"`
* `\` ch @ anychar => `\` + ch
* 需要注意的是, 字符串本身也会进行转义, 所以要注意一下
* 还要注意转义后双引号本身需要配对
*#
print Builtin.Type[x];
print Builtin.Type[2];
print Builtin.Type[()];
print Builtin.Type[x.y];
print Builtin.Type[..];
print Builtin.Type[$];
#* >>>
print var
print var
print dexp
print valuebind
print binder
print resulthandle
*#
take Builtin.Info["This is a info"];
take Builtin.Err["This is a err"];
const Name = `X`;
const Value = (m:);
take Builtin.Const[Name Value];
print X;
#* >>>
print m
*#