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
|
val isExtension = selectorExpr is KtCallExpression && selectorExpr.getFunctionResolvedCallWithAssert(state.bindingContext).extensionReceiver != null
|
||||||
|
|
||||||
if (isExtension) {
|
if (isExtension) {
|
||||||
return evaluateExtensionExpression(receiverExpr, selectorExpr as KtCallExpression, scopeDepth)
|
return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receiver != null) {
|
if (receiver != null) {
|
||||||
@@ -213,15 +213,15 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
|
|||||||
}
|
}
|
||||||
when (receiver.type) {
|
when (receiver.type) {
|
||||||
is LLVMReferenceType -> return evaluateMemberMethodOrField(receiver, selectorExpr.text, scopeDepth, selectorExpr)
|
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)
|
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 receiverType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, receiver)
|
||||||
val standardType = LLVMMapStandardType(receiverType!!.type!!, state)
|
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 names = parseArgList(selector, scopeDepth)
|
||||||
val type = if (names.size > 0) "_${names.joinToString(separator = "_", transform = { it.type!!.mangle() })}" else ""
|
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 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) {
|
val typeThisArgument = when (standardType) {
|
||||||
is LLVMReferenceType -> LLVMVariable("type", standardType, pointer = 1)
|
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