Add generateStatement routine

This commit is contained in:
Sasha Koshka 2024-01-27 08:53:29 +00:00
parent 32ce14f032
commit f827bfeb7a
1 changed files with 16 additions and 3 deletions

View File

@ -20,7 +20,7 @@ func (this *generator) locationToValue (pointer llvm.Value, ty entity.Type) (llv
// representing the result, or a register containing the location of the result,
// whichever will generate the least IR. In the latter case, the boolean
// "location" will be true.
func (this *generator) generateExpression (expression entity.Expression) (value llvm.Value, location bool, err error) {
func (this *generator) generateExpression (expression entity.Expression) (register llvm.Value, location bool, err error) {
// TODO: some of these could stand to know that they have a choice in
// the matter.
@ -182,10 +182,23 @@ func (this *generator) generateExpressionLoc (expression entity.Expression) (llv
}
}
func (this *generator) generateStatementVal (statement entity.Statement) (llvm.Value, error) {
func (this *generator) generateStatement (statement entity.Statement) (register llvm.Value, location bool, err error) {
switch statement := statement.(type) {
case *entity.Assignment:
return this.generateAssignment(statement)
_, err := this.generateAssignment(statement)
return nil, false, err
case entity.Expression:
return this.generateExpression(statement)
default:
panic(fmt.Sprintf (
"BUG: generator doesnt know about statement %v, ty: %T",
statement, statement))
}
}
func (this *generator) generateStatementVal (statement entity.Statement) (llvm.Value, error) {
switch statement := statement.(type) {
case entity.Expression:
return this.generateExpressionVal(statement)
default: