豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 412 行 · 23791 字节 · UTF-8
§
寻观「底层库」之书。
寻观「客体二号」之「布局」之书。
寻观「客体二号」之「平台」之书。
寻观「客体二号」之「基础」之书。
寻观「客体二号」之「实例」之书。
寻观「客体二号」之「模块」之书。
寻观「客体二号」之「控制」之书。
寻观「客体二号」之「链接」之书。
寻观「客体二号」之「宿主对象」之书。
寻观「客体二号」之「主机」之书。
寻观「客体二号」之「WASI分派」之书。

「:文言:调用与尾调用:立帧、分配局部、扫边表、压函数标签;导入或宿主,或 WASI,或链他实例,或延迟链接之。汉语:函数调用与尾调用:普通函数压调用帧(返回位置、帧针、当前函数、标签顶、处理顶、调用者实例)、在值栈上分配局部、必要时扫描边表、压函数级标签,并把新指令针、新帧针、边偏写入状态格;宿主导入走宿主原语,WASI 导入走底层分派,已链接到其他实例的导入压帧并切换实例,未连接的导入尝试延迟链接。宿主原语执行完可能留下请求(加载模块、调用导出、待重启):调用导出在此就地办理,其余请求令解释循环退出,由入口的驱动循环代办。表函数由表项取函数号。:」
「设新现场」乃化「整数」而化「整数」而化「整数」而「有」也。
「设新现场」者会「新址」而会「新帧」而会「边基」而
  虑「无」者(「写四」于「状态_新指令针」于「新址」)而
  虑「无」者(「写四」于「状态_新帧针」于「新帧」)而
  「写四」于「状态_边偏」于「边基」
也。

「:文言:请求之办:调用导出即行,余者退出解释循环而待驱动之办。汉语:办理宿主原语留下的请求。调用导出:就地办理(内联调用导出);加载模块、装箱结果、待重启:把续行的现场(指令针、帧针、栈针)存进 状态_续*,把新指令针置零使解释循环退出,入口的驱动循环处理之后接着跑;没有请求则原样返回栈针。:」
「进入函数体」乃
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  「整数」
也。
「进入函数体」者会「函数号」而会「条」而会「参数数」而会「局部数」而会「栈针」而
  虑「无」者「中断点」于「元」而
  虑「新帧针」者「减」于「栈针」于(「乘」于「参数数」于「八」)而
  虑「无」者
    (「清零」于「栈针」于(「乘」于(「减」于「局部数」于「参数数」)于「八」))而
    虑「无」者(「写四」于「状态_函」于「函数号」)而
    虑「无」者
      (若「等零」于(「读字段」于「条」于「函数条_边表」)则「扫描函数」于「函数号」否则「元」)
    而
    虑「无」者
      (「压标签」于「零」于「新帧针」于(「读字段」于「条」于「函数条_结果数」)于「标签函数」)
    而
    虑「无」者
      (「设新现场」于(「读字段」于「条」于「函数条_代码起」)于「新帧针」于(「边偏」于「函数号」))
    而
    「加」于「新帧针」于(「乘」于「局部数」于「八」)
也。

「压调用帧」乃化「整数」而化「整数」而「有」也。
「压调用帧」者会「指令针」而会「帧针」而
  虑「帧」者「读四」于「状态_帧顶」而
  虑「无」者
    (「若则致命」
      于(「无符号大等」于「帧」于(「读四」于「状态_帧栈限」))于「一二二」
        于(「静态串」于『栈溢出:递归过深』))而
        虑「无」者(「写四」于「帧」于「指令针」)而
        虑「无」者(「写字段」于「帧」于「四」于「帧针」)而
        虑「无」者
          (「写字段」于「帧」于「八」于(「读四」于「状态_函」))而
          虑「无」者
            (「写字段」于「帧」于「一二」于(「读四」于「状态_标签顶」))而
            虑「无」者
              (「写字段」于「帧」于「一六」于(「读四」于「状态_处理顶」))而
              虑「无」者
                (「写字段」于「帧」于「帧_实例」于(「读四」于「状态_当前实例」))而
                虑「无」者(「写字段」于「帧」于「帧_钩」于「零」)而
                「写四」于「状态_帧顶」于(「加」于「帧」于「帧条长」)
也。

「装入实参」乃化「整数」而化「整数」而化「整数」而化「整数」而「有」也。
「装入实参」者会「参」而会「基」而会「数」而会「位」而
  若「小于」于「位」于「数」
  则
    ((「拆箱」于(「元组项」于「参」于(「加」于「位」于「二」))于(「加」于「基」于(「乘」于「位」于「八」)));
      「装入实参」于「参」于「基」于「数」于(「加」于「位」于「一」))
  否则
    「元」
