/// <summary>
        /// Gets additional flags of the caller routine.
        /// </summary>
        public static RoutineFlags InvocationFlags(this IPhpRoutineSymbol routine)
        {
            RoutineFlags f = RoutineFlags.None;

            var ps = routine.Parameters;

            foreach (var p in ps)
            {
                if (p.IsImplicitlyDeclared)
                {
                    if (SpecialParameterSymbol.IsLocalsParameter(p))
                    {
                        f |= RoutineFlags.UsesLocals;
                    }
                    else if (SpecialParameterSymbol.IsCallerArgsParameter(p))
                    {
                        f |= RoutineFlags.UsesArgs;
                    }
                    else if (SpecialParameterSymbol.IsCallerStaticClassParameter(p))
                    {
                        f |= RoutineFlags.UsesLateStatic;
                    }
                }
                else
                {
                    break;
                }
            }

            return(f);
        }
示例#2
0
        /// <summary>
        /// Gets additional flags of the caller routine.
        /// </summary>
        public static RoutineFlags InvocationFlags(this IPhpRoutineSymbol routine)
        {
            RoutineFlags f = RoutineFlags.None;

            var ps = routine.Parameters;

            foreach (var p in ps)
            {
                if (p.IsImplicitlyDeclared)
                {
                    if (SpecialParameterSymbol.IsQueryValueParameter(p, out var ctor, out var container))
                    {
                        switch (container)
                        {
                        case SpecialParameterSymbol.QueryValueTypes.CallerArgs:
                            f |= RoutineFlags.UsesArgs;
                            break;

                        case SpecialParameterSymbol.QueryValueTypes.LocalVariables:
                            f |= RoutineFlags.UsesLocals;
                            break;
                        }
                    }
                    else if (SpecialParameterSymbol.IsCallerStaticClassParameter(p))
                    {
                        f |= RoutineFlags.UsesLateStatic;
                    }
                }