From cb0482f53e3c64f2263fa59c663719e756b0728d Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Mon, 23 Oct 2017 13:35:58 +0300 Subject: [PATCH] JS: fix crash when `js` function contains for statement w/o initializer Fix KT-20898 --- .../kotlin/js/backend/ast/JsFor.java | 2 +- .../com/google/gwt/dev/js/JsAstMapper.java | 3 +-- .../serialization/js/ast/JsAstDeserializer.kt | 2 +- .../js/test/semantics/BoxJsTestGenerated.java | 6 ++++++ .../testData/box/jsCode/forWithoutInit.kt | 20 +++++++++++++++++++ 5 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 js/js.translator/testData/box/jsCode/forWithoutInit.kt diff --git a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsFor.java b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsFor.java index fa9af8aebf8..d2d97f21ad4 100644 --- a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsFor.java +++ b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsFor.java @@ -144,7 +144,7 @@ public class JsFor extends SourceInfoAwareJsNode implements JsStatement { if (initVars != null) { result = new JsFor(initVars.deepCopy(), conditionCopy, incrementalExprCopy, bodyCopy); } else { - result = new JsFor(initExpression.deepCopy(), conditionCopy, incrementalExprCopy, bodyCopy); + result = new JsFor(initExpression != null ? initExpression.deepCopy() : null, conditionCopy, incrementalExprCopy, bodyCopy); } return result.withMetadataFrom(this); diff --git a/js/js.parser/src/com/google/gwt/dev/js/JsAstMapper.java b/js/js.parser/src/com/google/gwt/dev/js/JsAstMapper.java index 47628058e1a..fac1ca8ec13 100644 --- a/js/js.parser/src/com/google/gwt/dev/js/JsAstMapper.java +++ b/js/js.parser/src/com/google/gwt/dev/js/JsAstMapper.java @@ -536,12 +536,11 @@ public class JsAstMapper { JsNode init = map(fromInit); JsExpression condition = mapOptionalExpression(fromTest); JsExpression increment = mapOptionalExpression(fromIncr); - assert (init != null); if (init instanceof JsVars) { toFor = new JsFor((JsVars) init, condition, increment); } else { - assert (init instanceof JsExpression); + assert (init == null || init instanceof JsExpression); toFor = new JsFor((JsExpression) init, condition, increment); } diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstDeserializer.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstDeserializer.kt index af29c241d0a..06d5549fa20 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstDeserializer.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstDeserializer.kt @@ -223,7 +223,7 @@ class JsAstDeserializer(program: JsProgram, private val sourceRoots: Iterable