For loop generation stub
This commit is contained in:
@@ -397,3 +397,21 @@ testString (test,
|
||||
}
|
||||
`)
|
||||
}
|
||||
|
||||
func TestFor (test *testing.T) {
|
||||
testString (test,
|
||||
`
|
||||
`,
|
||||
`
|
||||
[print x:Byte]
|
||||
[f str:String] = for c:Byte in str { [print c] }
|
||||
[g str:String] = for i:Index c:Byte in str [print c]
|
||||
`)}
|
||||
|
||||
func TestForBreak (test *testing.T) {
|
||||
testString (test,
|
||||
`
|
||||
`,
|
||||
`
|
||||
[f str:String]:Byte = for c:Byte in str [break c]
|
||||
`)}
|
||||
|
||||
@@ -161,6 +161,9 @@ func (this *generator) generateExpressionVal (expression entity.Expression) (llv
|
||||
case *entity.Loop:
|
||||
val, _, err := this.generateLoop(expression, resultModeVal)
|
||||
return val, err
|
||||
case *entity.For:
|
||||
val, _, err := this.generateFor(expression, resultModeVal)
|
||||
return val, err
|
||||
case *entity.LiteralInt:
|
||||
return this.generateLiteralInt(expression)
|
||||
case *entity.LiteralFloat:
|
||||
|
||||
@@ -198,3 +198,24 @@ func (this *generator) generateLoop (loop *entity.Loop, mode resultMode) (llvm.V
|
||||
}
|
||||
return loopEntry.value, loopEntry.loc, nil
|
||||
}
|
||||
|
||||
func (this *generator) generateFor (loop *entity.For, mode resultMode) (llvm.Value, bool, error) {
|
||||
irIndexType, err := this.blockManager.generateTypeIndex()
|
||||
if err != nil { return nil, false, err }
|
||||
|
||||
// element index
|
||||
var irIndex llvm.Value
|
||||
if loop.Index != nil {
|
||||
irIndex, err = this.blockManager.addDeclaration (
|
||||
loop.Index, llvm.NewConstZeroInitializer(irIndexType))
|
||||
if err != nil { return nil, false, err }
|
||||
}
|
||||
|
||||
// element value
|
||||
irElement, err := this.blockManager.addDeclaration(loop.Element, nil)
|
||||
if err != nil { return nil, false, err }
|
||||
|
||||
// TODO
|
||||
|
||||
previous := this.
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user