豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 219 行 · 13953 字节 · UTF-8
§
寻观「底层库」之书。
寻观「客体二号」之「布局」之书。
寻观「客体二号」之「基础」之书。
寻观「客体二号」之「实例」之书。
寻观「客体二号」之「堆」之书。
寻观「客体二号」之「对象」之书。
寻观「客体二号」之「运算」之书。
寻观「客体二号」之「访存」之书。
寻观「客体二号」之「解释」之书。
寻观「客体二号」之「异常」之书。
寻观「客体二号」之「主机」之书。

「:文言:预编之接口:客体之 WasmGC 函数预编为整数之函数,并入执行器而同降为机器码;彼等以此诸导出之函数为运行时(名以“预编_”冠之)。值皆居值栈(与解释同布:每槽八字节,引用与三十二位整数居低字),故保守之回收如常见之。预编之函数形如(帧)→无:参数与局部自帧起,操作数其上;调用者置参数于栈顶,被调者之帧即其起处,毕则诸结果自帧起。复杂之指令径呼解释器之处理函数,携其立即数于模块中之址。汉语:预编(路二乙档的第一版)接口:客体 WasmGC 模块的每个函数被转译成一个整数 Wasm 函数,并入执行器模块后一起降级为机器码;转译出的代码把这里这些导出函数(名字以“预编_”开头)当作运行时。所有值都放在值栈上(布局与解释器相同:每槽 8 字节,引用与 32 位整数在低字、高字为零),所以保守回收照常能看到它们。转译函数的形状是(帧)→ 无:参数与局部变量从帧起依次存放,操作数栈在其上;调用者把参数放在栈顶,被调用者的帧就从这些参数处开始,返回时各结果从帧起存放。结构、数组、类型转换、宽整数、浮点、访存、表与杂项指令直接调用解释器的处理函数,并把该指令立即数在模块字节中的地址传给它们。异常用标志传播:抛出时记下载荷并置 状态_预编异常,转译代码在每次调用之后检查它。预编派发 与 预编可用 的函数体在这里只是占位,转译器会换成真正的派发(按函数号调用转译函数)与常量 1。:」

「:文言:异常之标:非零则有异常正在传播。汉语:预编异常标志:非零表示有异常正在向外传播(载荷在 状态_例外载荷,个数与标签在 状态_例外数、状态_例外标签)。:」
「状态_预编异常」者「三八二四」也。

「:文言:占位:转译器换其体。汉语:占位函数:转译器把函数体换成真正的派发与常量 1。:」
「导出:预编派发」乃化「整数」而化「整数」而「有」也。
「导出:预编派发」者会「帧」而会「号」而
  「致命退出」于「一三八」于(「静态串」于『没有预编代码』)
也。

「导出:预编可用」乃化「有」而「整数」也。
「导出:预编可用」者会「无」而
  「加」于(「读四」于「状态_预编异常」)于(「减」于「零」于(「读四」于「状态_预编异常」))
也。

「导出:预编_调用导入」乃化「整数」而化「整数」而「整数」也。
「导出:预编_调用导入」者会「号」而会「栈针」而
  虑「新栈」者「调用导入」于「号」于「栈针」而
  虑「无」者
    (「若则致命」
      于(「不等于」于(「读四」于「状态_请求」)于「零」)
      于「一三八」
      于(「静态串」于『预编模式不支持加载模块与调用导出』))
  而
  「新栈」
也。

「导出:预编_GC」乃化「整数」而化「整数」而化「整数」而「整数」也。
「导出:预编_GC」者会「子」而会「址」而会「栈针」而
  「执行GC」于「子」于「址」于「栈针」
也。

「导出:预编_宽浮」乃化「整数」而化「整数」而「整数」也。
「导出:预编_宽浮」者会「操作码」而会「栈针」而
  「执行宽或浮点」于「操作码」于「栈针」
也。

「导出:预编_访存」乃化「整数」而化「整数」而化「整数」而「整数」也。
「导出:预编_访存」者会「操作码」而会「址」而会「栈针」而
  「执行访存」于「操作码」于「址」于「栈针」
也。

「导出:预编_杂项」乃化「整数」而化「整数」而化「整数」而「整数」也。
「导出:预编_杂项」者会「子」而会「址」而会「栈针」而
  「执行杂项」于「子」于「址」于「栈针」
也。

