diff --git a/js/js.dart-ast/src/com/google/dart/compiler/backend/js/JsToStringGenerationVisitor.java b/js/js.dart-ast/src/com/google/dart/compiler/backend/js/JsToStringGenerationVisitor.java index 39649dd0ee0..fe8735cba8f 100644 --- a/js/js.dart-ast/src/com/google/dart/compiler/backend/js/JsToStringGenerationVisitor.java +++ b/js/js.dart-ast/src/com/google/dart/compiler/backend/js/JsToStringGenerationVisitor.java @@ -304,10 +304,10 @@ public class JsToStringGenerationVisitor extends JsVisitor { } private void continueOrBreakLabel(JsContinue x) { - String label = x.getLabel(); - if (label != null) { + JsNameRef label = x.getLabel(); + if (label != null && label.getIdent() != null) { space(); - p.print(label); + p.print(label.getIdent()); } } diff --git a/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/JsBreak.java b/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/JsBreak.java index e046b2b2695..135fb4f629d 100644 --- a/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/JsBreak.java +++ b/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/JsBreak.java @@ -12,7 +12,7 @@ public final class JsBreak extends JsContinue { super(null); } - public JsBreak(String label) { + public JsBreak(JsNameRef label) { super(label); } @@ -23,7 +23,12 @@ public final class JsBreak extends JsContinue { @Override public void traverse(JsVisitorWithContext v, JsContext ctx) { - v.visit(this, ctx); + if (v.visit(this, ctx)) { + if (label != null){ + label = v.accept(label); + } + } + v.endVisit(this, ctx); } } diff --git a/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/JsContinue.java b/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/JsContinue.java index d3705244642..9fd01c61fcd 100644 --- a/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/JsContinue.java +++ b/js/js.dart-ast/src/com/google/dart/compiler/backend/js/ast/JsContinue.java @@ -7,18 +7,18 @@ package com.google.dart.compiler.backend.js.ast; import org.jetbrains.annotations.Nullable; public class JsContinue extends SourceInfoAwareJsNode implements JsStatement { - protected final String label; + protected JsNameRef label; public JsContinue() { this(null); } - public JsContinue(@Nullable String label) { + public JsContinue(@Nullable JsNameRef label) { super(); this.label = label; } - public String getLabel() { + public JsNameRef getLabel() { return label; } @@ -27,9 +27,21 @@ public class JsContinue extends SourceInfoAwareJsNode implements JsStatement { v.visitContinue(this); } + @Override + public void acceptChildren(JsVisitor v) { + if (label != null){ + v.accept(label); + } + } + @Override public void traverse(JsVisitorWithContext v, JsContext ctx) { - v.visit(this, ctx); + if (v.visit(this, ctx)) { + if (label != null){ + label = v.accept(label); + } + } + v.endVisit(this, ctx); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java index 897c88c548a..dd4bb9cc9c6 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java @@ -359,7 +359,7 @@ public final class ExpressionVisitor extends TranslatorVisitor { .replaceAll("(?:^`(.*)`$)", "$1"); } - private static String getTargetLabel(JetExpressionWithLabel expression, TranslationContext context) { + private static JsNameRef getTargetLabel(JetExpressionWithLabel expression, TranslationContext context) { JetSimpleNameExpression labelElement = expression.getTargetLabel(); if (labelElement == null) { return null; @@ -367,7 +367,7 @@ public final class ExpressionVisitor extends TranslatorVisitor { else { JsName name = context.scope().findName(getReferencedName(labelElement)); assert name != null; - return name.getIdent(); + return name.makeRef(); } }