`delete` statement leaves its result on the stack
还没有人认领这个 Issue。
评估
调研方向
从链接行所在的 crates/rascal/src/internal/as2_pcode/pcode.rs 中的 Action::stack_delta 开始,然后追踪 codegen 如何为表达式语句使用差值和 truncate_stack。对照 issue 中的复现示例,检查将 delete 用作语句时生成的行为;循环分别访问 a 和 b 一次即完成。
由索引模型根据 Issue 内容生成。
描述
The result of a delete used as a statement is never popped. Inside a for..in loop, the leftover values get enumerated, so the loop doesn't end.
var o = {a: 1, b: 2};
var n = 0;
for (var k in o) {
delete o.nothing;
trace(k);
if (++n == 5) {
trace("too many iterations");
break;
}
}
Expected: a and b, once each.
Actual, in Flash Player (Rascal 0.3.6, SWF 8):
a
false
false
false
false
too many iterations
Assigning the result (var d = delete o.nothing;) works around it.
The cause seems to be the stack deltas in Action::stack_delta:
Both actions push a boolean result, so these should be -1 (pops an object and a name) and 0 (pops a name). The codegen then believes the stack is already balanced, and truncate_stack emits no Pop for the expression statement.
- 主要语言
- Rust
- 星标
- 22
- 派生
- 2
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
Dinnerbone/Rascal 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 66/100
Dinnerbone/Rascal#91 · 2 个 reaction ·
-
难度 4/5 3-5 天 新手友好度 48/100
Dinnerbone/Rascal#93 ·
-
难度 5/5 一周以上 新手友好度 30/100
Dinnerbone/Rascal#88 ·
-
难度 3/5 1-2 天 新手友好度 55/100
Dinnerbone/Rascal#87 · 1 条评论 ·
-
难度 3/5 1-2 天 新手友好度 58/100
Dinnerbone/Rascal#76 ·
查看 Dinnerbone/Rascal 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 76/100
rubys/roundhouse#1917 ·
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 2 天内回复
-
good first issue
难度 2/5 1-3 小时 新手友好度 88/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 84/100
pop-os/cosmic-applets#1619 ·
维护者通常 3 天内回复
-
binding:python bug
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复