intrinsics refactor

This commit is contained in:
Pavel Talanov
2011-12-02 21:34:04 +04:00
parent a775c61ccf
commit a175566eec
15 changed files with 374 additions and 284 deletions
+294 -228
View File
@@ -8,24 +8,21 @@
</component>
<component name="ChangeListManager">
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/expression/intrinsic/cases/minusAssignOnProperty.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/expression/intrinsic/cases/plusAssign.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/IntrinsicTest.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/FunctionIntrinsic.java" />
<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/declarations/DeclarationVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/AssignmentTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/AssignmentTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/BinaryOperationIntrinsic.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/BinaryOperationIntrinsic.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/IntrinsicDeclarationVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/IntrinsicDeclarationVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/UnaryOperationIntrinsic.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/UnaryOperationIntrinsic.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IncrementTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IncrementTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IntrinsicAssignmentTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IntrinsicAssignmentTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IntrinsicIncrementTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IntrinsicIncrementTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OverloadedAssignmentTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OverloadedAssignmentTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OverloadedIncrementTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OverloadedIncrementTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" />
</list>
<ignored path="k2js.iws" />
<ignored path=".idea/workspace.xml" />
@@ -110,19 +107,6 @@
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java" line="68" class="org.jetbrains.k2js.translate.operation.CompareToTranslator" package="org.jetbrains.k2js.translate.operation">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java" line="71" class="org.jetbrains.k2js.translate.reference.ReferenceTranslator" package="org.jetbrains.k2js.translate.reference">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
@@ -193,87 +177,35 @@
<favorites_list name="k2js" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.66548043">
<splitter split-orientation="horizontal" split-proportion="0.6412811">
<split-first>
<leaf>
<file leaf-file-name="plusAssign.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/intrinsic/cases/plusAssign.kt">
<file leaf-file-name="CompareToTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="7" column="39" selection-start="84" selection-end="84" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StandardClassesTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/StandardClassesTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="24" column="27" selection-start="531" selection-end="531" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Aliaser.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/Aliaser.java">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="49" selection-start="703" selection-end="703" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Namer.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/Namer.java">
<provider selected="true" editor-type-id="text-editor">
<state line="41" column="33" selection-start="1448" selection-end="1448" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ClassInitializerTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="59" column="76" selection-start="2458" selection-end="2458" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="DescriptorUtils.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="1" column="0" selection-start="44" selection-end="44" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TranslationUtils.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="73" column="89" selection-start="3235" selection-end="3235" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="IntrinsicAssignmentTranslator.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IntrinsicAssignmentTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="52" column="29" selection-start="2032" selection-end="2032" vertical-scroll-proportion="0.4712813">
<state line="87" column="24" selection-start="3829" selection-end="3829" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
<element signature="imports" expanded="false" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PsiUtils.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java">
<file leaf-file-name="BinaryOperationTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="46" column="18" selection-start="1693" selection-end="1693" vertical-scroll-proportion="0.0">
<state line="75" column="24" selection-start="3358" selection-end="3358" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="false" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TraitTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TraitTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="16" selection-start="442" selection-end="442" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -282,7 +214,66 @@
<file leaf-file-name="OperatorTable.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java">
<provider selected="true" editor-type-id="text-editor">
<state line="64" column="5" selection-start="3032" selection-end="3032" vertical-scroll-proportion="0.0">
<state line="57" column="0" selection-start="2773" selection-end="2773" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Intrinsics.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java">
<provider selected="true" editor-type-id="text-editor">
<state line="48" column="40" selection-start="1854" selection-end="1854" vertical-scroll-proportion="0.6350461">
<folding>
<element signature="e#953#990#0" expanded="true" />
<element signature="e#1116#1156#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Intrinsic.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="4" selection-start="303" selection-end="303" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="EqualsIntrinsic.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/EqualsIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="7" column="59" selection-start="184" selection-end="184" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="CompareToIntrinsic.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/CompareToIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="62" selection-start="297" selection-end="297" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BinaryOperationIntrinsic.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/BinaryOperationIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="13" selection-start="520" selection-end="520" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="UnaryOperationIntrinsic.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/UnaryOperationIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="45" selection-start="551" selection-end="551" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -292,15 +283,6 @@
</split-first>
<split-second>
<leaf>
<file leaf-file-name="overloadedCallOnProperty.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/overloadedCallOnProperty.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>
</file>
<file leaf-file-name="postfixOnProperty.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/postfixOnProperty.js">
<provider selected="true" editor-type-id="text-editor">
@@ -337,7 +319,7 @@
</provider>
</entry>
</file>
<file leaf-file-name="minusAssignOnProperty.js" pinned="false" current="false" current-in-tab="true">
<file leaf-file-name="minusAssignOnProperty.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/intrinsic/out/minusAssignOnProperty.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">
@@ -382,6 +364,15 @@
</provider>
</entry>
</file>
<file leaf-file-name="TranslationUtils.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="219" column="44" selection-start="10071" selection-end="10071" vertical-scroll-proportion="1.0934718">
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</split-second>
</splitter>
@@ -403,22 +394,22 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IncrementTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IntrinsicIncrementTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/AssignmentTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OverloadedAssignmentTranslator.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/intrinsic/cases/plusAssign.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationVisitor.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/IntrinsicTest.java" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/intrinsic/cases/minusAssignOnProperty.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/intrinsic/out/plusAssign.js" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IntrinsicAssignmentTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OverloadedAssignmentTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OverloadedIncrementTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/FunctionIntrinsic.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/EqualsIntrinsic.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/CompareToIntrinsic.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/BinaryOperationIntrinsic.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/UnaryOperationIntrinsic.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java" />
</list>
</option>
</component>
@@ -639,6 +630,72 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translate" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translate" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="intrinsic" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
@@ -731,7 +788,7 @@
<recent name="org.jetbrains.k2js.test.examples" />
</key>
</component>
<component name="RunManager" selected="JUnit.tests">
<component name="RunManager" selected="JUnit.All in jetTests">
<configuration default="false" name="All in jetTests" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" />
<module name="jetTests" />
@@ -1059,13 +1116,13 @@
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977018" sideWeight="0.6705091" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32854405" sideWeight="0.5" order="14" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.22382325" sideWeight="0.45750934" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.22382325" sideWeight="0.45750934" order="9" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32949087" sideWeight="0.49812934" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.20363443" sideWeight="0.284342" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977018" sideWeight="0.728146" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3997862" sideWeight="0.6705998" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24906467" sideWeight="0.6993276" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.30067244" sideWeight="0.64190274" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24906467" sideWeight="0.77617675" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.30067244" sideWeight="0.64190274" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Metrics" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3275862" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
@@ -1109,7 +1166,7 @@
<option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
<option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" value="refactoring" />
<option name="LAST_COMMIT_MESSAGE" value="intrinsics refactor" />
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
@@ -1122,8 +1179,6 @@
<option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
<MESSAGE value="Refactoring" />
<MESSAGE value="compareTo support." />
<MESSAGE value="Fixed a bug where class could not access namespace properties." />
<MESSAGE value="Corrected class declaration logic." />
<MESSAGE value="Supported single file without namespace." />
@@ -1147,6 +1202,8 @@
<MESSAGE value="Test fixes." />
<MESSAGE value="turn off array tests" />
<MESSAGE value="refactoring" />
<MESSAGE value="refactor and fix assignment operator on property bug" />
<MESSAGE value="intrinsics refactor" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1156,120 +1213,129 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/OperatorConventions.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/AssignmentTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="67" column="67" selection-start="2768" selection-end="2768" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/postfixOnProperty.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/org/jetbrains/k2js/test/PatternMatchingTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="16" selection-start="428" selection-end="428" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/postfixOnProperty.kt">
<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="jar://C:/Program Files/Java/jdk1.7.0_01/src.zip!/java/io/Reader.java">
<provider selected="true" editor-type-id="text-editor">
<state line="82" column="85" selection-start="1780" selection-end="1780" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/intrinsic/cases/minusAssignOnProperty.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="96" selection-start="78" selection-end="78" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/intrinsic/out/plusAssign.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/testFiles/propertyAccess/out/namespaceCustomAccessors.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/testFiles/propertyAccess/out/namespacePropertyInitializer.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/testFiles/expression/intrinsic/cases/plusAssign.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="7" column="39" selection-start="84" selection-end="84" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/PropertyTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="106" column="64" selection-start="3980" selection-end="3980" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/IntrinsicTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="16" selection-start="430" selection-end="430" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/intrinsic/out/minusAssignOnProperty.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/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="73" column="89" selection-start="3235" selection-end="3235" 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="12" column="2" selection-start="220" selection-end="220" vertical-scroll-proportion="0.0">
<state line="32" column="0" selection-start="1559" selection-end="1559" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IntrinsicAssignmentTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="52" column="29" selection-start="2032" selection-end="2032" vertical-scroll-proportion="0.4712813">
<state line="18" column="19" selection-start="788" selection-end="788" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/IncrementTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="57" column="28" selection-start="2498" selection-end="2498" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="0" selection-start="366" selection-end="366" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/IntrinsicDeclarationVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="19" selection-start="445" selection-end="445" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/FunctionIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="61" selection-start="335" selection-end="335" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/EqualsIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="7" column="59" selection-start="184" selection-end="184" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/UnaryOperationIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="45" selection-start="551" selection-end="551" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="4" selection-start="303" selection-end="303" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="87" column="24" selection-start="3829" selection-end="3829" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="75" column="24" selection-start="3358" selection-end="3358" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TraitTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="16" selection-start="442" selection-end="442" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java">
<provider selected="true" editor-type-id="text-editor">
<state line="57" column="0" selection-start="2773" selection-end="2773" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/CompareToIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="62" selection-start="297" selection-end="297" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/BinaryOperationIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="13" selection-start="520" selection-end="520" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java">
<provider selected="true" editor-type-id="text-editor">
<state line="48" column="40" selection-start="1854" selection-end="1854" vertical-scroll-proportion="0.6350461">
<folding>
<element signature="e#953#990#0" expanded="true" />
<element signature="e#1116#1156#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
@@ -13,7 +13,7 @@ import java.util.List;
/**
* @author Talanov Pavel
*/
public class BinaryOperationIntrinsic implements Intrinsic {
public class BinaryOperationIntrinsic extends FunctionIntrinsic {
@NotNull
/*package*/ static BinaryOperationIntrinsic newInstance(@NotNull JetToken token) {
@@ -0,0 +1,8 @@
package org.jetbrains.k2js.translate.intrinsic;
/**
* @author Talanov Pavel
*/
public abstract class FunctionIntrinsic implements Intrinsic {
}
@@ -12,7 +12,6 @@ import java.util.List;
public interface Intrinsic {
@NotNull
public JsExpression apply(@NotNull JsExpression receiver, @NotNull List<JsExpression> arguments,
@NotNull TranslationContext context);
JsExpression apply(@NotNull JsExpression receiver, @NotNull List<JsExpression> arguments,
@NotNull TranslationContext context);
}
@@ -30,7 +30,7 @@ public final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisi
@Override
public Void visitFunctionDescriptor(@NotNull FunctionDescriptor descriptor, @Nullable Void nothing) {
if (!intrinsics.hasDescriptor(descriptor)) {
if (!intrinsics.isIntrinsic(descriptor)) {
intrinsics.declareIntrinsic(descriptor);
}
return null;
@@ -19,8 +19,17 @@ import java.util.Map;
public final class Intrinsics {
@NotNull
private final Map<FunctionDescriptor, Intrinsic> descriptorToIntrinsicMap =
new HashMap<FunctionDescriptor, Intrinsic>();
private final Map<FunctionDescriptor, FunctionIntrinsic> functionIntrinsics =
new HashMap<FunctionDescriptor, FunctionIntrinsic>();
@NotNull
private final Map<FunctionDescriptor, EqualsIntrinsic> equalsIntrinsics =
new HashMap<FunctionDescriptor, EqualsIntrinsic>();
@NotNull
private final Map<FunctionDescriptor, CompareToIntrinsic> compareToIntrinsics =
new HashMap<FunctionDescriptor, CompareToIntrinsic>();
public static Intrinsics standardLibraryIntrinsics(@NotNull JetStandardLibrary library) {
return new Intrinsics(library);
@@ -38,54 +47,65 @@ public final class Intrinsics {
addEqualsIntrinsics(descriptor);
addUnaryIntrinsics(descriptor);
addBinaryIntrinsics(descriptor);
}
private void addCompareToIntrinsics(@NotNull FunctionDescriptor descriptor) {
String functionName = descriptor.getName();
if (functionName.equals("compareTo")) {
descriptorToIntrinsicMap.put(descriptor, PrimitiveCompareToIntrinsic.newInstance());
compareToIntrinsics.put(descriptor, PrimitiveCompareToIntrinsic.newInstance());
}
}
private void addEqualsIntrinsics(@NotNull FunctionDescriptor descriptor) {
String functionName = descriptor.getName();
if (functionName.equals("equals")) {
descriptorToIntrinsicMap.put(descriptor, PrimitiveEqualsIntrinsic.newInstance());
equalsIntrinsics.put(descriptor, PrimitiveEqualsIntrinsic.newInstance());
}
}
private void addUnaryIntrinsics(@NotNull FunctionDescriptor descriptor) {
String functionName = descriptor.getName();
JetToken token = OperatorConventions.UNARY_OPERATION_NAMES.inverse().get(functionName);
if (token == null) return;
boolean isUnary = !DescriptorUtils.hasParameters(descriptor);
if (isUnary && (token != null)) {
descriptorToIntrinsicMap.put(descriptor, UnaryOperationIntrinsic.newInstance(token));
}
if (!isUnary) return;
functionIntrinsics.put(descriptor, UnaryOperationIntrinsic.newInstance(token));
}
private void addBinaryIntrinsics(@NotNull FunctionDescriptor descriptor) {
String functionName = descriptor.getName();
boolean isUnary = !DescriptorUtils.hasParameters(descriptor);
if (isUnary) return;
JetToken token = OperatorConventions.BINARY_OPERATION_NAMES.inverse().get(functionName);
if (token != null && OperatorTable.hasCorrespondingBinaryOperator(token) && (!isUnary)) {
descriptorToIntrinsicMap.put(descriptor, BinaryOperationIntrinsic.newInstance(token));
}
if (token == null) return;
//TODO: implement range and contains intrinsic
if (!OperatorTable.hasCorrespondingBinaryOperator(token)) return;
functionIntrinsics.put(descriptor, BinaryOperationIntrinsic.newInstance(token));
}
public boolean hasDescriptor(@NotNull DeclarationDescriptor descriptor) {
public boolean isIntrinsic(@NotNull DeclarationDescriptor descriptor) {
//NOTE: that if we want to add other intrinsics we have to modify this method
if (descriptor instanceof FunctionDescriptor) {
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor.getOriginal();
return (descriptorToIntrinsicMap.get(functionDescriptor) != null);
return (equalsIntrinsics.containsKey(functionDescriptor) ||
compareToIntrinsics.containsKey(functionDescriptor) ||
functionIntrinsics.containsKey(functionDescriptor));
}
return false;
}
@NotNull
public FunctionIntrinsic getFunctionIntrinsic(@NotNull FunctionDescriptor descriptor) {
return functionIntrinsics.get(descriptor);
}
@NotNull
public Intrinsic getIntrinsic(@NotNull DeclarationDescriptor descriptor) {
assert descriptor instanceof FunctionDescriptor;
Intrinsic intrinsic = descriptorToIntrinsicMap.get(descriptor);
return intrinsic;
public CompareToIntrinsic getCompareToIntrinsic(@NotNull FunctionDescriptor descriptor) {
return compareToIntrinsics.get(descriptor);
}
@NotNull
public EqualsIntrinsic getEqualsIntrinsic(@NotNull FunctionDescriptor descriptor) {
return equalsIntrinsics.get(descriptor);
}
}
@@ -13,7 +13,7 @@ import java.util.List;
/**
* @author Talanov Pavel
*/
public class UnaryOperationIntrinsic implements Intrinsic {
public class UnaryOperationIntrinsic extends FunctionIntrinsic {
@NotNull
/*package*/ static UnaryOperationIntrinsic newInstance(@NotNull JetToken token) {
@@ -13,7 +13,6 @@ import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.intrinsic.EqualsIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.Intrinsic;
import org.jetbrains.k2js.translate.reference.CallTranslator;
import java.util.Arrays;
@@ -70,9 +69,8 @@ public final class BinaryOperationTranslator extends AbstractTranslator {
@NotNull
private JsExpression translateAsEqualsCall() {
assert operationDescriptor != null : "Equals operation must resolve to descriptor.";
Intrinsic intrinsic = context().intrinsics().getIntrinsic(operationDescriptor);
//TODO
((EqualsIntrinsic) intrinsic).setNegated(expression.getOperationToken().equals(JetTokens.EXCLEQ));
EqualsIntrinsic intrinsic = context().intrinsics().getEqualsIntrinsic(operationDescriptor);
intrinsic.setNegated(expression.getOperationToken().equals(JetTokens.EXCLEQ));
JsExpression left = translateLeftExpression(context(), expression);
JsExpression right = translateRightExpression(context(), expression);
return intrinsic.apply(left, Arrays.asList(right), context());
@@ -12,7 +12,6 @@ import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.intrinsic.CompareToIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.Intrinsic;
import org.jetbrains.k2js.translate.reference.CallTranslator;
import java.util.Arrays;
@@ -82,8 +81,8 @@ public final class CompareToTranslator extends AbstractTranslator {
@NotNull
private JsExpression intrinsicCompareTo() {
Intrinsic intrinsic = context().intrinsics().getIntrinsic(descriptor);
((CompareToIntrinsic) intrinsic).setComparisonToken((JetToken) expression.getOperationToken());
CompareToIntrinsic intrinsic = context().intrinsics().getCompareToIntrinsic(descriptor);
intrinsic.setComparisonToken((JetToken) expression.getOperationToken());
JsExpression left = translateLeftExpression(context(), expression);
JsExpression right = translateRightExpression(context(), expression);
return intrinsic.apply(left, Arrays.asList(right), context());
@@ -25,7 +25,7 @@ public final class OperatorTable {
unaryOperatorsMap.put(JetTokens.PLUS, JsUnaryOperator.POS); //+
}
//TODO : not all operators
//TODO : not all operators , add and test bit operators
static {
binaryOperatorsMap.put(JetTokens.PLUS, JsBinaryOperator.ADD);
binaryOperatorsMap.put(JetTokens.MINUS, JsBinaryOperator.SUB);
@@ -4,11 +4,10 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsNameRef;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetBinaryExpression;
import org.jetbrains.k2js.translate.context.TranslationContext;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForReferenceExpression;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getMethodReferenceForOverloadedOperation;
/**
* @author Talanov Pavel
@@ -27,13 +26,7 @@ public final class OverloadedAssignmentTranslator extends AssignmentTranslator {
private OverloadedAssignmentTranslator(@NotNull JetBinaryExpression expression,
@NotNull TranslationContext context) {
super(expression, context);
//TODO: util
DeclarationDescriptor overloadedOperationDescriptor = getDescriptorForReferenceExpression
(context.bindingContext(), expression.getOperation());
assert overloadedOperationDescriptor != null;
JsNameRef overloadedOperationReference = context().getNameForDescriptor(overloadedOperationDescriptor).makeRef();
assert overloadedOperationReference != null;
this.operationReference = overloadedOperationReference;
this.operationReference = getMethodReferenceForOverloadedOperation(context, expression);
}
@NotNull
@@ -4,10 +4,10 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsNameRef;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetUnaryExpression;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getMethodReferenceForOverloadedOperation;
/**
* @author Talanov Pavel
@@ -28,13 +28,7 @@ public final class OverloadedIncrementTranslator extends IncrementTranslator {
private OverloadedIncrementTranslator(@NotNull JetUnaryExpression expression,
@NotNull TranslationContext context) {
super(expression, context);
//TODO: DUBLICATE CODE
DeclarationDescriptor overloadedOperationDescriptor = BindingUtils.getDescriptorForReferenceExpression
(context.bindingContext(), expression.getOperation());
assert overloadedOperationDescriptor != null;
JsNameRef overloadedOperationReference = context().getNameForDescriptor(overloadedOperationDescriptor).makeRef();
assert overloadedOperationReference != null;
this.operationReference = overloadedOperationReference;
this.operationReference = getMethodReferenceForOverloadedOperation(context, expression);
}
@Override
@@ -10,7 +10,6 @@ import org.jetbrains.k2js.translate.reference.CallTranslator;
* @author Talanov Pavel
*/
//TODO: merge with binary operation
public final class UnaryOperationTranslator {
@NotNull
@@ -12,7 +12,7 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.intrinsic.Intrinsic;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
import org.jetbrains.k2js.translate.utils.TranslationUtils;
import java.util.Arrays;
@@ -99,10 +99,10 @@ public final class CallTranslator extends AbstractTranslator {
@NotNull
private JsExpression translate() {
if (context().intrinsics().hasDescriptor(descriptor)) {
Intrinsic intrinsic = context().intrinsics().getIntrinsic(descriptor);
assert receiver != null : "Functions that have intrinsic implementation should have a receiver.";
return intrinsic.apply(receiver, arguments, context());
if (context().intrinsics().isIntrinsic(descriptor)) {
FunctionIntrinsic functionIntrinsic = context().intrinsics().getFunctionIntrinsic(descriptor);
assert receiver != null : "Functions that have functionIntrinsic implementation should have a receiver.";
return functionIntrinsic.apply(receiver, arguments, context());
}
if (isConstructorDescriptor(descriptor)) {
return constructorCall();
@@ -15,6 +15,8 @@ import org.jetbrains.k2js.translate.general.Translation;
import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getFunctionDescriptorForOperationExpression;
/**
* @author Talanov Pavel
*/
@@ -202,8 +204,20 @@ public final class TranslationUtils {
BindingUtils.getFunctionDescriptorForOperationExpression(context.bindingContext(), expression);
if (operationDescriptor == null) return true;
if (context.intrinsics().hasDescriptor(operationDescriptor)) return true;
if (context.intrinsics().isIntrinsic(operationDescriptor)) return true;
return false;
}
@NotNull
public static JsNameRef getMethodReferenceForOverloadedOperation(@NotNull TranslationContext context,
@NotNull JetOperationExpression expression) {
FunctionDescriptor overloadedOperationDescriptor = getFunctionDescriptorForOperationExpression
(context.bindingContext(), expression);
assert overloadedOperationDescriptor != null;
JsNameRef overloadedOperationReference = context.getNameForDescriptor(overloadedOperationDescriptor).makeRef();
assert overloadedOperationReference != null;
return overloadedOperationReference;
}
}