diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 85f139460c7..33ef73ecd68 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -12,30 +12,22 @@
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -79,6 +71,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -135,7 +142,7 @@
-
+
@@ -159,16 +166,25 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
@@ -219,108 +235,95 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
-
-
-
+
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
@@ -351,22 +354,22 @@
@@ -593,6 +596,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -747,7 +972,7 @@
-
+
@@ -765,7 +990,37 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -773,24 +1028,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -827,7 +1064,231 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -937,63 +1398,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -1078,6 +1483,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1264,11 +1725,11 @@
-
-
-
-
-
+
+
+
+
+
localhost
@@ -1404,7 +1865,7 @@
-
+
@@ -1417,7 +1878,6 @@
-
@@ -1442,6 +1902,7 @@
+
@@ -1451,114 +1912,114 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java
index 806e166ad73..87c65543580 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsic.java
@@ -2,6 +2,7 @@ package org.jetbrains.k2js.translate.intrinsic;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import java.util.List;
@@ -12,6 +13,6 @@ import java.util.List;
public interface Intrinsic {
@NotNull
- JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context);
}
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java
index 753d1458c1b..b87d830fbd2 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java
@@ -7,6 +7,9 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetStandardClasses;
import org.jetbrains.jet.lang.types.JetStandardLibrary;
import org.jetbrains.jet.lexer.JetToken;
+import org.jetbrains.k2js.translate.intrinsic.array.ArrayGetIntrinsic;
+import org.jetbrains.k2js.translate.intrinsic.array.ArrayNullConstructorIntrinsic;
+import org.jetbrains.k2js.translate.intrinsic.array.ArraySetIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.primitive.*;
import org.jetbrains.k2js.translate.intrinsic.string.LengthIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.tuple.TupleAccessIntrinsic;
@@ -17,6 +20,7 @@ import java.util.HashMap;
import java.util.Map;
import static org.jetbrains.jet.lang.types.expressions.OperatorConventions.*;
+import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getFunctionByName;
import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getPropertyByName;
/**
@@ -48,6 +52,17 @@ public final class Intrinsics {
declareOperatorIntrinsics();
declareStringIntrinsics();
declareTuplesIntrinsics();
+ declareArrayIntrinsics();
+ }
+
+ private void declareArrayIntrinsics() {
+ JetScope arrayMemberScope = library.getArray().getDefaultType().getMemberScope();
+ FunctionDescriptor setFunction = getFunctionByName(arrayMemberScope, "set");
+ functionIntrinsics.put(setFunction, ArraySetIntrinsic.INSTANCE);
+ FunctionDescriptor getFunction = getFunctionByName(arrayMemberScope, "get");
+ functionIntrinsics.put(getFunction, ArrayGetIntrinsic.INSTANCE);
+ FunctionDescriptor nullArrayConstructor = getFunctionByName(library.getLibraryScope(), "Array");
+ functionIntrinsics.put(nullArrayConstructor, ArrayNullConstructorIntrinsic.INSTANCE);
}
private void declareTuplesIntrinsics() {
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java
index bd126fe6593..4efd7f83fb4 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java
@@ -1,10 +1,9 @@
package org.jetbrains.k2js.translate.intrinsic.array;
-import com.google.dart.compiler.backend.js.ast.JsConditional;
+import com.google.dart.compiler.backend.js.ast.JsArrayAccess;
import com.google.dart.compiler.backend.js.ast.JsExpression;
-import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.k2js.translate.context.TemporaryVariable;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
@@ -19,13 +18,15 @@ public enum ArrayGetIntrinsic implements FunctionIntrinsic {
@NotNull
@Override
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
+ assert receiver != null;
assert arguments.size() == 1 : "Array get expression must have one argument.";
JsExpression indexExpression = arguments.get(0);
- TemporaryVariable arrayExpression = context.declareTemporary(receiver);
- JsConditional indexInBoundsCheck =
- IntrinsicArrayUtils.indexInBoundsCheck(indexExpression, arrayExpression, context);
- return AstUtil.newSequence(arrayExpression.assignmentExpression(), AstUtil.newArrayAccess(receiver, indexExpression));
+// TemporaryVariable arrayExpression = context.declareTemporary(receiver);
+// JsConditional indexInBoundsCheck =
+// IntrinsicArrayUtils.indexInBoundsCheck(indexExpression, arrayExpression, context);
+// return AstUtil.newSequence(arrayExpression.assignmentExpression(), AstUtil.newArrayAccess(receiver, indexExpression));
+ return new JsArrayAccess(receiver, indexExpression);
}
}
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayNullConstructorIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayNullConstructorIntrinsic.java
index cceb150f38a..227bb15d611 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayNullConstructorIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayNullConstructorIntrinsic.java
@@ -3,6 +3,7 @@ package org.jetbrains.k2js.translate.intrinsic.array;
import com.google.dart.compiler.backend.js.ast.JsArrayLiteral;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
@@ -18,7 +19,7 @@ public enum ArrayNullConstructorIntrinsic implements FunctionIntrinsic {
//TODO: implement function passing to array constructor
@NotNull
@Override
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
return new JsArrayLiteral();
}
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArraySetIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArraySetIntrinsic.java
index 053dbfda9ce..5aea42f62ed 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArraySetIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArraySetIntrinsic.java
@@ -4,6 +4,7 @@ import com.google.dart.compiler.backend.js.ast.JsArrayAccess;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
@@ -18,8 +19,9 @@ public enum ArraySetIntrinsic implements FunctionIntrinsic {
@NotNull
@Override
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
+ assert receiver != null;
assert arguments.size() == 2 : "Array set expression must have two arguments.";
JsExpression indexExpression = arguments.get(0);
JsExpression value = arguments.get(1);
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java
index dab49e8ef57..fcea8f81319 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java
@@ -8,6 +8,8 @@ import org.jetbrains.k2js.translate.context.TranslationContext;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.zeroLiteral;
+//TODO: decide if needed
+
/**
* @author Pavel Talanov
*/
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveBinaryOperationIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveBinaryOperationIntrinsic.java
index dd69fd1e9b1..8d2921cb6f2 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveBinaryOperationIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveBinaryOperationIntrinsic.java
@@ -4,6 +4,7 @@ import com.google.dart.compiler.backend.js.ast.JsBinaryOperation;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperator;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
@@ -31,7 +32,7 @@ public final class PrimitiveBinaryOperationIntrinsic implements FunctionIntrinsi
@NotNull
@Override
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
assert arguments.size() == 1 : "Binary operator should have a receiver and one argument";
return new JsBinaryOperation(operator, receiver, arguments.get(0));
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveCompareToIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveCompareToIntrinsic.java
index 2628ac1bf32..1abd199c217 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveCompareToIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveCompareToIntrinsic.java
@@ -4,6 +4,7 @@ import com.google.dart.compiler.backend.js.ast.JsBinaryOperation;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperator;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.CompareToIntrinsic;
import org.jetbrains.k2js.translate.operation.OperatorTable;
@@ -24,7 +25,7 @@ public final class PrimitiveCompareToIntrinsic extends CompareToIntrinsic {
}
@NotNull
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
assert arguments.size() == 1 : "Equals operation should have one argument";
JsBinaryOperator operator = OperatorTable.getBinaryOperator(getComparisonToken());
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveEqualsIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveEqualsIntrinsic.java
index 1a5fbefcfe4..d5f66844e1d 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveEqualsIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveEqualsIntrinsic.java
@@ -3,6 +3,7 @@ package org.jetbrains.k2js.translate.intrinsic.primitive;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.EqualsIntrinsic;
@@ -22,7 +23,7 @@ public final class PrimitiveEqualsIntrinsic extends EqualsIntrinsic {
}
@NotNull
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
assert arguments.size() == 1 : "Equals operation should have one argument";
if (isNegated()) {
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveRangeToIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveRangeToIntrinsic.java
index e8257abc7ed..3d22b008487 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveRangeToIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveRangeToIntrinsic.java
@@ -6,6 +6,7 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsNew;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
@@ -27,7 +28,7 @@ public final class PrimitiveRangeToIntrinsic implements FunctionIntrinsic {
@NotNull
@Override
- public JsExpression apply(@NotNull JsExpression rangeStart, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression rangeStart, @NotNull List arguments,
@NotNull TranslationContext context) {
assert arguments.size() == 1 : "RangeTo must have one argument.";
JsExpression rangeEnd = arguments.get(0);
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveUnaryOperationIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveUnaryOperationIntrinsic.java
index c3b586cad2e..e2bc6a372de 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveUnaryOperationIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveUnaryOperationIntrinsic.java
@@ -4,6 +4,7 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsPrefixOperation;
import com.google.dart.compiler.backend.js.ast.JsUnaryOperator;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
@@ -31,8 +32,9 @@ public final class PrimitiveUnaryOperationIntrinsic implements FunctionIntrinsic
@NotNull
@Override
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
+ assert receiver != null;
assert arguments.size() == 0 : "Unary operator should not have arguments.";
//NOTE: cannot use this for increment/decrement
return new JsPrefixOperation(operator, receiver);
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/string/LengthIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/string/LengthIntrinsic.java
index 5e731d7d76a..cf7b35dda19 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/string/LengthIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/string/LengthIntrinsic.java
@@ -5,6 +5,7 @@ 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.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
@@ -19,8 +20,9 @@ public enum LengthIntrinsic implements FunctionIntrinsic {
@NotNull
@Override
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
+ assert receiver != null;
assert arguments.isEmpty() : "Length expression must have zero arguments.";
//TODO: provide better way
JsNameRef lengthProperty = AstUtil.newQualifiedNameRef("length");
diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/tuple/TupleAccessIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/tuple/TupleAccessIntrinsic.java
index afb08b5dee3..29c51a818cf 100644
--- a/translator/src/org/jetbrains/k2js/translate/intrinsic/tuple/TupleAccessIntrinsic.java
+++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/tuple/TupleAccessIntrinsic.java
@@ -3,6 +3,7 @@ package org.jetbrains.k2js.translate.intrinsic.tuple;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
@@ -21,7 +22,7 @@ public final class TupleAccessIntrinsic implements FunctionIntrinsic {
@NotNull
@Override
- public JsExpression apply(@NotNull JsExpression receiver, @NotNull List arguments,
+ public JsExpression apply(@Nullable JsExpression receiver, @NotNull List arguments,
@NotNull TranslationContext context) {
assert arguments.isEmpty() : "Tuple access expression should not have any arguments.";
return AstUtil.newArrayAccess(receiver, context.program().getNumberLiteral(elementIndex));
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java
index 2605dbdd24e..009d92fcb9a 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java
@@ -296,7 +296,6 @@ public final class CallTranslator extends AbstractTranslator {
FunctionIntrinsic functionIntrinsic =
context().intrinsics().getFunctionIntrinsic((FunctionDescriptor) descriptor);
JsExpression receiverExpression = thisObject();
- assert receiverExpression != null : "Intrinsic function should have a receiver.";
return functionIntrinsic.apply(receiverExpression, arguments, context());
}