ラベル構造体を移植しました
#include "mdl_value.as" #include "mdl_value.as" //includeガードが効いてるかのTEST #ifndef _MY_WS_DEFINE_ #define _MY_WS_DEFINE_ // knowbugが配列インスタンスを800くらいまでしか表示してくれないため #define STACK_MEMBERS 750 #define HEAP_MEMBERS 400 #define MAX_LABELS 200 #define MAX_LABEL_LENGTH 500 #define MAX_INSTRUCTIONS 24 #define MAX_INSTRUCTION_LENGTH 5 #define MAX_NESTED_SUBROUTINES 20 #endif //struct heap_model { // long long* address; // long long* value; // long elements; //} heap; #module label_2youso label_youso_str_id,label_youso_location #modinit label_youso_location=-1 newmod label_youso_str_id,mdl_one_value return #modfunc local set_location int __p_int label_youso_location=__p_int return 1 #modfunc local set_str_id var __p_value // logmes "vv"+__p_value set@mdl_one_value label_youso_str_id,__p_value return 1 #modcfunc local get_location return label_youso_location #modcfunc local get_str_id return get@mdl_one_value(label_youso_str_id) #modcfunc local ret_vartype_value return ret_vartype@mdl_one_value(label_youso_str_id) #modcfunc local tostr_vartype_value return tostr_vartype@mdl_one_value(label_youso_str_id) #global ////////////////////////////////////////////////////////////////////// #module label_model label_youso,labels_size,total_labels #modinit int p_size labels_size = p_size logmes ""+p_size repeat p_size newmod label_youso,label_2youso loop total_labels=0 return #modcfunc local get_size return labels_size #modfunc local set_location int pp_value,int pp_index if pp_index < 0:return -1 if pp_index >= labels_size:return -1 set_location@label_2youso label_youso.pp_index,pp_value return 1 #modfunc local set_str_id var ppp_value,int ppp_index if ppp_index < 0:return -1 ; logmes "l"+ppp_index ; logmes "l"+labels_size ; logmes "l"+ppp_value if ppp_index >= labels_size:return -1 set_str_id@label_2youso label_youso.ppp_index,ppp_value return 1 #modfunc local set_total_labels int p_index if p_index < 0:return -1 if p_index >= labels_size:return -1 total_labels = p_index return #modcfunc local get_location int p_index if p_index < 0:return -1 if p_index >= labels_size:return -1 return get_location@label_2youso(label_youso.p_index) #modcfunc local get_str_id int p_index if p_index < 0:return -1 if p_index >= labels_size:return -1 return get_str_id@label_2youso(label_youso.p_index) #modcfunc local get_labels_size return labels_size #modcfunc local get_total_labels return total_labels #modcfunc local ret_vartype_value int p_index if p_index < 0:return -1 if p_index >= labels_size:return -1 return ret_vartype_value@label_2youso(label_youso.p_index) #modcfunc local tostr_vartype_value int p_index return tostr_vartype_value@label_2youso(label_youso.p_index) #modfunc local cleanup i=0 for i,labels_size-1,-1,-1 delmod label_youso.i next return #global //↓重要w newmod label_table,label_model,MAX_LABELS@ #if 1 repeat 5 tmp=cnt*3 set_location@label_model label_table,tmp,cnt loop tmp_s="111" set_str_id@label_model label_table,tmp_s,0 tmp_s="112" set_str_id@label_model label_table,tmp_s,1 tmp_s="121" set_str_id@label_model label_table,tmp_s,2 ;set_elements@heap_model heap,7 repeat 5 logmes "label location "+cnt+":"+get_location@label_model(label_table,cnt) loop repeat 5 logmes "label str id "+cnt+":"+get_str_id@label_model(label_table,cnt) loop repeat 5 logmes "label type "+ret_vartype_value@label_model(label_table,cnt) logmes "label type "+tostr_vartype_value@label_model(label_table,cnt) loop #endif //bool create_label_table(void) //{ // if (label_table.label_id = (char**)calloc(MAX_LABELS, sizeof(char*))) { // if (label_table.label_location = (int*)calloc(MAX_LABELS, sizeof(int))) { // return true; // } // free (label_table.label_id); // } // return false; //} #module #deffunc create_label_table local loc_tmp,local loc_tmp_s // stackのsizeは途中から変えれなくなったw loc_tmp=0 loc_tmp_s="000" repeat MAX_LABELS@ set_location@label_model label_table@,loc_tmp,cnt set_str_id@label_model label_table@,loc_tmp_s,cnt loop set_total_labels@label_model label_table@,0 return 1 #deffunc label_set_total_labels int _p_int set_total_labels@label_model label_table@,_p_int return #defcfunc label_get_total_labels return get_total_labels@label_model(label_table@) #defcfunc label_get_size return get_size@label_model(label_table@) #deffunc label_set_location int _pp_value,int _pp_index set_location@label_model label_table@,_pp_value,_pp_index return 1 #deffunc label_set_str_id var _pp_value,int _pp_index // logmes "v"+_pp_value // logmes "v"+_pp_index set_str_id@label_model label_table@,_pp_value,_pp_index return 1 #defcfunc label_get_location int _p_index return get_location@label_model(label_table@,_p_index) #defcfunc label_get_str_id int _p_index return get_str_id@label_model(label_table@,p_index) #defcfunc label_ret_vartype_value int _p_int return ret_vartype_value@label_model(label_table@,_p_int) #defcfunc label_tostr_vartype_value int _p_int return tostr_vartype_value@label_model(label_table@,_p_int) #deffunc label_cleanup cleanup@label_model(label_table@) delmod label_table@ return #global #if 1 create_label_table baz="2111" label_set_str_id baz,0 label_set_location 10,0 baz="2112" label_set_str_id baz,1 label_set_location 20,1 baz="2121" label_set_str_id baz,2 label_set_location 30,2 logmes "label get loc"+label_get_location(0) logmes "label get id "+label_get_str_id(0) logmes "label get loc"+label_get_location(1) logmes "label get id "+label_get_str_id(1) logmes "label get loc"+label_get_location(2) logmes "label get id "+label_get_str_id(2) logmes "label type "+label_ret_vartype_value(1) logmes "label type "+label_tostr_vartype_value(1) #endif #if 0 label_cleanup #endif