Beispiel #1
0
        public PhpInvokeBinderKey(string methodName, int genericParamsCount, int paramsCount, DTypeDesc callerClassContext, Type returnType)
        {
            this.methodName           = methodName;
            this.genericArgumentCount = genericParamsCount;
            this.argumentCount        = paramsCount;
            this.callerClassContext   = callerClassContext;
            this.returnType           = returnType;


            StringBuilder sb = new StringBuilder((methodName != null ? methodName.Length : 0) + returnType.Name + 16);

            sb.Append(methodName);
            sb.Append("|");
            sb.Append(argumentCount);
            sb.Append("|");
            sb.Append(genericArgumentCount);
            sb.Append("|");
            sb.Append(returnType.Name);
            sb.Append("|");

            if (callerClassContext != null)
            {
                sb.Append(callerClassContext.GetHashCode());
            }

            stringKey = sb.ToString();
        }
Beispiel #2
0
        public static CallSiteBinder /*!*/ GetProperty(string fieldName, DTypeDesc classContext, bool issetSemantics, Type /*!*/ returnType)
        {
            // the binder cache key
            string key = string.Format("{0}'{1}'{2}'{3}",
                                       fieldName ?? "$",
                                       (classContext != null) ? (classContext.GetHashCode().ToString()) : string.Empty,
                                       issetSemantics ? "1" : "0",
                                       returnType.FullName
                                       );

            lock (getMemberBinders)
            {
                PhpGetMemberBinder binder;
                if (!getMemberBinders.TryGetValue(key, out binder))
                {
                    getMemberBinders[key] = binder = new PhpGetMemberBinder(fieldName, classContext, issetSemantics, returnType);
                }

                return(binder);
            }

            throw new NotImplementedException();
        }
Beispiel #3
0
        public static CallSiteBinder/*!*/GetProperty(string fieldName, DTypeDesc classContext, bool issetSemantics, Type/*!*/returnType)
        {
            // the binder cache key
            string key = string.Format("{0}'{1}'{2}'{3}",
                fieldName ?? "$",
                (classContext != null) ? (classContext.GetHashCode().ToString()) : string.Empty,
                issetSemantics ? "1" : "0",
                returnType.FullName
                );

            lock (getMemberBinders)
            {
                PhpGetMemberBinder binder;
                if (!getMemberBinders.TryGetValue(key, out binder))
                    getMemberBinders[key] = binder = new PhpGetMemberBinder(fieldName, classContext, issetSemantics, returnType);
                
                return binder;
            }
            
            throw new NotImplementedException();
        }