Added string constant support.

This commit is contained in:
Pavel Talanov
2011-11-09 18:39:29 +04:00
parent 681100c4bc
commit b514c180b4
5 changed files with 180 additions and 114 deletions
+124 -111
View File
@@ -6,10 +6,8 @@
</component>
<component name="ChangeListManager">
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/doWhile.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/doWhile2.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/while.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/while2.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/stringAssignment.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/stringConstant.kt" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
@@ -37,7 +35,7 @@
</component>
<component name="DebuggerManager">
<line_breakpoints>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="136" class="org.jetbrains.k2js.translate.ExpressionVisitor" package="org.jetbrains.k2js.translate">
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="137" class="org.jetbrains.k2js.translate.ExpressionVisitor" package="org.jetbrains.k2js.translate">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
@@ -93,28 +91,28 @@
<splitter split-orientation="horizontal" split-proportion="0.34183672">
<split-first>
<leaf>
<file leaf-file-name="K2JSTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/K2JSTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="146" column="12" selection-start="5804" selection-end="5804" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetIfExpression.java" pinned="false" current="false" current-in-tab="true">
<file leaf-file-name="JetIfExpression.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIfExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="8" column="14" selection-start="214" selection-end="214" vertical-scroll-proportion="-0.31034482">
<state line="38" column="29" selection-start="979" selection-end="979" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ClassTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassTest.java">
<file leaf-file-name="stringConstant.kt" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/stringConstant.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="38" column="53" selection-start="1375" selection-end="1375" vertical-scroll-proportion="0.0">
<state line="8" column="45" selection-start="80" selection-end="80" vertical-scroll-proportion="0.25855514">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="while2.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/while2.js">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="8" selection-start="34" selection-end="131" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -196,7 +194,7 @@
<file leaf-file-name="ExpressionVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="228" column="53" selection-start="9973" selection-end="9973" vertical-scroll-proportion="0.0">
<state line="138" column="22" selection-start="5848" selection-end="5848" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
@@ -204,6 +202,24 @@
</provider>
</entry>
</file>
<file leaf-file-name="stringAssignment.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/stringAssignment.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="4" column="16" selection-start="54" selection-end="54" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="334" column="25" selection-start="10982" selection-end="10994" vertical-scroll-proportion="-6.6538463">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="doWhile.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/doWhile.kt">
<provider selected="true" editor-type-id="text-editor">
@@ -213,15 +229,6 @@
</provider>
</entry>
</file>
<file leaf-file-name="JetDoWhileExpression.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDoWhileExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="10" column="50" selection-start="269" selection-end="269" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetLoopExpression.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLoopExpression.java">
<provider selected="true" editor-type-id="text-editor">
@@ -240,19 +247,19 @@
</provider>
</entry>
</file>
<file leaf-file-name="test.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/test.kt">
<file leaf-file-name="FunctionTest.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="104" vertical-scroll-proportion="0.0">
<state line="8" column="27" selection-start="226" selection-end="226" vertical-scroll-proportion="0.24908425">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="FunctionTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<file leaf-file-name="TranslatorVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="55" column="42" selection-start="1228" selection-end="1228" vertical-scroll-proportion="0.0">
<state line="17" column="0" selection-start="537" selection-end="537" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -267,10 +274,10 @@
</provider>
</entry>
</file>
<file leaf-file-name="doWhile2.kt" pinned="false" current="true" current-in-tab="true">
<file leaf-file-name="doWhile2.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/doWhile2.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="13" column="8" selection-start="161" selection-end="161" vertical-scroll-proportion="0.4047619">
<state line="13" column="8" selection-start="161" selection-end="161" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -292,8 +299,6 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsProgram.java" />
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/K2JSTranslator.java" />
@@ -302,12 +307,14 @@
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/elseif.kt" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/while.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/doWhile.kt" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/whileDoesntExecute.kt" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/doWhileExecutes.kt" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/doWhile2.kt" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/stringConstant.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/stringAssignment.kt" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
</list>
</option>
</component>
@@ -825,7 +832,7 @@
<option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
<option name="DEFAULT_PATCH_EXTENSION" value="patch" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" value="Added if else support" />
<option name="LAST_COMMIT_MESSAGE" value="Added while/do while support" />
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
@@ -843,6 +850,7 @@
<MESSAGE value="Finished reorganising project structure." />
<MESSAGE value="Fixed JDK hack" />
<MESSAGE value="Added if else support" />
<MESSAGE value="Added while/do while support" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -852,57 +860,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/kotlin_lib.js">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/if.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="0" selection-start="33" selection-end="77" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/if.js">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="22" selection-start="172" selection-end="172" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/elseif.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="5" column="14" selection-start="77" selection-end="77" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="55" selection-start="344" selection-end="344" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/testKotlinLib.js">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/test.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="104" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDoWhileExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="10" column="50" selection-start="269" selection-end="269" vertical-scroll-proportion="0.0">
@@ -917,15 +874,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="228" column="53" selection-start="9973" selection-end="9973" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/doWhile.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="30" selection-start="219" selection-end="219" vertical-scroll-proportion="0.0">
@@ -933,13 +881,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="55" column="42" selection-start="1228" selection-end="1228" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/while.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="216" vertical-scroll-proportion="0.0">
@@ -947,6 +888,41 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIfExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="38" column="29" selection-start="979" selection-end="979" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/K2JSTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="146" column="12" selection-start="5804" selection-end="5804" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="38" column="53" selection-start="1375" selection-end="1375" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/doWhile2.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="13" column="8" selection-start="161" selection-end="161" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/while2.js">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="8" selection-start="34" selection-end="131" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/while2.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="105" vertical-scroll-proportion="0.0">
@@ -954,9 +930,46 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/doWhile2.kt">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="13" column="8" selection-start="161" selection-end="161" vertical-scroll-proportion="0.4047619">
<state line="17" column="0" selection-start="537" selection-end="537" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="334" column="25" selection-start="10982" selection-end="10994" vertical-scroll-proportion="-6.6538463">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="138" column="22" selection-start="5848" selection-end="5848" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/stringConstant.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="8" column="45" selection-start="80" selection-end="80" vertical-scroll-proportion="0.25855514">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/stringAssignment.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="4" column="16" selection-start="54" selection-end="54" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="8" column="27" selection-start="226" selection-end="226" vertical-scroll-proportion="0.24908425">
<folding />
</state>
</provider>
@@ -28,7 +28,8 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
public JsNode visitConstantExpression(@NotNull JetConstantExpression expression, @NotNull TranslationContext context) {
JsExpression result = null;
Object value;
CompileTimeConstant<?> compileTimeValue = context.bindingContext().get(BindingContext.COMPILE_TIME_VALUE, expression);
CompileTimeConstant<?> compileTimeValue =
context.bindingContext().get(BindingContext.COMPILE_TIME_VALUE, expression);
assert compileTimeValue != null;
value = compileTimeValue.getValue();
if (value instanceof Integer) {
@@ -194,7 +195,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
}
@NotNull
private JsStatement translateNullableExpressionToNotNullStatement(@NotNull JetExpression expression,
private JsStatement translateNullableExpressionToNotNullStatement(@Nullable JetExpression expression,
@NotNull TranslationContext context) {
return AstUtil.convertToStatement(translateNullableExpression(expression, context));
}
@@ -235,6 +236,30 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
return result;
}
@Override
@NotNull
public JsNode visitStringTemplateExpression(@NotNull JetStringTemplateExpression expression,
@NotNull TranslationContext context) {
JsStringLiteral stringLiteral = resolveAsStringConstant(expression, context);
if (stringLiteral != null) {
return stringLiteral;
}
throw new AssertionError("String templates not supported!");
}
@Nullable
private JsStringLiteral resolveAsStringConstant(@NotNull JetStringTemplateExpression expression,
@NotNull TranslationContext context) {
CompileTimeConstant<?> compileTimeValue =
context.bindingContext().get(BindingContext.COMPILE_TIME_VALUE, expression);
if (compileTimeValue != null) {
Object value = compileTimeValue.getValue();
assert value instanceof String : "Compile time constant template should be a String constant";
String constantString = (String)value;
return context.program().getStringLiteral(constantString);
}
return null;
}
}
@@ -4,6 +4,9 @@ import org.junit.Test;
/**
* @author Talanov Pavel
*
* This class tests basic language features and constructs such as constants, local variables, simple loops,
* conditional clauses etc.
*/
public final class FunctionTest extends TranslationTest {
@@ -57,6 +60,13 @@ public final class FunctionTest extends TranslationTest {
testFooBoxIsTrue("while2.kt");
}
@Test
public void stringConstant() throws Exception {
testFooBoxIsTrue("stringConstant.kt");
}
@Test
public void stringAssignment() throws Exception {
testFooBoxIsTrue("stringAssignment.kt");
}
}
@@ -0,0 +1,10 @@
namespace foo
fun box() : Boolean {
val a = "bar";
var b = "foo";
b = a;
return (b == "bar");
}
@@ -0,0 +1,8 @@
namespace foo
fun box() : Boolean {
val a = "String";
return true;
}