delete: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/language/regexp/encoding_tags.txt;C1086571
File: encoding_tags.txt
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/language/regexp/encoding_tags.txt;C1086571  (server)    10/23/2009 5:36 PM
+++ [no target file]
@@ -1,2 +1,0 @@
-fails:Regexps with encoding modifiers supports /e (EUC encoding)
-fails:Regexps with encoding modifiers supports /u (UTF8 encoding)
===================================================================
delete: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/language/regexp/interpolation_tags.txt;C1086571
File: interpolation_tags.txt
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/language/regexp/interpolation_tags.txt;C1086571  (server)    10/23/2009 5:37 PM
+++ [no target file]
@@ -1,1 +1,0 @@
-critical:Regexps with interpolation throws NoMethodError on missing to_s
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;C1227651
File: Initializers.Generated.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;C1227651  (server)    10/23/2009 5:24 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs;PrePostMatchFix
@@ -3447,11 +3447,11 @@
             );
             
             DefineLibraryMethod(module, "post_match", 0x51, 
-                new Func<IronRuby.Runtime.RubyContext, IronRuby.Builtins.MatchData, IronRuby.Builtins.MutableString>(IronRuby.Builtins.MatchDataOps.PostMatch)
+                new Func<IronRuby.Builtins.MatchData, IronRuby.Builtins.MutableString>(IronRuby.Builtins.MatchDataOps.PostMatch)
             );
             
             DefineLibraryMethod(module, "pre_match", 0x51, 
-                new Func<IronRuby.Runtime.RubyContext, IronRuby.Builtins.MatchData, IronRuby.Builtins.MutableString>(IronRuby.Builtins.MatchDataOps.PreMatch)
+                new Func<IronRuby.Builtins.MatchData, IronRuby.Builtins.MutableString>(IronRuby.Builtins.MatchDataOps.PreMatch)
             );
             
             DefineLibraryMethod(module, "select", 0x51, 
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/MatchDataOps.cs;C1200585
File: MatchDataOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/MatchDataOps.cs;C1200585  (server)    10/23/2009 5:15 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/MatchDataOps.cs;PrePostMatchFix
@@ -97,13 +97,13 @@
         }
 
         [RubyMethod("pre_match")]
-        public static MutableString/*!*/ PreMatch(RubyContext/*!*/ context, MatchData/*!*/ self) {
-            return self.OriginalString.GetSlice(0, self.Index).TaintBy(self, context);
+        public static MutableString/*!*/ PreMatch(MatchData/*!*/ self) {
+            return self.GetPreMatch();
         }
 
         [RubyMethod("post_match")]
-        public static MutableString/*!*/ PostMatch(RubyContext/*!*/ context, MatchData/*!*/ self) {
-            return self.OriginalString.GetSlice(self.Index + self.Length).TaintBy(self, context);
+        public static MutableString/*!*/ PostMatch(MatchData/*!*/ self) {
+            return self.GetPostMatch();
         }
 
         private static RubyArray/*!*/ ReturnMatchingGroups(MatchData/*!*/ self, int groupIndex) {
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/MatchData.cs;C1200585
File: MatchData.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/MatchData.cs;C1200585  (server)    10/23/2009 5:16 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Builtins/MatchData.cs;PrePostMatchFix
@@ -173,5 +173,13 @@
                 throw RubyExceptions.CreateIndexError(String.Format("index {0} out of matches", index));
             }
         }
+
+        public MutableString/*!*/ GetPreMatch() {
+            return _originalString.GetSlice(0, GetGroupStart(0)).TaintBy(this);
+        }
+        
+        public MutableString/*!*/ GetPostMatch() {
+            return _originalString.GetSlice(GetGroupEnd(0)).TaintBy(this);
+        }
     }
 }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;C1221101
File: ReflectionCache.Generated.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;C1221101  (server)    10/23/2009 5:23 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs;PrePostMatchFix
@@ -216,10 +216,10 @@
         private static MethodInfo _GetCurrentMatchGroup;
         public static MethodInfo/*!*/ GetCurrentMatchLastGroup { get { return _GetCurrentMatchLastGroup ?? (_GetCurrentMatchLastGroup = GetMethod(typeof(RubyOps), "GetCurrentMatchLastGroup")); } }
         private static MethodInfo _GetCurrentMatchLastGroup;
