TODO fixes: Operator table and StringTemplateTranslator

This commit is contained in:
pTalanov
2012-03-01 14:23:43 +04:00
parent f2ffd4116e
commit 61b4c1db55
3 changed files with 40 additions and 40 deletions
@@ -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
@@ -109,6 +109,7 @@ public final class Translation {
return (new NamespaceInitializerTranslator(namespace, context)).generateInitializeMethod();
}
@NotNull
public static JsProgram generateAst(@NotNull BindingContext bindingContext,
@NotNull List<JetFile> files) {
//TODO: move some of the code somewhere
@@ -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<JetToken, JsBinaryOperator> binaryOperatorsMap = new HashMap<JetToken, JsBinaryOperator>();
private static final Map<JetToken, JsUnaryOperator> unaryOperatorsMap = new HashMap<JetToken, JsUnaryOperator>();
//TODO : not all operators , add and test bit operators
private static final Map<JetToken, JsBinaryOperator> binaryOperatorsMap = ImmutableBiMap.<JetToken, JsBinaryOperator>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<JetToken, JsUnaryOperator> unaryOperatorsMap = ImmutableBiMap.<JetToken, JsUnaryOperator>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);