/// <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); }
/// <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; } }