public override MemberExpr ResolveMemberAccess(ResolveContext ec, Expression left, Location loc, SimpleName original) { // // If the event is local to this class, we transform ourselves into a FieldExpr // if (spec.DeclaringType == ec.CurrentType || TypeManager.IsNestedChildOf(ec.CurrentType, spec.DeclaringType)) { // TODO: Breaks dynamic binder as currect context fields are imported and not compiled EventField mi = spec.MemberDefinition as EventField; if (mi != null && mi.HasBackingField) { mi.SetIsUsed (); if (!ec.IsObsolete) mi.CheckObsoleteness (loc); if ((mi.ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN)) != 0 && !ec.HasSet (ResolveContext.Options.CompoundAssignmentScope)) Error_AssignmentEventOnly (ec); FieldExpr ml = new FieldExpr (mi.BackingField, loc); InstanceExpression = null; return ml.ResolveMemberAccess (ec, left, loc, original); } } if (left is This && !ec.HasSet (ResolveContext.Options.CompoundAssignmentScope)) Error_AssignmentEventOnly (ec); return base.ResolveMemberAccess (ec, left, loc, original); }
public override MemberExpr ResolveMemberAccess (EmitContext ec, Expression left, Location loc, SimpleName original) { // // If the event is local to this class, we transform ourselves into a FieldExpr // if (EventInfo.DeclaringType == ec.ContainerType || TypeManager.IsNestedChildOf(ec.ContainerType, EventInfo.DeclaringType)) { EventField mi = TypeManager.GetEventField (EventInfo); if (mi != null) { if (!ec.IsInObsoleteScope) mi.CheckObsoleteness (loc); if ((mi.ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN)) != 0 && !ec.IsInCompoundAssignment) Error_AssignmentEventOnly (); FieldExpr ml = new FieldExpr (mi.FieldBuilder, loc); InstanceExpression = null; return ml.ResolveMemberAccess (ec, left, loc, original); } } if (left is This && !ec.IsInCompoundAssignment) Error_AssignmentEventOnly (); return base.ResolveMemberAccess (ec, left, loc, original); }