豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 211 行 · 12925 字节 · UTF-8
§
寻观「底层库」之书。
寻观「客体二号」之「布局」之书。
寻观「客体二号」之「基础」之书。
寻观「客体二号」之「模块」之书。
寻观「客体二号」之「对象」之书。

「:文言:表之批量指令:table.init、elem.drop、table.copy、table.grow、table.fill,及表与元素段之助手。汉语:表指令:表描述与元素段条的访问助手,元素段的逐项填表(实例化时初始化主动段与运行期 table.init 共用),以及 0xFC 前缀的 table.init/elem.drop/table.copy/table.grow/table.fill(子操作码 12、13、14、15、17)。表的存储在解析时按“上限”(没有声明就是最小加 1024)一次分配好,所以 table.grow 只在这个容量之内增长,超出则返回 -1。范围一律按无符号数检查并防加法溢出,越界以退出码 124 陷入;操作数是 i32 或引用(低字);引用值是 (函数号 << 3) | 2,空引用为 0。:」
「表描述址」乃化「整数」而「整数」也。
「表描述址」者会「表号」而
  「加」于(「读四」于「状态_表描述」)于(「乘」于「表号」于「表描述长」)
也。

「表项检查」乃化「整数」而化「整数」而「有」也。
「表项检查」者会「描述」而会「序」而
  「若则致命」
    于(「无符号大等」于「序」于(「读字段」于「描述」于「表描述_大小」))于「一二四」
      于(「静态串」于『表索引越界』)
也。

「元素段条」乃化「整数」而「整数」也。
「元素段条」者会「号」而
  「加」于(「读四」于「状态_元素段表」)于(「乘」于「号」于「元素段条长」)
也。

「:文言:填元素:自元素段之向量游标起,逐项写入表(标志小于四者为函数号之变长整数,否则为常量式,以指定之基为工作栈)。汉语:把元素段里从 游 开始的 个数 个元素依次写到 数据 起的表里(偏 是表内起始下标):标志小于 4 的段是函数号的 LEB128,写成 (函数号 << 3) | 2;否则每项是常量表达式,用以 基 为起点的工作栈求值(实例化时用值栈基,运行期 table.init 用当前栈针以上的空闲区)。:」
「填元素逐个」乃
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  「有」
也。
「填元素逐个」者会「标志」而会「数据」而会「偏」而会「个数」而会「位」而会「游」而会「基」而
  若「小于」于「位」于「个数」
  则
    虑「格」者
      「加」于「数据」于(「乘」于(「加」于「偏」于「位」)于「四」)而
    若「小于」于「标志」于「四」
    则
      虑「值」者「读无符号变长」于「游」而
      虑「新游」者「读四」于「状态_读址」而
      虑「无」者
        (「写四」于「格」于(「位或」于(「左移」于「值」于「三」)于「二」))
      而
      「填元素逐个」于「标志」于「数据」于「偏」于「个数」于(「加」于「位」于「一」)于「新游」于「基」
    否则
      虑「新游」者「求值常量式于」于「游」于「状态_临时」于「基」
      而
      虑「无」者(「写四」于「格」于(「读四」于「状态_临时」))而
      「填元素逐个」于「标志」于「数据」于「偏」于「个数」于(「加」于「位」于「一」)于「新游」于「基」
  否则
    「元」
也。

「:文言:元素段之可用长:已弃者与声明式者为零。汉语:元素段当前可用的元素个数:已被丢弃的段、声明式的段(标志 3 与 7)都是 0,其余是个数。:」
「元素可用长」乃化「整数」而「整数」也。
「元素可用长」者会「条」而
  虑「标志」者「读字段」于「条」于「元素段_标志」而
  若「或者」
    于(「不等于」于(「读字段」于「条」于「元素段_已弃」)于「零」)
    于(「或者」于(「等」于「标志」于「三」)于(「等」于「标志」于「七」))
  则
    「零」
  否则
    「读字段」于「条」于「元素段_个数」
