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); }
public override void VisitPropertyIndexerExpression(IPropertyIndexerExpression value) { VisitExpression(value.Target); _formatter.Write("["); VisitExpressionCollection(value.Indices, true); _formatter.Write("]"); }
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(")"); } }
public virtual void VisitPropertyIndexerExpression(IPropertyIndexerExpression value) { VisitExpressionCollection(value.Indices); VisitExpression(value.Target); }
//=========================================================== // 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(")"); }
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; }