コンパイラ作成(103) int型以外のポインタの間接参照
今回の目標
前回に続きバグ修正。
// 配列 int main() { double a[10], *p = a; a[0] = 42; a[1] = 55; printf("*p = %f\n", *p); }
間接参照演算子もdouble型とかに対応できてなかったよ。
codegen_unaryop
間接参照演算子の処理のところを修正。
elsif op.str == "*" then # 間接参照演算子 type = codegen_el operand if !is_pointer_type? type then perror end type = type[0,type.length-1] codegen_lval_to_rval type =begin if is_pointer_type? type then codegen " mov rax, [rax]" else codegen " mov eax, [rax]" end =end
前回作ったメソッドを呼ぶようにしたよ。
動作テスト
~/myc$ myc q10.myc ~/myc$ ./q10 *p = 42.000000 ~/myc$
ちゃんと参照できるようになったよ。二回続けて細かな修正をしたけど、次回は何か機能追加をしたいなあ。ポインタ変数を配列として扱えるようにするかな。