Slice operations now load the data pointer
This commit is contained in:
parent
8085da442b
commit
ead5ed3222
|
@ -10,18 +10,18 @@ testString (test,
|
|||
[puts string: *Byte]: Index
|
||||
[write file:I32 buffer:*Byte count:Index]: Index
|
||||
|
||||
[firstByte str:String]: *Byte = [@[.str 0]]
|
||||
|
||||
[print string: String] = loop {
|
||||
if [< [#string] 1] then {break}
|
||||
byte: Byte = [. string 0]
|
||||
[write 1 [@byte] 1]
|
||||
string = [\string 1:]
|
||||
[printDigit digit:Byte] = {
|
||||
digit = [+ digit '0']
|
||||
[write 1 [@digit] 1]
|
||||
}
|
||||
|
||||
[main] = {
|
||||
str:String = 'xx'
|
||||
[print str]
|
||||
[puts 'printing']
|
||||
[printDigit 0]
|
||||
[printDigit 1]
|
||||
[printDigit 2]
|
||||
[printDigit 3]
|
||||
[puts '\nprinted']
|
||||
}
|
||||
`)
|
||||
}
|
||||
|
@ -89,3 +89,19 @@ testString (test,
|
|||
// [puts first]
|
||||
// }
|
||||
|
||||
// [puts string: *Byte]: Index
|
||||
// [write file:I32 buffer:*Byte count:Index]: Index
|
||||
//
|
||||
// [firstByte str:String]: *Byte = [@[.str 0]]
|
||||
//
|
||||
// [print string: String] = loop {
|
||||
// if [< [#string] 1] then {break}
|
||||
// byte: Byte = [. string 0]
|
||||
// [write 1 [@byte] 1]
|
||||
// string = [\string 1:]
|
||||
// }
|
||||
//
|
||||
// [main] = {
|
||||
// str:String = 'xx'
|
||||
// [print str]
|
||||
// }
|
||||
|
|
|
@ -37,11 +37,14 @@ func (this *generator) generateSliceLoc (slice *entity.Slice) (llvm.Value, error
|
|||
if err != nil { return nil, err }
|
||||
elementType, err = this.generateType(sourceType.Element)
|
||||
if err != nil { return nil, err }
|
||||
dataAddress = this.blockManager.NewGetElementPtr (
|
||||
dataAddressFieldAddress := this.blockManager.NewGetElementPtr (
|
||||
irSourceType,
|
||||
source,
|
||||
llvm.NewConstInt(llvm.I32, 0),
|
||||
llvm.NewConstInt(llvm.I32, 0))
|
||||
dataAddress = this.blockManager.NewLoad (
|
||||
new(llvm.TypePointer),
|
||||
dataAddressFieldAddress)
|
||||
lengthAddress := this.blockManager.NewGetElementPtr (
|
||||
irSourceType,
|
||||
source,
|
||||
|
@ -116,11 +119,14 @@ func (this *generator) generateSubscriptLoc (subscript *entity.Subscript) (llvm.
|
|||
|
||||
// get slice element
|
||||
elementType = sourceType.Element
|
||||
dataAddress = this.blockManager.NewGetElementPtr (
|
||||
dataAddressFieldAddress := this.blockManager.NewGetElementPtr (
|
||||
irSourceType,
|
||||
source,
|
||||
llvm.NewConstInt(llvm.I32, 0),
|
||||
llvm.NewConstInt(llvm.I32, 0))
|
||||
dataAddress = this.blockManager.NewLoad (
|
||||
new(llvm.TypePointer),
|
||||
dataAddressFieldAddress)
|
||||
|
||||
case *entity.TypeArray:
|
||||
elementType = sourceType.Element
|
||||
|
|
Loading…
Reference in New Issue