We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
if式・match式・ブロック式で、return文・break文・continue文を使用するとラッパーが外れずに残ってしまう。 break文・continue文は普通の関数でも残ってしまう。
if
match
return
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をどう処理すべきか区別できないので、ブロックの呼び出し元(代入文等)で処理する?
unWrapRet
https://github.com/syuilo/aiscript/blob/master/src/interpreter/index.ts#L427-L429
The text was updated successfully, but these errors were encountered:
グローバルスコープ直下のifやブロック式にreturn、関数の直下にbreakやcontinueが存在していること自体がおかしいのでエラーにしてもいいような気がします…
Sorry, something went wrong.
returnに関しては関数内でも普通に取り出せてしまうけどどう扱うべきだろう 禁止するとして構文解析レベルで処理するかプラグインの段階で処理するか
@fff() { let a = eval { return 1 } <: a // return<null> let b = if true { return 1 } <: b // return<null> }
これらを実装できればよさそうですかね? 個人的には、1.と2.はreturn文の処理内でスコープ名をチェックするような処理で済ませられるならそれがシンプルでいいと思います。 3.に関しては構文解析レベルのエラーにしたほうが早い気がします。
takejohn
Successfully merging a pull request may close this issue.
if
式・match
式・ブロック式で、return
文・break
文・continue
文を使用するとラッパーが外れずに残ってしまう。break
文・continue
文は普通の関数でも残ってしまう。例
解決案
return
文に関しては関数呼び出しでしているのと同様にブロック式の処理に外すべき場所でunWrapRet
を挟む。if
式のブロックとブロック式のブロックが同じノードでreturn
をどう処理すべきか区別できないので、ブロックの呼び出し元(代入文等)で処理する?https://github.com/syuilo/aiscript/blob/master/src/interpreter/index.ts#L427-L429
The text was updated successfully, but these errors were encountered: