- 实现 as 类型转换运算符、修复 &&/|| 短路求值 bug。 - 在 splc1.spl 中实现 Vec/Map/Emit 基础库(~50 个方法)。 - 修复实例方法调用中 self 参数被错误丢弃的 bug。
46 lines
1.2 KiB
Plaintext
46 lines
1.2 KiB
Plaintext
/* ===== 模块7:高级特性 =====
|
||
* test15_defer — 延迟执行
|
||
* 难度:3/5
|
||
* 验证点:defer 语句、defer 块、多个 defer(逆序执行)、
|
||
* 函数中 defer、块作用域 defer
|
||
*/
|
||
@extern(vm) fn vm_printf(fmt: *u8, ...) void;
|
||
|
||
fn with_cleanup() void {
|
||
defer vm_printf(" inner defer\n");
|
||
vm_printf(" inside with_cleanup\n");
|
||
}
|
||
|
||
fn main() i32 {
|
||
vm_printf("--- defer test ---\n");
|
||
|
||
/* defer 语句 */
|
||
defer vm_printf("defer1\n");
|
||
vm_printf("after defer1\n");
|
||
|
||
/* defer 块 */
|
||
defer {
|
||
vm_printf("defer block\n");
|
||
}
|
||
vm_printf("after defer block\n");
|
||
|
||
/* 函数内 defer */
|
||
with_cleanup();
|
||
vm_printf("after with_cleanup\n");
|
||
|
||
/* 多个 defer 应逆序执行出作用域应该立刻执行,包括循环作用域 */
|
||
{
|
||
defer vm_printf("block defer last\n");
|
||
defer vm_printf("block defer middle\n");
|
||
defer vm_printf("block defer first (should print third)\n");
|
||
}
|
||
|
||
/* 多个 defer 应逆序执行 */
|
||
defer vm_printf("defer last\n");
|
||
defer vm_printf("defer middle\n");
|
||
defer vm_printf("defer first (should print third)\n");
|
||
|
||
vm_printf("--- defer test end ---\n");
|
||
ret 0;
|
||
}
|