コンパイラ作成(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$

ちゃんと参照できるようになったよ。二回続けて細かな修正をしたけど、次回は何か機能追加をしたいなあ。ポインタ変数を配列として扱えるようにするかな。