Skip to content

ラッパーとしてのreturn,break,continueが残ってしまっている #237

@salano-ym

Description

@salano-ym

if式・match式・ブロック式で、return文・break文・continue文を使用するとラッパーが外れずに残ってしまう。
break文・continue文は普通の関数でも残ってしまう。

<: eval { return 1 } // == return
<: eval { break } // == break
<: eval { continue } // == continue
<: if true { return 1 } // == return
<: if true { break } // == break
<: if true { continue } // == continue

@r() { return 1 }
@b() { break }
@c() { continue }
<: r() // == 1 (これが正常)
<: b() // == break
<: c() // == continue

解決案

return文に関しては関数呼び出しでしているのと同様にブロック式の処理に外すべき場所でunWrapRetを挟む。
if式のブロックとブロック式のブロックが同じノードでreturnをどう処理すべきか区別できないので、ブロックの呼び出し元(代入文等)で処理する?

https://github.com/syuilo/aiscript/blob/master/src/interpreter/index.ts#L427-L429

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions