"\x9" などと書いたときの挙動No.06114
IKKI さん 04/12/02 00:39
 
こんばんは。 IKKI です。興味本位の質問です。
"\x09" などと書くべきところを "\x9" などと書き間違えた場合、マクロ実行部はど
のように解釈するのでしょうか?
秀丸 v4.14 で試したところ、よくわからない挙動に出くわしました。いくつか例を
挙げます。

▼ A.mac は何も起こらないマクロですが、ちょっと書き間違えた B.mac は B0.mac
と同じ動きをします。

// A.mac(正)
$a = "hoge";
while ($a != "") {
    $z = "\x09";
    $a = getclipboard;
}

// B.mac(誤)
$a = "hoge";
while ($a != "") {
    $z = "\x9";        // ミス
    $a = getclipboard;
}

// B0.mac
while (1) {
    paste;
}

▼ C.mac は実行すると秀丸が固まったり死んだりします。(dump.txt が必要でした
らお送りします)

// C.mac
while (0) {
    $z = "\x9";        // ミス
    insert $z;
}

▼ D.mac は実行すると「マクロエラー:数値が指定されるべき所に数値以外のもの
が指定されています。」が出ます。

// D.mac
$a = input("1行目\xa2行目", "");

また、 menuarray 文も ddestartadvice 文も使っていないのに「マクロエラー:文
字列変数の名前が指定されなければいけない所にそれ以外のものが指定されていま
す。」が出た例もありました(再現条件は忘れてしまいましたが)。

このような挙動の原因についてご説明いただければ幸いです。


[ ]
RE:06114 "\x9" などと書いたときの挙動No.06115
秀丸担当 さん 04/12/06 12:41
 

>こんばんは。 IKKI です。興味本位の質問です。
>"\x09" などと書くべきところを "\x9" などと書き間違えた場合、マクロ実行部はど
>のように解釈するのでしょうか?

回答が送れて申し訳ありません。
このように書くと、マクロは、\x00として解釈してしまいます。
文字列の途中に\x00があると、それは文字列の終了とみなされます。
本当の文字列の終了よりも前に文字列が終了し、実行するべきコードがずれて問
題がおきます。
こういうことが起きてはならないので、バグです。このようなことが起きないよ
うに修正させていただきます。


[ ]
RE:06115 "\x9"などと書いたときの挙動No.06116
IKKI さん 04/12/07 00:31
 
> >"\x09" などと書くべきところを "\x9" などと書き間違えた場合、マクロ実行部はど
> >のように解釈するのでしょうか?
>
> このように書くと、マクロは、\x00として解釈してしまいます。
> 文字列の途中に\x00があると、それは文字列の終了とみなされます。
> 本当の文字列の終了よりも前に文字列が終了し、実行するべきコードがずれて問
> 題がおきます。

ご教示ありがとうございます。参考になりました。

> こういうことが起きてはならないので、バグです。このようなことが起きないよ
> うに修正させていただきます。

それがいいですね。よろしくお願いします。
# この件は原因を突き止めるのにかなり苦労しました…。

[ ]