Forwarded from 一起偷偷观察 DIYgod (DIYgod @我永远喜欢02)
This media is not supported in your browser
VIEW IN TELEGRAM
## 基本数据类型
+ nil
+ bool
+ number
+ list
+ string
### 行注释
任何不可识别的都作为标识符
p.s. 冰封波博客上那个字符串 escape 失败不报错作为标识符的真是奇妙
## 展开规则:
+ 对任何宏:检查参数列表长度,对所有参数 s-expression 列表递归展开并对标识符解引用,然后填充宏参数递归展开,如果是 varargs 宏就直接将求值后的列表填充到 varargs 参数里
+ 对
+ 对
## 插件:
0. 提供
1. 取值 hook
2. 找不到变量 procedure
3. SEND handler
4. 错误 hook
## 作用域:
全局变量
全局变量
不过它是惰性求值的
Lime 使用嵌套作用域
全局变量
+ nil
()+ bool
#t #f+ number
01 0x1 0b1001 0o122 2323N 32323D 2233.223F 66666L 6B+ list
(a b c)+ string
'' "" "\"" "\n"### 行注释
; comment任何不可识别的都作为标识符
p.s. 冰封波博客上那个字符串 escape 失败不报错作为标识符的真是奇妙
## 展开规则:
+ 对任何宏:检查参数列表长度,对所有参数 s-expression 列表递归展开并对标识符解引用,然后填充宏参数递归展开,如果是 varargs 宏就直接将求值后的列表填充到 varargs 参数里
+ 对
^* 宏:检查参数列表长度,然后填充宏参数递归展开,如果是 varargs 宏就直接将求值后的列表填充到 varargs 参数里+ 对
. 宏:检查对应 send handler 参数列表长度,将所有参数 s-expression 列表递归展开并对标识符解引用,发送调用到处理 handler## 插件:
0. 提供
ext ext~ macro 和 onLoad(Llime/Lime)V`、`onUnload(Llime/Lime)V`,插件类统一叫 `LimePlugin1. 取值 hook
2. 找不到变量 procedure
3. SEND handler
4. 错误 hook
## 作用域:
全局变量
args 在每次递归展开时有效,它是惰性求值的全局变量
__stack 储存了所有作用域表不过它是惰性求值的
Lime 使用嵌套作用域
全局变量
__env 表示整个 Lime 全局表__lime 表示解释器对象