「:文言:间接之调:自表取函数号而验其签名。汉语:间接调用的目标:从表里按栈顶的元素号取函数号并检查签名(新栈 指向该元素号所在的槽)。:」
「导出:预编_间接」乃化「整数」而化「整数」而化「整数」而「整数」也。
「导出:预编_间接」者会「类型号」而会「表号」而会「新栈」而
  「间接目标」于「类型号」于「表号」于「新栈」
也。

「导出:预编_表取」乃化「整数」而化「整数」而「整数」也。
「导出:预编_表取」者会「序」而会「栈针」而
  虑「无」者「表获取」于「序」于「栈针」而
  「栈针」
也。

「导出:预编_表设」乃化「整数」而化「整数」而「整数」也。
「导出:预编_表设」者会「序」而会「栈针」而
  「表设置」于「序」于「栈针」
也。

「:文言:陷阱:一二八不可达,一二九空引用,一二四间接之调不合,一三五转换失败,一二七越界。汉语:致命陷阱:128 unreachable、129 空引用、124 空函数引用、135 类型转换失败、127 数组索引越界,其余为一般陷阱。:」
「导出:预编_致命」乃化「整数」而「有」也。
「导出:预编_致命」者会「码」而
  鉴「码」而
    有「一二八」则
      「致命退出」于「一二八」于(「静态串」于『unreachable』)
    或有「一二九」则
      「致命退出」于「一二九」于(「静态串」于『空引用』)
    或有「一二四」则
      「致命退出」于「一二四」于(「静态串」于『空函数引用』)
    或有「一三五」则
      「致命退出」于「一三五」于(「静态串」于『类型转换失败』)
    或有「一二七」则
      「致命退出」于「一二七」于(「静态串」于『数组索引越界』)
    或有「其他」则
      「致命退出」于「码」于(「静态串」于『预编陷阱』)
也。

「导出:预编_栈溢出」乃化「有」而「有」也。
「导出:预编_栈溢出」者会「无」而
  「致命退出」于「一二二」于(「静态串」于『值栈溢出』)
也。

「导出:预编_i32除」乃化「整数」而化「整数」而化「整数」而「整数」也。
「导出:预编_i32除」者会「操作码」而会「甲」而会「乙」而
  「i32除法」于「操作码」于「甲」于「乙」
也。

「:文言:一元之术:一〇三前导零,一〇四尾随零,一〇五一计数。汉语:i32 一元运算:0x67 clz、0x68 ctz、0x69 popcnt。:」
「导出:预编_一元」乃化「整数」而化「整数」而「整数」也。
「导出:预编_一元」者会「操作码」而会「值」而
  鉴「操作码」而
    有「一零三」则「前导零」于「值」
    或有「一零四」则「尾随零」于「值」
    或有「其他」则「一计数」于「值」
也。

「:文言:引用属于某堆类型否,为 br_on_cast 与 ref.test 之用。汉语:引用是否属于某堆类型(br_on_cast 系列用):可空为 1 时 null 也算属于。:」
「导出:预编_属于」乃化「整数」而化「整数」而化「整数」而「整数」也。
「导出:预编_属于」者会「字」而会「堆类型」而会「可空」而
  「爻整」于(「引用属于」于「字」于「堆类型」于(「不等于」于「可空」于「零」))
也。

「导出:预编_客页数」乃化「有」而「整数」也。
「导出:预编_客页数」者会「无」而
  「读四」于「状态_客页数」
也。

「导出:预编_客增长」乃化「整数」而「有」也。
「导出:预编_客增长」者会「栈针」而
  「客内存增长」于「栈针」
也。

「:文言:抛:自栈顶取载荷,记标签与个数,置异常之标。汉语:throw:从栈顶取该标签的参数个数个载荷槽拷进 状态_例外载荷,记下标签与个数,置 状态_预编异常。:」
「导出:预编_抛出」乃化「整数」而化「整数」而「有」也。
「导出:预编_抛出」者会「标签」而会「栈针」而
  虑「个数」者
    「读字段」于(「加」于(「读四」于「状态_标签表」)于(「乘」于「标签」于「标签条长」))于「标签条_参数数」
  而
  虑「无」者
    (「若则致命」于(「大于」于「个数」于「例外载荷槽」)于「一三七」于(「静态串」于『异常载荷过大』))
  而
  虑「无」者
    「拷贝」于「状态_例外载荷」于(「减」于「栈针」于(「乘」于「个数」于「八」))
    于(「乘」于「个数」于「八」)
  而
  虑「无」者「写四」于「状态_例外数」于「个数」而
  虑「无」者「写四」于「状态_例外标签」于「标签」而
  「写四」于「状态_预编异常」于「一」
