edit: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/BuiltinsOps.cs;C479346
File: BuiltinsOps.cs
===================================================================
--- $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/BuiltinsOps.cs;C479346  (server)    6/27/2008 2:58 PM
+++ Shelved Change: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/BuiltinsOps.cs;YamlRange
@@ -266,6 +266,10 @@
             RubyRepresenter.AddYamlProperties(context, self, map);
             return rep.Map(context, self, map);
         }
+        [RubyMethod("taguri")]
+        public static MutableString TagUri(CodeContext/*!*/ context, [NotNull]Range self) {
+            return MutableString.Create("tag:ruby.yaml.org,2002:range");
+        }
     }
 
     [RubyModule(Extends = typeof(RubyRegex))]
===================================================================
edit: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Initializer.Generated.cs;C479346
File: Initializer.Generated.cs
===================================================================
--- $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Initializer.Generated.cs;C479346  (server)    6/27/2008 3:04 PM
+++ Shelved Change: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Initializer.Generated.cs;YamlRange
@@ -99,6 +99,10 @@
         
         private void LoadRuby__Builtins__Range_Instance(Ruby.Builtins.RubyModule/*!*/ module) {
             
+            module.DefineLibraryMethod("taguri", 0x9, new System.Delegate[] {
+                new System.Func<System.Scripting.Runtime.CodeContext, Ruby.Builtins.Range, Ruby.Builtins.MutableString>(Ruby.StandardLibrary.Yaml.YamlRangeOps.TagUri),
+            });
+            
             module.DefineLibraryMethod("to_yaml_node", 0x9, new System.Delegate[] {
                 new System.Func<System.Scripting.Runtime.CodeContext, System.Object, Ruby.StandardLibrary.Yaml.RubyRepresenter, Ruby.StandardLibrary.Yaml.Node>(Ruby.StandardLibrary.Yaml.YamlRangeOps.ToYaml),
             });
===================================================================
edit: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/RubyConstructor.cs;C479346
File: RubyConstructor.cs
===================================================================
--- $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/RubyConstructor.cs;C479346  (server)    6/27/2008 3:50 PM
+++ Shelved Change: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/RubyConstructor.cs;YamlRange
@@ -86,13 +86,41 @@
                 return (str.Length != 0) ? MutableString.Create(str) : null;
             }
             return value;
-        }                
+        }
 
+        public Range ConstructRubyRange(IConstructor ctor, Node node) {
+            MappingNode mapping = node as MappingNode;
+            if (mapping == null) {
+                throw new ConstructorException("can only contruct Range from mapping node");
+            }
+            object begin = null;
+            object end = null;
+            bool excludeEnd = false;
+            foreach (KeyValuePair<Node, Node> n in mapping.Nodes) {
+                string key = ConstructScalar(n.Key).ToString();
+                switch (key) {
+                    case "begin":
+                        begin = ConstructObject(n.Value);    
+                        break;
+                    case "end":
+                        end = ConstructObject(n.Value);    
+                        break;
+                    case "excl":
+                        TryConstructYamlBool(ctor, n.Value, out excludeEnd);                        
+                        break;
+                    default:
+                        throw new ConstructorException(string.Format("'{0}' is not allowed as an instance variable name for class Range", key));
+                }                
+            }
+            return new Range(Context, begin, end, excludeEnd);            
+        }
+
         public RubyConstructor(CodeContext/*!*/ context, NodeProvider/*!*/ nodeProvider)
-            : base(nodeProvider, RubyUtils.GetExecutionContext(context).EqualityComparer) {
+            : base(nodeProvider, context) {
             _context = context;
-            AddConstructor("tag:yaml.org,2002:str", ConstructRubyScalar);                        
-            
+            AddConstructor("tag:yaml.org,2002:str", ConstructRubyScalar);
+            AddConstructor("tag:ruby.yaml.org,2002:range", ConstructRubyRange);
+
             //AddConstructor("tag:yaml.org,2002:omap", ConstructRubyOmap);
             //AddMultiConstructor("tag:yaml.org,2002:seq:", ConstructSpecializedRubySequence);
             //AddMultiConstructor("tag:yaml.org,2002:map:", ConstructSpecializedRubyMap);
===================================================================
edit: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/BaseConstructor.cs;C479346
File: BaseConstructor.cs
===================================================================
--- $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/BaseConstructor.cs;C479346  (server)    6/27/2008 3:23 PM
+++ Shelved Change: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/BaseConstructor.cs;YamlRange
@@ -22,7 +22,7 @@
 using System.Text.RegularExpressions;
 using System.Scripting;
 using Ruby.Builtins;
-using Ruby.Runtime;
+using System.Scripting.Runtime;
 
 namespace Ruby.StandardLibrary.Yaml {
 
@@ -53,13 +53,17 @@
         
         private readonly Dictionary<Node, List<RecursiveFixer>> _recursiveObjects = new Dictionary<Node, List<RecursiveFixer>>();
         private readonly NodeProvider _nodeProvider;
-        private readonly EqualityComparer _comparer;
+        private readonly CodeContext _context;
 
-        public BaseConstructor(NodeProvider/*!*/ nodeProvider, EqualityComparer/*!*/ comparer) {
+        public BaseConstructor(NodeProvider/*!*/ nodeProvider, CodeContext/*!*/ context) {
             _nodeProvider = nodeProvider;
-            _comparer = comparer;
+            _context = context;
         }
 
+        protected CodeContext Context {
+            get { return _context; }
+        }
+
         public static object NullObjectKey {
             get { return _NullObjectKey; }
             set {
@@ -180,14 +184,14 @@
             if(node is ScalarNode) {
                 return ConstructScalar(node);
             } else if(node is SequenceNode) {
-                return ConstructSequence(node);
+                return ConstructSequence(node);            
             } else if(node is MappingNode) {
                 return ConstructMapping(node);
             } else {
                 Console.Error.WriteLine(node.Tag);
             }
             return null;
-        }
+        }        
 
         public object ConstructScalar(Node node) {
             ScalarNode scalar = node as ScalarNode;
@@ -207,7 +211,7 @@
                 return SymbolTable.StringToId(value.Substring(1));
             }
             return value;
-        }
+        }        
 
         public object ConstructPrivateType(Node node) {
             object val = null;
@@ -250,7 +254,7 @@
             if (map == null) {
                 throw new ConstructorException("expected a mapping node, but found: " + mappingNode);
             }
-            Hash mapping = new Hash(_comparer);
+            Hash mapping = new Hash(_context);
             LinkedList<Hash> merge = null;
             foreach (KeyValuePair<Node, Node> entry in map.Nodes) {
                 Node key_v = entry.Key;
@@ -293,7 +297,7 @@
             }
             if (null != merge) {
                 merge.AddLast(mapping);
-                mapping = new Hash(_comparer);
+                mapping = new Hash(_context);
                 foreach (Hash m in merge) {                    
                     foreach (KeyValuePair<object, object> e in m) {
                         mapping[e.Key ?? NullObjectKey] = e.Value;
===================================================================
edit: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/Constructor.cs;C479346
File: Constructor.cs
===================================================================
--- $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/Constructor.cs;C479346  (server)    6/27/2008 3:49 PM
+++ Shelved Change: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/Constructor.cs;YamlRange
@@ -18,7 +18,7 @@
 
 using System.Collections.Generic;
 using System.Text.RegularExpressions;
-using Ruby.Runtime;
+using System.Scripting.Runtime;
 
 namespace Ruby.StandardLibrary.Yaml {
 
@@ -64,8 +64,8 @@
             _yamlMultiRegexps.Add(tagPrefix, new Regex("^" + tagPrefix, RegexOptions.Compiled));
         }
 
-        public Constructor(NodeProvider/*!*/ nodeProvider, EqualityComparer comparer)
-            : base(nodeProvider, comparer) {
+        public Constructor(NodeProvider/*!*/ nodeProvider, CodeContext/*!*/ context)
+            : base(nodeProvider, context) {
         }
 
     }
===================================================================
edit: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/SafeConstructor.cs;C479346
File: SafeConstructor.cs
===================================================================
--- $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/SafeConstructor.cs;C479346  (server)    6/27/2008 3:08 PM
+++ Shelved Change: $/Merlin_External/Languages/IronRuby/yaml/IronRuby.Libraries.Yaml/Engine/SafeConstructor.cs;YamlRange
@@ -22,7 +22,7 @@
 using System.Reflection;
 using System.Text.RegularExpressions;
 using Ruby.Builtins;
-using Ruby.Runtime;
+using System.Scripting.Runtime;
 
 namespace Ruby.StandardLibrary.Yaml {
 
@@ -68,8 +68,8 @@
             _yamlMultiRegexps.Add(tagPrefix, new Regex("^" + tagPrefix, RegexOptions.Compiled));
         }
 
-        public SafeConstructor(/*!*/NodeProvider nodeProvider, EqualityComparer comparer)
-            : base(nodeProvider, comparer) {
+        public SafeConstructor(/*!*/NodeProvider nodeProvider, CodeContext/*!*/ context)
+            : base(nodeProvider, context) {
         }
 
         private static Dictionary<string, bool> BOOL_VALUES = new Dictionary<string, bool>();
@@ -80,12 +80,19 @@
 
         public static object ConstructYamlBool(IConstructor ctor, Node node) {
             bool result;
-            if (BOOL_VALUES.TryGetValue(ctor.ConstructScalar(node).ToString(), out result)) {
+            if (TryConstructYamlBool(ctor, node, out result)) {
                 return result;
             }
             return null;
         }
 
+        public static bool TryConstructYamlBool(IConstructor ctor, Node node, out bool result) {            
+            if (BOOL_VALUES.TryGetValue(ctor.ConstructScalar(node).ToString(), out result)) {
+                return true;
+            }
+            return false;
+        }
+
         public static object ConstructYamlOmap(IConstructor ctor, Node node) {
             return ctor.ConstructPairs(node);
         }
@@ -107,9 +114,9 @@
             return ctor.ConstructSequence(node);
         }
 
-        public static IDictionary ConstructYamlMap(IConstructor ctor, Node node) {
+        public static Hash ConstructYamlMap(IConstructor ctor, Node node) {
             return ctor.ConstructMapping(node);
-        }
+        }        
 
         public static object constructUndefined(IConstructor ctor, Node node) {
             throw new ConstructorException("could not determine a constructor for the tag: " + node.Tag);
@@ -345,7 +352,7 @@
             AddConstructor("tag:yaml.org,2002:str", ConstructYamlStr);
             AddConstructor("tag:yaml.org,2002:binary", ConstructYamlBinary);
             AddConstructor("tag:yaml.org,2002:seq", ConstructYamlSeq);
-            AddConstructor("tag:yaml.org,2002:map", ConstructYamlMap);
+            AddConstructor("tag:yaml.org,2002:map", ConstructYamlMap);            
             AddConstructor("", BaseConstructor.CONSTRUCT_PRIVATE);
             AddMultiConstructor("tag:yaml.org,2002:seq:", ConstructSpecializedSequence);
             AddMultiConstructor("tag:yaml.org,2002:map:", ConstructSpecializedMap);
===================================================================
