Inheritance: MemberSpec, IInterfaceMemberSpec
Example #1
0
 public EventExpr(EventSpec spec, Location loc)
 {
     this.spec = spec;
     this.loc = loc;
 }
		public override bool Define ()
		{
			if (!base.Define ())
				return false;

			if (!MemberType.IsDelegate) {
				Report.Error (66, Location, "`{0}': event must be of a delegate type", GetSignatureForError ());
			}

			if (!CheckBase ())
				return false;

			//
			// Now define the accessors
			//
			var AddBuilder = Add.Define (Parent);
			if (AddBuilder == null)
				return false;

			var RemoveBuilder = remove.Define (Parent);
			if (RemoveBuilder == null)
				return false;

			EventBuilder = Parent.TypeBuilder.DefineEvent (GetFullName (MemberName), EventAttributes.None, MemberType.GetMetaInfo ());
			EventBuilder.SetAddOnMethod (AddBuilder);
			EventBuilder.SetRemoveOnMethod (RemoveBuilder);

			spec = new EventSpec (Parent.Definition, this, MemberType, ModFlags, Add.Spec, remove.Spec);

			Parent.MemberCache.AddMember (this, GetFullName (MemberName), spec);
			Parent.MemberCache.AddMember (this, AddBuilder.Name, Add.Spec);
			Parent.MemberCache.AddMember (this, RemoveBuilder.Name, remove.Spec);

			return true;
		}
Example #3
0
        public override bool Define()
        {
            if (!base.Define ())
                return false;

            if (!TypeManager.IsDelegateType (MemberType)) {
                Report.Error (66, Location, "`{0}': event must be of a delegate type", GetSignatureForError ());
            }

            parameters = ParametersCompiled.CreateFullyResolved (
                new Parameter (null, "value", Parameter.Modifier.NONE, null, Location), MemberType);

            if (!CheckBase ())
                return false;

            //
            // Now define the accessors
            //
            AddBuilder = Add.Define (Parent);
            if (AddBuilder == null)
                return false;

            RemoveBuilder = Remove.Define (Parent);
            if (RemoveBuilder == null)
                return false;

            EventBuilder = Parent.TypeBuilder.DefineEvent (Name, EventAttributes.None, MemberType.GetMetaInfo ());
            EventBuilder.SetAddOnMethod (AddBuilder);
            EventBuilder.SetRemoveOnMethod (RemoveBuilder);

            var spec = new EventSpec (Parent.Definition, this, MemberType, ModFlags, Add.Spec, Remove.Spec);

            Parent.MemberCache.AddMember (this, Name, spec);
            Parent.MemberCache.AddMember (this, AddBuilder.Name, Add.Spec);
            Parent.MemberCache.AddMember (this, RemoveBuilder.Name, Remove.Spec);

            return true;
        }