也。

「内联调用导出」乃化「整数」而化「整数」而化「整数」而「整数」也。
「内联调用导出」者会「栈针」而会「指令针」而会「帧针」而
  虑「无」者(「写四」于「状态_请求」于「零」)而
  虑「参」者「读四」于「状态_请求参一」而
  虑「个数」者「读字段」于「参」于「八」而
  虑「无」者
    (「若则致命」于(「小于」于「个数」于「二」)于「一二七」于(「静态串」于『调用导出:参数不足』))而
    虑「无」者
      (「拆箱」于(「元组项」于「参」于「零」)于「状态_临时」)而
      虑「目标」者「读四」于「状态_临时」而
      虑「无」者
        (「若则致命」
          于(「无符号大等」于「目标」于(「读四」于「状态_实例数」))
          于「一二七」
          于(「静态串」于『调用导出:无此实例』))而
          虑「无」者(「保存上下文」于(「读四」于「状态_当前实例」))而
          虑「无」者
            (「若则致命」
              于(「不等于」于(「读字段」于(「实例记录」于「目标」)于「记录_状态」)于「一」)
              于「一二七」
              于(「静态串」于『调用导出:实例未装载』))而
              虑「名」者「元组项」于「参」于「一」而
              虑「函数号」者
                「查实例导出」
                  于「目标」
                  于(「字节数组址」于「名」)
                  于(「字节数组长」于「名」)而
                  虑「无」者
                    (「若则致命」
                      于(「小于」于「函数号」于「零」)
                      于「一二七」
                      于(「静态串」于『调用导出:找不到导出函数』))而
                      虑「条址」者
                        「加」
                          于(「读实例格」于「目标」于「状态_函数表」)
                          于(「乘」于「函数号」于「函数条长」)而
                          虑「无」者
                            (「若则致命」
                              于(「不等于」于(「位与」于(「读字段」于「条址」于「函数条_标志」)于「一」)于「零」)
                              于「一二七」
                              于(「静态串」于『调用导出:导出的是导入函数』))而
                              虑「实参数」者「减」于「个数」于「二」而
                              虑「参数数」者
                                「读字段」于「条址」于「函数条_参数数」而
                                虑「无」者
                                  (「若则致命」
                                    于(「不等于」于「实参数」于「参数数」)
                                    于「一二七」
                                    于(「静态串」于『调用导出:参数个数不符』))而
                                    虑「局部数」者
                                      「读字段」于「条址」于「函数条_局部总数」而
                                      虑「结果数」者
                                        「读字段」于「条址」于「函数条_结果数」而
                                        虑「类型址」者
                                          「加」
                                            于(「读实例格」于「目标」于「状态_类型表」)
                                            于(「乘」于(「读字段」于「条址」于「函数条_类型」)于「类型条长」)而
                                            虑「钩」者
                                              (
                                                若「等零」于「结果数」则
                                                  「三」
                                                否则
                                                  (
                                                    若「等」
                                                      于(「读一」于(「读字段」于「类型址」于「类型条_结果编码起」))
                                                      于「一二六」则
                                                        「二」
                                                    否则
                                                      「一」
                                                  )
                                              )
                                            而
                                            虑「基」者
                                              「减」于「栈针」于「八」
                                            而
                                            虑「无」者
                                              (「装入实参」于「参」于「基」于「实参数」于「零」)
                                            而
                                            虑「新栈针」者
                                              「加」
                                                于「基」
                                                于(「乘」于「参数数」于「八」)
                                            而
                                            虑「无」者
                                              (「若则致命」
                                                于(「无符号大于」
                                                于(「加」
                                                于(「加」于「新栈针」于(「乘」于「局部数」于「八」))
                                                于(「乘」于「栈余量槽」于「八」))
                                                于(「读四」于「状态_值栈限」))
                                                于「一二二」
                                                于(「静态串」于『栈溢出:递归过深』))
                                            而
                                            虑「无」者
                                              (「压调用帧」于「指令针」于「帧针」)
                                            而
                                            虑「无」者
                                              (「写字段」
                                                于(「减」于(「读四」于「状态_帧顶」)于「帧条长」)
                                                于「帧_钩」于「钩」)
                                            而
                                            虑「无」者
                                              (「切换实例」于「目标」)
                                            而
                                            「进入函数体」
                                              于「函数号」
                                              于(「函数条」于「函数号」)
                                              于「参数数」
                                              于「局部数」于「新栈针」
