Add heap allocation (without escape analysis!)
Этот коммит содержится в:
родитель
d555ad93d7
коммит
9060e699e4
1 изменённых файлов: 6 добавлений и 4 удалений
10
tgo.go
10
tgo.go
|
@ -457,14 +457,16 @@ func (c *Compiler) parseExpr(frame *Frame, expr ssa.Value) (llvm.Value, error) {
|
||||||
|
|
||||||
switch expr := expr.(type) {
|
switch expr := expr.(type) {
|
||||||
case *ssa.Alloc:
|
case *ssa.Alloc:
|
||||||
if expr.Heap {
|
|
||||||
return llvm.Value{}, errors.New("todo: heap alloc")
|
|
||||||
}
|
|
||||||
typ, err := c.getLLVMType(expr.Type().Underlying().(*types.Pointer).Elem())
|
typ, err := c.getLLVMType(expr.Type().Underlying().(*types.Pointer).Elem())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return llvm.Value{}, err
|
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:
|
case *ssa.Const:
|
||||||
return c.parseConst(expr)
|
return c.parseConst(expr)
|
||||||
case *ssa.BinOp:
|
case *ssa.BinOp:
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче