mirror of
https://github.com/irmen/prog8.git
synced 2025-08-02 01:24:47 +00:00
fix return type error for asmsubs with >1 result values
This commit is contained in:
@@ -985,9 +985,21 @@ class FunctionCallExpression(override var target: IdentifierReference,
|
||||
return InferredTypes.knownFor(stmt.returntypes[0])
|
||||
|
||||
// multiple return values. Can occur for asmsub routines. If there is exactly one register return value, take that.
|
||||
val numRegisterReturns = stmt.asmReturnvaluesRegisters.count { it.registerOrPair!=null }
|
||||
if(numRegisterReturns==1)
|
||||
return InferredTypes.InferredType.known(DataType.UBYTE)
|
||||
val registerReturns = stmt.asmReturnvaluesRegisters.filter {it.registerOrPair != null }
|
||||
if(registerReturns.size==1) {
|
||||
val reg = registerReturns.single().registerOrPair!!
|
||||
return when(reg) {
|
||||
RegisterOrPair.A,
|
||||
RegisterOrPair.X,
|
||||
RegisterOrPair.Y -> InferredTypes.InferredType.known(DataType.UBYTE)
|
||||
RegisterOrPair.AX,
|
||||
RegisterOrPair.AY,
|
||||
RegisterOrPair.XY, in Cx16VirtualRegisters -> InferredTypes.InferredType.known(DataType.UWORD)
|
||||
RegisterOrPair.FAC1,
|
||||
RegisterOrPair.FAC2 -> InferredTypes.InferredType.known(DataType.FLOAT)
|
||||
else -> throw FatalAstException("weird reg")
|
||||
}
|
||||
}
|
||||
|
||||
return InferredTypes.unknown() // has multiple return types... so not a single resulting datatype possible
|
||||
}
|
||||
|
Reference in New Issue
Block a user