也。

「:文言:再抛:自栈顶之异常对象取载荷。汉语:throw_ref:从栈顶的异常对象取出标签与载荷,置 状态_预编异常。:」
「导出:预编_再抛」乃化「整数」而「有」也。
「导出:预编_再抛」者会「栈针」而
  虑「引用」者「栈槽字」于「栈针」于「一」而
  虑「无」者(「空引用检」于「引用」)而
  虑「个数」者「读字段」于「引用」于「一二」而
  虑「无」者「写四」于「状态_例外数」于「个数」而
  虑「无」者
    「写四」于「状态_例外标签」于(「读字段」于「引用」于「八」)而
    虑「无」者
      「拷贝」于「状态_例外载荷」于(「加」于「引用」于「一六」)
      于(「乘」于「个数」于「八」)
    而
    「写四」于「状态_预编异常」于「一」
也。

「导出:预编_例外标签」乃化「有」而「整数」也。
「导出:预编_例外标签」者会「无」而
  「读四」于「状态_例外标签」
也。

「:文言:捕:载荷拷至目址,清异常之标,返个数。汉语:catch:把载荷拷到目标地址,清除 状态_预编异常,返回个数。:」
「导出:预编_取载荷」乃化「整数」而「整数」也。
「导出:预编_取载荷」者会「目」而
  虑「个数」者「读四」于「状态_例外数」而
  虑「无」者
    「拷贝」于「目」于「状态_例外载荷」于(「乘」于「个数」于「八」)而
    虑「无」者「写四」于「状态_预编异常」于「零」而
    「个数」
也。

「:文言:捕之引用:以载荷造异常之对象,书于栈针处。汉语:catch_ref / catch_all_ref:用当前载荷造异常对象(exnref),写到 栈针 处的槽,清除 状态_预编异常。分配前把 栈针 之后一槽记为回收的栈顶。:」
「导出:预编_例外引用」乃化「整数」而「有」也。
「导出:预编_例外引用」者会「栈针」而
  虑「无」者「写四」于「状态_栈针」于「栈针」而
  虑「对象」者「新异常对象」于「元」而
  虑「无」者「写四」于「栈针」于「对象」而
  虑「无」者「写字段」于「栈针」于「四」于「零」而
  「写四」于「状态_预编异常」于「零」
也。

「导出:预编_清异常」乃化「有」而「有」也。
「导出:预编_清异常」者会「无」而
  「写四」于「状态_预编异常」于「零」
也。

「:文言:以预编之码行一函数:帧即参数之起;毕而验异常。汉语:用预编代码运行一个函数(取代解释执行):参数已压在值栈上,帧 = 栈针 − 8×参数个数;调用派发后若仍有异常在传播,按未捕获异常以 137 退出;返回结果之后的新栈针。:」
「预编运行函数」乃化「整数」而化「整数」而「整数」也。
「预编运行函数」者会「函数号」而会「栈针」而
  虑「条」者「函数条」于「函数号」而
  虑「帧」者
    「减」于「栈针」于(「乘」于(「读字段」于「条」于「函数条_参数数」)于「八」)而
    虑「无」者「写四」于「状态_预编异常」于「零」而
    虑「无」者「导出:预编派发」于「帧」于「函数号」而
    虑「无」者
      (「若则致命」
        于(「不等于」于(「读四」于「状态_预编异常」)于「零」)
        于「一三七」
        于(「静态串」于『未捕获的异常』))
    而
    「加」于「帧」于(「乘」于(「读字段」于「条」于「函数条_结果数」)于「八」)
也。

「:文言:择途:有预编之码则行之,否则解释之。汉语:有预编代码就用它运行,否则解释执行。:」
「运行或预编」乃化「整数」而化「整数」而「整数」也。
「运行或预编」者会「函数号」而会「栈针」而
  若「等」于(「导出:预编可用」于「元」)于「一」则
    「预编运行函数」于「函数号」于「栈针」
  否则
    「运行函数」于「函数号」于「栈针」
也。