也。

「元素游标」乃化「整数」而化「整数」而「整数」也。
「元素游标」者会「条」而会「跳」而
  虑「起」者「读字段」于「条」于「元素段_向量起」而
  若「小于」于(「读字段」于「条」于「元素段_标志」)于「四」
  则
    「变长们后」于「起」于「跳」
  否则
    「跳过常量式们」于「起」于「跳」
也。

「:文言:table.init:自元素段取若干项入表;操作数自底至顶为目起、源起、个数。汉语:table.init 元素段号 表号:栈上依次是目标起始下标、源起始下标、个数(各 i32);源范围必须在段的可用长之内,目标范围必须在表的当前大小之内,否则陷入 124;成功后弹出三个操作数。:」
「表初始化」乃化「整数」而化「整数」而「整数」也。
「表初始化」者会「址」而会「栈针」而
  虑「段」者「读无符号变长」于「址」而
  虑「址二」者「读四」于「状态_读址」而
  虑「表」者「读无符号变长」于「址二」而
  虑「无」者(「写四」于「状态_新指令针」于(「读四」于「状态_读址」))而
  虑「个数」者「栈槽字」于「栈针」于「一」而
  虑「源起」者「栈槽字」于「栈针」于「二」而
  虑「目起」者「栈槽字」于「栈针」于「三」而
  虑「条」者「元素段条」于「段」而
  虑「描述」者「表描述址」于「表」而
  虑「无」者
    (「若则致命」
      于(「或者」
        于(「区间越界」于「源起」于「个数」于(「元素可用长」于「条」))
        于(「区间越界」于「目起」于「个数」于(「读字段」于「描述」于「表描述_大小」)))
        于「一二四」
        于(「静态串」于『table.init 越界』))而
        虑「无」者
          (「填元素逐个」
            于(「读字段」于「条」于「元素段_标志」)
            于(「读字段」于「描述」于「表描述_数据」)
            于「目起」
            于「个数」于「零」
            于(「元素游标」于「条」于「源起」)于「栈针」)
        而
        「栈槽址」于「栈针」于「三」
也。

「:文言:elem.drop:丢弃元素段。汉语:elem.drop 元素段号:把该段标为已弃,此后可用长为 0;重复丢弃合法;不动操作数。:」
「丢弃元素段」乃化「整数」而化「整数」而「整数」也。
「丢弃元素段」者会「址」而会「栈针」而
  虑「段」者「读无符号变长」于「址」而
  虑「无」者(「写四」于「状态_新指令针」于(「读四」于「状态_读址」))而
  虑「无」者
    (「写字段」于(「元素段条」于「段」)于「元素段_已弃」于「一」)
  而
  「栈针」
也。

「:文言:table.copy:表间或表内复制,可重叠。汉语:table.copy 目表 源表:栈上依次是目标起始下标、源起始下标、个数;两个范围都必须在各自表的当前大小之内,否则陷入 124;用内存复制(允许重叠,语义同 memmove);成功后弹出三个操作数。:」
「表复制」乃化「整数」而化「整数」而「整数」也。
「表复制」者会「址」而会「栈针」而
  虑「目表」者「读无符号变长」于「址」而
  虑「址二」者「读四」于「状态_读址」而
  虑「源表」者「读无符号变长」于「址二」而
  虑「无」者(「写四」于「状态_新指令针」于(「读四」于「状态_读址」))而
  虑「个数」者「栈槽字」于「栈针」于「一」而
  虑「源起」者「栈槽字」于「栈针」于「二」而
  虑「目起」者「栈槽字」于「栈针」于「三」而
  虑「源描述」者「表描述址」于「源表」而
  虑「目描述」者「表描述址」于「目表」而
  虑「无」者
    (「若则致命」
      于(「或者」
        于(「区间越界」于「源起」于「个数」于(「读字段」于「源描述」于「表描述_大小」))
        于(「区间越界」于「目起」于「个数」于(「读字段」于「目描述」于「表描述_大小」)))
        于「一二四」
        于(「静态串」于『table.copy 越界』))而
        虑「无」者
          (「拷贝」
            于(「加」于(「读字段」于「目描述」于「表描述_数据」)于(「乘」于「目起」于「四」))
            于(「加」于(「读字段」于「源描述」于「表描述_数据」)于(「乘」于「源起」于「四」))
            于(「乘」于「个数」于「四」))
        而
        「栈槽址」于「栈针」于「三」
