stuncloud / UWSCR

UWSC互換スクリプト実行ツール
MIT License
50 stars 5 forks source link

誤った行を「UWSCR実行時エラー」の問題個所として表示する。 #148

Closed DIYJii closed 4 months ago

DIYJii commented 5 months ago

概要

文字列を行結合した記述が有ると、それ以降にあるスクリプトで実行時エラーが起きた場合, 真のエラー箇所から上方に結合行分だけずれた行のスクリプトが、問題個所として表示される。

再現スクリプト

dim m[3], b
a = "x_
y_      //レポート上のエラー個所   
z"
m[b] = a   //真のエラー個所
print m[b]
msgbox("Ok?")

エラー表示:
UWSCR実行時エラー
test.uws 3行目: y_      //レポート上のエラー個所   
[代入エラー] インデックスが不正です ()

再現手順

実際のトラブルは、約20行のHTMLの結合箇所から500行位離れた全く関連性のないスクリプトで,UWSCからの仕様変更対応もれが有った為にエラーが発生していました。エラーでもないスクリプトのあたりをさんざ調べまくって、エラー箇所はそこではないと分かった後も、こんな遠くに離れた箇所とずれの因果関係を探し出す迄は、ほんまに、しんどかったっス!

バージョン

1.0.0

不具合発生環境

Windows 10

stuncloud commented 5 months ago

原因は #149 と同じで文字列リテラルで行結合を考慮していなかったのが問題

@DIYJii

m[b] = a   //真のエラー個所

配列の添字にEMPTYを入れるとエラーになるのはまた別件ですので必要であればissueを立ててください UWSCは添字のEMPTYを0として評価しているようですが、個人的にはちょっと微妙な仕様だと感じていてどうしようか悩んでいます

また、UWSCでは

print "a_  a
b"

という記述は行連結記号のあとに文字があるためエラーとなりますが、UWSCRではこの場合_を行連結記号と見なさずそのまま文字列として扱います、これは仕様とします

DIYJii commented 5 months ago

配列の添字にEMPTYを入れるとエラーになるのはまた別件ですので必要であればissueを立ててください UWSCは添字のEMPTYを0として評価しているようですが、個人的にはちょっと微妙な仕様だと感じていてどうしようか悩んでいます

実はUWSCで配列の添字のEmptyが0扱いされているのは、今回の件で初めて知りました。 ただ、今迄、ルティーンの簡素化の為に、Emptyを使ってもエラーにならない事を前提にしたスクリプトを書いていました。 配列は、夫々の箱に入っているデータが個々に独立して存在しているのであって、UWSCが特に[0]のデータを取り上げてDefault扱いしているのは、おかしいと思います。 エラー扱いしない場合は、UWSCと異なって、戻り値はEmptyにする方がロジカルだと思いますが・・・ 

DIYJii commented 5 months ago

もし良ければ、他に文字化された数字を配列に代入してもエラーにならない様にして欲しいとの要望が有りますので、其れとまとめてEnhancementのリクエストを上げるげます。

stuncloud commented 5 months ago

@DIYJii 要望の件はどうなってますか?

数値変換可能な文字列を添字として許容できるようにするのであれば、それにより添字のEMPTYも0として扱えるようになります UWSCRデータ型を数値変換する関数を通すとそのようになるからですが、実装の手間的にその関数を通すのが一番楽なので要望が出ればそのまま実装を進めてしまいますが

DIYJii commented 5 months ago

私は、サンデー毎日なので、全く構わないのですが、連休中なので、此方からのコンタクトは控えてました。 宜しければ、少し溜まっているレポートを挙げさせて頂きます。

本題に戻って、インデックスにemptyをや空文字を入れた場合、Emptyを返すのが論理的にスッキリすると思うのですが、 UWSCでは[0]の内容を戻り値とした理由は分りません。 とりあえず、文字列数字をインデックスに使う件でIssueを挙げておきます。

stuncloud commented 5 months ago

UWSCのケースはVARIANTのEMPTY型が0として扱われるケースに該当しているから0として扱われる、ということなのだと思われます

DIYJii commented 5 months ago

返事が、遅くなって申し訳ありません。

私の言う論理的云々は捨てて、やはり、emptyには[0]を対応させ、#154の件も合わせて, UWSC と同じ仕様にするのが妥当という結論に至りました。

考えてみれば、[0]をインデックスの起点ではなく、分類出来なかった物や、その他分類の入れ物、 或いはインデックス・エラーを気にしないで使えるダミーの入れ物として使う等等、色々使い道が有りそうです。 更に、ファイル・データの行・列は共に、起点が[1]である事も合わせて考えると、更に便利な仕様に見えてきました。

危うく、他のUWSC ユーザーに迷惑を掛けるところでした。

p.s. 今後、この様な議論の場合、他の人の意見を聞くのも良いと思うのですが, そちらの判断でDiscussionを開くというのはどうでしょうか?