From 0aa1d0265b7d86b57646a119df6561e4a8983d40 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 7 Oct 2013 20:09:56 +0400 Subject: [PATCH] JS backend: fixed bug with the sourcemap generation when binary operation used as statement. --- .../js/compiler/JsSourceGenerationVisitor.java | 18 +++++++++++------- .../sourcemap/cases/binaryOperation.kt | 10 ++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 js/js.translator/testFiles/sourcemap/cases/binaryOperation.kt diff --git a/js/js.translator/src/org/jetbrains/js/compiler/JsSourceGenerationVisitor.java b/js/js.translator/src/org/jetbrains/js/compiler/JsSourceGenerationVisitor.java index 232df668de8..57cff94ce23 100644 --- a/js/js.translator/src/org/jetbrains/js/compiler/JsSourceGenerationVisitor.java +++ b/js/js.translator/src/org/jetbrains/js/compiler/JsSourceGenerationVisitor.java @@ -19,13 +19,16 @@ package org.jetbrains.js.compiler; import com.google.dart.compiler.backend.js.JsToStringGenerationVisitor; import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.util.TextOutput; +import com.intellij.util.SmartList; import org.jetbrains.annotations.Nullable; +import java.util.List; + public class JsSourceGenerationVisitor extends JsToStringGenerationVisitor implements TextOutput.OutListener { @Nullable private final SourceMapBuilder sourceMapBuilder; - private Object pendingSourceInfo; + private final List pendingSources = new SmartList(); public JsSourceGenerationVisitor(TextOutput out, @Nullable SourceMapBuilder sourceMapBuilder) { super(out); @@ -52,11 +55,13 @@ public class JsSourceGenerationVisitor extends JsToStringGenerationVisitor imple @Override public void indentedAfterNewLine() { - if (pendingSourceInfo != null) { - assert sourceMapBuilder != null; - sourceMapBuilder.processSourceInfo(pendingSourceInfo); - pendingSourceInfo = null; + if (pendingSources.isEmpty()) return; + + assert sourceMapBuilder != null; + for (Object source : pendingSources) { + sourceMapBuilder.processSourceInfo(source); } + pendingSources.clear(); } @Override @@ -71,9 +76,8 @@ public class JsSourceGenerationVisitor extends JsToStringGenerationVisitor imple if (sourceMapBuilder != null) { Object sourceInfo = node.getSource(); if (sourceInfo != null) { - assert pendingSourceInfo == null; if (p.isJustNewlined()) { - pendingSourceInfo = sourceInfo; + pendingSources.add(sourceInfo); } else { sourceMapBuilder.processSourceInfo(sourceInfo); diff --git a/js/js.translator/testFiles/sourcemap/cases/binaryOperation.kt b/js/js.translator/testFiles/sourcemap/cases/binaryOperation.kt new file mode 100644 index 00000000000..350ea6a0b41 --- /dev/null +++ b/js/js.translator/testFiles/sourcemap/cases/binaryOperation.kt @@ -0,0 +1,10 @@ +package foo + +fun box(): String { + 1 * 2 / 3 + + var ok = "" + ok += "O" + "K" + + return ok +} \ No newline at end of file