[1364] Re:配列の実装について
投稿者:山
2009/06/17 20:17:37
配列の組み込みにより、バイトコードもまた変わりました、下記に。
S_OpcodeInfo D_opcode_info[] = {
{"dummy", "", 0},
{"push_int_1byte", "b",16},
{"push_int_2byte", "s",16},
{"push_int_4byte", "i",16}, // 実際の値を持つ
{"push_double_0", "", 16},
{"push_double_1", "", 16},
{"push_double_8byte", "d",16}, // 実際の値を持つ
{"push_string_const", "s",40}, // 文字列の位置NOを持つ0~
{"push_null", "", 16},
/**********/
{"push_stack_array", "s", 16}, // 配列情報をスタックに
{"push_stack_int", "s", 16}, // intローカル変数をi
{"push_stack_double", "s", 16}, //
{"push_stack_string", "s", 40}, //
{"pop_stack_int", "s", -16}, // スタックのintをローカル変数に
{"pop_stack_double", "s", -16}, //
{"pop_stack_string", "s", -40}, //
/**********/
{"push_static_array", "s", 16}, // 配列情報をスタックに 予約
{"push_static_int", "s", 16}, // int静的変数をスタックに 予約
{"push_static_double","s", 16}, //
{"push_static_string","s", 40}, //
{"pop_static_int", "s", -16}, // スタックのintを静的変数に 予約
{"pop_static_double", "s", -16}, //
{"pop_static_string", "s", -40}, //
/**********/
{"push_sysval_array", "i", 16}, // 配列情報をスタックに
{"push_sysval_int", "i", 16}, // システムグローバル変数をスタックに
{"push_sysval_double","i", 16}, //
{"push_sysval_str", "i", 40}, //
{"pop_sysval_int", "i", -16}, // スタックからシステムグローバル変数に
{"pop_sysval_double", "i", -16}, //
{"pop_sysval_str", "i", -40}, //
/**********/
{"push_array_int", "", -1}, // int配列処理
{"push_array_double", "", -1}, //
{"push_array_string", "", -1}, //
{"pop_array_int", "", -1}, // スタックからint配列に
{"pop_array_double", "", -1}, //
{"pop_array_string", "", -1}, //
/**********/
{"add_int", "", -16}, // 以下は総て算術演算子
{"add_double", "", -16},
{"add_string", "", -40},
{"sub_int", "", -16},
{"sub_double", "", -16},
{"mul_int", "", -16},
{"mul_double", "", -16},
{"div_int", "", -16},
{"div_double", "", -16},
{"mod_int", "", -16},
{"mod_double", "", -16},
{"minus_int", "", 0},
{"minus_double", "", 0},
{"increment", "", 0},
{"decrement", "", 0}, // ここまで算術演算子
{"cast_int_to_double", "", 0}, // 以下はキャスト処理
{"cast_double_to_int", "", -0},
{"cast_boolean_to_string", "", 24},
{"cast_int_to_string", "", 24},
{"cast_double_to_string", "", 24}, // ここまでキャスト処理
{"eq_int", "", -16}, // 以下は総て論理演算子
{"eq_double", "", -16},
{"eq_string", "", -40},
{"gt_int", "", -16},
{"gt_double", "", -16},
{"gt_string", "", -40},
{"ge_int", "", -16},
{"ge_double", "", -16},
{"ge_string", "", -40},
{"lt_int", "", -16},
{"lt_double", "", -16},
{"lt_string", "", -40},
{"le_int", "", -16},
{"le_double", "", -16},
{"le_string", "", -40},
{"ne_int", "", -16},
{"ne_double", "", -16},
{"ne_string", "", -40}, // ここまで論理演算子
{"logical_and", "", -16}, //
{"logical_or", "", -16}, //
{"logical_not", "", 0}, //
{"pop", "", -1}, // スタックを1つ減らす
{"duplicate", "", 16}, // スタック内容をコピーしてスタックに
{"jump", "s", 0}, // 指定ポインターにjump
{"jump_if_true", "s", -16}, // スタックがtrueならjump
{"jump_if_false","s", -16}, // スタックがfalseならjump
/**********/
{"push_function", "", 0}, // 関数情報をスタック、未使用
{"call_function","ssss", 1}, // 関数コール
{"return", "", -1}, // 関数戻り
/**********/
{"set_array_literal_int", "ss", 0}, // int定数配列を変数にコピー
{"set_array_literal_double","ss", 0}, // double定数配列を変数にコピー
{"set_array_literal_string","ss", 0}, // string定数配列を変数にコピー
};