也。

「填表逐个」乃化「整数」而化「整数」而化「整数」而「有」也。
「填表逐个」者会「格」而会「个数」而会「值」而
  若「大于」于「个数」于「零」
  则
    ((「写四」于「格」于「值」);
      (「填表逐个」于(「加」于「格」于「四」)于(「减」于「个数」于「一」)于「值」))
  否则
    「元」
也。

「:文言:table.grow:增长表,新项以给定引用填之,返旧大小,失败返负一。汉语:table.grow 表号:栈上是初值引用与增长的项数(i32,栈顶);新大小超过上限(解析时分配的容量)或加法溢出则返回 -1、表不变;否则把新增的项填成初值,返回旧大小。弹出一个槽,结果覆盖原来的初值槽。:」
「表增长」乃化「整数」而化「整数」而「整数」也。
「表增长」者会「址」而会「栈针」而
  虑「表」者「读无符号变长」于「址」而
  虑「无」者(「写四」于「状态_新指令针」于(「读四」于「状态_读址」))而
  虑「个数」者「栈槽字」于「栈针」于「一」而
  虑「值」者「栈槽字」于「栈针」于「二」而
  虑「描述」者「表描述址」于「表」而
  虑「旧」者「读字段」于「描述」于「表描述_大小」而
  虑「新」者「加」于「旧」于「个数」而
  虑「失败」者
    「或者」于(「无符号小于」于「新」于「旧」)于(「无符号大于」于「新」于(「读字段」于「描述」于「表描述_上限」))
  而
  虑「无」者
    (
      若「失败」
      则
        「元」
      否则
        ((「填表逐个」
          于(「加」于(「读字段」于「描述」于「表描述_数据」)于(「乘」于「旧」于「四」))
          于「个数」于「值」);
          (「写字段」于「描述」于「表描述_大小」于「新」))
    )
  而
  虑「无」者
    (「置栈槽」于「栈针」于「二」于(「选择」于「失败」于「负一」于「旧」)于「零」)
  而
  「减」于「栈针」于「八」
也。

「:文言:table.fill:以引用填表之一段。汉语:table.fill 表号:栈上依次是起始下标、引用值、项数;范围必须在表的当前大小之内,否则陷入 124;弹出三个操作数。:」
「表填充」乃化「整数」而化「整数」而「整数」也。
「表填充」者会「址」而会「栈针」而
  虑「表」者「读无符号变长」于「址」而
  虑「无」者(「写四」于「状态_新指令针」于(「读四」于「状态_读址」))而
  虑「个数」者「栈槽字」于「栈针」于「一」而
  虑「值」者「栈槽字」于「栈针」于「二」而
  虑「起」者「栈槽字」于「栈针」于「三」而
  虑「描述」者「表描述址」于「表」而
  虑「无」者
    (「若则致命」
      于(「区间越界」于「起」于「个数」于(「读字段」于「描述」于「表描述_大小」))
      于「一二四」
      于(「静态串」于『table.fill 越界』))而
      虑「无」者
        (「填表逐个」
          于(「加」于(「读字段」于「描述」于「表描述_数据」)于(「乘」于「起」于「四」))
          于「个数」于「值」)
      而
      「栈槽址」于「栈针」于「三」
也。