-        public static MethodInfo/*!*/ GetCurrentMatchPrefix { get { return _GetCurrentMatchPrefix ?? (_GetCurrentMatchPrefix = GetMethod(typeof(RubyOps), "GetCurrentMatchPrefix")); } }
-        private static MethodInfo _GetCurrentMatchPrefix;
-        public static MethodInfo/*!*/ GetCurrentMatchSuffix { get { return _GetCurrentMatchSuffix ?? (_GetCurrentMatchSuffix = GetMethod(typeof(RubyOps), "GetCurrentMatchSuffix")); } }
-        private static MethodInfo _GetCurrentMatchSuffix;
+        public static MethodInfo/*!*/ GetCurrentPreMatch { get { return _GetCurrentPreMatch ?? (_GetCurrentPreMatch = GetMethod(typeof(RubyOps), "GetCurrentPreMatch")); } }
+        private static MethodInfo _GetCurrentPreMatch;
+        public static MethodInfo/*!*/ GetCurrentPostMatch { get { return _GetCurrentPostMatch ?? (_GetCurrentPostMatch = GetMethod(typeof(RubyOps), "GetCurrentPostMatch")); } }
+        private static MethodInfo _GetCurrentPostMatch;
         public static MethodInfo/*!*/ GetDefaultExceptionMessage { get { return _GetDefaultExceptionMessage ?? (_GetDefaultExceptionMessage = GetMethod(typeof(RubyOps), "GetDefaultExceptionMessage")); } }
         private static MethodInfo _GetDefaultExceptionMessage;
         public static MethodInfo/*!*/ GetEmptyScope { get { return _GetEmptyScope ?? (_GetEmptyScope = GetMethod(typeof(RubyOps), "GetEmptyScope")); } }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/RegexMatchReference.cs;C1107696
File: RegexMatchReference.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/RegexMatchReference.cs;C1107696  (server)    10/23/2009 5:21 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/RegexMatchReference.cs;PrePostMatchFix
@@ -42,12 +42,12 @@
         internal const string MatchLastGroupName = "+";
 
         // $`
-        internal const int MatchPrefix = -3;
-        internal const string MatchPrefixName = "`";
+        internal const int PreMatch = -3;
+        internal const string PreMatchName = "`";
 
         // $'
-        internal const int MatchSuffix = -4;
-        internal const string MatchSuffixName = "'";
+        internal const int PostMatch = -4;
+        internal const string PostMatchName = "'";
 
         private readonly int _index;
 
@@ -57,7 +57,7 @@
 
         internal RegexMatchReference(int index, SourceSpan location) 
             : base(location) {
-            Debug.Assert(index >= MatchSuffix, "index");
+            Debug.Assert(index >= PostMatch, "index");
             _index = index;
         }
 
@@ -71,11 +71,11 @@
         }
 
         public RegexMatchReference/*!*/ CreatePrefixReference(SourceSpan location) {
-            return new RegexMatchReference(MatchPrefix, location);
+            return new RegexMatchReference(PreMatch, location);
         }
 
         public RegexMatchReference/*!*/ CreateSuffixReference(SourceSpan location) {
-            return new RegexMatchReference(MatchSuffix, location);
+            return new RegexMatchReference(PostMatch, location);
         }
 
         public RegexMatchReference/*!*/ CreateMatchReference(SourceSpan location) {
@@ -89,8 +89,8 @@
                     case EntireMatch: return EntireMatchName;
                     case MatchData: return MatchDataName;
                     case MatchLastGroup: return MatchLastGroupName;
-                    case MatchPrefix: return MatchPrefixName;
-                    case MatchSuffix: return MatchSuffixName;
+                    case PreMatch: return PreMatchName;
+                    case PostMatch: return PostMatchName;
                     default: return _index.ToString();
                 }
             }
@@ -117,11 +117,11 @@
                 case MatchLastGroup:
                     return Methods.GetCurrentMatchLastGroup.OpCall(gen.CurrentScopeVariable);
                 
-                case MatchPrefix:
-                    return Methods.GetCurrentMatchPrefix.OpCall(gen.CurrentScopeVariable);
+                case PreMatch:
+                    return Methods.GetCurrentPreMatch.OpCall(gen.CurrentScopeVariable);
 
-                case MatchSuffix:
-                    return Methods.GetCurrentMatchSuffix.OpCall(gen.CurrentScopeVariable);
+                case PostMatch:
+                    return Methods.GetCurrentPostMatch.OpCall(gen.CurrentScopeVariable);
 
                 default:
                     return Methods.GetCurrentMatchGroup.OpCall(gen.CurrentScopeVariable, AstUtils.Constant(_index));
@@ -137,8 +137,8 @@
             switch (_index) {
                 case MatchData: return "$" + MatchDataName;
                 case MatchLastGroup: return "$" + MatchLastGroupName;
-                case MatchPrefix: return "$" + MatchPrefixName;
-                case MatchSuffix: return "$" + MatchSuffixName;
+                case PreMatch: return "$" + PreMatchName;
+                case PostMatch: return "$" + PostMatchName;
                 default: return "$" + _index.ToString();
             }
         }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;C791094
File: Symbols.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;C791094  (server)    10/23/2009 5:21 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;PrePostMatchFix
@@ -108,7 +108,7 @@
         public static readonly string MatchData = RegexMatchReference.MatchDataName;
         public static readonly string EntireMatch = RegexMatchReference.EntireMatchName;
         public static readonly string MatchLastGroup = RegexMatchReference.MatchLastGroupName;
-        public static readonly string MatchPrefix = RegexMatchReference.MatchPrefixName;
-        public static readonly string MatchSuffix = RegexMatchReference.MatchSuffixName;
+        public static readonly string PreMatch = RegexMatchReference.PreMatchName;
+        public static readonly string PostMatch = RegexMatchReference.PostMatchName;
     }
 }
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Tokenizer.cs;C1200585
File: Tokenizer.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Tokenizer.cs;C1200585  (server)    10/23/2009 5:21 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Tokenizer.cs;PrePostMatchFix
@@ -1345,11 +1345,11 @@
                     return Tokens.MatchReference;
 
                 case '`':
-                    _tokenValue.SetInteger(RegexMatchReference.MatchPrefix);
+                    _tokenValue.SetInteger(RegexMatchReference.PreMatch);
                     return Tokens.MatchReference;
 
                 case '\'':		
-                    _tokenValue.SetInteger(RegexMatchReference.MatchSuffix);
+                    _tokenValue.SetInteger(RegexMatchReference.PostMatch);
                     return Tokens.MatchReference;
 
                 case '+':
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C1221149
File: RubyOps.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C1221149  (server)    10/23/2009 5:22 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;PrePostMatchFix
@@ -1360,21 +1360,13 @@
         }
 
         [Emitted] //RegexMatchReference:
-        public static MutableString GetCurrentMatchPrefix(RubyScope/*!*/ scope) {
-            MatchData match = scope.GetInnerMostClosureScope().CurrentMatch;
-            if (match == null) {
-                return null;
-            }
-            return match.OriginalString.GetSlice(0, match.Index).TaintBy(match.OriginalString);
+        public static MutableString GetCurrentPreMatch(RubyScope/*!*/ scope) {
+            return scope.GetInnerMostClosureScope().GetCurrentPreMatch();
         }
 
         [Emitted] //RegexMatchReference:
-        public static MutableString GetCurrentMatchSuffix(RubyScope/*!*/ scope) {
-            MatchData match = scope.GetInnerMostClosureScope().CurrentMatch;
-            if (match == null) {
-                return null;
-            }
-            return match.OriginalString.GetSlice(match.Index + match.Length);
+        public static MutableString GetCurrentPostMatch(RubyScope/*!*/ scope) {
+            return scope.GetInnerMostClosureScope().GetCurrentPostMatch();
         }
 
         [Emitted] //RegularExpression:
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;C1221149
File: RubyScope.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;C1221149  (server)    10/23/2009 5:19 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;PrePostMatchFix
@@ -639,6 +639,16 @@
             return (match != null) ? match.GetGroupValue(index) : null;
         }
 
+        internal MutableString GetCurrentPreMatch() {
+            var match = _currentMatch;
+            return (match != null) ? match.GetPreMatch() : null;
+        }
+
+        internal MutableString GetCurrentPostMatch() {
+            var match = _currentMatch;
+            return (match != null) ? match.GetPostMatch() : null;
+        }
+
         internal MutableString GetCurrentMatchLastGroup() {
             var match = _currentMatch;
             if (match != null) {
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Globals/GlobalVariables.cs;C815336
File: GlobalVariables.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Globals/GlobalVariables.cs;C815336  (server)    10/23/2009 5:20 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Globals/GlobalVariables.cs;PrePostMatchFix
@@ -20,8 +20,8 @@
         MatchData,
         EntireMatch,
         MatchLastGroup,
-        MatchPrefix,
-        MatchSuffix,
+        PreMatch,
+        PostMatch,
 
         CurrentException,
         CurrentExceptionBacktrace,
@@ -52,8 +52,8 @@
         public static readonly GlobalVariable MatchData = new SpecialGlobalVariableInfo(GlobalVariableId.MatchData);
         public static readonly GlobalVariable EntireMatch = new SpecialGlobalVariableInfo(GlobalVariableId.EntireMatch);
         public static readonly GlobalVariable MatchLastGroup = new SpecialGlobalVariableInfo(GlobalVariableId.MatchLastGroup);
-        public static readonly GlobalVariable MatchPrefix = new SpecialGlobalVariableInfo(GlobalVariableId.MatchPrefix);
-        public static readonly GlobalVariable MatchSuffix = new SpecialGlobalVariableInfo(GlobalVariableId.MatchSuffix);
+        public static readonly GlobalVariable PreMatch = new SpecialGlobalVariableInfo(GlobalVariableId.PreMatch);
+        public static readonly GlobalVariable PostMatch = new SpecialGlobalVariableInfo(GlobalVariableId.PostMatch);
 
         public static readonly GlobalVariable CurrentException = new SpecialGlobalVariableInfo(GlobalVariableId.CurrentException);
         public static readonly GlobalVariable CurrentExceptionBacktrace = new SpecialGlobalVariableInfo(GlobalVariableId.CurrentExceptionBacktrace);
@@ -94,8 +94,8 @@
             context.DefineGlobalVariableNoLock(Symbols.MatchData, MatchData);
             context.DefineGlobalVariableNoLock(Symbols.EntireMatch, EntireMatch);
             context.DefineGlobalVariableNoLock(Symbols.MatchLastGroup, MatchLastGroup);
-            context.DefineGlobalVariableNoLock(Symbols.MatchPrefix, MatchPrefix);
-            context.DefineGlobalVariableNoLock(Symbols.MatchSuffix, MatchSuffix);
+            context.DefineGlobalVariableNoLock(Symbols.PreMatch, PreMatch);
+            context.DefineGlobalVariableNoLock(Symbols.PostMatch, PostMatch);
             context.DefineGlobalVariableNoLock(Symbols.LastInputLine, LastInputLine);
 
             // directly accessed variables provided by execution context:
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Globals/SpecialGlobalVariableInfo.cs;C1042261
File: SpecialGlobalVariableInfo.cs
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Globals/SpecialGlobalVariableInfo.cs;C1042261  (server)    10/23/2009 5:18 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/Main/Languages/Ruby/Ruby/Runtime/Globals/SpecialGlobalVariableInfo.cs;PrePostMatchFix
@@ -38,13 +38,11 @@
                 case GlobalVariableId.MatchLastGroup:
                     return (scope != null) ? scope.GetInnerMostClosureScope().GetCurrentMatchLastGroup() : null;
 
-                case GlobalVariableId.MatchPrefix:
-                    // TODO:
-                    throw new NotImplementedException();
+                case GlobalVariableId.PreMatch:
+                    return (scope != null) ? scope.GetInnerMostClosureScope().GetCurrentPreMatch() : null;
 
-                case GlobalVariableId.MatchSuffix:
-                    // TODO:
-                    throw new NotImplementedException();
+                case GlobalVariableId.PostMatch:
+                    return (scope != null) ? scope.GetInnerMostClosureScope().GetCurrentPostMatch() : null;
 
                 case GlobalVariableId.EntireMatch:
                     return (scope != null) ? scope.GetInnerMostClosureScope().GetCurrentMatchGroup(0) : null;
@@ -149,8 +147,8 @@
                     return;
 
                 case GlobalVariableId.MatchLastGroup:
-                case GlobalVariableId.MatchPrefix:
-                case GlobalVariableId.MatchSuffix:
+                case GlobalVariableId.PreMatch:
+                case GlobalVariableId.PostMatch:
                 case GlobalVariableId.EntireMatch:
                     throw ReadOnlyError(name);
                 
===================================================================
