70 lines
2.6 KiB
Go
70 lines
2.6 KiB
Go
package generator
|
|
|
|
import "fmt"
|
|
import "github.com/llir/llvm/ir/value"
|
|
import "git.tebibyte.media/sashakoshka/fspl/entity"
|
|
|
|
func (this *generator) generateExpression (expression entity.Expression) (value.Value, error) {
|
|
switch expression.(type) {
|
|
case *entity.Variable:
|
|
return this.generateVariable(expression.(*entity.Variable))
|
|
case *entity.Call:
|
|
return this.generateCall(expression.(*entity.Call))
|
|
case *entity.MethodCall:
|
|
return this.generateMethodCall(expression.(*entity.MethodCall))
|
|
// case *entity.Subscript:
|
|
// return this.generateSubscript(expression.(*entity.Subscript))
|
|
// case *entity.Slice:
|
|
// return this.generateSlice(expression.(*entity.Slice))
|
|
// case *entity.Dereference:
|
|
// return this.generateDereference(expression.(*entity.Dereference))
|
|
// case *entity.Reference:
|
|
// return this.generateReference(expression.(*entity.Reference))
|
|
// case *entity.ValueCast:
|
|
// return this.generateValueCast(expression.(*entity.ValueCast))
|
|
// case *entity.BitCast:
|
|
// return this.generateBitCast(expression.(*entity.BitCast))
|
|
// case *entity.Operation:
|
|
// return this.generateOperation(expression.(*entity.Operation))
|
|
case *entity.Block:
|
|
return this.generateBlock(expression.(*entity.Block))
|
|
// case *entity.MemberAccess:
|
|
// return this.generateMemberAccess(expression.(*entity.MemberAccess))
|
|
// case *entity.IfElse:
|
|
// return this.generateIfElse(expression.(*entity.IfElse))
|
|
// case *entity.Loop:
|
|
// return this.generateLoop(expression.(*entity.Loop))
|
|
// case *entity.Break:
|
|
// return this.generateBreak(expression.(*entity.Break))
|
|
// case *entity.Return:
|
|
// return this.generateReturn(expression.(*entity.Return))
|
|
|
|
case *entity.LiteralInt:
|
|
return this.generateLiteralInt(expression.(*entity.LiteralInt))
|
|
case *entity.LiteralFloat:
|
|
return this.generateLiteralFloat(expression.(*entity.LiteralFloat))
|
|
case *entity.LiteralArray:
|
|
return this.generateLiteralArray(expression.(*entity.LiteralArray))
|
|
// case *entity.LiteralStruct:
|
|
// return this.generateLiteralStruct(expression.(*entity.LiteralStruct))
|
|
case *entity.LiteralBoolean:
|
|
return this.generateLiteralBoolean(expression.(*entity.LiteralBoolean))
|
|
default:
|
|
panic(fmt.Sprint (
|
|
"BUG: generator doesnt know about expression ",
|
|
expression))
|
|
}
|
|
}
|
|
|
|
func (this *generator) generateStatement (statement entity.Statement) (value.Value, error) {
|
|
/*if assignment, ok := statement.(*entity.Assignment); ok {
|
|
return this.generateAssignment(assignment)
|
|
} else*/ if expression, ok := statement.(entity.Expression); ok {
|
|
return this.generateExpression(expression)
|
|
} else {
|
|
panic(fmt.Sprint (
|
|
"BUG: generator doesnt know about statement ",
|
|
statement))
|
|
}
|
|
}
|