Exemple #1
0
        private static object TryBind(CallableMember member, object receiver)
        {
            Contract.Requires(member != null && receiver != null);

            var memberType = member.GetType();
            var method     = memberType.GetMethod("Bind");     // this method only exists on CallableMember<T> but not on CallableMember

            return(method.Invoke(member, new[] { receiver })); // returns CallableValue<T>
        }
Exemple #2
0
 private static string RenderCallableSignature(CallableMember cm)
 {
     if (cm.MaxArity == short.MaxValue)
     {
         return(cm.Rest ? "...args" : "args[]");
     }
     else
     {
         return(string.Join(", ", Enumerable
                            .Range(0, cm.MaxArity)
                            .Select(idx => Invariant(
                                        "{0}arg{1}{2}",
                                        idx == cm.MaxArity - 1 && cm.Rest ? "..." : string.Empty,
                                        idx,
                                        idx >= cm.MinArity ? "?" : string.Empty))));
     }
 }
Exemple #3
0
        private object TryBind(CallableMember member, object receiver)
        {
            Contract.Requires(member != null && receiver != null);

            try
            {
                var memberType = member.GetType();
                var method     = memberType.GetMethod("Bind");     // this method only exists on CallableMember<T> but not on CallableMember
                return(method.Invoke(member, new[] { receiver })); // returns CallableValue<T>
            }
            catch (Exception e)
            {
                // should not happen, because all our CallableMember objects are also CallableMember<T>,
                // and the only client of this method ('GetAmbientProperties') ensures that 'receiver' is of type T.
                m_state.Logger.ReportDebuggerRendererFailedToBindCallableMember(m_state.LoggingContext, member.GetType().FullName, receiver.GetType().FullName, e.GetLogEventMessage());
                return(null);
            }
        }
 /// <summary>
 /// Creates member function instance from delegate <paramref name="function"/>.
 /// </summary>
 public CallableMember <T> Create <T>(SymbolAtom namespaceName, SymbolAtom name, CallableMemberSignature0 <T> function)
 => CallableMember.Create <T>(namespaceName, name, function, StringTable);
 /// <summary>
 /// Creates member function instance from delegate <paramref name="function"/>.
 /// </summary>
 public CallableMember <T> CreateN <T>(SymbolAtom namespaceName, SymbolAtom name, CallableMemberSignatureN <T> function, short minArity, short maxArity)
 => CallableMember.CreateN <T>(namespaceName, name, function, StringTable, minArity, maxArity);
 /// <summary>
 /// Creates member function instance from delegate <paramref name="function"/>.
 /// </summary>
 public CallableMember <T> Create <T>(SymbolAtom namespaceName, SymbolAtom name, CallableMemberSignature2 <T> function, short requiredNumberOfArguments = 2)
 => CallableMember.Create <T>(namespaceName, name, function, StringTable, requiredNumberOfArguments);
 /// <summary>
 /// Creates member function instance from delegate <paramref name="function"/>.
 /// </summary>
 public CallableMember <T> Create <T>(SymbolAtom namespaceName, SymbolAtom name, CallableMemberSignature1 <T> function, bool rest = false, short minArity = 1)
 => CallableMember.Create <T>(namespaceName, name, function, StringTable, rest, minArity);