fspl/generator/data.go

34 lines
1.1 KiB
Go

package generator
import "git.tebibyte.media/sashakoshka/fspl/llvm"
import "git.tebibyte.media/sashakoshka/fspl/entity"
func (this *generator) generateSlice (ty *entity.TypeSlice, data llvm.Value, start, end int64) (llvm.Value, error) {
irType, err := this.generateTypeSlice(ty)
if err != nil { return nil, err }
slice := this.blockManager.newAllocaFront(irType)
dataField := this.blockManager.NewGetElementPtr (
irType, slice,
llvm.NewConstInt(llvm.I32, 0),
llvm.NewConstInt(llvm.I32, 0))
this.blockManager.NewStore(data, dataField)
startField := this.blockManager.NewGetElementPtr (
irType, slice,
llvm.NewConstInt(llvm.I32, 0),
llvm.NewConstInt(llvm.I32, 1))
endField := this.blockManager.NewGetElementPtr (
irType, slice,
llvm.NewConstInt(llvm.I32, 0),
llvm.NewConstInt(llvm.I32, 2))
sizeType, err := this.typedef("Index")
if err != nil { return nil, err }
this.blockManager.NewStore (
llvm.NewConstInt(sizeType.(*llvm.TypeInt), start),
startField)
this.blockManager.NewStore (
llvm.NewConstInt (sizeType.(*llvm.TypeInt), end),
endField)
return slice, nil
}