From 61b4c1db556df227564175918d219665a63795d7 Mon Sep 17 00:00:00 2001 From: pTalanov Date: Thu, 1 Mar 2012 14:23:43 +0400 Subject: [PATCH] TODO fixes: Operator table and StringTemplateTranslator --- .../expression/StringTemplateTranslator.java | 12 ++-- .../k2js/translate/general/Translation.java | 1 + .../translate/operation/OperatorTable.java | 67 +++++++++---------- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/StringTemplateTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/StringTemplateTranslator.java index 423df83b980..239129fe375 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/StringTemplateTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/StringTemplateTranslator.java @@ -17,7 +17,6 @@ package org.jetbrains.k2js.translate.expression; import com.google.dart.compiler.backend.js.ast.JsExpression; -import com.google.dart.compiler.backend.js.ast.JsStringLiteral; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; @@ -81,17 +80,18 @@ public final class StringTemplateTranslator extends AbstractTranslator { append(Translation.translateAsExpression(entryExpression, context())); } - //TODO: duplication @Override public void visitLiteralStringTemplateEntry(@NotNull JetLiteralStringTemplateEntry entry) { - JsStringLiteral stringConstant = program().getStringLiteral(entry.getText()); - append(stringConstant); + appendText(entry.getText()); } @Override public void visitEscapeStringTemplateEntry(@NotNull JetEscapeStringTemplateEntry entry) { - JsStringLiteral escapedValue = program().getStringLiteral(entry.getUnescapedValue()); - append(escapedValue); + appendText(entry.getUnescapedValue()); + } + + private void appendText(@NotNull String text) { + append(program().getStringLiteral(text)); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/general/Translation.java b/js/js.translator/src/org/jetbrains/k2js/translate/general/Translation.java index 8025411bb55..2f60f4d587f 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/general/Translation.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/general/Translation.java @@ -109,6 +109,7 @@ public final class Translation { return (new NamespaceInitializerTranslator(namespace, context)).generateInitializeMethod(); } + @NotNull public static JsProgram generateAst(@NotNull BindingContext bindingContext, @NotNull List files) { //TODO: move some of the code somewhere diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java b/js/js.translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java index ce1ab1d653e..15a483c76fb 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java @@ -16,13 +16,13 @@ package org.jetbrains.k2js.translate.operation; +import com.google.common.collect.ImmutableBiMap; import com.google.dart.compiler.backend.js.ast.JsBinaryOperator; import com.google.dart.compiler.backend.js.ast.JsUnaryOperator; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lexer.JetToken; import org.jetbrains.jet.lexer.JetTokens; -import java.util.HashMap; import java.util.Map; /** @@ -32,43 +32,42 @@ import java.util.Map; //TODO: refactor using guava builders public final class OperatorTable { - private static final Map binaryOperatorsMap = new HashMap(); - private static final Map unaryOperatorsMap = new HashMap(); + //TODO : not all operators , add and test bit operators + + + private static final Map binaryOperatorsMap = ImmutableBiMap.builder() + .put(JetTokens.PLUS, JsBinaryOperator.ADD) + .put(JetTokens.MINUS, JsBinaryOperator.SUB) + .put(JetTokens.MUL, JsBinaryOperator.MUL) + .put(JetTokens.DIV, JsBinaryOperator.DIV) + .put(JetTokens.EQ, JsBinaryOperator.ASG) + .put(JetTokens.GT, JsBinaryOperator.GT) + .put(JetTokens.GTEQ, JsBinaryOperator.GTE) + .put(JetTokens.LT, JsBinaryOperator.LT) + .put(JetTokens.LTEQ, JsBinaryOperator.LTE) + .put(JetTokens.EQEQ, JsBinaryOperator.REF_EQ) + .put(JetTokens.ANDAND, JsBinaryOperator.AND) + .put(JetTokens.OROR, JsBinaryOperator.OR) + .put(JetTokens.EXCLEQ, JsBinaryOperator.NEQ) + .put(JetTokens.PERC, JsBinaryOperator.MOD) + .put(JetTokens.PLUSEQ, JsBinaryOperator.ASG_ADD) + .put(JetTokens.MINUSEQ, JsBinaryOperator.ASG_SUB) + .put(JetTokens.DIVEQ, JsBinaryOperator.ASG_DIV) + .put(JetTokens.MULTEQ, JsBinaryOperator.ASG_MUL) + .put(JetTokens.PERCEQ, JsBinaryOperator.ASG_MOD) + .build(); + + private static final ImmutableBiMap unaryOperatorsMap = ImmutableBiMap.builder() + .put(JetTokens.PLUSPLUS, JsUnaryOperator.INC) + .put(JetTokens.MINUSMINUS, JsUnaryOperator.DEC) + .put(JetTokens.EXCL, JsUnaryOperator.NOT) + .put(JetTokens.MINUS, JsUnaryOperator.NEG) + .put(JetTokens.PLUS, JsUnaryOperator.POS) + .build(); private OperatorTable() { } - static { - unaryOperatorsMap.put(JetTokens.PLUSPLUS, JsUnaryOperator.INC); //++ - unaryOperatorsMap.put(JetTokens.MINUSMINUS, JsUnaryOperator.DEC); //-- - unaryOperatorsMap.put(JetTokens.EXCL, JsUnaryOperator.NOT); //! - unaryOperatorsMap.put(JetTokens.MINUS, JsUnaryOperator.NEG); //- - unaryOperatorsMap.put(JetTokens.PLUS, JsUnaryOperator.POS); //+ - } - - //TODO : not all operators , add and test bit operators - static { - binaryOperatorsMap.put(JetTokens.PLUS, JsBinaryOperator.ADD); - binaryOperatorsMap.put(JetTokens.MINUS, JsBinaryOperator.SUB); - binaryOperatorsMap.put(JetTokens.MUL, JsBinaryOperator.MUL); - binaryOperatorsMap.put(JetTokens.DIV, JsBinaryOperator.DIV); - binaryOperatorsMap.put(JetTokens.EQ, JsBinaryOperator.ASG); - binaryOperatorsMap.put(JetTokens.GT, JsBinaryOperator.GT); - binaryOperatorsMap.put(JetTokens.GTEQ, JsBinaryOperator.GTE); - binaryOperatorsMap.put(JetTokens.LT, JsBinaryOperator.LT); - binaryOperatorsMap.put(JetTokens.LTEQ, JsBinaryOperator.LTE); - binaryOperatorsMap.put(JetTokens.EQEQ, JsBinaryOperator.REF_EQ); - binaryOperatorsMap.put(JetTokens.ANDAND, JsBinaryOperator.AND); - binaryOperatorsMap.put(JetTokens.OROR, JsBinaryOperator.OR); - binaryOperatorsMap.put(JetTokens.EXCLEQ, JsBinaryOperator.NEQ); - binaryOperatorsMap.put(JetTokens.PERC, JsBinaryOperator.MOD); - binaryOperatorsMap.put(JetTokens.PLUSEQ, JsBinaryOperator.ASG_ADD); - binaryOperatorsMap.put(JetTokens.MINUSEQ, JsBinaryOperator.ASG_SUB); - binaryOperatorsMap.put(JetTokens.DIVEQ, JsBinaryOperator.ASG_DIV); - binaryOperatorsMap.put(JetTokens.MULTEQ, JsBinaryOperator.ASG_MUL); - binaryOperatorsMap.put(JetTokens.PERCEQ, JsBinaryOperator.ASG_MOD); - } - public static boolean hasCorrespondingBinaryOperator(@NotNull JetToken token) { return binaryOperatorsMap.containsKey(token);