也。

「办理请求」乃化「整数」而化「整数」而化「整数」而「整数」也。
「办理请求」者会「栈针」而会「指令针」而会「帧针」而
  虑「请求」者「读四」于「状态_请求」而
  若「等」于「请求」于「请求_调用导出」
  则
    「内联调用导出」于「栈针」于「指令针」于「帧针」
  否则
    (
      若「且」于(「等零」于「请求」)于(「等零」于(「读四」于「状态_待重启」))
      则
        「栈针」
      否则
        虑「无」者(「写四」于「状态_续指令针」于「指令针」)
        而
        虑「无」者(「写四」于「状态_续帧针」于「帧针」)
        而
        虑「无」者(「写四」于「状态_续栈针」于「栈针」)
        而
        虑「无」者(「写四」于「状态_新指令针」于「零」)而
        「栈针」
    )
也。

「进入调用」乃化「整数」而化「整数」而化「整数」而「整数」也。
「进入调用」者会「函数号」而会「条」而会「栈针」而
  虑「参数数」者「读字段」于「条」于「函数条_参数数」而
  虑「局部数」者「读字段」于「条」于「函数条_局部总数」而
  虑「无」者
    (「若则致命」
      于(「无符号大于」
        于(「加」于(「加」于「栈针」于(「乘」于「局部数」于「八」))于(「乘」于「栈余量槽」于「八」))
        于(「读四」于「状态_值栈限」))于「一二二」
          于(「静态串」于『栈溢出:递归过深』))
  而
  「进入函数体」于「函数号」于「条」于「参数数」于「局部数」于「栈针」
也。

「本地调用」乃
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  「整数」
也。
「本地调用」者会「函数号」而会「条」而会「栈针」而会「指令针」而会「帧针」而
  虑「无」者(「压调用帧」于「指令针」于「帧针」)而
  「进入调用」于「函数号」于「条」于「栈针」
也。

「跨实例调用」乃
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  「整数」
也。
「跨实例调用」者会「实例」而会「目标函数」而会「栈针」而会「指令针」而会「帧针」而
  虑「无」者(「压调用帧」于「指令针」于「帧针」)而
  虑「无」者(「切换实例」于「实例」)而
  「进入调用」于「目标函数」于(「函数条」于「目标函数」)于「栈针」
也。

「导入调用」乃
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  「整数」
也。
「导入调用」者会「函数号」而会「条」而会「栈针」而会「指令针」而会「帧针」而
  虑「宿主号」者
    「无符号右移」于(「读字段」于「条」于「函数条_标志」)于「八」而
  若「等」于「宿主号」于「宿主号_实例」
  则
    「跨实例调用」
      于(「读字段」于「条」于「函数条_链接实例」)
      于(「读字段」于「条」于「函数条_链接函数」)于「栈针」于「指令针」于「帧针」
  否则
    (
      若「等」于「宿主号」于「宿主号_宿主」
      则
        虑「新栈针」者「调用导入」于「函数号」于「栈针」
        而
        虑「无」者
          (「设新现场」于「指令针」于「帧针」于(「边偏」于(「读四」于「状态_函」)))
        而
        「办理请求」于「新栈针」于「指令针」于「帧针」
      否则
        (
          若「等」于「宿主号」于「宿主号_WASI」则
            虑「新栈针」者
              「WASI调用」
                于(「读字段」于「条」于「函数条_链接函数」)于「条」于「栈针」
            而
            虑「无」者
              「设新现场」
                于「指令针」于「帧针」
                于(「边偏」于(「读四」于「状态_函」))
            而
            「新栈针」
          否则若「不等于」于(「链接导入」于「函数号」)于「零」
          则
            「导入调用」于「函数号」于「条」于「栈针」于「指令针」于「帧针」
          否则
            ((「致命退出」于「一三二」于(「静态串」于『调用了未连接的导入』));
              「栈针」)
        )
    )
也。

「调用」乃化「整数」而化「整数」而化「整数」而化「整数」而「整数」也。
「调用」者会「函数号」而会「栈针」而会「指令针」而会「帧针」而
  虑「条」者「函数条」于「函数号」而
  若「等零」于(「位与」于(「读字段」于「条」于「函数条_标志」)于「一」)
  则
    「本地调用」于「函数号」于「条」于「栈针」于「指令针」于「帧针」
  否则
    「导入调用」于「函数号」于「条」于「栈针」于「指令针」于「帧针」
也。

「定义尾调用」乃化「整数」而化「整数」而化「整数」而化「整数」而「整数」也。
「定义尾调用」者会「函数号」而会「条」而会「栈针」而会「帧针」而
  虑「参数数」者「读字段」于「条」于「函数条_参数数」而
  虑「局部数」者「读字段」于「条」于「函数条_局部总数」而
  虑「参数字节」者「乘」于「参数数」于「八」而
  虑「无」者
    (
      若「不等于」于(「加」于「帧针」于「参数字节」)于「栈针」则
        「拷贝」于「帧针」于(「减」于「栈针」于「参数字节」)于「参数字节」
      否则
        「元」
    )而
    虑「基针」者「加」于「帧针」于「参数字节」而
    虑「现」者「减」于(「读四」于「状态_帧顶」)于「帧条长」而
    虑「无」者
      (「写四」于「状态_标签顶」于(「读字段」于「现」于「一二」))
    而
    虑「无」者
      (「写四」于「状态_处理顶」于(「读字段」于「现」于「一六」))
    而
    虑「无」者
      (「若则致命」
        于(「无符号大于」
          于(「加」于(「加」于「帧针」于(「乘」于「局部数」于「八」))于(「乘」于「栈余量槽」于「八」))
          于(「读四」于「状态_值栈限」))
          于「一二二」
          于(「静态串」于『栈溢出:递归过深』))
    而
    「进入函数体」于「函数号」于「条」于「参数数」于「局部数」于「基针」
也。

「导入尾调用」乃化「整数」而化「整数」而化「整数」而化「整数」而「整数」也。
「导入尾调用」者会「函数号」而会「条」而会「栈针」而会「帧针」而
  虑「宿主号」者
    「无符号右移」于(「读字段」于「条」于「函数条_标志」)于「八」而
  若「等」于「宿主号」于「宿主号_实例」
  则
    虑「无」者
      (「切换实例」于(「读字段」于「条」于「函数条_链接实例」))而
      虑「目标」者「读字段」于「条」于「函数条_链接函数」而
      「定义尾调用」于「目标」于(「函数条」于「目标」)于「栈针」于「帧针」
  否则
    (
      若「等」于「宿主号」于「宿主号_宿主」
      则
        虑「新栈针」者「调用导入」于「函数号」于「栈针」
        而
        虑「结果栈」者「返回处理」于「新栈针」于「帧针」而
        「办理请求」于「结果栈」于(「读四」于「状态_新指令针」)
        于(「读四」于「状态_新帧针」)
      否则
        (
          若「等」于「宿主号」于「宿主号_WASI」则
            「返回处理」
              于(「WASI调用」于(「读字段」于「条」于「函数条_链接函数」)于「条」于「栈针」)
              于「帧针」
          否则若「不等于」于(「链接导入」于「函数号」)于「零」
          则
            「导入尾调用」于「函数号」于「条」于「栈针」于「帧针」
          否则
            ((「致命退出」于「一三二」于(「静态串」于『调用了未连接的导入』));
              「栈针」)
        )
    )
也。

「尾调用」乃化「整数」而化「整数」而化「整数」而「整数」也。
「尾调用」者会「函数号」而会「栈针」而会「帧针」而
  虑「条」者「函数条」于「函数号」而
  若「等零」于(「位与」于(「读字段」于「条」于「函数条_标志」)于「一」)
  则
    「定义尾调用」于「函数号」于「条」于「栈针」于「帧针」
  否则
    「导入尾调用」于「函数号」于「条」于「栈针」于「帧针」
也。

「表函数」乃化「整数」而化「整数」而「整数」也。
「表函数」者会「表」而会「索引」而
  虑「无」者
    (「若则致命」于(「无符号大等」于「表」于(「读四」于「状态_表数」))于「一二四」
      于(「静态串」于『表索引越界』))而
      虑「描述」者
        「加」
          于(「读四」于「状态_表描述」)
          于(「乘」于「表」于「表描述长」)而
          虑「无」者
            (「若则致命」
              于(「无符号大等」于「索引」于(「读字段」于「描述」于「表描述_大小」))
              于「一二四」
              于(「静态串」于『未定义的表元素』))而
              虑「字」者
                「读四」于(「加」于(「读字段」于「描述」于「表描述_数据」)于(「乘」于「索引」于「四」))而
                虑「无」者
                  (「若则致命」
                    于(「不等于」于(「位与」于「字」于「七」)于「二」)
                    于「一二四」
                    于(「静态串」于『未初始化的表元素』))
                而
                「无符号右移」于「字」于「三」
也。