豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 454 行 · 22736 字节 · UTF-8
§
寻观「底层库」之书。
寻观「客体二号」之「布局」之书。
寻观「客体二号」之「平台」之书。
寻观「客体二号」之「基础」之书。
寻观「客体二号」之「实例」之书。
寻观「客体二号」之「模块」之书。

「:文言:解释器之控制:块类型、立即数之越、边表之扫、标签栈与分支、返回。汉语:解释器控制流基础:块类型解码、立即数跳过、函数边表扫描(每个字节偏移 8 字节 [end 之后的位置, else 之后的位置])、标签栈与分支、函数返回。:」

「:文言:块类型:设 状态_块参 与 状态_块果,返回新位置。汉语:读块类型,写入 状态_块参、状态_块果,返回其后的位置。:」
「置块签名」乃化「整数」而化「整数」而「有」也。
「置块签名」者会「参」而会「果」而
  虑「无」者(「写四」于「状态_块参」于「参」)而
  「写四」于「状态_块果」于「果」
也。

「读块类型」乃化「整数」而「整数」也。
「读块类型」者会「址」而
  虑「码」者「读一」于「址」而
  若「等」于「码」于「六四」
  则
    ((「置块签名」于「零」于「零」);
      「加」于「址」于「一」)
  否则
    (
      若「或者」于(「等」于「码」于「九九」)于(「等」于「码」于「一零零」)
      则
        ((「读有符号变长」于(「加」于「址」于「一」));
          (「置块签名」于「零」于「一」);
          「读四」于「状态_读址」)
      否则
        (
          若「且」
            于(「不等于」于(「位与」于「码」于「六四」)于「零」)
            于(「等零」于(「位与」于「码」于「一二八」))
          则
            ((「置块签名」于「零」于「一」);
              「加」于「址」于「一」)
          否则
            虑「类型号」者「读有符号变长」于「址」
            而
            虑「类型」者「类型条」于「类型号」
            而
            虑「无」者
              (「置块签名」于(「读字段」于「类型」于「类型条_甲」)于(「读字段」于「类型」于「类型条_乙」))
            而
            「读四」于「状态_读址」
        )
    )
也。

「:文言:立即数之越:址在操作码之后。汉语:跳过一条指令的立即数;址指向操作码之后。GC 前缀(0xFB)与杂项前缀(0xFC)按子操作码分别处理。:」
「跳过GC立即数」乃化「整数」而化「整数」而「整数」也。
「跳过GC立即数」者会「子」而会「址」而
  鉴「子」而
    有「零」则「变长后」于「址」
    或有「一」则「变长后」于「址」
    或有「六」则「变长后」于「址」
    或有「七」则「变长后」于「址」
    或有「一一」则「变长后」于「址」
    或有「一二」则「变长后」于「址」
    或有「一三」则「变长后」于「址」
    或有「一四」则「变长后」于「址」
    或有「一六」则「变长后」于「址」
    或有「二」则
      「变长们后」于「址」于「二」
    或有「三」则
      「变长们后」于「址」于「二」
    或有「四」则
      「变长们后」于「址」于「二」
    或有「五」则
      「变长们后」于「址」于「二」
    或有「八」则
      「变长们后」于「址」于「二」
    或有「九」则
      「变长们后」于「址」于「二」
    或有「一零」则
      「变长们后」于「址」于「二」
    或有「一七」则
      「变长们后」于「址」于「二」
    或有「一八」则
      「变长们后」于「址」于「二」
    或有「一九」则
      「变长们后」于「址」于「二」
    或有「二零」则「变长后」于「址」
    或有「二一」则「变长后」于「址」
    或有「二二」则「变长后」于「址」
    或有「二三」则「变长后」于「址」
    或有「二四」则
      「变长们后」于(「加」于「址」于「一」)于「三」
    或有「二五」则
      「变长们后」于(「加」于「址」于「一」)于「三」
    或有「其他」则「址」
也。

