-
Notifications
You must be signed in to change notification settings - Fork 39
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
#237 (comment) で言われているとおり、現状だと
@fff() {
let a = eval {
return 1
}
<: a // return<null>
let b = if true {
return 1
}
<: b // return<null>
}のようなプログラムで見られるように、return(及びbreak・continue)を含むifやevalブロックが値を返す時の動作が未定義であり、意図しない挙動(returnのラッパーが取り出せる)が発生してしまいます。
考えられる新しい仕様として、
- 値を返す・返さない関係なく、return系は現在のスコープを破棄し親スコープに処理を移動する
- 値を返す・返さない関係なく、if/eval中で使われたreturnはif/evalの返り値になる(break・continueはエラー?)
- if/evalが値を返す場合のみ、if/eval中で使われたreturnはif/evalの返り値になる(break・continueはエラー?)
- if/evalが値を返す場合のみ、if/eval中でreturn(及びbreak・continue)が使用されたときエラーにする
などが挙げられます。
私自身は最後の案で考えていますが、よければご意見をお願いします。
salano-ym
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working