From 392da838ca26adcf0a4f09e11f72a85fdf0a2fd7 Mon Sep 17 00:00:00 2001 From: Erokhin Stanislav Date: Fri, 20 Dec 2013 22:41:36 +0400 Subject: [PATCH] JS backend: Add support for safe call --- .../translate/reference/ClearCallTranslator.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ClearCallTranslator.kt b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ClearCallTranslator.kt index 91526ec8e55..b7d2feb7f61 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ClearCallTranslator.kt +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ClearCallTranslator.kt @@ -95,8 +95,16 @@ trait CallCase { 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 { - return if (callInfo.thisObject == null) { + val result = if (callInfo.thisObject == null) { if (callInfo.receiverObject == null) callInfo.noReceivers() else @@ -107,6 +115,11 @@ trait CallCase { else callInfo.bothReceivers() } + + return if (callInfo.isSafeCall()) + constructSafeCall(result) + else + return result } }