「跳过杂项立即数」乃化「整数」而化「整数」而「整数」也。
「跳过杂项立即数」者会「子」而会「址」而
  鉴「子」而
    有「八」则
      「加」于(「变长后」于「址」)于「一」
    或有「九」则「变长后」于「址」
    或有「一三」则「变长后」于「址」
    或有「一五」则「变长后」于「址」
    或有「一六」则「变长后」于「址」
    或有「一七」则「变长后」于「址」
    或有「一零」则
      「加」于「址」于「二」
    或有「一一」则
      「加」于「址」于「一」
    或有「一二」则
      「变长们后」于「址」于「二」
    或有「一四」则
      「变长们后」于「址」于「二」
    或有「其他」则「址」
也。

「跳过GC前缀」乃化「整数」而「整数」也。
「跳过GC前缀」者会「址」而
  虑「子」者「读无符号变长」于「址」而
  虑「后」者「读四」于「状态_读址」而
  「跳过GC立即数」于「子」于「后」
也。

「跳过杂项前缀」乃化「整数」而「整数」也。
「跳过杂项前缀」者会「址」而
  虑「子」者「读无符号变长」于「址」而
  虑「后」者「读四」于「状态_读址」而
  「跳过杂项立即数」于「子」于「后」
也。

「跳过分支表立即数」乃化「整数」而「整数」也。
「跳过分支表立即数」者会「址」而
  虑「个数」者「读无符号变长」于「址」而
  「变长们后」于(「读四」于「状态_读址」)于(「加」于「个数」于「一」)
也。

「跳过带类型选择立即数」乃化「整数」而「整数」也。
「跳过带类型选择立即数」者会「址」而
  虑「个数」者「读无符号变长」于「址」而
  「跳过值类型们」于(「读四」于「状态_读址」)于「个数」
也。

「跳过捕获子句们」乃化「整数」而化「整数」而「整数」也。
「跳过捕获子句们」者会「址」而
  会「个数」而
    递归虑「逐」其化「整数」而化「整数」而「整数」者会「位」而会「游」而
      若「小于」于「位」于「个数」
      则
        虑「种」者「读一」于「游」而
        虑「后」者「加」于「游」于「一」而
        「逐」
          于(「加」于「位」于「一」)
          于(「变长们后」于「后」于(「选择」于(「小于」于「种」于「二」)于「二」于「一」))
      否则
        「游」
    而
    「逐」于「零」于「址」
也。

「跳过尝试表立即数」乃化「整数」而「整数」也。
「跳过尝试表立即数」者会「址」而
  虑「后」者「读块类型」于「址」而
  虑「个数」者「读无符号变长」于「后」而
  「跳过捕获子句们」于(「读四」于「状态_读址」)于「个数」
也。

「跳过立即数」乃化「整数」而化「整数」而「整数」也。
「跳过立即数」者会「操作码」而会「址」而
  若「且」于(「无符号大等」于「操作码」于「四零」)于(「无符号小等」于「操作码」于「六二」)
  则
    「变长们后」于「址」于「二」
  否则
    鉴「操作码」而
      有「二」则「读块类型」于「址」
      或有「三」则「读块类型」于「址」
      或有「四」则「读块类型」于「址」
      或有「八」则「变长后」于「址」
      或有「一二」则「变长后」于「址」
      或有「一三」则「变长后」于「址」
      或有「一六」则「变长后」于「址」
      或有「一八」则「变长后」于「址」
      或有「二零」则「变长后」于「址」
      或有「二一」则「变长后」于「址」
      或有「三二」则「变长后」于「址」
      或有「三三」则「变长后」于「址」
      或有「三四」则「变长后」于「址」
      或有「三五」则「变长后」于「址」
      或有「三六」则「变长后」于「址」
      或有「三七」则「变长后」于「址」
      或有「三八」则「变长后」于「址」
      或有「六五」则「变长后」于「址」
      或有「六六」则「变长后」于「址」
      或有「二零八」则「变长后」于「址」
      或有「二一零」则「变长后」于「址」
      或有「二一三」则「变长后」于「址」
      或有「二一四」则「变长后」于「址」
      或有「一七」则
        「变长们后」于「址」于「二」
      或有「一九」则
        「变长们后」于「址」于「二」
      或有「一四」则
        「跳过分支表立即数」于「址」
      或有「二八」则
        「跳过带类型选择立即数」于「址」
      或有「三一」则
        「跳过尝试表立即数」于「址」
      或有「六三」则
        「加」于「址」于「一」
      或有「六四」则
        「加」于「址」于「一」
      或有「六七」则
        「加」于「址」于「四」
      或有「六八」则
        「加」于「址」于「八」
      或有「二五一」则
        「跳过GC前缀」于「址」
      或有「二五二」则
        「跳过杂项前缀」于「址」
      或有「其他」则「址」
