表示类型并存储局部变量?

时间:2016-03-06 18:09:50

标签: memory assembly compiler-construction

我正在编写一个编译器,虽然我理解我需要做些什么才能处理内置类型,如Int,它们可以放入寄存器并可以被压入堆栈或其他任何东西很好,我不知道如何处理用户定义的类型(该语言主要是面向对象的),所以给出了这样的例子:

class Color
{
    Color(Int r, Int g, Int b)
        r
        g
        b
    { }
    method GetR() Int
    {
        return r
    }
}

rgb自动成为Int类型的成员变量。如何处理Color的实例,例如GetR()

我的想法

我认为,执行此操作的最佳方法是保留一个寄存器(或者每个方法的堆栈帧中的空格可能更好?)来保存指向this的指针。然后,如果您想要实现GetR(),假设r10持有此指针并且r成员完全在该地址开始,则可以生成:

_G_Color_GetR:
    mov rax, [r10]
    ret

这是解决问题的好方法,如果没有,其他语言的其他编译器如何处理它呢?

0 个答案:

没有答案