[1294] コード生成部分について
投稿者:山
2009/05/24 19:18:12
コード生成部分を作っています。基本部以外がほとんど新たなプログラムに
なっています。下にバイトコードの変更およびコードのディスアセンブラです。
もしお時間が有りましたら見て、何か気になる点が有りますでしょうか?
--- 修正したバイトコード ------------
{"push_int_4byte", "i", 1}, // 直接持に変更
{"push_double_8byte", "d", 1}, // 直接持に変更
// 今考えると、リアル値を持つのはまずい?
--- 追加したバイトコード ------------
{"push_sysval_int", "s", 1}, // システムグローバル変数アクセス用
{"push_sysval_double", "s", 1}, //
{"push_sysval_str", "s", 1}, //
{"pop_sysval_int", "s", -1}, //
{"pop_sysval_double", "s", -1}, //
{"pop_sysval_str", "s", -1}, //
--------------------------------------------------------
int main(int p1,int p2)
{
string[] msg = { "asd","qwe","zzz"};
int[] i1 = {1,2,65537};
double d1;
d1 =3.1;
}
--------------------------------------------------------
↓
コード生成後のダンプ
↓
↓ 上のコード修正で、constデータは文字列だけになりました。
--------------------------------------------------------
1:*** 関数情報ダンプ ******************
1:--- int main(int p1, int p2)
1:*** ローカル変数の表示 no = 3 ***
1: 0:string [] msg
1: 1:int [] i1
1: 2:double d1
1:*** 文字列定数 数 = 3 ***
1: 0: "asd"
1: 1: "qwe"
1: 2: "zzz"
1:*** 使用予定のスタックサイズ = 10
1:*** 関数コードのディスアセンブラ size = 45
1: 0 push_string_ptr 0
1: 3 push_string_ptr 1
1: 6 push_string_ptr 2
1: 9 new_array_literal_object 3
1: 12 pop_stack_object 2
1: 15 push_int_1byte 1
1: 17 push_int_1byte 2
1: 19 push_int_4byte 65537
1: 24 new_array_literal_int 3
1: 27 pop_stack_int 3
1: 30 push_double_8byte 3.100000e+000
1: 39 pop_stack_double 4
1: 42 push_int_1byte 0
1: 44 return
1:*** 行情報 数 = 5 ***
1: 3: from 0 size 15
1: 4: from 15 size 15
1: 6: from 30 size 12
1: 8: from 42 size 2
1: 7: from 44 size 1
1:*** end of main() --------------
--------------------------------------------------------