} // func GetInvokeBinder internal CallSiteBinder GetInvokeMemberBinder(string sMember, CallInfo callInfo) { CallSiteBinder b; MemberCallInfo mci = new MemberCallInfo(sMember, callInfo); lock (invokeMemberBinder) if (!invokeMemberBinder.TryGetValue(mci, out b)) { b = invokeMemberBinder[mci] = new LuaInvokeMemberBinder(this, sMember, callInfo); } return(b); } // func GetInvokeMemberBinder
internal static MemberSetter Setter(Type type, string name, MemberTypes memberType, FasterflectFlags bindingFlags, MemberInfo memberInfo) { MemberCallInfo info = new MemberCallInfo(type, name, memberType, bindingFlags); MemberSetter value = Setters.Get(info); if (value != null) { return(value); } memberInfo = memberInfo ?? ReflectLookup.Member(info.TargetType, info.MemberName, info.BindingFlags); if (memberInfo == null) { if (memberType == MemberTypes.Field) { throw new MissingFieldException(info.TargetType.FullName, info.MemberName); } throw new MissingMemberException(info.TargetType.FullName, info.MemberName); } info.MemberType = memberInfo.MemberType; value = (MemberSetter) new MemberSetEmitter(memberInfo).GetDelegate(); Setters.Insert(info, value); return(value); }
} // func GetHashCode public override bool Equals(object obj) { MemberCallInfo mci = obj as MemberCallInfo; return(mci != null && mci.sMember == sMember && mci.ci.Equals(ci)); } // func Equals