Skip to content
New issue

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

Returnの方式の変更 #278

Closed
wants to merge 6 commits into from
Closed

Conversation

FineArchs
Copy link
Member

What

従来のRETURN/BREAK/CONTINUE型を廃し、新しく例外機構を利用したreturn/break/continueの処理を実装します。

Why

Additional info (optional)

不正なコードである「関数定義ブロック外のreturn」、「ループ外のbreak/continue」にエラーを出すことができます。

・あくまで評価時のエラーになるため、実行時に評価されない位置にある不正return/breakはエラーになりません。
例:

loop {
 break
 return 1 //評価されない
}

・今回の実装だと「breakを含む関数」の存在が許容されることになります。
例:

@func(){
 break
}
loop {
 func() //breakとしてはたらく
}

これらは後々修正したほうがいいかもしれません。

@codecov
Copy link

codecov bot commented May 28, 2023

Codecov Report

Patch coverage: 88.54% and project coverage change: -0.23 ⚠️

Comparison is base (556e3be) 88.92% compared to head (ecf6373) 88.70%.

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #278      +/-   ##
==========================================
- Coverage   88.92%   88.70%   -0.23%     
==========================================
  Files          19       19              
  Lines        2926     2947      +21     
  Branches      504      507       +3     
==========================================
+ Hits         2602     2614      +12     
- Misses        314      323       +9     
  Partials       10       10              
Impacted Files Coverage Δ
src/interpreter/index.ts 89.47% <83.82%> (-1.16%) ⬇️
src/error.ts 96.87% <100.00%> (+2.13%) ⬆️
src/interpreter/util.ts 61.29% <100.00%> (ø)
src/interpreter/value.ts 100.00% <100.00%> (ø)

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

@syuilo
Copy link
Collaborator

syuilo commented May 29, 2023

throwはエラーが発生した時に使うことが想定されてそうだからアレかも
あとretrunするたびにErrorインスタンスが生成されるのはパフォーマンス上の懸念もあるかなと思いました(スタックトレースの収集コストとか)

@FineArchs
Copy link
Member Author

throwはエラーが発生した時に使うことが想定されてそうだからアレかも

道具を想定されていない用途に使うのってあまり良くないんですかね・・・?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants