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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0820
Y_repeatモジュール変数に文字列を入れたもののgetterが上手く動きません7解決


Y_repeat

リンク

2020/8/20(Thu) 21:39:47|NO.91213

こんばんわ

WHITESPACEをHSPで書いているのですが
モジュールsrc_one_commandを定義して
モジュール変数command_p_labelにモジュールmod_prm_labelのオブジェクトを入れます
でmod_prm_labelのモジュール変数mem_prm_labelに文字列を入れると
mem_prm_labelの値がうまいこと取得できないんですよね
代入はknowbugで上手くいってるぽいと確認出来ます
ちなみにmem_prm_labelのstrlenをmem_prm_label_lengthに代入すると
これも取得出来ません
intの値はモジュールをネストしても大体取得出来ます

それではよろしくお願いします



この記事に返信する


Y_repeat

リンク

2020/8/20(Thu) 21:45:39|NO.91214

少々削ったソースを貼っておきます
文字列だけモジュール変数をネストしないなら上手くいくような気もします


//////////////////////////////////////////////////////////// // prm_label モジュール //////////////////////////////////////////////////////////// #module mod_prm_label mem_prm_lab_kind, mem_prm_lab_id, mem_prm_label, mem_prm_label_length str_result="" // #module src_one_insn の委譲。メモリ消費多そうなので別にした #modinit // 引数labelのID(種類)(int) // undef -1 void 0 mark 1 call 2 call_ret 3 jump 4 jump_zero 5 jump_not_zero 6 return 7 mem_prm_lab_kind = -1 // prmラベルのID(配列っぽくラベルを管理していて、そこのID) mem_prm_lab_id = -1 // 普通のラベル形式の引数(setする時、文字数多く確保)(str) sdim mem_prm_label , 2 mem_prm_label="" // 普通のラベル形式の引数の長さ。 // 検索時長さを比較してから文字列を比較することで速度アップ mem_prm_label_length = 0 return #modfunc set_mem_prm_lab_kind_mod int __p mem_prm_lab_kind = __p return #modcfunc get_mem_prm_lab_kind_name_mod if mem_prm_lab_kind == -1 : return "undef" if mem_prm_lab_kind == 0 : return "void" if mem_prm_lab_kind == 1 : return "mark" if mem_prm_lab_kind == 2 : return "call" if mem_prm_lab_kind == 3 : return "call_ret" if mem_prm_lab_kind == 4 : return "jump" if mem_prm_lab_kind == 5 : return "jump_zero" if mem_prm_lab_kind == 6 : return "jump_not_zero" if mem_prm_lab_kind == 7 : return "return" return "other" #modcfunc get_mem_prm_lab_kind_mod return mem_prm_lab_kind #modcfunc get_mem_prm_lab_kind_obj return mem_prm_lab_kind #modfunc set_mem_prm_lab_id_mod int __p mem_prm_lab_id = __p return #modcfunc get_mem_prm_lab_id_mod return mem_prm_lab_id #modfunc set_mem_prm_lab_mod str __p mem_prm_label = __p logmes ""+mem_prm_label str_result=mem_prm_label mem_prm_label_length = 3 logmes ""+mem_prm_label_length return #modfunc set_mem_lab_to_var_mod str_result=mem_prm_label return #modfunc get_mem_prm_lab_mod return mem_prm_label #modcfunc get_mem_prm_lab_length_mod return mem_prm_label_length #modfunc dump_prm_lab // logmes "kind : " + mem_prm_lab_kind+ " : " + get_mem_prm_lab_kind_name_mod(thismod) // logmes "id : " + mem_prm_lab_id // logmes "val : " + mem_prm_label // logmes "length : " + mem_prm_lab_length return #global
メイン

