From 9060e699e4ee40f76ed36f128f7c1a9745a8785b Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Mon, 16 Apr 2018 01:55:44 +0200 Subject: [PATCH] Add heap allocation (without escape analysis!) --- tgo.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tgo.go b/tgo.go index f8f91959..404e61a8 100644 --- a/tgo.go +++ b/tgo.go @@ -457,14 +457,16 @@ func (c *Compiler) parseExpr(frame *Frame, expr ssa.Value) (llvm.Value, error) { switch expr := expr.(type) { case *ssa.Alloc: - if expr.Heap { - return llvm.Value{}, errors.New("todo: heap alloc") - } typ, err := c.getLLVMType(expr.Type().Underlying().(*types.Pointer).Elem()) if err != nil { return llvm.Value{}, err } - return c.builder.CreateAlloca(typ, expr.Comment), nil + if expr.Heap { + // TODO: escape analysis + return c.builder.CreateMalloc(typ, expr.Comment), nil + } else { + return c.builder.CreateAlloca(typ, expr.Comment), nil + } case *ssa.Const: return c.parseConst(expr) case *ssa.BinOp: