TODO fixes: Operator table and StringTemplateTranslator
This commit is contained in:
+6
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user