Exemple #1
0
 public void VisitNode(JSIndexerExpression idx)
 {
     Visit(idx.Target);
     Output.OpenBracket();
     Visit(idx.Index);
     Output.CloseBracket();
 }
        public void VisitNode(JSIndexerExpression ie)
        {
            var indexType = ie.Index.GetActualType(TypeSystem);

            if (
                !TypeUtil.IsIntegral(indexType) &&
                IsEnumOrNullableEnum(indexType)
            ) {
                var cast = JSInvocationExpression.InvokeMethod(
                    JS.valueOf(TypeSystem.Int32), ie.Index, null, true
                );

                ie.ReplaceChild(ie.Index, cast);
            }

            VisitChildren(ie);
        }
Exemple #3
0
        public void VisitNode(JSIndexerExpression ie)
        {
            var indexType = ie.Index.GetExpectedType(TypeSystem);

            if (
                !ILBlockTranslator.IsIntegral(indexType) &&
                ILBlockTranslator.IsEnum(indexType)
            ) {
                var cast = JSInvocationExpression.InvokeMethod(
                    new JSFakeMethod("valueOf", TypeSystem.Int32, indexType), ie.Index, null, true
                );

                ie.ReplaceChild(ie.Index, cast);
            }

            VisitChildren(ie);
        }
Exemple #4
0
        public void VisitNode(JSIndexerExpression ie)
        {
            var indexType = ie.Index.GetActualType(TypeSystem);

            if (
                !TypeUtil.IsIntegral(indexType) &&
                IsEnumOrNullableEnum(indexType)
                )
            {
                var cast = JSInvocationExpression.InvokeStatic(
                    JS.Number(TypeSystem.Int32), new[] { ie.Index }, true
                    );

                ie.ReplaceChild(ie.Index, cast);
            }

            VisitChildren(ie);
        }
Exemple #5
0
        public void VisitNode(JSIndexerExpression ie)
        {
            var indexType = ie.Index.GetActualType(TypeSystem);

            if (
                !TypeUtil.IsIntegral(indexType) &&
                IsEnumOrNullableEnum(indexType)
                )
            {
                var cast = JSInvocationExpression.InvokeMethod(
                    JS.valueOf(TypeSystem.Int32), ie.Index, null, true
                    );

                ie.ReplaceChild(ie.Index, cast);
            }

            VisitChildren(ie);
        }
Exemple #6
0
        public void VisitNode(JSIndexerExpression ie)
        {
            var v            = ExtractAffectedVariable(ie.Target);
            var enclosingBoe = GetEnclosingNodes <JSBinaryOperatorExpression>((boe) => boe.Operator is JSAssignmentOperator).FirstOrDefault();

            if (
                (v != null) &&
                (enclosingBoe.Node != null) &&
                (enclosingBoe.ChildName == "Left")
                )
            {
                var parentNodeIndices = GetParentNodeIndices();

                State.SideEffects.Add(new FunctionAnalysis1stPass.SideEffect(
                                          parentNodeIndices, StatementIndex, NodeIndex, v, "element modified"
                                          ));
            }
            else
            {
                ;
            }

            VisitChildren(ie);
        }
        protected JSExpression Translate_Ldelem(ILExpression node, TypeReference elementType)
        {
            var expectedType = elementType ?? node.ExpectedType ?? node.InferredType;
            var target = TranslateNode(node.Arguments[0]);
            if (target.IsNull)
                return target;

            var indexer = TranslateNode(node.Arguments[1]);

            JSExpression result = new JSIndexerExpression(
                target, indexer,
                expectedType
            );

            if (CopyOnReturn(expectedType))
                result = JSReferenceExpression.New(result);

            return result;
        }