也。

「:文言:边表之扫:每字节偏移八字节,记 end 与 else 之后位。汉语:扫描函数体,建立边表:对每个 block/loop/if/try_table 的起始字节偏移,记录 end 之后的位置(+0)与 else 之后的位置(+4)。控制栈放在暂存区 扫描栈。:」
「是开块指令」乃化「整数」而「爻」也。
「是开块指令」者会「码」而
  「或者」
    于(「或者」于(「等」于「码」于「二」)于(「等」于「码」于「三」))
    于(「或者」于(「等」于「码」于「四」)于(「等」于「码」于「三一」))
也。

「扫描开块」乃化「整数」而化「整数」而「有」也。
「扫描开块」者会「栈顶」而会「后」而
  虑「无」者
    (「若则致命」于(「无符号大等」于「栈顶」于「扫描栈限」)于「一二三」于(「静态串」于『控制嵌套过深』))而
    虑「无」者(「写四」于「栈顶」于(「减」于「后」于「一」))而
    「写四」于(「加」于「栈顶」于「四」)于「零」
也。

「扫描否则」乃化「整数」而化「整数」而化「整数」而化「整数」而「有」也。
「扫描否则」者会「栈顶」而会「后」而会「起」而会「边」而
  虑「无」者
    (「若则致命」于(「无符号小等」于「栈顶」于「扫描栈」)于「一二三」于(「静态串」于『else 无对应 if』))而
    虑「无」者
      (「写四」于(「减」于「栈顶」于「四」)于(「减」于「后」于「一」))
    而
    「写四」
      于(「加」
        于(「加」于「边」于(「乘」于(「减」于(「读四」于(「减」于「栈顶」于「八」))于「起」)于「八」))于「四」)
        于「后」
也。

「扫描结束」乃化「整数」而化「整数」而化「整数」而化「整数」而「有」也。
「扫描结束」者会「栈顶」而会「后」而会「起」而会「边」而
  虑「开始」者「读四」于「栈顶」而
  虑「否则位」者「读四」于(「加」于「栈顶」于「四」)而
  虑「无」者
    (「写四」于(「加」于「边」于(「乘」于(「减」于「开始」于「起」)于「八」))于「后」)而
  若「不等于」于「否则位」于「零」
  则
    「写四」于(「加」于「边」于(「乘」于(「减」于「否则位」于「起」)于「八」))于「后」
  否则
    「元」
也。

