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

空の配列に対する(arr).reduce()が正しく診断されない #598

Closed
zawa-ch opened this issue Mar 19, 2024 · 4 comments
Closed

Comments

@zawa-ch
Copy link

zawa-ch commented Mar 19, 2024

空の配列に対してarr.reduce(fn)を実行した場合のエラーが環境によってまちまちです。

再現可能なAiScriptコードと環境

[].reduce(@(b,c,n){})
  • AiScript:
    • 2024-03-20 00:00:00 +09:00 時点でgh-pagesにデプロイされているバージョン
    • Misskey 2024.3.1 に含まれるAiScript 0.17.0
  • Browser:
    • Mozilla Firefox 123.0.1 (in Linux 6.6.19-1-MANJARO x86_64)
    • Vivaldi 6.6.3271.50 stable (in Linux 6.6.19-1-MANJARO x86_64)

期待される動作

null、空の配列[]、もしくはerror型などの定義された値が返る、もしくは正しく診断されたエラーによって終了する

実際の動作

internal: i is undefinedなどの未定義なランタイムエラーによって終了する

@zawa-ch
Copy link
Author

zawa-ch commented Mar 19, 2024

[].reduce(@(b,c,n){},null)

のように初期値を指定するとエラーが発生しなくなることを確認しています。

@zawa-ch
Copy link
Author

zawa-ch commented Mar 19, 2024

デバッグすると

return accumulator;

accumulator: undefinedだったことも確認しました。
返ってきたundefinedを処理するタイミングでエラーになっているものと推測されます。
20240320_004118

@salano-ym
Copy link
Member

arr.reduceは初期値を指定しない場合arr[0]を初期値として参照するので空配列でエラーになるのは仕様かと思います。
配列の範囲外アクセスはエラーなので。

エラー内容はもっと分かりやすくしてもいい思います。

@zawa-ch
Copy link
Author

zawa-ch commented Mar 19, 2024

空配列に対する(arr).reduce(fn)はエラー、把握しました

どのみち関数の外にundefinedが漏れているということは未定義動作として扱われているのでassertしたほうが良いかもしれないですね

@zawa-ch zawa-ch changed the title 空の配列に対する(arr).reduce()でランタイムエラーが発生する 空の配列に対する(arr).reduce()が正しく診断されない Mar 19, 2024
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

No branches or pull requests

2 participants