JS backend: Add support for safe call

This commit is contained in:
Erokhin Stanislav
2013-12-20 22:41:36 +04:00
parent 083e789692
commit 392da838ca
@@ -95,8 +95,16 @@ trait CallCase<I : BaseCallInfo> {
throw unsupported() throw unsupported()
} }
fun constructSafeCall(result: JsExpression): JsExpression {
return CallType.SAFE.constructCall(callInfo.nullableReceiverForSafeCall, object : CallType.CallConstructor {
override fun construct(receiver: JsExpression?): JsExpression {
return result
}
}, callInfo.context)
}
final fun translate(): JsExpression { final fun translate(): JsExpression {
return if (callInfo.thisObject == null) { val result = if (callInfo.thisObject == null) {
if (callInfo.receiverObject == null) if (callInfo.receiverObject == null)
callInfo.noReceivers() callInfo.noReceivers()
else else
@@ -107,6 +115,11 @@ trait CallCase<I : BaseCallInfo> {
else else
callInfo.bothReceivers() callInfo.bothReceivers()
} }
return if (callInfo.isSafeCall())
constructSafeCall(result)
else
return result
} }
} }