//////////////////////////////////////////////////////////// // prm_label モジュール //////////////////////////////////////////////////////////// #include "FILE_mod_prm_label.hsp" //////////////////////////////////////////////////////////// // src_one_commandモジュール //////////////////////////////////////////////////////////// #module src_one_command command_insn_no, command_label_no, command_kind, command_insn, command_p_label, command_p_label_kind, command_label, command_label_kind #deffunc set_max_command int _p max_command = _p return #defcfunc get_max_command return max_command #modcfunc get_command_insn_no return command_insn_no #modinit int p_no // そのコマンドのナンバー command_insn_no = p_no // ラベルのナンバー command_label_no = p_no + 1 // そのコマンドの種類 -1:未定義 1:insn 2:insn & p_label command_insn_kind = -1 // そのpのラベルの種類 -1:未定義 0:labelのobjあるけどlabel定義してない // 1;labelあり 2:gosub labelとgosub ret labelあり // 3:labelとgosub label と gosub ret label あり command_p_label_kind = -1 // そのラベルの種類 -1:未定義 0:labelのobjあるけどlabel定義してない // 1;labelあり 2:gosub labelとgosub ret labelあり // 3:labelとgosub label と gosub ret label あり command_label_kind = -1 // insnモジュールのオブジェクトを入れる。入ってない時は-1 command_insn = -1 // insnのp_labelモジュールのオブジェクトを入れる。入ってない時は-1 command_p_label = -1 // labelモジュールのオブジェクトを入れる。入ってない時は-1 command_label = -1 //if p_no <= max_command{ //make_tmp_one_command( thismod ) //} return //////////////////////////////////////////////////////////// // mod_prm_labelの委譲 //////////////////////////////////////////////////////////// #modfunc new_prm_label newmod command_p_label , mod_prm_label command_p_label_kind = 2 return #modfunc set_mem_prm_lab_kind int _p set_mem_prm_lab_kind_mod command_p_label , _p return #modcfunc get_mem_prm_lab_kind_name return get_mem_prm_lab_kind_name_mod(command_p_label) #modcfunc get_mem_prm_lab_kind return get_mem_prm_lab_kind_mod(command_p_label) #modfunc set_mem_prm_lab_id int _p set_mem_prm_lab_id_mod command_p_label, _p return #modcfunc get_mem_prm_lab_id return get_mem_prm_lab_id_mod(command_p_label) #modfunc set_mem_prm_lab str _p set_mem_prm_lab_mod command_p_label, _p return #modfunc get_mem_prm_lab return get_mem_prm_lab_mod(comand_p_label) #modcfunc get_mem_prm_lab_length return get_mem_prm_lab_length_mod(comand_p_label) #modfunc set_mem_lab_to_var set_mem_lab_to_var_mod comand_p_label return #modfunc dump_p_label logmes "id : " + command_insn_no dump_prm_lab comand_p_label ; logmes "kind : " + get_mem_prm_lab_kind(thismod); + " : " + get_mem_prm_lab_kind_name_mod(thismod) ; logmes "val : " + get_mem_prm_lab(thismod) ; logmes "length : " + get_mem_prm_lab_length(thismod) return #global //////////////////////////////////////////////////////////// // debug p label //////////////////////////////////////////////////////////// #if 1 newmod prg_code_undef_prm , src_one_command , 0 new_prm_label prg_code_undef_prm set_mem_prm_lab_kind prg_code_undef_prm,0 set_mem_prm_lab prg_code_undef_prm,"abc" //こんなかんじのgetterが動作しない //logmes "lab : " + get_mem_prm_lab(prg_code_undef_prm) dump_p_label prg_code_undef_prm #endif



Y_repeat

リンク

2020/8/25(Tue) 20:49:40|NO.91260

こんばんわ

オブジェクト変数への文字列の代入は
モジュールsrc_one_commandの中の
モジュール変数command_p_labelのオブジェクトにするのではなく
モジュールsrc_one_commandのオブジェクト変数に代入したら上手く動きました

なかなか解答も来なくて、凡ミスとも違うっぽく
いつもやってるみたくしても上手くいかないので
HSPの不具合の可能性も出て来たのですがどうなのでしょうか?



Hiro

リンク

2020/8/26(Wed) 22:40:07|NO.91266

1. 戻り値が必要な関数の、#modfunc を #modcfuncに置換。
2. comand_p_label を command_p_labelに置換。
では、どうでしょうか。



Y_repeat

リンク

2020/8/27(Thu) 21:18:34|NO.91273

うわー恥ずかしすぎる ここにきてただのタイポっすかー
穴があったら入りたい。ですよ
まあ。モジュール変数関連のエラー情報って全然わかんなくはありますが
オブジェクト名をタイプミスしたら誤動作しますわな

さて、恥もかいたところで
自分もそろそろコンテスト作品に取りかかる頃です

Hiro様はじめ。皆さん誠にありがとうございました



名無し

リンク

2020/8/28(Fri) 16:48:17|NO.91279

う〜ん
視力の衰えですかね



Y_repeat

リンク

2020/8/30(Sun) 17:29:51|NO.91295

こんばんわ
→名無し様
自分が悪いのでお小言言われても仕方ないです

自分は視力ものすごい悪いっす
その上、最近はHSPは
ノートPCより一回り小さいWinタブレットでやってます
ネットに繋いでないので気が散りにくいのかも

なんかそろそろHSPのオブジェクト指向に対する提言とか
皆さんお持ちなのかな?ってスレッド建てようかなと思ったとこです



74

リンク

2020/8/30(Sun) 18:59:58|NO.91296

余談ですいませんが近視歴が長いと眼球が楕円のようになってしまって視力が出なくなるらしいです。
正常な眼球は真円の形をしてます。



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