Example #1
0
		internal static int AddOverload(List<Overload>/*!!*/ overloads, MethodInfo/*!*/ realOverload, FunctionImplOptions options)
		{
			Overload overload = Overload.Create(realOverload, options);
			if (overload == null) return DRoutine.InvalidOverloadIndex;

			int i = 0;
			while (i < overloads.Count && overloads[i].ParamCount < overload.ParamCount) i++;

			overloads.Insert(i, overload);

			return i;
		}
Example #2
0
		/// <summary>
		/// Used by full-reflect.
		/// </summary>
		public PhpLibraryFunction(PhpLibraryFunctionDesc/*!*/ functionDesc, Name name, FunctionImplOptions options,
			int estimatedOverloadCount)
			: base(functionDesc)
		{
			this.name = name;
			this.options = options;
			this.overloads = new List<Overload>(estimatedOverloadCount);
		}
Example #3
0
		/// <summary>
		/// Creates an instance of the <see cref="ImplementsFunctionAttribute"/> attribute.
		/// </summary>
		/// <param name="name">The name of the PHP function implemented by marked method.</param>
		/// <param name="options">Options.</param>
		public ImplementsFunctionAttribute(string name, FunctionImplOptions options)
		{
			this.name = name;
			this.options = options;
		}
Example #4
0
			/// <summary>
			/// Creates an overload of the function. May return <B>null</B> on error.
			/// </summary>
			internal static Overload Create(MethodInfo/*!*/ realOverload, FunctionImplOptions options)
			{
				ParameterInfo[] parameters = realOverload.GetParameters();

				OverloadFlags flags = OverloadFlags.None;
				short param_count = (short)parameters.Length;

                if (parameters.Length >= 1 && parameters[0].ParameterType == Types.ScriptContext[0])
                {
                    flags |= OverloadFlags.NeedsScriptContext;
                    param_count--;
                }

				if (parameters.Length > 0 && parameters[parameters.Length - 1].IsDefined(typeof(ParamArrayAttribute), false))
				{
					flags |= OverloadFlags.IsVararg;
					param_count--;
				}

				if ((options & FunctionImplOptions.NeedsThisReference) != 0)
				{
					param_count--;
					flags |= OverloadFlags.NeedsThisReference;
				}

				if ((options & FunctionImplOptions.NeedsVariables) != 0)
				{
					param_count--;
					flags |= OverloadFlags.NeedsVariables;
				}

				if ((options & FunctionImplOptions.NeedsNamingContext) != 0)
				{
					param_count--;
					flags |= OverloadFlags.NeedsNamingContext;
				}

                if ((options & FunctionImplOptions.NeedsClassContext) != 0)
                {
                    param_count--;
                    flags |= OverloadFlags.NeedsClassContext;
                }

                if ((options & FunctionImplOptions.NotSupported) != 0)
                {
                    flags |= OverloadFlags.NotSupported;
                }

				return new Overload(realOverload, parameters, param_count, flags);
			}
Example #5
0
 /// <summary>
 /// Creates an instance of the <see cref="ImplementsFunctionAttribute"/> attribute.
 /// </summary>
 /// <param name="name">The name of the PHP function implemented by marked method.</param>
 /// <param name="options">Options.</param>
 public ImplementsFunctionAttribute(string name, FunctionImplOptions options)
 {
     this.name    = name;
     this.options = options;
 }