From 11b050b4935ca989232f9907ea137c13b845f293 Mon Sep 17 00:00:00 2001 From: iSazonov Date: Mon, 9 Apr 2018 18:55:14 +0500 Subject: [PATCH 1/2] Make a temporary array static to exclude extra allocations --- .../engine/lang/parserutils.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/System.Management.Automation/engine/lang/parserutils.cs b/src/System.Management.Automation/engine/lang/parserutils.cs index 300d39a5afc..074c2909450 100644 --- a/src/System.Management.Automation/engine/lang/parserutils.cs +++ b/src/System.Management.Automation/engine/lang/parserutils.cs @@ -529,15 +529,6 @@ private static IEnumerable enumerateContent(ExecutionContext context, IS private static RegexOptions parseRegexOptions(SplitOptions options) { - int[][] map = { - new int[] { (int)SplitOptions.CultureInvariant, (int)RegexOptions.CultureInvariant }, - new int[] { (int)SplitOptions.IgnorePatternWhitespace, (int)RegexOptions.IgnorePatternWhitespace }, - new int[] { (int)SplitOptions.Multiline, (int)RegexOptions.Multiline }, - new int[] { (int)SplitOptions.Singleline, (int)RegexOptions.Singleline }, - new int[] { (int)SplitOptions.IgnoreCase, (int)RegexOptions.IgnoreCase }, - new int[] { (int)SplitOptions.ExplicitCapture, (int)RegexOptions.ExplicitCapture }, - }; - RegexOptions result = RegexOptions.None; foreach (int[] entry in map) { @@ -550,6 +541,15 @@ private static RegexOptions parseRegexOptions(SplitOptions options) return result; } + private static readonly int[][] map = { + new int[] { (int)SplitOptions.CultureInvariant, (int)RegexOptions.CultureInvariant }, + new int[] { (int)SplitOptions.IgnorePatternWhitespace, (int)RegexOptions.IgnorePatternWhitespace }, + new int[] { (int)SplitOptions.Multiline, (int)RegexOptions.Multiline }, + new int[] { (int)SplitOptions.Singleline, (int)RegexOptions.Singleline }, + new int[] { (int)SplitOptions.IgnoreCase, (int)RegexOptions.IgnoreCase }, + new int[] { (int)SplitOptions.ExplicitCapture, (int)RegexOptions.ExplicitCapture }, + }; + internal static object UnarySplitOperator(ExecutionContext context, IScriptExtent errorPosition, object lval) { // unary split does a little extra processing to make From 20866a135d128ba018d81c9c7cc36ad97b57a0bf Mon Sep 17 00:00:00 2001 From: iSazonov Date: Tue, 10 Apr 2018 10:03:08 +0500 Subject: [PATCH 2/2] Replace array with 6 if statements --- .../engine/lang/parserutils.cs | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/System.Management.Automation/engine/lang/parserutils.cs b/src/System.Management.Automation/engine/lang/parserutils.cs index 074c2909450..7d5e7f0889a 100644 --- a/src/System.Management.Automation/engine/lang/parserutils.cs +++ b/src/System.Management.Automation/engine/lang/parserutils.cs @@ -530,26 +530,34 @@ private static IEnumerable enumerateContent(ExecutionContext context, IS private static RegexOptions parseRegexOptions(SplitOptions options) { RegexOptions result = RegexOptions.None; - foreach (int[] entry in map) + if ((options & SplitOptions.CultureInvariant) != 0) { - if (((int)options & entry[0]) != 0) - { - result |= (RegexOptions)entry[1]; - } + result |= RegexOptions.CultureInvariant; + } + if ((options & SplitOptions.IgnorePatternWhitespace) != 0) + { + result |= RegexOptions.IgnorePatternWhitespace; + } + if ((options & SplitOptions.Multiline) != 0) + { + result |= RegexOptions.Multiline; + } + if ((options & SplitOptions.Singleline) != 0) + { + result |= RegexOptions.Singleline; + } + if ((options & SplitOptions.IgnoreCase) != 0) + { + result |= RegexOptions.IgnoreCase; + } + if ((options & SplitOptions.ExplicitCapture) != 0) + { + result |= RegexOptions.ExplicitCapture; } return result; } - private static readonly int[][] map = { - new int[] { (int)SplitOptions.CultureInvariant, (int)RegexOptions.CultureInvariant }, - new int[] { (int)SplitOptions.IgnorePatternWhitespace, (int)RegexOptions.IgnorePatternWhitespace }, - new int[] { (int)SplitOptions.Multiline, (int)RegexOptions.Multiline }, - new int[] { (int)SplitOptions.Singleline, (int)RegexOptions.Singleline }, - new int[] { (int)SplitOptions.IgnoreCase, (int)RegexOptions.IgnoreCase }, - new int[] { (int)SplitOptions.ExplicitCapture, (int)RegexOptions.ExplicitCapture }, - }; - internal static object UnarySplitOperator(ExecutionContext context, IScriptExtent errorPosition, object lval) { // unary split does a little extra processing to make