Updated control flow generation

This commit is contained in:
Sasha Koshka 2024-01-27 10:03:15 +00:00
parent b6da53afd6
commit 12ab7dd3e3
3 changed files with 30 additions and 30 deletions

View File

@ -108,10 +108,6 @@ func (this *generator) generateExpressionVal (expression entity.Expression) (llv
return this.generateIfElseVal(expression, false)
case *entity.Loop:
return this.generateLoopVal(expression, false)
case *entity.Break:
return this.generateBreakVal(expression)
case *entity.Return:
return this.generateReturnVal(expression)
case *entity.LiteralInt:
return this.generateLiteralInt(expression)
@ -148,9 +144,7 @@ func (this *generator) generateExpressionLoc (expression entity.Expression) (llv
*entity.LiteralBoolean,
*entity.LiteralNil,
*entity.IfElse,
*entity.Loop,
*entity.Break,
*entity.Return:
*entity.Loop:
value, err := this.generateExpressionVal(expression)
if err != nil { return nil, err }
@ -189,6 +183,12 @@ func (this *generator) generateStatement (statement entity.Statement) (register
case *entity.Assignment:
_, err := this.generateAssignment(statement)
return nil, false, err
case *entity.Break:
_, err := this.generateBreak(statement)
return nil, false, err
case *entity.Return:
_, err := this.generateReturn(statement)
return nil, false, err
case entity.Expression:
return this.generateExpression(statement)

View File

@ -715,26 +715,3 @@ func (this *generator) generateLoopVal (loop *entity.Loop, loc bool) (llvm.Value
}
return loopEntry.value, nil
}
func (this *generator) generateBreakVal (brk *entity.Break) (llvm.Value, error) {
loopEntry := this.blockManager.topLoop()
if brk.Value != nil {
value, err := this.generateExpressionVal(brk.Value)
if err != nil { return nil, err }
loopEntry.value = value
}
loopEntry.stub = this.blockManager.Block
return nil, nil
}
func (this *generator) generateReturnVal (ret *entity.Return) (llvm.Value, error) {
if ret.Value == nil {
this.blockManager.NewRet(nil)
} else {
value, err := this.generateExpressionVal(ret.Value)
if err != nil { return nil, err }
this.blockManager.NewRet(value)
}
return nil, nil
}

View File

@ -16,3 +16,26 @@ func (this *generator) generateBlock (block *entity.Block) (llvm.Value, bool, er
return this.generateStatement(block.Steps[lastIndex])
}
func (this *generator) generateBreak (brk *entity.Break) (llvm.Value, error) {
loopEntry := this.blockManager.topLoop()
if brk.Value != nil {
value, err := this.generateExpressionVal(brk.Value)
if err != nil { return nil, err }
loopEntry.value = value
}
loopEntry.stub = this.blockManager.Block
return nil, nil
}
func (this *generator) generateReturn (ret *entity.Return) (llvm.Value, error) {
if ret.Value == nil {
this.blockManager.NewRet(nil)
} else {
value, err := this.generateExpressionVal(ret.Value)
if err != nil { return nil, err }
this.blockManager.NewRet(value)
}
return nil, nil
}