More routines in data.go
This commit is contained in:
parent
cf201a08c6
commit
effebe5f64
|
@ -3,7 +3,7 @@ package generator
|
|||
import "git.tebibyte.media/sashakoshka/fspl/llvm"
|
||||
import "git.tebibyte.media/sashakoshka/fspl/entity"
|
||||
|
||||
func (this *generator) generateSlice (ty entity.Type, data llvm.Value, length int64) (llvm.Value, error) {
|
||||
func (this *generator) generateSlice (ty entity.Type, data llvm.Value, length llvm.Value) (llvm.Value, error) {
|
||||
irType, err := this.generateType(ty)
|
||||
if err != nil { return nil, err }
|
||||
|
||||
|
@ -17,12 +17,24 @@ func (this *generator) generateSlice (ty entity.Type, data llvm.Value, length in
|
|||
irType, slice,
|
||||
llvm.NewConstInt(llvm.I32, 0),
|
||||
llvm.NewConstInt(llvm.I32, 1))
|
||||
this.blockManager.NewStore(length, lengthField)
|
||||
return slice, nil
|
||||
}
|
||||
|
||||
func (this *generator) generateSliceDefinedLength (ty entity.Type, data llvm.Value, length int64) (llvm.Value, error) {
|
||||
sizeType, err := this.typedef("Index")
|
||||
if err != nil { return nil, err }
|
||||
this.blockManager.NewStore (
|
||||
llvm.NewConstInt(sizeType.(*llvm.TypeInt), length),
|
||||
lengthField)
|
||||
return slice, nil
|
||||
return this.generateSlice(ty, data, llvm.NewConstInt(sizeType.(*llvm.TypeInt), length))
|
||||
}
|
||||
|
||||
func (this *generator) getSliceDataAddress (slice llvm.Value, irType llvm.Type) llvm.Value {
|
||||
dataAddressFieldAddress := this.blockManager.NewGetElementPtr (
|
||||
irType, slice,
|
||||
llvm.NewConstInt(llvm.I32, 0),
|
||||
llvm.NewConstInt(llvm.I32, 0))
|
||||
return this.blockManager.NewLoad (
|
||||
new(llvm.TypePointer),
|
||||
dataAddressFieldAddress)
|
||||
}
|
||||
|
||||
func (this *generator) getInterfaceData (iface llvm.Value, irType llvm.Type) llvm.Value {
|
||||
|
|
Loading…
Reference in New Issue