提交 3b01c48c 编写于 作者: 3 3dgen

初步支持method

上级 f939ef4d
......@@ -304,7 +304,7 @@ func (g *functionGenerator) genBinOp(inst *ssa.BinOp) cir.Expr {
func (g *functionGenerator) genCall(inst *ssa.Call) cir.Expr {
if inst.Call.IsInvoke() {
logger.Fatal("Todo: Invoke")
logger.Fatal("Todo: genCall(), Invoke")
}
switch inst.Call.Value.(type) {
......@@ -325,7 +325,7 @@ func (g *functionGenerator) genCall(inst *ssa.Call) cir.Expr {
return g.genBuiltin(inst.Common())
case *ssa.MakeClosure:
logger.Fatal("Todo: MakeClosure")
logger.Fatal("Todo: genCall(), MakeClosure")
default:
logger.Fatalf("Todo: type:%T", inst.Call.Value)
......@@ -390,7 +390,7 @@ func (g *functionGenerator) genFieldAddr(inst *ssa.FieldAddr) cir.Expr {
func (g *functionGenerator) genField(inst *ssa.Field) cir.Expr {
cx := g.getValue(inst.X)
field := inst.X.Type().(*types.Struct).Field(inst.Field)
field := inst.X.Type().Underlying().(*types.Struct).Field(inst.Field)
fieldname := field.Name()
if field.Embedded() {
fieldname = "$" + fieldname
......
......@@ -38,21 +38,36 @@ func (p *CompilerC) CompilePackage(ssaPkg *ssa.Package) {
}
}
for _, t := range ts {
p.compileType(t)
for _, v := range ts {
p.compileType(v)
}
for _, c := range cs {
p.compileConst(c)
for _, v := range cs {
p.compileConst(v)
}
for _, g := range gs {
p.compileGlobal(g)
for _, v := range gs {
p.compileGlobal(v)
}
for _, fn := range fns {
newFunctionGenerator(p).genFunction(fn)
for _, v := range ssaPkg.GetValues() {
if f, ok := v.(*ssa.Function); ok {
found := false
for _, m := range fns {
if m.Object() == f.Object() {
found = true
}
}
if found {
continue
}
fns = append(fns, f)
}
}
for _, v := range fns {
newFunctionGenerator(p).genFunction(v)
}
}
func (p *CompilerC) String() string {
......
......@@ -1410,6 +1410,11 @@ func (p *Package) Type(name string) (t *Type) {
return
}
//强制导出values
func (p *Package) GetValues() map[types.Object]Value {
return p.values
}
func (v *Call) Pos() token.Pos { return v.Call.pos }
func (s *Defer) Pos() token.Pos { return s.pos }
func (s *MapUpdate) Pos() token.Pos { return s.pos }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册