translator: fix function extensions double argument
This commit is contained in:
@@ -204,7 +204,7 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
|
||||
val isExtension = selectorExpr is KtCallExpression && selectorExpr.getFunctionResolvedCallWithAssert(state.bindingContext).extensionReceiver != null
|
||||
|
||||
if (isExtension) {
|
||||
return evaluateExtensionExpression(receiverExpr, selectorExpr as KtCallExpression, scopeDepth)
|
||||
return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth)
|
||||
}
|
||||
|
||||
if (receiver != null) {
|
||||
@@ -213,15 +213,15 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
|
||||
}
|
||||
when (receiver.type) {
|
||||
is LLVMReferenceType -> return evaluateMemberMethodOrField(receiver, selectorExpr.text, scopeDepth, selectorExpr)
|
||||
else -> return evaluateExtensionExpression(receiverExpr, selectorExpr as KtCallExpression, scopeDepth)
|
||||
else -> return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth)
|
||||
}
|
||||
}
|
||||
|
||||
val clazz = resolveCodegen(receiverExpr) ?: return evaluateExtensionExpression(receiverExpr, selectorExpr as KtCallExpression, scopeDepth)
|
||||
val clazz = resolveCodegen(receiverExpr) ?: return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth)
|
||||
return evaluateClassScopedDotExpression(clazz, selectorExpr, scopeDepth, receiver)
|
||||
}
|
||||
|
||||
private fun evaluateExtensionExpression(receiver: KtExpression, selector: KtCallExpression, scopeDepth: Int): LLVMSingleValue? {
|
||||
private fun evaluateExtensionExpression(receiver: KtExpression, receiverExpressionArgument: LLVMVariable?, selector: KtCallExpression, scopeDepth: Int): LLVMSingleValue? {
|
||||
val receiverType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, receiver)
|
||||
val standardType = LLVMMapStandardType(receiverType!!.type!!, state)
|
||||
|
||||
@@ -229,7 +229,7 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
|
||||
val names = parseArgList(selector, scopeDepth)
|
||||
val type = if (names.size > 0) "_${names.joinToString(separator = "_", transform = { it.type!!.mangle() })}" else ""
|
||||
val extensionCodegen = state.extensionFunctions[standardType.toString()]?.get("$function$type") ?: throw UnexpectedException("$standardType:$function$type")
|
||||
val receiverExpression = evaluateExpression(receiver, scopeDepth + 1)!!
|
||||
val receiverExpression = receiverExpressionArgument ?: evaluateExpression(receiver, scopeDepth + 1)!!
|
||||
|
||||
val typeThisArgument = when (standardType) {
|
||||
is LLVMReferenceType -> LLVMVariable("type", standardType, pointer = 1)
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
function_extensions_double_argument_1() == 129
|
||||
@@ -0,0 +1,31 @@
|
||||
class function_extensions_double_argument_1_slave(val buffer: IntArray) {
|
||||
var pos = 0
|
||||
|
||||
fun read(): Int {
|
||||
pos += 1
|
||||
val pe = pos - 1
|
||||
return buffer[pe]
|
||||
}
|
||||
|
||||
fun isAtEnd(): Boolean {
|
||||
return pos >= buffer.size
|
||||
}
|
||||
}
|
||||
|
||||
fun function_extensions_double_argument_1_master(inputStream: function_extensions_double_argument_1_slave): Int {
|
||||
return inputStream.read().toInt()
|
||||
}
|
||||
|
||||
fun function_extensions_double_argument_1(): Int {
|
||||
val array = IntArray(7)
|
||||
array[0] = 129
|
||||
array[1] = 20
|
||||
array[2] = 333
|
||||
array[3] = 444
|
||||
array[4] = 555
|
||||
array[5] = 666
|
||||
array[6] = 777
|
||||
|
||||
val kis = function_extensions_double_argument_1_slave(array)
|
||||
return function_extensions_double_argument_1_master(kis)
|
||||
}
|
||||
Reference in New Issue
Block a user