今まで解決不能で泣き寝入りしてた問題がやっと解決したので。
こちらは命令内(#deffunc)でのみ使う一時変数にはlocalを付けるようにしていて、
その中でも小さい命令の場合、一時変数の用途(型)ごとに、
p(int,パラメータ),s(str),l(label),d(double),m(メモリ)
といった接頭辞に数値をつけてる。
といった感じの宣言になるけど、この際の接頭辞mが曲者で、
#deffunc WriteText_SetPosition int posx,int posy,local p1,local p2,local m1
デフォルトのモジュール名と被ってしまいます。(回避してくれないのよね…)
(#deffuncのヘルプ曰く、モジュールの自動割り当て名って"_m数値"じゃないの?)
そのため・・・
こんなソースを書くと、"Test"と2回描画できそうに見えて1度だけです。エラー表示無し。
#module #global #module #deffunc Test01 var mem,local m1 mes mem sdim m1 mes mem return #deffunc Test02 str text,local m1 m1 = text Test01 m1 return #global s1 = "Test" Test02 s1
数千行以上の規模のソースでこんなバグにブチ当たると再起不能になりかねません。
みんなも気をつけよう(泣
(モジュール単体でやってると何事もなく動くのに、
上に#moduleが増えると突然ばぐるんですよー…この絶望感は半端ない。)
過去の掲示板でもlocal変数にm1と付けてた方がおられましたが無事だろうか。
いままでm1、m2、…って付けてたやつどうしよう…。allocから取ってa1,a2?何かやだなあ。