-
Notifications
You must be signed in to change notification settings - Fork 39
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
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 workingSomething isn't working