「扫描函数」乃化「整数」而「有」也。
「扫描函数」者会「号」而
  虑「条」者「函数条」于「号」而
  虑「起」者「读字段」于「条」于「函数条_代码起」而
  虑「止」者「读字段」于「条」于「函数条_代码止」而
  虑「大小」者「乘」于(「减」于「止」于「起」)于「八」而
  虑「边」者「读四」于「状态_边表池」而
  虑「无」者
    (「若则致命」
      于(「无符号大于」于(「加」于「边」于「大小」)于(「读四」于「状态_边表尾」))
      于「一二三」
      于(「静态串」于『边表池不足』))而
      虑「无」者
        (「写四」于「状态_边表池」于(「加」于「边」于「大小」))而
        虑「无」者(「写字段」于「条」于「函数条_边表」于「边」)而
        递归虑「逐」其化「整数」而化「整数」而「整数」者会「址」而会「栈顶」而
          若「无符号小于」于「址」于「止」
          则
            虑「操作码」者「读一」于「址」而
            虑「后」者「加」于「址」于「一」而
            若「是开块指令」于「操作码」
            则
              ((「扫描开块」于「栈顶」于「后」);
                「逐」
                  于(「跳过立即数」于「操作码」于「后」)
                  于(「加」于「栈顶」于「八」))
            否则
              (
                若「等」于「操作码」于「五」
                则
                  ((「扫描否则」于「栈顶」于「后」于「起」于「边」);
                    「逐」于「后」于「栈顶」)
                否则
                  (
                    若「等」于「操作码」于「一一」
                    则
                      (
                        若「等」于「栈顶」于「扫描栈」
                        则
                          「逐」于「止」于「栈顶」
                        否则
                          ((「扫描结束」于(「减」于「栈顶」于「八」)于「后」于「起」于「边」);
                            「逐」于「后」于(「减」于「栈顶」于「八」))
                      )
                    否则
                      「逐」于(「跳过立即数」于「操作码」于「后」)于「栈顶」
                  )
              )
          否则
            「栈顶」
        而
        虑「终栈顶」者「逐」于「起」于「扫描栈」而
        「若则致命」于(「不等于」于「终栈顶」于「扫描栈」)于「一二三」
          于(「静态串」于『控制结构未闭合』)
也。

「边偏」乃化「整数」而「整数」也。
「边偏」者会「号」而
  若「小于」于「号」于「零」则
    「零」
  否则
    虑「条」者「函数条」于「号」而
    「减」于(「读字段」于「条」于「函数条_边表」)于(「乘」于(「读字段」于「条」于「函数条_代码起」)于「八」)
也。

「:文言:标签栈与分支。汉语:压标签;弹出尝试表的处理帧;分支到相对深度 n(返回新栈针,新指令针放在 状态_新指令针,零表示函数级返回,结果已在栈顶)。:」
「压标签」乃化「整数」而化「整数」而化「整数」而化「整数」而「有」也。
「压标签」者会「目标」而会「基」而会「元数」而会「种类」而
  虑「顶」者「读四」于「状态_标签顶」而
  虑「无」者
    (「若则致命」
      于(「无符号大等」于「顶」于(「读四」于「状态_标签栈限」))于「一二二」
        于(「静态串」于『栈溢出:递归过深』))而
        虑「无」者(「写字段」于「顶」于「标签_目标」于「目标」)而
        虑「无」者(「写字段」于「顶」于「标签_栈基」于「基」)而
        虑「无」者(「写字段」于「顶」于「标签_元数」于「元数」)而
        虑「无」者(「写字段」于「顶」于「标签_种类」于「种类」)而
        「写四」于「状态_标签顶」于(「加」于「顶」于「标签栈条长」)
也。

「弹出处理帧们」乃化「整数」而化「整数」而「有」也。
「弹出处理帧们」者会「顶」而
  会「新顶」而
    递归虑「逐」其化「整数」而「有」者会「位」而
      若「无符号大于」于「位」于「新顶」
      则
        虑「前」者「减」于「位」于「标签栈条长」而
        虑「无」者
          (
            若「等」于(「读字段」于「前」于「标签_种类」)于「标签尝试」
            则
              「写四」
                于「状态_处理顶」
                于(「减」于(「读四」于「状态_处理顶」)于「处理条长」)
            否则
              「元」
          )
        而
        「逐」于「前」
      否则
        「元」
    而
    「逐」于「顶」
也。

「分支」乃化「整数」而化「整数」而「整数」也。
「分支」者会「深」而会「栈针」而
  虑「顶」者「读四」于「状态_标签顶」而
  虑「标」者
    「减」于「顶」于(「乘」于(「加」于「深」于「一」)于「标签栈条长」)而
    虑「种」者「读字段」于「标」于「标签_种类」而
    若「等」于「种」于「标签函数」
    则
      ((「写四」于「状态_新指令针」于「零」);
        「栈针」)
    否则
      虑「无」者
        (若「等」于「种」于「标签循环」则「中断点」于「元」否则「元」)
      而
      虑「元数」者「读字段」于「标」于「标签_元数」
      而
      虑「基」者「读字段」于「标」于「标签_栈基」
      而
      虑「新顶」者
        「选择」于(「等」于「种」于「标签循环」)于(「加」于「标」于「标签栈条长」)于「标」
      而
      虑「无」者(「弹出处理帧们」于「顶」于「新顶」)
      而
      虑「无」者(「写四」于「状态_标签顶」于「新顶」)
      而
      虑「字节数」者「乘」于「元数」于「八」
      而
      虑「无」者
        (
          若「不等于」于(「加」于「基」于「字节数」)于「栈针」则
            「拷贝」于「基」于(「减」于「栈针」于「字节数」)于「字节数」
          否则
            「元」
        )
      而
      虑「无」者(「写四」于「状态_新指令针」于(「读四」于「标」))而
      「加」于「基」于「字节数」
也。

「:文言:函数之返:弹帧而复其实例;帧带返回之钩者,退出解释循环而请入口之驱动装箱其果。汉语:函数返回:把结果移到帧针处,弹出调用帧,若帧里记的调用者实例与当前不同就切回去,恢复现场(新指令针、新帧针、当前函数、标签顶、处理顶、边偏),返回新栈针;若帧带返回钩(“调用导出”的帧),登记“装箱结果”请求并令解释循环退出,由入口的驱动循环把结果装箱后从调用者的下一条指令续行。:」
「返回处理」乃化「整数」而化「整数」而「整数」也。
「返回处理」者会「栈针」而会「帧针」而
  虑「条」者「函数条」于(「读四」于「状态_函」)而
  虑「字节数」者
    「乘」于(「读字段」于「条」于「函数条_结果数」)于「八」而
    虑「无」者
      (
        若「不等于」于(「加」于「帧针」于「字节数」)于「栈针」则
          「拷贝」于「帧针」于(「减」于「栈针」于「字节数」)于「字节数」
        否则
          「元」
      )
    而
    虑「帧」者「减」于(「读四」于「状态_帧顶」)于「帧条长」而
    虑「无」者(「写四」于「状态_帧顶」于「帧」)而
    虑「无」者(「切换实例」于(「读字段」于「帧」于「帧_实例」))而
    虑「无」者(「写四」于「状态_新指令针」于(「读四」于「帧」))而
    虑「无」者
      (「写四」于「状态_新帧针」于(「读字段」于「帧」于「四」))
    而
    虑「无」者(「写四」于「状态_函」于(「读字段」于「帧」于「八」))而
    虑「无」者
      (「写四」于「状态_标签顶」于(「读字段」于「帧」于「一二」))
    而
    虑「无」者
      (「写四」于「状态_处理顶」于(「读字段」于「帧」于「一六」))
    而
    虑「无」者
      (「写四」于「状态_边偏」于(「边偏」于(「读四」于「状态_函」)))
    而
    虑「无」者
      (
        若「不等于」于(「读字段」于「帧」于「帧_钩」)于「零」
        则
          ((「写四」于「状态_请求」于「请求_装箱结果」);
            (「写四」于「状态_请求参一」于(「读字段」于「帧」于「帧_钩」));
            (「写四」于「状态_续指令针」于(「读四」于「帧」));
            (「写四」于「状态_续帧针」于(「读字段」于「帧」于「四」));
            (「写四」于「状态_续栈针」于(「加」于「帧针」于「字节数」));
            (「写四」于「状态_新指令针」于「零」))
        否则
          「元」
      )
    而
    「加」于「帧针」于「字节数」
也。