调用。豫
yuyan · 412 行 · 23791 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412
寻观「底层库」之书。
寻观「客体二号」之「布局」之书。
寻观「客体二号」之「平台」之书。
寻观「客体二号」之「基础」之书。
寻观「客体二号」之「实例」之书。
寻观「客体二号」之「模块」之书。
寻观「客体二号」之「控制」之书。
寻观「客体二号」之「链接」之书。
寻观「客体二号」之「宿主对象」之书。
寻观「客体二号」之「主机」之书。
寻观「客体二号」之「WASI分派」之书。
「:文言:调用与尾调用:立帧、分配局部、扫边表、压函数标签;导入或宿主,或 WASI,或链他实例,或延迟链接之。汉语:函数调用与尾调用:普通函数压调用帧(返回位置、帧针、当前函数、标签顶、处理顶、调用者实例)、在值栈上分配局部、必要时扫描边表、压函数级标签,并把新指令针、新帧针、边偏写入状态格;宿主导入走宿主原语,WASI 导入走底层分派,已链接到其他实例的导入压帧并切换实例,未连接的导入尝试延迟链接。宿主原语执行完可能留下请求(加载模块、调用导出、待重启):调用导出在此就地办理,其余请求令解释循环退出,由入口的驱动循环代办。表函数由表项取函数号。:」
「设新现场」乃化「整数」而化「整数」而化「整数」而「有」也。
「设新现场」者会「新址」而会「新帧」而会「边基」而
虑「无」者(「写四」于「状态_新指令针」于「新址」)而
虑「无」者(「写四」于「状态_新帧针」于「新帧」)而
「写四」于「状态_边偏」于「边基」
也。
「:文言:请求之办:调用导出即行,余者退出解释循环而待驱动之办。汉语:办理宿主原语留下的请求。调用导出:就地办理(内联调用导出);加载模块、装箱结果、待重启:把续行的现场(指令针、帧针、栈针)存进 状态_续*,把新指令针置零使解释循环退出,入口的驱动循环处理之后接着跑;没有请求则原样返回栈针。:」
「进入函数体」乃
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
「整数」
也。
「进入函数体」者会「函数号」而会「条」而会「参数数」而会「局部数」而会「栈针」而
虑「无」者「中断点」于「元」而
虑「新帧针」者「减」于「栈针」于(「乘」于「参数数」于「八」)而
虑「无」者
(「清零」于「栈针」于(「乘」于(「减」于「局部数」于「参数数」)于「八」))而
虑「无」者(「写四」于「状态_函」于「函数号」)而
虑「无」者
(若「等零」于(「读字段」于「条」于「函数条_边表」)则「扫描函数」于「函数号」否则「元」)
而
虑「无」者
(「压标签」于「零」于「新帧针」于(「读字段」于「条」于「函数条_结果数」)于「标签函数」)
而
虑「无」者
(「设新现场」于(「读字段」于「条」于「函数条_代码起」)于「新帧针」于(「边偏」于「函数号」))
而
「加」于「新帧针」于(「乘」于「局部数」于「八」)
也。
「压调用帧」乃化「整数」而化「整数」而「有」也。
「压调用帧」者会「指令针」而会「帧针」而
虑「帧」者「读四」于「状态_帧顶」而
虑「无」者
(「若则致命」
于(「无符号大等」于「帧」于(「读四」于「状态_帧栈限」))于「一二二」
于(「静态串」于『栈溢出:递归过深』))而
虑「无」者(「写四」于「帧」于「指令针」)而
虑「无」者(「写字段」于「帧」于「四」于「帧针」)而
虑「无」者
(「写字段」于「帧」于「八」于(「读四」于「状态_函」))而
虑「无」者
(「写字段」于「帧」于「一二」于(「读四」于「状态_标签顶」))而
虑「无」者
(「写字段」于「帧」于「一六」于(「读四」于「状态_处理顶」))而
虑「无」者
(「写字段」于「帧」于「帧_实例」于(「读四」于「状态_当前实例」))而
虑「无」者(「写字段」于「帧」于「帧_钩」于「零」)而
「写四」于「状态_帧顶」于(「加」于「帧」于「帧条长」)
也。
「装入实参」乃化「整数」而化「整数」而化「整数」而化「整数」而「有」也。
「装入实参」者会「参」而会「基」而会「数」而会「位」而
若「小于」于「位」于「数」
则
((「拆箱」于(「元组项」于「参」于(「加」于「位」于「二」))于(「加」于「基」于(「乘」于「位」于「八」)));
「装入实参」于「参」于「基」于「数」于(「加」于「位」于「一」))
否则
「元」
也。
「内联调用导出」乃化「整数」而化「整数」而化「整数」而「整数」也。
「内联调用导出」者会「栈针」而会「指令针」而会「帧针」而
虑「无」者(「写四」于「状态_请求」于「零」)而
虑「参」者「读四」于「状态_请求参一」而
虑「个数」者「读字段」于「参」于「八」而
虑「无」者
(「若则致命」于(「小于」于「个数」于「二」)于「一二七」于(「静态串」于『调用导出:参数不足』))而
虑「无」者
(「拆箱」于(「元组项」于「参」于「零」)于「状态_临时」)而
虑「目标」者「读四」于「状态_临时」而
虑「无」者
(「若则致命」
于(「无符号大等」于「目标」于(「读四」于「状态_实例数」))
于「一二七」
于(「静态串」于『调用导出:无此实例』))而
虑「无」者(「保存上下文」于(「读四」于「状态_当前实例」))而
虑「无」者
(「若则致命」
于(「不等于」于(「读字段」于(「实例记录」于「目标」)于「记录_状态」)于「一」)
于「一二七」
于(「静态串」于『调用导出:实例未装载』))而
虑「名」者「元组项」于「参」于「一」而
虑「函数号」者
「查实例导出」
于「目标」
于(「字节数组址」于「名」)
于(「字节数组长」于「名」)而
虑「无」者
(「若则致命」
于(「小于」于「函数号」于「零」)
于「一二七」
于(「静态串」于『调用导出:找不到导出函数』))而
虑「条址」者
「加」
于(「读实例格」于「目标」于「状态_函数表」)
于(「乘」于「函数号」于「函数条长」)而
虑「无」者
(「若则致命」
于(「不等于」于(「位与」于(「读字段」于「条址」于「函数条_标志」)于「一」)于「零」)
于「一二七」
于(「静态串」于『调用导出:导出的是导入函数』))而
虑「实参数」者「减」于「个数」于「二」而
虑「参数数」者
「读字段」于「条址」于「函数条_参数数」而
虑「无」者
(「若则致命」
于(「不等于」于「实参数」于「参数数」)
于「一二七」
于(「静态串」于『调用导出:参数个数不符』))而
虑「局部数」者
「读字段」于「条址」于「函数条_局部总数」而
虑「结果数」者
「读字段」于「条址」于「函数条_结果数」而
虑「类型址」者
「加」
于(「读实例格」于「目标」于「状态_类型表」)
于(「乘」于(「读字段」于「条址」于「函数条_类型」)于「类型条长」)而
虑「钩」者
(
若「等零」于「结果数」则
「三」
否则
(
若「等」
于(「读一」于(「读字段」于「类型址」于「类型条_结果编码起」))
于「一二六」则
「二」
否则
「一」
)
)
而
虑「基」者
「减」于「栈针」于「八」
而
虑「无」者
(「装入实参」于「参」于「基」于「实参数」于「零」)
而
虑「新栈针」者
「加」
于「基」
于(「乘」于「参数数」于「八」)
而
虑「无」者
(「若则致命」
于(「无符号大于」
于(「加」
于(「加」于「新栈针」于(「乘」于「局部数」于「八」))
于(「乘」于「栈余量槽」于「八」))
于(「读四」于「状态_值栈限」))
于「一二二」
于(「静态串」于『栈溢出:递归过深』))
而
虑「无」者
(「压调用帧」于「指令针」于「帧针」)
而
虑「无」者
(「写字段」
于(「减」于(「读四」于「状态_帧顶」)于「帧条长」)
于「帧_钩」于「钩」)
而
虑「无」者
(「切换实例」于「目标」)
而
「进入函数体」
于「函数号」
于(「函数条」于「函数号」)
于「参数数」
于「局部数」于「新栈针」
也。
「办理请求」乃化「整数」而化「整数」而化「整数」而「整数」也。
「办理请求」者会「栈针」而会「指令针」而会「帧针」而
虑「请求」者「读四」于「状态_请求」而
若「等」于「请求」于「请求_调用导出」
则
「内联调用导出」于「栈针」于「指令针」于「帧针」
否则
(
若「且」于(「等零」于「请求」)于(「等零」于(「读四」于「状态_待重启」))
则
「栈针」
否则
虑「无」者(「写四」于「状态_续指令针」于「指令针」)
而
虑「无」者(「写四」于「状态_续帧针」于「帧针」)
而
虑「无」者(「写四」于「状态_续栈针」于「栈针」)
而
虑「无」者(「写四」于「状态_新指令针」于「零」)而
「栈针」
)
也。
「进入调用」乃化「整数」而化「整数」而化「整数」而「整数」也。
「进入调用」者会「函数号」而会「条」而会「栈针」而
虑「参数数」者「读字段」于「条」于「函数条_参数数」而
虑「局部数」者「读字段」于「条」于「函数条_局部总数」而
虑「无」者
(「若则致命」
于(「无符号大于」
于(「加」于(「加」于「栈针」于(「乘」于「局部数」于「八」))于(「乘」于「栈余量槽」于「八」))
于(「读四」于「状态_值栈限」))于「一二二」
于(「静态串」于『栈溢出:递归过深』))
而
「进入函数体」于「函数号」于「条」于「参数数」于「局部数」于「栈针」
也。
「本地调用」乃
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
「整数」
也。
「本地调用」者会「函数号」而会「条」而会「栈针」而会「指令针」而会「帧针」而
虑「无」者(「压调用帧」于「指令针」于「帧针」)而
「进入调用」于「函数号」于「条」于「栈针」
也。
「跨实例调用」乃
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
「整数」
也。
「跨实例调用」者会「实例」而会「目标函数」而会「栈针」而会「指令针」而会「帧针」而
虑「无」者(「压调用帧」于「指令针」于「帧针」)而
虑「无」者(「切换实例」于「实例」)而
「进入调用」于「目标函数」于(「函数条」于「目标函数」)于「栈针」
也。
「导入调用」乃
化「整数」而
化「整数」而
化「整数」而
化「整数」而
化「整数」而
「整数」
也。
「导入调用」者会「函数号」而会「条」而会「栈针」而会「指令针」而会「帧针」而
虑「宿主号」者
「无符号右移」于(「读字段」于「条」于「函数条_标志」)于「八」而
若「等」于「宿主号」于「宿主号_实例」
则
「跨实例调用」
于(「读字段」于「条」于「函数条_链接实例」)
于(「读字段」于「条」于「函数条_链接函数」)于「栈针」于「指令针」于「帧针」
否则
(
若「等」于「宿主号」于「宿主号_宿主」
则
虑「新栈针」者「调用导入」于「函数号」于「栈针」
而
虑「无」者
(「设新现场」于「指令针」于「帧针」于(「边偏」于(「读四」于「状态_函」)))
而
「办理请求」于「新栈针」于「指令针」于「帧针」
否则
(
若「等」于「宿主号」于「宿主号_WASI」则
虑「新栈针」者
「WASI调用」
于(「读字段」于「条」于「函数条_链接函数」)于「条」于「栈针」
而
虑「无」者
「设新现场」
于「指令针」于「帧针」
于(「边偏」于(「读四」于「状态_函」))
而
「新栈针」
否则若「不等于」于(「链接导入」于「函数号」)于「零」
则
「导入调用」于「函数号」于「条」于「栈针」于「指令针」于「帧针」
否则
((「致命退出」于「一三二」于(「静态串」于『调用了未连接的导入』));
「栈针」)
)
)
也。
「调用」乃化「整数」而化「整数」而化「整数」而化「整数」而「整数」也。
「调用」者会「函数号」而会「栈针」而会「指令针」而会「帧针」而
虑「条」者「函数条」于「函数号」而
若「等零」于(「位与」于(「读字段」于「条」于「函数条_标志」)于「一」)
则
「本地调用」于「函数号」于「条」于「栈针」于「指令针」于「帧针」
否则
「导入调用」于「函数号」于「条」于「栈针」于「指令针」于「帧针」
也。
「定义尾调用」乃化「整数」而化「整数」而化「整数」而化「整数」而「整数」也。
「定义尾调用」者会「函数号」而会「条」而会「栈针」而会「帧针」而
虑「参数数」者「读字段」于「条」于「函数条_参数数」而
虑「局部数」者「读字段」于「条」于「函数条_局部总数」而
虑「参数字节」者「乘」于「参数数」于「八」而
虑「无」者
(
若「不等于」于(「加」于「帧针」于「参数字节」)于「栈针」则
「拷贝」于「帧针」于(「减」于「栈针」于「参数字节」)于「参数字节」
否则
「元」
)而
虑「基针」者「加」于「帧针」于「参数字节」而
虑「现」者「减」于(「读四」于「状态_帧顶」)于「帧条长」而
虑「无」者
(「写四」于「状态_标签顶」于(「读字段」于「现」于「一二」))
而
虑「无」者
(「写四」于「状态_处理顶」于(「读字段」于「现」于「一六」))
而
虑「无」者
(「若则致命」
于(「无符号大于」
于(「加」于(「加」于「帧针」于(「乘」于「局部数」于「八」))于(「乘」于「栈余量槽」于「八」))
于(「读四」于「状态_值栈限」))
于「一二二」
于(「静态串」于『栈溢出:递归过深』))
而
「进入函数体」于「函数号」于「条」于「参数数」于「局部数」于「基针」
也。
「导入尾调用」乃化「整数」而化「整数」而化「整数」而化「整数」而「整数」也。
「导入尾调用」者会「函数号」而会「条」而会「栈针」而会「帧针」而
虑「宿主号」者
「无符号右移」于(「读字段」于「条」于「函数条_标志」)于「八」而
若「等」于「宿主号」于「宿主号_实例」
则
虑「无」者
(「切换实例」于(「读字段」于「条」于「函数条_链接实例」))而
虑「目标」者「读字段」于「条」于「函数条_链接函数」而
「定义尾调用」于「目标」于(「函数条」于「目标」)于「栈针」于「帧针」
否则
(
若「等」于「宿主号」于「宿主号_宿主」
则
虑「新栈针」者「调用导入」于「函数号」于「栈针」
而
虑「结果栈」者「返回处理」于「新栈针」于「帧针」而
「办理请求」于「结果栈」于(「读四」于「状态_新指令针」)
于(「读四」于「状态_新帧针」)
否则
(
若「等」于「宿主号」于「宿主号_WASI」则
「返回处理」
于(「WASI调用」于(「读字段」于「条」于「函数条_链接函数」)于「条」于「栈针」)
于「帧针」
否则若「不等于」于(「链接导入」于「函数号」)于「零」
则
「导入尾调用」于「函数号」于「条」于「栈针」于「帧针」
否则
((「致命退出」于「一三二」于(「静态串」于『调用了未连接的导入』));
「栈针」)
)
)
也。
「尾调用」乃化「整数」而化「整数」而化「整数」而「整数」也。
「尾调用」者会「函数号」而会「栈针」而会「帧针」而
虑「条」者「函数条」于「函数号」而
若「等零」于(「位与」于(「读字段」于「条」于「函数条_标志」)于「一」)
则
「定义尾调用」于「函数号」于「条」于「栈针」于「帧针」
否则
「导入尾调用」于「函数号」于「条」于「栈针」于「帧针」
也。
「表函数」乃化「整数」而化「整数」而「整数」也。
「表函数」者会「表」而会「索引」而
虑「无」者
(「若则致命」于(「无符号大等」于「表」于(「读四」于「状态_表数」))于「一二四」
于(「静态串」于『表索引越界』))而
虑「描述」者
「加」
于(「读四」于「状态_表描述」)
于(「乘」于「表」于「表描述长」)而
虑「无」者
(「若则致命」
于(「无符号大等」于「索引」于(「读字段」于「描述」于「表描述_大小」))
于「一二四」
于(「静态串」于『未定义的表元素』))而
虑「字」者
「读四」于(「加」于(「读字段」于「描述」于「表描述_数据」)于(「乘」于「索引」于「四」))而
虑「无」者
(「若则致命」
于(「不等于」于(「位与」于「字」于「七」)于「二」)
于「一二四」
于(「静态串」于『未初始化的表元素』))
而
「无符号右移」于「字」于「三」
也。