HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1206
窓月らら[HSP3Dish] 不具合報告:#deffuncで配列をvarで渡した場合、値が正しく取得できない6解決


窓月らら

リンク

2016/12/6(Tue) 06:18:27|NO.77461

テストサンプル

#include "hsp3dish.as" a(0)=1: a(1)=2 i=1 test a(i) st=stat setcls 1,$000000 redraw 0 color 255,255,255 mes "a(0)="+a(0)+" a(1)="+a(1)+" stat="+st redraw 1 stop #deffunc test var _p1 _p1=8 return _p1
Windowsで実行した場合: a(0)=1 a(1)=8 stat=8
Androidで実行した場合: a(0)=1 a(1)=8 stat=1
つまり、Windowsでは _p1=a(1) ですが、Androidでは _p1=a(0) を参照してるようです。
_p1=8 についてはa(1)に代入されていますが、値の取得が配列の先頭a(0)で固定されてる?

以上、不具合として報告いたします。
テストバージョン:HSP3.5β4



この記事に返信する


おにたま(管理人)

リンク

2016/12/8(Thu) 22:24:34|NO.77508

HSP3Dishの不具合につきまして、ご報告ありがとうございます。
該当する部分を修正致しました。次回のバージョンで更新させて頂きます。

OneDriveの方を最新版に更新しています。
https://onedrive.live.com/embed?cid=EC425522ED849DA7&resid=EC425522ED849DA7%211229&authkey=AB-pNztAqBp6BcU

既存のプロジェクトでお試しになる場合は、「OneDrive/hsp35beta/android/hsplib/hsp3embed/hspvar_util.cpp」のファイルを
HSP3Dish helperで指定しているandroidのプロジェクトフォルダ以下のhsplib35b4/hsp3embedに上書きコピーした上で、
プロジェクトのobjフォルダを削除して(クリーンな状態にして)再度ビルドを行なってみてください。



窓月らら

リンク

2016/12/9(Fri) 01:14:45|NO.77511

おにたまさん、修正頂きましてありがとうございます。
指摘していた部分については直っていましたが、関連で別の不具合が
ありましたのでご報告させて頂きます。

テスト用サンプル:

#include "hsp3dish.as" a(0)=1: a(1)=2: a(2)=3 i=2 setcls 1,$000000 redraw 0 color 255,255,255 test a(i): st=stat mes "a(0)="+a(0)+" a(1)="+a(1)+" a(2)="+a(2)+" stat="+st redraw 1 stop #deffunc test var _p1 _p1=8 j=_p1: mes "j="+j p=peek(j,0): mes "peek(j)="+p p=peek(_p1,0): mes "peek(_p1)="+p ;p=peek(a(i),0): mes "peek(a)="+p poke _p1,0,16 j=_p1: mes "j="+j p=peek(j,0): mes "peek(j)="+p+"(poke)" p=peek(_p1,0): mes "peek(_p1)="+p+"(poke)" return _p1


Windowsの場合:
j=8
peek(j)=8
peek(_p1)=8
j=16
peek(j)=16(poke)
peek(_p1)=16(poke)
a(0)=1 a(1)=2 a(2)=16 stat=16

Androidの場合:
j=1
peek(j)=1
peek(_p1)=8
j=1
peek(j)=1(poke)
peek(_p1)=16(poke)
a(0)=1 a(1)=2 a(2)=16 stat=16

というように、エイリアスに対しては正常に動作してるようなのですが、
変数にコピーしてからpeekで読むと、またしても配列の先頭を読んでしまいます。
wpeek lpeek でも同様です。
また、配列を直接 p=peek(a(i),0) などとすると、Androidでは落ちてしまいます。
(コメントアウトになってる部分です)

かなり混乱しそうな不具合ですので、修正頂ければ幸いです。



窓月らら

リンク

2016/12/9(Fri) 02:14:15|NO.77512

もしかしてエイリアスを命令のパラメータとして与えてやっても変…?
ちなみに j=int(_p1) としたら、正しい値が入りました。

例)
NG:p=wpeek(data,_p1)
OK:p=wpeek(data,int(_p1))

というわけで、とりあえずint()で凌いでみます…。
まだ謎の不具合があるので、それも原因がわかったら報告いたします。



窓月らら

リンク

2016/12/9(Fri) 03:05:46|NO.77513

上と同じ理由で以下のような場合もAndroidでは正しく動きませんでした。
Windowsではどちらも同じ結果になってます。

NG:_adj=(_adj & $0000FFFF)+(peek(cdata,p)<<16)
OK:_adj=(int(_adj) & $0000FFFF)+(peek(cdata,p)<<16)

つまり論理式や他の変数へのコピーで不具合があるようです。
上のがダメということは、if文でも同様ですね…。



おにたま(管理人)

リンク

2016/12/9(Fri) 22:05:48|NO.77525

ご報告ありがとうございます。
再度修正してみました。これでどうでしょうか…。
peek関数で落ちてしまうのは、別な不具合として修正しています。
こちらは、hsp3cnvを修正しています。

OneDriveの方を最新版に更新していますので、ご確認頂ければと思います。
https://onedrive.live.com/embed?cid=EC425522ED849DA7&resid=EC425522ED849DA7%211229&authkey=AB-pNztAqBp6BcU



窓月らら

リンク

2016/12/9(Fri) 23:21:28|NO.77532

おにたまさん、早々に修正頂きましてありがとうございます。

peekで落ちる件(hsp3cnv.exe)
varで配列を渡した場合の件(hspvar_util.cpp)

どちらも動作OKです。
これでモジュール化が進められます、ありがとうございました♪
また不具合を見つけたらご報告させて頂きます。



ONION software Copyright 1997-2021(c) All rights reserved.