internal void Register(MethodGen method) { if (owner.AssemblyBuilder.EntryPoint == null && method.Name == "Main" && method.IsStatic && ( method.ParameterCount == 0 || (method.ParameterCount == 1 && method.ParameterTypes[0] == typeof(string[])))) { owner.AssemblyBuilder.SetEntryPoint(method.GetMethodBuilder()); } // match explicit interface implementations if (method.ImplementedInterface != null) { foreach (IMemberInfo mi in TypeInfo.Filter(TypeInfo.GetMethods(method.ImplementedInterface), method.Name, false, false, true)) { if (ArrayUtils.Equals(mi.ParameterTypes, method.ParameterTypes)) { DefineMethodOverride(method, (MethodInfo)mi.Member); return; } } throw new MissingMethodException(Properties.Messages.ErrMissingMethod); } methods.Add(method); }
public MethodGen RemoveMethod(string parameterName) { if (remover == null) { remover = new MethodGen(owner, "remove_" + name, attrs | MethodAttributes.SpecialName, typeof(void), 0); remover.Parameter(type, parameterName); eb.SetRemoveOnMethod(remover.GetMethodBuilder()); } return(remover); }
public MethodGen AddMethod(string parameterName) { if (adder == null) { adder = new MethodGen(owner, "add_" + name, attrs | MethodAttributes.SpecialName, typeof(void), 0); adder.Parameter(type, parameterName); eb.SetAddOnMethod(adder.GetMethodBuilder()); } return(adder); }
public MethodGen Getter() { if (getter == null) { LockSignature(); getter = new MethodGen(owner, "get_" + name, attrs | MethodAttributes.SpecialName, type, 0); getter.ImplementedInterface = interfaceType; getter.CopyParameters(indexParameters); pb.SetGetMethod(getter.GetMethodBuilder()); } return(getter); }
public MethodGen Setter() { if (setter == null) { LockSignature(); setter = new MethodGen(owner, "set_" + name, attrs | MethodAttributes.SpecialName, typeof(void), 0); setter.ImplementedInterface = interfaceType; setter.CopyParameters(indexParameters); setter.UncheckedParameter(type, "value"); pb.SetSetMethod(setter.GetMethodBuilder()); } return(setter); }
internal override void EmitGet(CodeGen g) { if (getter == null) { base.EmitGet(g); } if (indexParameters.Count != 0) { throw new InvalidOperationException(Properties.Messages.ErrMissingPropertyIndex); } if (!IsStatic && (g.Context.IsStatic || g.Context.OwnerType != owner.TypeBuilder)) { throw new InvalidOperationException(Properties.Messages.ErrInvalidPropertyContext); } g.IL.Emit(OpCodes.Ldarg_0); g.EmitCallHelper(getter.GetMethodBuilder(), null); }