From aae67e154a629c1e110bd8b030f05e08dfd1dcb8 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Tue, 24 Oct 2017 16:02:13 +0300 Subject: [PATCH] JS: add intrinsic for !!. Use it instead of ternary conditionals See KT-2976 --- js/js.libraries/src/js/misc.js | 4 +++- .../kotlin/js/translate/context/Namer.java | 2 +- .../js/translate/utils/TranslationUtils.java | 16 ++-------------- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/js/js.libraries/src/js/misc.js b/js/js.libraries/src/js/misc.js index da39744daeb..79e49b02926 100644 --- a/js/js.libraries/src/js/misc.js +++ b/js/js.libraries/src/js/misc.js @@ -109,4 +109,6 @@ function imul(a, b) { } })(); - +Kotlin.ensureNotNull = function(x) { + return x != null ? x : Kotlin.throwNPE(); +}; diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java index 5db760caffe..f61ca84bdbf 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java @@ -86,10 +86,10 @@ public final class Namer { private static final String RECEIVER_PARAMETER_NAME = "$receiver"; public static final String ANOTHER_THIS_PARAMETER_NAME = "$this"; - public static final String THROW_NPE_FUN_NAME = "throwNPE"; public static final String THROW_CLASS_CAST_EXCEPTION_FUN_NAME = "throwCCE"; public static final String THROW_ILLEGAL_STATE_EXCEPTION_FUN_NAME = "throwISE"; public static final String THROW_UNINITIALIZED_PROPERTY_ACCESS_EXCEPTION = "throwUPAE"; + public static final String NULL_CHECK_INTRINSIC_NAME = "ensureNotNull"; private static final String PROTOTYPE_NAME = "prototype"; private static final String CAPTURED_VAR_FIELD = "v"; diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index 17205d39813..3bcfa9fd0e3 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -310,20 +310,8 @@ public final class TranslationUtils { } @NotNull - public static JsConditional sure(@NotNull JsExpression expression, @NotNull TranslationContext context) { - JsInvocation throwNPE = new JsInvocation(context.getReferenceToIntrinsic(Namer.THROW_NPE_FUN_NAME)); - JsConditional ensureNotNull = notNullConditional(expression, throwNPE, context); - - JsExpression thenExpression = ensureNotNull.getThenExpression(); - if (thenExpression instanceof JsNameRef) { - JsName name = ((JsNameRef) thenExpression).getName(); - if (name != null) { - // associate(cache) ensureNotNull expression to new TemporaryConstVariable with same name. - context.associateExpressionToLazyValue(ensureNotNull, new TemporaryConstVariable(name, ensureNotNull)); - } - } - - return ensureNotNull; + public static JsExpression sure(@NotNull JsExpression expression, @NotNull TranslationContext context) { + return new JsInvocation(context.getReferenceToIntrinsic(Namer.NULL_CHECK_INTRINSIC_NAME), expression); } public static boolean isSimpleNameExpressionNotDelegatedLocalVar(@Nullable KtExpression expression, @NotNull TranslationContext context) {