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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0313
ht_askdup命令をモジュール変数に使ったときの挙動について4解決


ht_ask

リンク

2015/3/13(Fri) 03:50:05|NO.67826

#module mod prop, a, b	; モジュール変数*3個分クローンできる
#modinit str _prop prop = _prop return #modfunc bark mes prop return #global repeat 10 newmod a, mod, "instance"+(cnt+1) loop dup b, a repeat 10 bark b.cnt loop
dup命令は配列変数にも使えたと思うのですが、bループの途中で失敗します。
エラーが出るまでの個数はどうやらモジュール変数の個数に影響しているようなのですが、
成功したり失敗したりするのはどういう仕様になっているのでしょうか?



この記事に返信する


暇人

リンク

2015/3/13(Fri) 23:01:07|NO.67847

dupは変数用で一定のサイズ(サイズが個数に直結するので超えてるとエラーになる)だけが対象


dupptr b,varptr(a),16*10,5
20個使うなら16*20にする必要がある



ht_ask

リンク

2015/3/14(Sat) 16:42:23|NO.67852

モジュール型変数の1要素は16バイトなんですね。勉強になりました。

一定のサイズの変数の対比となるのはどういう変数ですか?

; 数値型の場合 a = 0 repeat 10 a.cnt = cnt loop mes length(a) ; 10 dup b, a mes length(b) ; 10

; モジュール型の場合 #module mod prop #modinit prop = 0 return #global repeat 10 newmod a, mod loop mes length(a) ; 10 dup b, a mes length(b) ; 3
数値型ならば4*length,モジュール型ならば16*lengthで求まると思ったのですが、挙動が異なります。
本来dupは配列変数には対応していなくて、上記の数値型が上手くいっているのはたまたまということですか?



暇人

リンク

2015/3/14(Sat) 18:02:20|NO.67853

あ、ちょっと勘違い
dupがモジュール型変数のサイズ取得がおかしいだけかも



#module mod prop, a, b ; モジュール変数*3個分クローンできる #modinit str _prop prop = _prop return #modfunc bark mes prop return #global repeat 10 newmod a, mod, "instance"+(cnt+1) loop dupptr varsize, varptr(a)-4*4,4,4//変数のサイズ dupptr b, varptr(a),varsize,5 mes varsize mes length(a) mes length(b) mes repeat 10 bark b.cnt loop



ht_ask

リンク

2015/3/14(Sat) 18:41:46|NO.67858

そうすると、仕様じゃなくてバグだったということですかね。
それならそれで解決です。サンプルコードもありがとうございました。



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