public override bool Equals(object obj)
        {
            if (this == obj)
            {
                return(true);
            }

            IPropertyIndexerExpression expression = obj as IPropertyIndexerExpression;

            if (expression == null ||
                (!Target.Equals(expression.Target)) ||
                Indices.Count != expression.Indices.Count)
            {
                return(false);
            }

            for (int i = 0; i < Indices.Count; i++)
            {
                if (!(Indices[i].Equals(expression.Indices[i])))
                {
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 2
0
 public override void VisitPropertyIndexerExpression(IPropertyIndexerExpression value)
 {
     VisitExpression(value.Target);
     _formatter.Write("[");
     VisitExpressionCollection(value.Indices, true);
     _formatter.Write("]");
 }
Exemplo n.º 3
0
        public static void WriteExpression(LanguageWriter w, IExpression exp, bool paren)
        {
            if (paren)
            {
                w.Write("(");
            }
            switch (GetExpressionType(exp))
            {
            case ExpressionType.AddressDereference:
                WriteAddressDereference(w, (IAddressDereferenceExpression)exp);
                break;

            case ExpressionType.AddressOf:
                w.Write("&");
                WriteExpression(w, ((IAddressOfExpression)exp).Expression, false);
                break;

            case ExpressionType.AddressOut:                                     // 引数 out 渡し
                WriteExpression(w, ((IAddressOutExpression)exp).Expression, false);
                break;

            case ExpressionType.AddressReference:                       // 引数 ref 渡し
                WriteExpression(w, ((IAddressReferenceExpression)exp).Expression, false);
                break;

            case ExpressionType.ArgumentList:
                w.WriteKeyword("__arglist");
                break;

            case ExpressionType.ArgumentReference:
                w.WriteParameterReference(((IArgumentReferenceExpression)exp).Parameter);
                break;

            case ExpressionType.ArrayCreate:
                WriteArrayCreate(w, (IArrayCreateExpression)exp);
                break;

            case ExpressionType.ArrayIndexer:
                WriteArrayIndexerExpression(w, (IArrayIndexerExpression)exp);
                break;

            case ExpressionType.Assign:
                WriteAssign(w, (IAssignExpression)exp);
                break;

            case ExpressionType.BaseReference:
                w.baseType.WriteName(w);
                break;

            case ExpressionType.Binary:
                WriteBinary(w, (IBinaryExpression)exp);
                break;

            case ExpressionType.Block:
                WriteBlock(w, (IBlockExpression)exp);
                break;

            case ExpressionType.CanCast:
                WriteCanCast(w, (ICanCastExpression)exp);
                break;

            case ExpressionType.Cast:
                WriteCast(w, (ICastExpression)exp);
                break;

            case ExpressionType.Condition:
                WriteCondition(w, (IConditionExpression)exp);
                break;

            case ExpressionType.DelegateCreate:
                WriteDelegateCreate(w, (IDelegateCreateExpression)exp);
                break;

            case ExpressionType.Literal:
                w.WriteAsLiteral(((ILiteralExpression)exp).Value);
                break;

            case ExpressionType.MethodInvoke:
                WriteMethodInvoke(w, (IMethodInvokeExpression)exp);
                break;

            case ExpressionType.ObjectCreate:
                WriteObjectCreate(w, (IObjectCreateExpression)exp);
                break;

            case ExpressionType.SizeOf:
                w.WriteKeyword("sizeof");
                w.Write("(");
                new TypeRef(((ISizeOfExpression)exp).Type).WriteName(w);
                w.Write(")");
                break;

            case ExpressionType.Snippet:
                w.WriteAsLiteral(((ISnippetExpression)exp).Value);
                break;

            case ExpressionType.ThisReference:
                w.WriteKeyword("this");
                break;

            case ExpressionType.TryCast:
                WriteTryCast(w, (ITryCastExpression)exp);
                break;

            case ExpressionType.TypeOf:
                new TypeRef(((ITypeOfExpression)exp).Type).WriteName(w);
                w.Write("::");
                w.WriteKeyword("typeid");
                break;

            case ExpressionType.TypeReference:
                WriteTypeReference(w, (ITypeReferenceExpression)exp);
                break;

            case ExpressionType.Unary:
                WriteUnary(w, (IUnaryExpression)exp);
                break;

            case ExpressionType.VariableDeclaration:
                WriteVariableDeclaration(w, ((IVariableDeclarationExpression)exp).Variable);
                break;

            case ExpressionType.VariableReference:
                w.WriteVariableReference(((IVariableReferenceExpression)exp).Variable);
                break;

            case ExpressionType.MemberInitializer:                     // 属性の初期化の際のメンバ指定
                WriteMemberInitializer(w, (IMemberInitializerExpression)exp);
                break;

            //---------------------------------------------------
            // メンバアクセス
            //---------------------------------------------------
            case ExpressionType.EventReference:
                WriteEventReference(w, (IEventReferenceExpression)exp);
                break;

            case ExpressionType.FieldReference:
                IFieldReferenceExpression exp_fld = (IFieldReferenceExpression)exp;
                WriteMemberAccess(w, exp_fld.Target);
                w.WriteFieldReference(exp_fld.Field);
                break;

            case ExpressionType.PropertyReference:
                WritePropertyReference(w, (IPropertyReferenceExpression)exp);
                break;

            case ExpressionType.PropertyIndexer:
                IPropertyIndexerExpression exp_pind = (IPropertyIndexerExpression)exp;
                WritePropertyReference(w, exp_pind.Target);
                w.Write("[");
                w.WriteExpressionCollection(exp_pind.Indices);
                w.Write("]");
                break;

            case ExpressionType.MethodReference:
                IMethodReferenceExpression exp_meth = (IMethodReferenceExpression)exp;
                WriteMemberAccess(w, exp_meth.Target);
                w.WriteMethodReference(exp_meth.Method);
                break;

            //---------------------------------------------------
            //	代替
            //---------------------------------------------------
            case ExpressionType.StackAlloc:
                WriteStackAllocate(w, (IStackAllocateExpression)exp);
                break;

            case ExpressionType.AnonymousMethod:
                WriteAnonymousMethod(w, (IAnonymousMethodExpression)exp);
                break;

            //---------------------------------------------------
            //	以下未対応
            //---------------------------------------------------
            case ExpressionType.NullCoalescing:
                WriteBinaryNullCoalescing(w, (INullCoalescingExpression)exp);
                break;

            case ExpressionType.DelegateInvoke:
            case ExpressionType.FieldOf:
            case ExpressionType.GenericDefault:
            case ExpressionType.Lambda:
            case ExpressionType.MethodOf:
            case ExpressionType.Query:
                goto default;

            case ExpressionType.TypedReferenceCreate:
            case ExpressionType.TypeOfTypedReference:
            case ExpressionType.ValueOfTypedReference:
                //throw new System.NotImplementedException("未だ実装していません\r\n");
                goto default;

            case ExpressionType.Unknown:
            default:
                ThrowUnknownExpression(exp);
                break;
            }
            if (paren)
            {
                w.Write(")");
            }
        }
Exemplo n.º 4
0
 public virtual void VisitPropertyIndexerExpression(IPropertyIndexerExpression value)
 {
     VisitExpressionCollection(value.Indices);
     VisitExpression(value.Target);
 }
Exemplo n.º 5
0
            //===========================================================
            //		Expression 分岐
            //===========================================================
            public virtual void WriteExpression(IExpression expression)
            {
                if (expression == null)
                {
                    return;
                }

                mwg.Reflector.CppCli.ExpressionWriter.WriteExpression(this, expression, false);

#if FALSE
#pragma warning disable 612

                IMemberInitializerExpression expression3 = expression as IMemberInitializerExpression;
                if (expression3 != null)
                {
                    this.WriteMemberInitializerExpression(expression3);
                    return;
                }

                IAddressOutExpression expression27 = expression as IAddressOutExpression;
                if (expression27 != null)
                {
                    this.WriteAddressOutExpression(expression27);
                    return;
                }

                IAddressReferenceExpression expression26 = expression as IAddressReferenceExpression;
                if (expression26 != null)
                {
                    this.WriteAddressReferenceExpression(expression26);
                    return;
                }

                IDelegateCreateExpression iDelegateCreateExpression = expression as IDelegateCreateExpression;
                if (iDelegateCreateExpression != null)
                {
                    this.WriteDelegateCreateExpression(iDelegateCreateExpression);
                    return;
                }

                IMethodInvokeExpression iMethodInvokeExpression = expression as IMethodInvokeExpression;
                if (iMethodInvokeExpression != null)
                {
                    this.WriteMethodInvokeExpression(iMethodInvokeExpression);
                    return;
                }

                IVariableDeclarationExpression expression15 = expression as IVariableDeclarationExpression;
                if (expression15 != null)
                {
                    this.WriteVariableDeclaration(expression15.Variable);
                    return;
                }

                ITypeOfExpression iTypeOfExpression = expression as ITypeOfExpression;
                if (iTypeOfExpression != null)
                {
                    this.WriteTypeOfExpression(iTypeOfExpression);
                    return;
                }

                ISnippetExpression iSnippetExpression = expression as ISnippetExpression;
                if (iSnippetExpression != null)
                {
                    this.WriteSnippetExpression(iSnippetExpression);
                    return;
                }

                IUnaryExpression iUnaryExpression = expression as IUnaryExpression;
                if (iUnaryExpression != null)
                {
                    this.WriteUnaryExpression(iUnaryExpression);
                    return;
                }

                IObjectCreateExpression iObjectCreateExpression = expression as IObjectCreateExpression;
                if (iObjectCreateExpression != null)
                {
                    this.WriteObjectCreateExpression(iObjectCreateExpression);
                    return;
                }

                IVariableReferenceExpression iVariableReferenceExpression = expression as IVariableReferenceExpression;
                if (iVariableReferenceExpression != null)
                {
                    this.WriteVariableReferenceExpression(iVariableReferenceExpression);
                    return;
                }

                IThisReferenceExpression expression12 = expression as IThisReferenceExpression;
                if (expression12 != null)
                {
                    this.WriteThisReferenceExpression(expression12);
                    return;
                }

                ITryCastExpression iTryCastExpression = expression as ITryCastExpression;
                if (iTryCastExpression != null)
                {
                    this.WriteTryCastExpression(iTryCastExpression);
                    return;
                }

                IConditionExpression expression9 = expression as IConditionExpression;
                if (expression9 != null)
                {
                    this.WriteConditionExpression(expression9);
                    return;
                }

                IFieldReferenceExpression iFieldReferenceExpression = expression as IFieldReferenceExpression;
                if (iFieldReferenceExpression != null)
                {
                    this.WriteFieldReferenceExpression(iFieldReferenceExpression);
                    return;
                }

                IPropertyIndexerExpression iPropertyIndexerExpression = expression as IPropertyIndexerExpression;
                if (iPropertyIndexerExpression != null)
                {
                    this.WritePropertyIndexerExpression(iPropertyIndexerExpression);
                    return;
                }

                ITypeReferenceExpression iTypeReferenceExpression = expression as ITypeReferenceExpression;
                if (iTypeReferenceExpression != null)
                {
                    this.WriteTypeReferenceExpression(iTypeReferenceExpression);
                    return;
                }

                IMethodReferenceExpression iMethodReferenceExpression = expression as IMethodReferenceExpression;
                if (iMethodReferenceExpression != null)
                {
                    this.WriteMethodReferenceExpression(iMethodReferenceExpression);
                    return;
                }

                IPropertyReferenceExpression iPropertyReferenceExpression = expression as IPropertyReferenceExpression;
                if (iPropertyReferenceExpression != null)
                {
                    this.WritePropertyReferenceExpression(iPropertyReferenceExpression);
                    return;
                }

                ICastExpression expression5 = expression as ICastExpression;
                if (expression5 != null)
                {
                    this.WriteCastExpression(expression5);
                    return;
                }

                ICanCastExpression iCanCastExpression = expression as ICanCastExpression;
                if (iCanCastExpression != null)
                {
                    this.WriteCanCastExpression(iCanCastExpression);
                    return;
                }

                ICastExpression iCastExpression = expression as ICastExpression;
                if (iCastExpression != null)
                {
                    this.WriteCastExpression(iCastExpression);
                    return;
                }

                ILiteralExpression literalExpression = expression as ILiteralExpression;
                if (literalExpression != null)
                {
                    this.WriteLiteralExpression(literalExpression);
                    return;
                }

                IBinaryExpression iBinaryExpression = expression as IBinaryExpression;
                if (iBinaryExpression != null)
                {
                    mwg.Reflector.CppCli.ExpressionWriter.WriteExpression(this, expression, true);
                    //this.WriteBinaryExpression(iBinaryExpression);
                    return;
                }

                IArrayIndexerExpression expression30 = expression as IArrayIndexerExpression;
                if (expression30 != null)
                {
                    this.WriteArrayIndexerExpression(expression30);
                    return;
                }

                IAddressDereferenceExpression expression29 = expression as IAddressDereferenceExpression;
                if (expression29 != null)
                {
                    this.WriteAddressDereferenceExpression(expression29);
                    return;
                }

                IAddressOfExpression expression28 = expression as IAddressOfExpression;
                if (expression28 != null)
                {
                    this.WriteAddressOfExpression(expression28);
                    return;
                }

                IArgumentListExpression expression25 = expression as IArgumentListExpression;
                if (expression25 != null)
                {
                    this.WriteArgumentListExpression(expression25);
                    return;
                }

                IBaseReferenceExpression iBaseReferenceExpression = expression as IBaseReferenceExpression;
                if (iBaseReferenceExpression != null)
                {
                    this.WriteBaseReferenceExpression(iBaseReferenceExpression);
                    return;
                }

                IArgumentReferenceExpression expression13 = expression as IArgumentReferenceExpression;
                if (expression13 != null)
                {
                    this.WriteArgumentReferenceExpression(expression13);
                    return;
                }

                IArrayCreateExpression expression10 = expression as IArrayCreateExpression;
                if (expression10 != null)
                {
                    this.WriteArrayCreateExpression(expression10);
                    return;
                }

                IAssignExpression iAssignExpression = expression as IAssignExpression;
                if (iAssignExpression != null)
                {
                    this.WriteAssignExpression(iAssignExpression);
                    return;
                }

                IBlockExpression expression2 = expression as IBlockExpression;
                if (expression2 != null)
                {
                    this.WriteBlockExpression(expression2);
                    return;
                }
#pragma warning restore 612

                this.Write(expression.ToString());
#endif
            }
            private void WritePropertyIndexerExpression(IPropertyIndexerExpression expression, IFormatter formatter)
            {
                this.WriteTargetExpression(expression.Target, formatter);
                formatter.Write("(");

                bool first = true;

                foreach (IExpression index in expression.Indices)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        formatter.Write(", ");
                    }

                    this.WriteExpression(index, formatter);
                }

                formatter.Write(")");
            }
Exemplo n.º 7
0
 public virtual void VisitPropertyIndexerExpression(IPropertyIndexerExpression value)
 {
     this.VisitExpressionCollection(value.Indices);
     this.VisitExpression(value.Target);
 }
 public virtual IExpression TransformPropertyIndexerExpression(IPropertyIndexerExpression value)
 {
     this.InsituTransformExpressionCollection(value.Indices);
     value.Target = (IPropertyReferenceExpression)this.TransformExpression(value.Target);
     return value;
 }