private static object SplitOperatorImpl(System.Management.Automation.ExecutionContext context, IScriptExtent errorPosition, object lval, object rval, SplitImplOptions implOptions, bool ignoreCase) { IEnumerable <string> content = enumerateContent(context, errorPosition, implOptions, lval); ScriptBlock predicate = null; string separatorPattern = null; int limit = 0; SplitOptions options = 0; object[] objArray = unfoldTuple(context, errorPosition, rval); if (objArray.Length < 1) { throw InterpreterError.NewInterpreterException(rval, typeof(RuntimeException), errorPosition, "BadOperatorArgument", ParserStrings.BadOperatorArgument, new object[] { "-split", rval }); } object obj1 = objArray[0]; predicate = objArray[0] as ScriptBlock; if (predicate == null) { separatorPattern = PSObject.ToStringParser(context, objArray[0]); } if (objArray.Length >= 2) { limit = FixNum(objArray[1], errorPosition); } if ((objArray.Length >= 3) && (objArray[2] != null)) { string str2 = objArray[2] as string; if ((str2 == null) || !string.IsNullOrEmpty(str2)) { options = ConvertTo <SplitOptions>(objArray[2], errorPosition); if (predicate != null) { throw InterpreterError.NewInterpreterException(null, typeof(ParseException), errorPosition, "InvalidSplitOptionWithPredicate", ParserStrings.InvalidSplitOptionWithPredicate, new object[0]); } if (ignoreCase && ((options & SplitOptions.IgnoreCase) == 0)) { options |= SplitOptions.IgnoreCase; } } } else if (ignoreCase) { options |= SplitOptions.IgnoreCase; } if (predicate != null) { return(SplitWithPredicate(context, errorPosition, content, predicate, limit)); } return(SplitWithPattern(context, errorPosition, content, separatorPattern, limit, options)); }
private static IEnumerable <string> enumerateContent(System.Management.Automation.ExecutionContext context, IScriptExtent errorPosition, SplitImplOptions implOptions, object tuple) { IEnumerator enumerator = LanguagePrimitives.GetEnumerator(tuple); if (enumerator == null) { enumerator = new object[] { tuple }.GetEnumerator(); } while (true) { if (!MoveNext(context, errorPosition, enumerator)) { yield break; } string iteratorVariable1 = PSObject.ToStringParser(context, enumerator.Current); if ((implOptions & SplitImplOptions.TrimContent) != SplitImplOptions.None) { iteratorVariable1 = iteratorVariable1.Trim(); } yield return(iteratorVariable1); } }