<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/core/io/shared/tty_probe.rb</filename>
    </added>
    <added>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/core/kernel/fixtures/comspec.cmd</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/1</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Experimental/Interop/win32api.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Win32API/Win32API.cs</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Libs/Win32API.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,8 +1,8 @@
 @echo off
-if &quot;%1&quot; == &quot;4&quot; (
-  set DIR=%MERLIN_ROOT%\Bin\Debug
-) else (
+if &quot;%1&quot; == &quot;-4&quot; (
   set DIR=%MERLIN_ROOT%\Bin\V4 Debug
+) else (
+  set DIR=%MERLIN_ROOT%\Bin\Debug
 )
 
 &quot;%DIR%\ClassInitGenerator&quot; &quot;%DIR%\IronRuby.Libraries.Yaml.dll&quot; /libraries:IronRuby.StandardLibrary.Yaml /out:%~dp0\Initializer.Generated.cs</diff>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/Yaml/IronRuby.Libraries.Yaml/GenerateInitializers.cmd</filename>
    </modified>
    <modified>
      <diff>@@ -87,19 +87,18 @@ class Object
     when :install_name
       bin = Config::CONFIG[&quot;RUBY_INSTALL_NAME&quot;] || Config::CONFIG[&quot;ruby_install_name&quot;]
       bin &lt;&lt; (Config::CONFIG['EXEEXT'] || Config::CONFIG['exeext'] || '')
-      File.join(Config::CONFIG['bindir'], bin)
+      File.join(File.expand_path(Config::CONFIG['bindir']), bin)
     end
   end
 
   def resolve_ruby_exe
     [:env, :engine, :name, :install_name].each do |option|
       next unless cmd = ruby_exe_options(option)
-      exe = cmd.split.first
 
       # It has been reported that File.executable is not reliable
       # on Windows platforms (see commit 56bc555c). So, we check the
       # platform. 
-      if File.exists?(exe) and (SpecGuard.windows? or File.executable?(exe))
+      if File.exists?(cmd) and (SpecGuard.windows? or File.executable?(cmd))
         return cmd
       end
     end
@@ -111,7 +110,7 @@ class Object
     working_dir = opts[:dir] || &quot;.&quot;
     Dir.chdir(working_dir) do
       body = &quot;-e #{code.inspect}&quot; if code and not File.exists?(code)
-      cmd = [RUBY_EXE, ENV['RUBY_FLAGS'], opts[:options], body, opts[:args]]
+      cmd = [RUBY_EXE.inspect, ENV['RUBY_FLAGS'], opts[:options], body, opts[:args]]
       `#{cmd.compact.join(' ')}`
     end
   end</diff>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/mspec/lib/mspec/helpers/ruby_exe.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,6 +13,26 @@ describe :io_tty, :shared =&gt; true do
         File.open('NUL') {|f| f.send @method }.should == true
       end
     end
+    
+    it &quot;return false when called on a standard stream redirected to a file or a pipe&quot; do
+      sin, sout, serr = 1, 2, 4
+    
+      # standard output is redirected by %x{}
+      %x{&quot;#{RUBY_EXE}&quot; &quot;#{File.dirname(__FILE__)}/tty_probe.rb&quot;}
+      $?.exitstatus.should == sin | serr
+    
+      # redirect error output to std output:
+      %x{&quot;#{RUBY_EXE}&quot; &quot;#{File.dirname(__FILE__)}/tty_probe.rb&quot; 2&gt;&amp;1}
+      $?.exitstatus.should == sin
+    
+      # redirect input:
+      %x{&quot;#{RUBY_EXE}&quot; &quot;#{File.dirname(__FILE__)}/tty_probe.rb&quot; &lt; &quot;#{File.dirname(__FILE__)}/tty_probe.rb&quot;}
+      $?.exitstatus.should == serr
+    
+      # redirect both input and error output:
+      %x{&quot;#{RUBY_EXE}&quot; &quot;#{File.dirname(__FILE__)}/tty_probe.rb&quot; 2&gt;1 &lt; &quot;#{File.dirname(__FILE__)}/tty_probe.rb&quot;}
+      $?.exitstatus.should == 0    
+    end
   end
 
   it &quot;returns false if this stream is not a terminal device (TTY)&quot; do</diff>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/core/io/shared/tty.rb</filename>
    </modified>
    <modified>
      <diff>@@ -50,7 +50,81 @@ describe &quot;Kernel#`&quot; do
       $?.exitstatus.should == 99
       $?.success?.should == false
     end
-  end
+  
+    def test_comspec(commands)
+      comspec_mock = File.dirname(__FILE__) + '/fixtures/comspec.cmd'
+      
+      query = &quot;ENV['COMSPEC'] = '#{comspec_mock}'; puts &quot;
+      query += commands.collect { |cmd| &quot;`#{cmd}`&quot; }.join(', ')
+      
+      result = ruby_exe(query)
+      
+      # The comspec mock prints all its command arguments and we check if it gets exactly two: /c &quot;COMMAND&quot;.
+      i = 0
+      result.each_line do |line|
+        line.strip.should == %Q{/c &quot;#{commands[i]}&quot;}
+        i += 1
+      end
+    end
+  
+    it &quot;special cases Windows shell commands&quot; do    
+      test_comspec [
+        &quot;ASSOC&quot;,
+        &quot;BREAK&quot;,
+        &quot;CALL&quot;,
+        &quot;CD&quot;,
+        &quot;CHDIR&quot;,
+        &quot;CLS&quot;,
+        &quot;COLOR&quot;,
+        &quot;COPY&quot;, 
+        &quot;DATE&quot;,
+        &quot;DEL&quot;,
+        &quot;DIR&quot;,
+        &quot;ECHO&quot;,
+        &quot;ENDLOCAL&quot;,
+        &quot;ERASE&quot;,
+        &quot;EXIT&quot;,
+        &quot;FOR&quot;,
+        &quot;FTYPE&quot;,
+        &quot;GOTO&quot;,
+        &quot;IF&quot;,
+        &quot;MD&quot;,
+        &quot;MKDIR&quot;,
+        &quot;MOVE&quot;,
+        &quot;PATH&quot;,
+        &quot;PAUSE&quot;,
+        &quot;POPD&quot;,
+        &quot;PROMPT&quot;,
+        &quot;PUSHD&quot;,
+        &quot;RD&quot;,
+        &quot;REM&quot;,
+        &quot;REN&quot;,
+        &quot;RENAME&quot;,
+        &quot;RMDIR&quot;,
+        &quot;SET&quot;,
+        &quot;SETLOCAL&quot;,
+        &quot;SHIFT&quot;,
+        &quot;START&quot;,
+        &quot;TIME&quot;,
+        &quot;TITLE&quot;,
+        &quot;TYPE&quot;,
+        &quot;VER&quot;,
+        &quot;VERIFY&quot;,
+        &quot;VOL&quot;,
+      ]
+    end
+    
+    ruby_bug &quot;&quot;, &quot;1.9&quot; do
+    ruby_bug &quot;&quot;, &quot;1.8&quot; do
+      it &quot;special cases Windows Vista+ shell commands&quot; do
+        test_comspec [
+          &quot;MKLINK&quot;,
+        ]
+      end
+    end
+    end
+  end 
+  
 end
 
 describe &quot;Kernel.`&quot; do</diff>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/core/kernel/backtick_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -62,10 +62,11 @@ describe &quot;Kernel#system&quot; do
     Kernel.should have_private_instance_method(:system)
   end
 
-
-  it &quot;expands shell variables when given a single string argument&quot; do
-    result = system(&quot;ruby #{@helper_script} #{@shell_var} foo&quot;)
-    result.should be_true
+  ruby_version_is &quot;1.9&quot; do
+    it &quot;expands shell variables when given a single string argument&quot; do
+      result = system(&quot;ruby #{@helper_script} #{@shell_var} foo&quot;)
+      result.should be_true
+    end
   end
   
   it &quot;does not expand shell variables when given multiples arguments&quot; do</diff>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/core/kernel/system_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,18 @@
 require File.dirname(__FILE__) + '/../../spec_helper'
 
 describe &quot;Process.uid&quot; do
-  it &quot;returns the correct uid for the user executing this process&quot; do
-    current_uid_according_to_unix = `id -ur`.to_i
-    Process.uid.should == current_uid_according_to_unix
-  end
-
-  it &quot;also goes by Process::UID.rid&quot; do
-    Process::UID.rid.should == Process.uid
-  end
+  platform_is_not :windows do
+    it &quot;returns the correct uid for the user executing this process&quot; do
+      current_uid_according_to_unix = `id -ur`.to_i
+      Process.uid.should == current_uid_according_to_unix
+    end
+  
+    it &quot;also goes by Process::UID.rid&quot; do
+      Process::UID.rid.should == Process.uid
+    end
 
-  it &quot;also goes by Process::Sys.getuid&quot; do
-    Process::Sys.getuid.should == Process.uid
+    it &quot;also goes by Process::Sys.getuid&quot; do
+      Process::Sys.getuid.should == Process.uid
+    end
   end
 end</diff>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/core/process/uid_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,12 @@
 require File.dirname(__FILE__) + '/../../spec_helper'
 
 process_is_foreground do
+  require 'readline'
+  describe &quot;Readline.completion_append_character&quot; do
+    it &quot;needs to be reviewed for spec completeness&quot;
+  end
 
-  not_supported_on :ironruby do
-    require 'readline'
-    describe &quot;Readline.completion_append_character&quot; do
-      it &quot;needs to be reviewed for spec completeness&quot;
-    end
-
-    describe &quot;Readline.completion_append_character=&quot; do
-      it &quot;needs to be reviewed for spec completeness&quot;
-    end
+  describe &quot;Readline.completion_append_character=&quot; do
+    it &quot;needs to be reviewed for spec completeness&quot;
   end
 end</diff>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/library/readline/completion_append_character_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -26,127 +26,127 @@ namespace IronPython.Modules {
         public static void PerformModuleReload(PythonContext/*!*/ context, PythonDictionary/*!*/ dict) {
             PythonDictionary errorcode = new PythonDictionary();
 
-            errorcode[&quot;E2BIG&quot;] = E2BIG;
-            errorcode[&quot;EACCES&quot;] = EACCES;
-            errorcode[&quot;EADDRINUSE&quot;] = EADDRINUSE;
-            errorcode[&quot;EADDRNOTAVAIL&quot;] = EADDRNOTAVAIL;
-            errorcode[&quot;EAFNOSUPPORT&quot;] = EAFNOSUPPORT;
-            errorcode[&quot;EAGAIN&quot;] = EAGAIN;
-            errorcode[&quot;EALREADY&quot;] = EALREADY;
-            errorcode[&quot;EBADF&quot;] = EBADF;
-            errorcode[&quot;EBUSY&quot;] = EBUSY;
-            errorcode[&quot;ECHILD&quot;] = ECHILD;
-            errorcode[&quot;ECONNABORTED&quot;] = ECONNABORTED;
-            errorcode[&quot;ECONNREFUSED&quot;] = ECONNREFUSED;
-            errorcode[&quot;ECONNRESET&quot;] = ECONNRESET;
-            errorcode[&quot;EDEADLK&quot;] = EDEADLK;
-            errorcode[&quot;EDEADLOCK&quot;] = EDEADLOCK;
-            errorcode[&quot;EDESTADDRREQ&quot;] = EDESTADDRREQ;
-            errorcode[&quot;EDOM&quot;] = EDOM;
-            errorcode[&quot;EDQUOT&quot;] = EDQUOT;
-            errorcode[&quot;EEXIST&quot;] = EEXIST;
-            errorcode[&quot;EFAULT&quot;] = EFAULT;
-            errorcode[&quot;EFBIG&quot;] = EFBIG;
-            errorcode[&quot;EHOSTDOWN&quot;] = EHOSTDOWN;
-            errorcode[&quot;EHOSTUNREACH&quot;] = EHOSTUNREACH;
-            errorcode[&quot;EILSEQ&quot;] = EILSEQ;
-            errorcode[&quot;EINPROGRESS&quot;] = EINPROGRESS;
-            errorcode[&quot;EINTR&quot;] = EINTR;
-            errorcode[&quot;EINVAL&quot;] = EINVAL;
-            errorcode[&quot;EIO&quot;] = EIO;
-            errorcode[&quot;EISCONN&quot;] = EISCONN;
-            errorcode[&quot;EISDIR&quot;] = EISDIR;
-            errorcode[&quot;ELOOP&quot;] = ELOOP;
-            errorcode[&quot;EMFILE&quot;] = EMFILE;
-            errorcode[&quot;EMLINK&quot;] = EMLINK;
-            errorcode[&quot;EMSGSIZE&quot;] = EMSGSIZE;
-            errorcode[&quot;ENAMETOOLONG&quot;] = ENAMETOOLONG;
-            errorcode[&quot;ENETDOWN&quot;] = ENETDOWN;
-            errorcode[&quot;ENETRESET&quot;] = ENETRESET;
-            errorcode[&quot;ENETUNREACH&quot;] = ENETUNREACH;
-            errorcode[&quot;ENFILE&quot;] = ENFILE;
-            errorcode[&quot;ENOBUFS&quot;] = ENOBUFS;
-            errorcode[&quot;ENODEV&quot;] = ENODEV;
-            errorcode[&quot;ENOENT&quot;] = ENOENT;
-            errorcode[&quot;ENOEXEC&quot;] = ENOEXEC;
-            errorcode[&quot;ENOLCK&quot;] = ENOLCK;
-            errorcode[&quot;ENOMEM&quot;] = ENOMEM;
-            errorcode[&quot;ENOPROTOOPT&quot;] = ENOPROTOOPT;
-            errorcode[&quot;ENOSPC&quot;] = ENOSPC;
-            errorcode[&quot;ENOSYS&quot;] = ENOSYS;
-            errorcode[&quot;ENOTCONN&quot;] = ENOTCONN;
-            errorcode[&quot;ENOTDIR&quot;] = ENOTDIR;
-            errorcode[&quot;ENOTEMPTY&quot;] = ENOTEMPTY;
-            errorcode[&quot;ENOTSOCK&quot;] = ENOTSOCK;
-            errorcode[&quot;ENOTTY&quot;] = ENOTTY;
-            errorcode[&quot;ENXIO&quot;] = ENXIO;
-            errorcode[&quot;EOPNOTSUPP&quot;] = EOPNOTSUPP;
-            errorcode[&quot;EPERM&quot;] = EPERM;
-            errorcode[&quot;EPFNOSUPPORT&quot;] = EPFNOSUPPORT;
-            errorcode[&quot;EPIPE&quot;] = EPIPE;
-            errorcode[&quot;EPROTONOSUPPORT&quot;] = EPROTONOSUPPORT;
-            errorcode[&quot;EPROTOTYPE&quot;] = EPROTOTYPE;
-            errorcode[&quot;ERANGE&quot;] = ERANGE;
-            errorcode[&quot;EREMOTE&quot;] = EREMOTE;
-            errorcode[&quot;EROFS&quot;] = EROFS;
-            errorcode[&quot;ESHUTDOWN&quot;] = ESHUTDOWN;
-            errorcode[&quot;ESOCKTNOSUPPORT&quot;] = ESOCKTNOSUPPORT;
-            errorcode[&quot;ESPIPE&quot;] = ESPIPE;
-            errorcode[&quot;ESRCH&quot;] = ESRCH;
-            errorcode[&quot;ESTALE&quot;] = ESTALE;
-            errorcode[&quot;ETIMEDOUT&quot;] = ETIMEDOUT;
-            errorcode[&quot;ETOOMANYREFS&quot;] = ETOOMANYREFS;
-            errorcode[&quot;EUSERS&quot;] = EUSERS;
-            errorcode[&quot;EWOULDBLOCK&quot;] = EWOULDBLOCK;
-            errorcode[&quot;EXDEV&quot;] = EXDEV;
-            errorcode[&quot;WSABASEERR&quot;] = WSABASEERR;
-            errorcode[&quot;WSAEACCES&quot;] = WSAEACCES;
-            errorcode[&quot;WSAEADDRINUSE&quot;] = WSAEADDRINUSE;
-            errorcode[&quot;WSAEADDRNOTAVAIL&quot;] = WSAEADDRNOTAVAIL;
-            errorcode[&quot;WSAEAFNOSUPPORT&quot;] = WSAEAFNOSUPPORT;
-            errorcode[&quot;WSAEALREADY&quot;] = WSAEALREADY;
-            errorcode[&quot;WSAEBADF&quot;] = WSAEBADF;
-            errorcode[&quot;WSAECONNABORTED&quot;] = WSAECONNABORTED;
-            errorcode[&quot;WSAECONNREFUSED&quot;] = WSAECONNREFUSED;
-            errorcode[&quot;WSAECONNRESET&quot;] = WSAECONNRESET;
-            errorcode[&quot;WSAEDESTADDRREQ&quot;] = WSAEDESTADDRREQ;
-            errorcode[&quot;WSAEDISCON&quot;] = WSAEDISCON;
-            errorcode[&quot;WSAEDQUOT&quot;] = WSAEDQUOT;
-            errorcode[&quot;WSAEFAULT&quot;] = WSAEFAULT;
-            errorcode[&quot;WSAEHOSTDOWN&quot;] = WSAEHOSTDOWN;
-            errorcode[&quot;WSAEHOSTUNREACH&quot;] = WSAEHOSTUNREACH;
-            errorcode[&quot;WSAEINPROGRESS&quot;] = WSAEINPROGRESS;
-            errorcode[&quot;WSAEINTR&quot;] = WSAEINTR;
-            errorcode[&quot;WSAEINVAL&quot;] = WSAEINVAL;
-            errorcode[&quot;WSAEISCONN&quot;] = WSAEISCONN;
-            errorcode[&quot;WSAELOOP&quot;] = WSAELOOP;
-            errorcode[&quot;WSAEMFILE&quot;] = WSAEMFILE;
-            errorcode[&quot;WSAEMSGSIZE&quot;] = WSAEMSGSIZE;
-            errorcode[&quot;WSAENAMETOOLONG&quot;] = WSAENAMETOOLONG;
-            errorcode[&quot;WSAENETDOWN&quot;] = WSAENETDOWN;
-            errorcode[&quot;WSAENETRESET&quot;] = WSAENETRESET;
-            errorcode[&quot;WSAENETUNREACH&quot;] = WSAENETUNREACH;
-            errorcode[&quot;WSAENOBUFS&quot;] = WSAENOBUFS;
-            errorcode[&quot;WSAENOPROTOOPT&quot;] = WSAENOPROTOOPT;
-            errorcode[&quot;WSAENOTCONN&quot;] = WSAENOTCONN;
-            errorcode[&quot;WSAENOTEMPTY&quot;] = WSAENOTEMPTY;
-            errorcode[&quot;WSAENOTSOCK&quot;] = WSAENOTSOCK;
-            errorcode[&quot;WSAEOPNOTSUPP&quot;] = WSAEOPNOTSUPP;
-            errorcode[&quot;WSAEPFNOSUPPORT&quot;] = WSAEPFNOSUPPORT;
-            errorcode[&quot;WSAEPROCLIM&quot;] = WSAEPROCLIM;
-            errorcode[&quot;WSAEPROTONOSUPPORT&quot;] = WSAEPROTONOSUPPORT;
-            errorcode[&quot;WSAEPROTOTYPE&quot;] = WSAEPROTOTYPE;
-            errorcode[&quot;WSAEREMOTE&quot;] = WSAEREMOTE;
-            errorcode[&quot;WSAESHUTDOWN&quot;] = WSAESHUTDOWN;
-            errorcode[&quot;WSAESOCKTNOSUPPORT&quot;] = WSAESOCKTNOSUPPORT;
-            errorcode[&quot;WSAESTALE&quot;] = WSAESTALE;
-            errorcode[&quot;WSAETIMEDOUT&quot;] = WSAETIMEDOUT;
-            errorcode[&quot;WSAETOOMANYREFS&quot;] = WSAETOOMANYREFS;
-            errorcode[&quot;WSAEUSERS&quot;] = WSAEUSERS;
-            errorcode[&quot;WSAEWOULDBLOCK&quot;] = WSAEWOULDBLOCK;
-            errorcode[&quot;WSANOTINITIALISED&quot;] = WSANOTINITIALISED;
-            errorcode[&quot;WSASYSNOTREADY&quot;] = WSASYSNOTREADY;
-            errorcode[&quot;WSAVERNOTSUPPORTED&quot;] = WSAVERNOTSUPPORTED;
+            errorcode[E2BIG] = &quot;E2BIG&quot;;
+            errorcode[EACCES] = &quot;EACCES&quot;;
+            errorcode[EADDRINUSE] = &quot;EADDRINUSE&quot;;
+            errorcode[EADDRNOTAVAIL] = &quot;EADDRNOTAVAIL&quot;;
+            errorcode[EAFNOSUPPORT] = &quot;EAFNOSUPPORT&quot;;
+            errorcode[EAGAIN] = &quot;EAGAIN&quot;;
+            errorcode[EALREADY] = &quot;EALREADY&quot;;
+            errorcode[EBADF] = &quot;EBADF&quot;;
+            errorcode[EBUSY] = &quot;EBUSY&quot;;
+            errorcode[ECHILD] = &quot;ECHILD&quot;;
+            errorcode[ECONNABORTED] = &quot;ECONNABORTED&quot;;
+            errorcode[ECONNREFUSED] = &quot;ECONNREFUSED&quot;;
+            errorcode[ECONNRESET] = &quot;ECONNRESET&quot;;
+            errorcode[EDEADLK] = &quot;EDEADLK&quot;;
+            errorcode[EDEADLOCK] = &quot;EDEADLOCK&quot;;
+            errorcode[EDESTADDRREQ] = &quot;EDESTADDRREQ&quot;;
+            errorcode[EDOM] = &quot;EDOM&quot;;
+            errorcode[EDQUOT] = &quot;EDQUOT&quot;;
+            errorcode[EEXIST] = &quot;EEXIST&quot;;
+            errorcode[EFAULT] = &quot;EFAULT&quot;;
+            errorcode[EFBIG] = &quot;EFBIG&quot;;
+            errorcode[EHOSTDOWN] = &quot;EHOSTDOWN&quot;;
+            errorcode[EHOSTUNREACH] = &quot;EHOSTUNREACH&quot;;
+            errorcode[EILSEQ] = &quot;EILSEQ&quot;;
+            errorcode[EINPROGRESS] = &quot;EINPROGRESS&quot;;
+            errorcode[EINTR] = &quot;EINTR&quot;;
+            errorcode[EINVAL] = &quot;EINVAL&quot;;
+            errorcode[EIO] = &quot;EIO&quot;;
+            errorcode[EISCONN] = &quot;EISCONN&quot;;
+            errorcode[EISDIR] = &quot;EISDIR&quot;;
+            errorcode[ELOOP] = &quot;ELOOP&quot;;
+            errorcode[EMFILE] = &quot;EMFILE&quot;;
+            errorcode[EMLINK] = &quot;EMLINK&quot;;
+            errorcode[EMSGSIZE] = &quot;EMSGSIZE&quot;;
+            errorcode[ENAMETOOLONG] = &quot;ENAMETOOLONG&quot;;
+            errorcode[ENETDOWN] = &quot;ENETDOWN&quot;;
+            errorcode[ENETRESET] = &quot;ENETRESET&quot;;
+            errorcode[ENETUNREACH] = &quot;ENETUNREACH&quot;;
+            errorcode[ENFILE] = &quot;ENFILE&quot;;
+            errorcode[ENOBUFS] = &quot;ENOBUFS&quot;;
+            errorcode[ENODEV] = &quot;ENODEV&quot;;
+            errorcode[ENOENT] = &quot;ENOENT&quot;;
+            errorcode[ENOEXEC] = &quot;ENOEXEC&quot;;
+            errorcode[ENOLCK] = &quot;ENOLCK&quot;;
+            errorcode[ENOMEM] = &quot;ENOMEM&quot;;
+            errorcode[ENOPROTOOPT] = &quot;ENOPROTOOPT&quot;;
+            errorcode[ENOSPC] = &quot;ENOSPC&quot;;
+            errorcode[ENOSYS] = &quot;ENOSYS&quot;;
+            errorcode[ENOTCONN] = &quot;ENOTCONN&quot;;
+            errorcode[ENOTDIR] = &quot;ENOTDIR&quot;;
+            errorcode[ENOTEMPTY] = &quot;ENOTEMPTY&quot;;
+            errorcode[ENOTSOCK] = &quot;ENOTSOCK&quot;;
+            errorcode[ENOTTY] = &quot;ENOTTY&quot;;
+            errorcode[ENXIO] = &quot;ENXIO&quot;;
+            errorcode[EOPNOTSUPP] = &quot;EOPNOTSUPP&quot;;
+            errorcode[EPERM] = &quot;EPERM&quot;;
+            errorcode[EPFNOSUPPORT] = &quot;EPFNOSUPPORT&quot;;
+            errorcode[EPIPE] = &quot;EPIPE&quot;;
+            errorcode[EPROTONOSUPPORT] = &quot;EPROTONOSUPPORT&quot;;
+            errorcode[EPROTOTYPE] = &quot;EPROTOTYPE&quot;;
+            errorcode[ERANGE] = &quot;ERANGE&quot;;
+            errorcode[EREMOTE] = &quot;EREMOTE&quot;;
+            errorcode[EROFS] = &quot;EROFS&quot;;
+            errorcode[ESHUTDOWN] = &quot;ESHUTDOWN&quot;;
+            errorcode[ESOCKTNOSUPPORT] = &quot;ESOCKTNOSUPPORT&quot;;
+            errorcode[ESPIPE] = &quot;ESPIPE&quot;;
+            errorcode[ESRCH] = &quot;ESRCH&quot;;
+            errorcode[ESTALE] = &quot;ESTALE&quot;;
+            errorcode[ETIMEDOUT] = &quot;ETIMEDOUT&quot;;
+            errorcode[ETOOMANYREFS] = &quot;ETOOMANYREFS&quot;;
+            errorcode[EUSERS] = &quot;EUSERS&quot;;
+            errorcode[EWOULDBLOCK] = &quot;EWOULDBLOCK&quot;;
+            errorcode[EXDEV] = &quot;EXDEV&quot;;
+            errorcode[WSABASEERR] = &quot;WSABASEERR&quot;;
+            errorcode[WSAEACCES] = &quot;WSAEACCES&quot;;
+            errorcode[WSAEADDRINUSE] = &quot;WSAEADDRINUSE&quot;;
+            errorcode[WSAEADDRNOTAVAIL] = &quot;WSAEADDRNOTAVAIL&quot;;
+            errorcode[WSAEAFNOSUPPORT] = &quot;WSAEAFNOSUPPORT&quot;;
+            errorcode[WSAEALREADY] = &quot;WSAEALREADY&quot;;
+            errorcode[WSAEBADF] = &quot;WSAEBADF&quot;;
+            errorcode[WSAECONNABORTED] = &quot;WSAECONNABORTED&quot;;
+            errorcode[WSAECONNREFUSED] = &quot;WSAECONNREFUSED&quot;;
+            errorcode[WSAECONNRESET] = &quot;WSAECONNRESET&quot;;
+            errorcode[WSAEDESTADDRREQ] = &quot;WSAEDESTADDRREQ&quot;;
+            errorcode[WSAEDISCON] = &quot;WSAEDISCON&quot;;
+            errorcode[WSAEDQUOT] = &quot;WSAEDQUOT&quot;;
+            errorcode[WSAEFAULT] = &quot;WSAEFAULT&quot;;
+            errorcode[WSAEHOSTDOWN] = &quot;WSAEHOSTDOWN&quot;;
+            errorcode[WSAEHOSTUNREACH] = &quot;WSAEHOSTUNREACH&quot;;
+            errorcode[WSAEINPROGRESS] = &quot;WSAEINPROGRESS&quot;;
+            errorcode[WSAEINTR] = &quot;WSAEINTR&quot;;
+            errorcode[WSAEINVAL] = &quot;WSAEINVAL&quot;;
+            errorcode[WSAEISCONN] = &quot;WSAEISCONN&quot;;
+            errorcode[WSAELOOP] = &quot;WSAELOOP&quot;;
+            errorcode[WSAEMFILE] = &quot;WSAEMFILE&quot;;
+            errorcode[WSAEMSGSIZE] = &quot;WSAEMSGSIZE&quot;;
+            errorcode[WSAENAMETOOLONG] = &quot;WSAENAMETOOLONG&quot;;
+            errorcode[WSAENETDOWN] = &quot;WSAENETDOWN&quot;;
+            errorcode[WSAENETRESET] = &quot;WSAENETRESET&quot;;
+            errorcode[WSAENETUNREACH] = &quot;WSAENETUNREACH&quot;;
+            errorcode[WSAENOBUFS] = &quot;WSAENOBUFS&quot;;
+            errorcode[WSAENOPROTOOPT] = &quot;WSAENOPROTOOPT&quot;;
+            errorcode[WSAENOTCONN] = &quot;WSAENOTCONN&quot;;
+            errorcode[WSAENOTEMPTY] = &quot;WSAENOTEMPTY&quot;;
+            errorcode[WSAENOTSOCK] = &quot;WSAENOTSOCK&quot;;
+            errorcode[WSAEOPNOTSUPP] = &quot;WSAEOPNOTSUPP&quot;;
+            errorcode[WSAEPFNOSUPPORT] = &quot;WSAEPFNOSUPPORT&quot;;
+            errorcode[WSAEPROCLIM] = &quot;WSAEPROCLIM&quot;;
+            errorcode[WSAEPROTONOSUPPORT] = &quot;WSAEPROTONOSUPPORT&quot;;
+            errorcode[WSAEPROTOTYPE] = &quot;WSAEPROTOTYPE&quot;;
+            errorcode[WSAEREMOTE] = &quot;WSAEREMOTE&quot;;
+            errorcode[WSAESHUTDOWN] = &quot;WSAESHUTDOWN&quot;;
+            errorcode[WSAESOCKTNOSUPPORT] = &quot;WSAESOCKTNOSUPPORT&quot;;
+            errorcode[WSAESTALE] = &quot;WSAESTALE&quot;;
+            errorcode[WSAETIMEDOUT] = &quot;WSAETIMEDOUT&quot;;
+            errorcode[WSAETOOMANYREFS] = &quot;WSAETOOMANYREFS&quot;;
+            errorcode[WSAEUSERS] = &quot;WSAEUSERS&quot;;
+            errorcode[WSAEWOULDBLOCK] = &quot;WSAEWOULDBLOCK&quot;;
+            errorcode[WSANOTINITIALISED] = &quot;WSANOTINITIALISED&quot;;
+            errorcode[WSASYSNOTREADY] = &quot;WSASYSNOTREADY&quot;;
+            errorcode[WSAVERNOTSUPPORTED] = &quot;WSAVERNOTSUPPORTED&quot;;
 
             dict[&quot;errorcode&quot;] = errorcode;
         }</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython.Modules/errno.cs</filename>
    </modified>
    <modified>
      <diff>@@ -172,10 +172,32 @@ namespace IronPython.Modules {
                 // their original value.
                 string newdir = dir;
                 
+                if (IsWindows()) {
+                    if (newdir.Length &gt;= 2 &amp;&amp; newdir[1] == ':' &amp;&amp; 
+                        (newdir[0] &lt; 'a' || newdir[0] &gt; 'z') &amp;&amp; (newdir[0] &lt; 'A' || newdir[0] &gt; 'Z')) {
+                        // invalid drive, .NET will reject this
+                        if (newdir.Length == 2) {
+                            return newdir + Path.DirectorySeparatorChar;
+                        } else if (newdir[2] == Path.DirectorySeparatorChar) {
+                            return newdir;
+                        } else {
+                            return newdir.Substring(0, 2) + Path.DirectorySeparatorChar + newdir.Substring(2);
+                        }
+                    }
+                    if (newdir.Length &gt; 2 &amp;&amp; newdir.IndexOf(':', 2) != -1) {
+                        // : is an invalid char if it's not in the 2nd position
+                        newdir = newdir.Substring(0, 2) + newdir.Substring(2).Replace(':', Char.MaxValue);
+                    }
+
+                    if (newdir.Length &gt; 0 &amp;&amp; newdir[0] == ':') {
+                        newdir = Char.MaxValue + newdir.Substring(1);
+                    }
+                }
+
                 foreach (char c in Path.GetInvalidPathChars()) {
                     newdir = newdir.Replace(c, Char.MaxValue);
                 }
-
+                
                 // walk backwards through the path replacing the same characters.  We should have
                 // only updated the directory leaving the filename which we're fixing.
                 string res = context.LanguageContext.DomainManager.Platform.GetFullPath(newdir);
@@ -195,6 +217,12 @@ namespace IronPython.Modules {
             }
         }
 
+        private static bool IsWindows() {
+            return Environment.OSVersion.Platform == PlatformID.Win32NT ||
+                Environment.OSVersion.Platform == PlatformID.Win32S ||
+                Environment.OSVersion.Platform == PlatformID.Win32Windows;
+        }
+
 #if !SILVERLIGHT
         public static int getpid() {
             return System.Diagnostics.Process.GetCurrentProcess().Id;
@@ -1359,12 +1387,15 @@ namespace IronPython.Modules {
             return ToPythonException(e, null);
         }
 
+        [System.Diagnostics.CodeAnalysis.SuppressMessage(&quot;Microsoft.Interoperability&quot;, &quot;CA1404:CallGetLastErrorImmediatelyAfterPInvoke&quot;)]
         private static Exception ToPythonException(Exception e, string filename) {
             if (e is ArgumentException || e is ArgumentNullException || e is ArgumentTypeException) {
                 // rethrow reasonable exceptions
                 return ExceptionHelpers.UpdateForRethrow(e);
             }
-
+#if !SILVERLIGHT
+            int error = Marshal.GetLastWin32Error();
+#endif
             string message = e.Message;
             int errorCode;
 
@@ -1386,6 +1417,20 @@ namespace IronPython.Modules {
                     }
                 }
 
+#if !SILVERLIGHT
+                IOException ioe = e as IOException;
+                if (ioe != null) {
+                    switch (error) {
+                        case PythonExceptions._WindowsError.ERROR_DIR_NOT_EMPTY:
+                            throw PythonExceptions.CreateThrowable(WindowsError, error, &quot;The directory is not empty&quot;);
+                        case PythonExceptions._WindowsError.ERROR_ACCESS_DENIED:
+                            throw PythonExceptions.CreateThrowable(WindowsError, error, &quot;Access is denied&quot;);
+                        case PythonExceptions._WindowsError.ERROR_SHARING_VIOLATION:
+                            throw PythonExceptions.CreateThrowable(WindowsError, error, &quot;The process cannot access the file because it is being used by another process&quot;);
+                    }
+                }
+#endif
+
                 errorCode = System.Runtime.InteropServices.Marshal.GetHRForException(e);
                 if ((errorCode &amp; ~0xfff) == (unchecked((int)0x80070000))) {
                     // Win32 HR, translate HR to Python error code if possible, otherwise</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython.Modules/nt.cs</filename>
    </modified>
    <modified>
      <diff>@@ -165,8 +165,12 @@ namespace IronPython.Hosting {
             InitializePath(ref pathIndex);
             InitializeModules();
             InitializeExtensionDLLs();
+
             ImportSite();
 
+            PythonContext.InsertIntoPath(0, &quot;.&quot;);
+            PythonContext.InsertIntoPath(++pathIndex, PythonContext.DomainManager.Platform.CurrentDirectory);
+
             if (Options.Command == null &amp;&amp; Options.FileName != null) {
                 if (Options.FileName == &quot;-&quot;) {
                     Options.FileName = &quot;&lt;stdin&gt;&quot;;
@@ -202,9 +206,6 @@ namespace IronPython.Hosting {
         }
         
         private void InitializePath(ref int pathIndex) {
-
-            PythonContext.InsertIntoPath(pathIndex++, PythonContext.DomainManager.Platform.CurrentDirectory);
-
 #if !SILVERLIGHT // paths, environment vars
             if (!Options.IgnoreEnvironmentVariables) {
                 string path = Environment.GetEnvironmentVariable(&quot;IRONPYTHONPATH&quot;);</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Hosting/PythonCommandLine.cs</filename>
    </modified>
    <modified>
      <diff>@@ -261,7 +261,7 @@ namespace IronPython.Modules {
 
             if (o == null) {
                 pyContext.UnregisterTracebackHandler();
-                pyContext.TracebackListener.SetTrace(null, null);
+                PythonTracebackListener.SetTrace(null, null);
             } else {
                 // We're following CPython behavior here.
                 // If CurrentPythonFrame is not null then we're currently inside a traceback, and
@@ -270,7 +270,7 @@ namespace IronPython.Modules {
                 if (pyThread == null || !pyThread.InTraceback) {
                     pyContext.PushTracebackHandler(new PythonTracebackListener((PythonContext)context.LanguageContext));
                     pyContext.RegisterTracebackHandler();
-                    pyContext.TracebackListener.SetTrace(o, (TracebackDelegate)Converter.ConvertToDelegate(o, typeof(TracebackDelegate)));
+                    PythonTracebackListener.SetTrace(o, (TracebackDelegate)Converter.ConvertToDelegate(o, typeof(TracebackDelegate)));
                 }
             }
         }
@@ -291,12 +291,7 @@ namespace IronPython.Modules {
         }
 
         public static object gettrace(CodeContext/*!*/ context) {
-            var listener = PythonContext.GetContext(context).TracebackListener;
-
-            if (listener != null) {
-                return listener.GetTraceObject();
-            }
-            return null;
+            return PythonTracebackListener.GetTraceObject();
         }
 
         public static void setrecursionlimit(CodeContext/*!*/ context, int limit) {</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Modules/sys.cs</filename>
    </modified>
    <modified>
      <diff>@@ -38,6 +38,7 @@ namespace IronPython.Runtime.Operations {
             if (o is string) return __new__(null, (string)o, 10);
             if (o is double) return DoubleOps.__int__((double)o);
             if (o is int) return o;
+            if (o is bool) return ((bool)o) ? 1 : 0;
             if (o is BigInteger) {
                 BigInteger bi = o as BigInteger;
                 int res;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/Operations/IntOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -4166,17 +4166,15 @@ namespace IronPython.Runtime.Operations {
             return buffer.ToString().MakeByteArray();
         }
 
-        public static bool ModuleGetMember(PythonModule module, string name, out object res) {
-            return module.__dict__.TryGetValue(name, out res) &amp;&amp; res != Uninitialized.Instance;
-        }
-
-        public static object ModuleSetMember(PythonModule module, string name, object value) {
-            Debug.Assert(value != Uninitialized.Instance);
-            return module.__dict__[name] = value;
-        }
+        public static bool ModuleTryGetMember(CodeContext context, PythonModule module, string name, out object res) {
+            object value = module.GetAttributeNoThrow(context, name);
+            if (value != OperationFailed.Value) {
+                res = value;
+                return true;
+            }
 
-        public static bool ModuleDeleteMember(PythonModule module, string name) {
-            return module.__dict__.Remove(name);
+            res = null;
+            return false;
         }
 
         internal static void ScopeSetMember(CodeContext context, Scope scope, string name, object value) {</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/Operations/PythonOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -185,12 +185,17 @@ namespace IronPython.Runtime {
         // tracing / in-proc debugging support
         private Debugging.CompilerServices.DebugContext _debugContext;
         private Debugging.ITracePipeline _tracePipeline;
-        private Stack&lt;PythonTracebackListener&gt; _tracebackListeners;
+        
+        [ThreadStatic]
+        private static Stack&lt;PythonTracebackListener&gt; _tracebackListeners;
+        private static int _tracingThreads;
+
         internal FunctionCode.CodeList _allCodes;
         internal readonly object _codeCleanupLock = new object(), _codeUpdateLock = new object();
         internal int _codeCount, _nextCodeCleanup = 200;
         private int _recursionLimit;
-        private bool _enableTracing;
+        [ThreadStatic]
+        private static bool _enableTracing;
 
         /// &lt;summary&gt;
         /// Creates a new PythonContext not bound to Engine.
@@ -317,14 +322,24 @@ namespace IronPython.Runtime {
 
         internal bool EnableTracing {
             get {
-                return _enableTracing || PythonOptions.Tracing;
+                return _tracingThreads &gt; 0 || PythonOptions.Tracing;
             }
             set {
                 lock (_codeUpdateLock) {
                     bool oldEnableTracing = _enableTracing;
                     _enableTracing = value;
 
-                    if (oldEnableTracing != _enableTracing) {
+                    bool flip = false;
+                    if (value &amp;&amp; !oldEnableTracing) {
+                        flip = _tracingThreads++ == 0;
+                    }else if(!value &amp;&amp; oldEnableTracing) {
+                        flip = _tracingThreads++ != 0;
+                        if (flip) {
+                            _tracePipeline.TraceCallback = null;
+                        }
+                    }
+
+                    if (flip) {
                         // recursion setting has changed, we need to update all of our
                         // function codes to enforce or un-enforce recursion.
                         FunctionCode.UpdateAllCode(this);
@@ -332,7 +347,7 @@ namespace IronPython.Runtime {
                 }
             }
         }
-
+        
         internal TopNamespaceTracker TopNamespace {
             get {
                 return _topNamespace;
@@ -1840,8 +1855,8 @@ namespace IronPython.Runtime {
 
         #region Object Operations
 
-        public override ConvertBinder/*!*/ CreateConvertBinder(Type/*!*/ toType, bool explicitCast) {
-            return CompatConvert(toType, explicitCast);
+        public override ConvertBinder/*!*/ CreateConvertBinder(Type/*!*/ toType, bool? explicitCast) {
+            return CompatConvert(toType, explicitCast ?? false);
         }
 
         public override DeleteMemberBinder/*!*/ CreateDeleteMemberBinder(string/*!*/ name, bool ignoreCase) {
@@ -3681,7 +3696,7 @@ namespace IronPython.Runtime {
 
         #region Tracing
 
-        internal PythonTracebackListener TracebackListener {
+        internal static PythonTracebackListener TracebackListener {
             get {
                 if (_tracebackListeners == null) {
                     return null;
@@ -3700,17 +3715,20 @@ namespace IronPython.Runtime {
         }
 
         internal void EnsureDebugContext() {
-            if (_debugContext == null || _tracePipeline == null || _tracebackListeners == null) {
+            if (_debugContext == null || _tracePipeline == null) {
                 lock(this) {
                     if (_debugContext == null) {
                         _debugContext = Debugging.CompilerServices.DebugContext.CreateInstance();
                         _tracePipeline = Debugging.TracePipeline.CreateInstance(_debugContext);
-                        _tracebackListeners = new Stack&lt;PythonTracebackListener&gt;();
-                        // push the default listener
-                        _tracebackListeners.Push(new PythonTracebackListener(this));
                     }                    
                 }
             }
+
+            if (_tracebackListeners == null) {
+                _tracebackListeners = new Stack&lt;PythonTracebackListener&gt;();
+                // push the default listener
+                _tracebackListeners.Push(new PythonTracebackListener(this));
+            }
         }
 
         internal Debugging.ITracePipeline TracePipeline {
@@ -3729,7 +3747,6 @@ namespace IronPython.Runtime {
         internal void UnregisterTracebackHandler() {
             Debug.Assert(_tracePipeline != null);  // ensure debug context should have been called
 
-            _tracePipeline.TraceCallback = null;
             EnableTracing = false;
         }
 </diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/PythonContext.cs</filename>
    </modified>
    <modified>
      <diff>@@ -21,6 +21,7 @@ using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Dynamic;
+using System.Runtime.CompilerServices;
 using System.Threading;
 
 using Microsoft.Scripting;
@@ -45,6 +46,10 @@ namespace IronPython.Runtime {
 
         public PythonModule() {
             _dict = new PythonDictionary();
+            if (GetType() != typeof(PythonModule) &amp;&amp; this is IPythonObject) {
+                // we should share the user dict w/ our dict.
+                ((IPythonObject)this).ReplaceDict(_dict);
+            }
         }
 
         /// &lt;summary&gt;
@@ -96,20 +101,24 @@ namespace IronPython.Runtime {
 
         public void __init__(string name, string documentation) {
             _dict[&quot;__name__&quot;] = name;
-
-            if (documentation != null) {
-                _dict[&quot;__doc__&quot;] = documentation;
-            }
+            _dict[&quot;__doc__&quot;] = documentation;
         }
 
         public object __getattribute__(CodeContext/*!*/ context, string name) {
+            PythonTypeSlot slot;
+            object res;
+            if (GetType() != typeof(PythonModule) &amp;&amp;
+                DynamicHelpers.GetPythonType(this).TryResolveMixedSlot(context, name, out slot) &amp;&amp;
+                slot.TryGetValue(context, this, DynamicHelpers.GetPythonType(this), out res)) {
+                return res;
+            }
+
             switch (name) {
                 // never look in the dict for these...
                 case &quot;__dict__&quot;: return __dict__;
                 case &quot;__class__&quot;: return DynamicHelpers.GetPythonType(this);
             }
 
-            object res;
             if (_dict.TryGetValue(name, out res)) {
                 return res;
             }
@@ -119,32 +128,55 @@ namespace IronPython.Runtime {
         }
 
         internal object GetAttributeNoThrow(CodeContext/*!*/ context, string name) {
+            PythonTypeSlot slot;
+            object res;
+            if (GetType() != typeof(PythonModule) &amp;&amp;
+                DynamicHelpers.GetPythonType(this).TryResolveMixedSlot(context, name, out slot) &amp;&amp;
+                slot.TryGetValue(context, this, DynamicHelpers.GetPythonType(this), out res)) {
+                return res;
+            }
+
             switch (name) {
                 // never look in the dict for these...
                 case &quot;__dict__&quot;: return __dict__;
                 case &quot;__class__&quot;: return DynamicHelpers.GetPythonType(this);
             }
 
-            object res;
             if (_dict.TryGetValue(name, out res)) {
                 return res;
+            } else if (DynamicHelpers.GetPythonType(this).TryGetNonCustomMember(context, this, name, out res)) {
+                return res;
             }
 
-            // fall back to object to provide all of our other attributes (e.g. __setattr__, etc...)
-            try {
-                return ObjectOps.__getattribute__(context, this, name);
-            } catch (MissingMemberException) {
-                return OperationFailed.Value;
-            }
+            return OperationFailed.Value;
         }
 
-        public void __setattr__(string name, object value) {
+        public void __setattr__(CodeContext/*!*/ context, string name, object value) {
+            PythonTypeSlot slot;
+            if (GetType() != typeof(PythonModule) &amp;&amp;
+                DynamicHelpers.GetPythonType(this).TryResolveMixedSlot(context, name, out slot) &amp;&amp;
+                slot.TrySetValue(context, this, DynamicHelpers.GetPythonType(this), value)) {
+                return;
+            }
+
+            switch (name) {
+                case &quot;__dict__&quot;: throw PythonOps.TypeError(&quot;readonly attribute&quot;);
+                case &quot;__class__&quot;: throw PythonOps.TypeError(&quot;__class__ assignment: only for heap types&quot;);
+            }
+
             Debug.Assert(value != Uninitialized.Instance);
 
             _dict[name] = value;
         }
 
-        public void __delattr__(string name) {
+        public void __delattr__(CodeContext/*!*/ context, string name) {
+            PythonTypeSlot slot;
+            if (GetType() != typeof(PythonModule) &amp;&amp;
+                DynamicHelpers.GetPythonType(this).TryResolveMixedSlot(context, name, out slot) &amp;&amp;
+                slot.TryDeleteValue(context, this, DynamicHelpers.GetPythonType(this))) {
+                return;
+            }
+
             switch (name) {
                 case &quot;__dict__&quot;: throw PythonOps.TypeError(&quot;readonly attribute&quot;);
                 case &quot;__class__&quot;: throw PythonOps.TypeError(&quot;can't delete __class__ attribute&quot;);
@@ -178,12 +210,29 @@ namespace IronPython.Runtime {
             return String.Format(&quot;&lt;module '{0}' from '{1}'&gt;&quot;, name, file);
         }
 
-        public PythonDictionary __dict__ {
+        internal PythonDictionary __dict__ {
             get {
                 return _dict;
             }
         }
 
+        [SpecialName, PropertyMethod]
+        public PythonDictionary Get__dict__() {
+            return _dict;
+        }
+
+        [SpecialName, PropertyMethod]
+        [System.Diagnostics.CodeAnalysis.SuppressMessage(&quot;Microsoft.Performance&quot;, &quot;CA1822:MarkMembersAsStatic&quot;)]
+        public void Set__dict__(object value) {
+            throw PythonOps.TypeError(&quot;readonly attribute&quot;);
+        }
+
+        [SpecialName, PropertyMethod]
+        [System.Diagnostics.CodeAnalysis.SuppressMessage(&quot;Microsoft.Performance&quot;, &quot;CA1822:MarkMembersAsStatic&quot;)]
+        public void Delete__dict__() {
+            throw PythonOps.TypeError(&quot;readonly attribute&quot;);
+        }
+
         internal Scope Scope {
             get {
                 if (_scope == null) {
@@ -222,26 +271,15 @@ namespace IronPython.Runtime {
 
             private DynamicMetaObject GetMemberWorker(DynamicMetaObjectBinder binder, DynamicMetaObject codeContext) {
                 string name = GetGetMemberName(binder);
-
-                if (name == &quot;__dict__&quot;) {
-                    return new DynamicMetaObject(
-                        Expression.Property(
-                            Utils.Convert(Expression, typeof(PythonModule)),
-                            typeof(PythonModule).GetProperty(&quot;__dict__&quot;)
-                        ),
-                        BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
-                    );
-
-                }
-
-                var tmp = Expression.Variable(typeof(object), &quot;res&quot;);
+                var tmp = Expression.Variable(typeof(object), &quot;res&quot;);                
 
                 return new DynamicMetaObject(
                     Expression.Block(
                         new[] { tmp },
                         Expression.Condition(
                             Expression.Call(
-                                typeof(PythonOps).GetMethod(&quot;ModuleGetMember&quot;),
+                                typeof(PythonOps).GetMethod(&quot;ModuleTryGetMember&quot;),
+                                PythonContext.GetCodeContext(binder),
                                 Utils.Convert(Expression, typeof(PythonModule)),
                                 Expression.Constant(name),
                                 tmp
@@ -258,38 +296,15 @@ namespace IronPython.Runtime {
             public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value) {
                 Debug.Assert(value.Value != Uninitialized.Instance);
 
-                switch (binder.Name) {
-                    case &quot;__dict__&quot;:
-                        return new DynamicMetaObject(
-                            Expression.Throw(
-                                Expression.Call(
-                                    typeof(PythonOps).GetMethod(&quot;TypeError&quot;),
-                                    Expression.Constant(&quot;readonly attribute&quot;),
-                                    Expression.NewArrayInit(typeof(object))
-                                ),
-                                typeof(object)
-                            ),
-                            BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
-                        );
-                    case &quot;__class__&quot;:
-                        return new DynamicMetaObject(
-                            Expression.Throw(
-                                Expression.Call(
-                                    typeof(PythonOps).GetMethod(&quot;TypeError&quot;),
-                                    Expression.Constant(&quot;__class__ assignment: only for heap types&quot;),
-                                    Expression.NewArrayInit(typeof(object))
-                                ),
-                                typeof(object)
-                            ),
-                            BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
-                        );
-                }
-
                 return new DynamicMetaObject(
-                    Expression.Call(
-                        typeof(PythonOps).GetMethod(&quot;ModuleSetMember&quot;),
-                        Utils.Convert(Expression, typeof(PythonModule)),
-                        Expression.Constant(binder.Name),
+                    Expression.Block(
+                        Expression.Call(
+                            Utils.Convert(Expression, typeof(PythonModule)),
+                            typeof(PythonModule).GetMethod(&quot;__setattr__&quot;),
+                            PythonContext.GetCodeContext(binder),
+                            Expression.Constant(binder.Name),
+                            Expression.Convert(value.Expression, typeof(object))
+                        ),
                         Expression.Convert(value.Expression, typeof(object))
                     ),
                     BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
@@ -297,40 +312,12 @@ namespace IronPython.Runtime {
             }
 
             public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder) {
-                switch (binder.Name) {
-                    case &quot;__dict__&quot;:
-                        return new DynamicMetaObject(
-                            Expression.Throw(
-                                Expression.Call(
-                                    typeof(PythonOps).GetMethod(&quot;TypeError&quot;),
-                                    Expression.Constant(&quot;can't set attributes of built-in/extension type 'module'&quot;),
-                                    Expression.NewArrayInit(typeof(object))
-                                )
-                            ),
-                            BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
-                        );
-                    case &quot;__class__&quot;:
-                        return new DynamicMetaObject(
-                            Expression.Throw(
-                                Expression.Call(
-                                    typeof(PythonOps).GetMethod(&quot;TypeError&quot;),
-                                    Expression.Constant(&quot;can't delete __class__ attribute&quot;),
-                                    Expression.NewArrayInit(typeof(object))
-                                )
-                            ),
-                            BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
-                        );
-                }
-
                 return new DynamicMetaObject(
-                    Expression.Condition(
-                        Expression.Call(
-                            typeof(PythonOps).GetMethod(&quot;ModuleDeleteMember&quot;),
-                            Utils.Convert(Expression, typeof(PythonModule)),
-                            Expression.Constant(binder.Name)
-                        ),
-                        Expression.Default(binder.ReturnType),
-                        binder.FallbackDeleteMember(this).Expression
+                    Expression.Call(
+                        Utils.Convert(Expression, typeof(PythonModule)),
+                        typeof(PythonModule).GetMethod(&quot;__delattr__&quot;),
+                        PythonContext.GetCodeContext(binder),
+                        Expression.Constant(binder.Name)
                     ),
                     BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
                 );</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/PythonModule.cs</filename>
    </modified>
    <modified>
      <diff>@@ -35,8 +35,8 @@ namespace IronPython.Runtime {
     internal sealed class PythonTracebackListener : Debugging.ITraceCallback {
         private readonly PythonContext _pythonContext;
         [ThreadStatic] private static TraceThread _threads;
-        [ThreadStatic] private TracebackDelegate _globalTraceDispatch;
-        [ThreadStatic] private object _globalTraceObject;
+        [ThreadStatic] private static TracebackDelegate _globalTraceDispatch;
+        [ThreadStatic] private static object _globalTraceObject;
         private bool _exceptionThrown;
         
 #if PROFILE_SUPPORT
@@ -59,12 +59,12 @@ namespace IronPython.Runtime {
             }
         }
 
-        internal void SetTrace(object function, TracebackDelegate traceDispatch) {
+        internal static void SetTrace(object function, TracebackDelegate traceDispatch) {
             _globalTraceDispatch = traceDispatch;
             _globalTraceObject = function;
         }
 
-        internal object GetTraceObject() {
+        internal static object GetTraceObject() {
             return _globalTraceObject;
         }
 
@@ -178,14 +178,14 @@ namespace IronPython.Runtime {
             }
 
             bool traceDispatchThrew = true;
-            _pythonContext.TracePipeline.TraceCallback = null;
+            PythonContext.TracePipeline.TraceCallback = null;
             thread.InTraceback = true;
             try {
                 traceDispatch = traceDispatch(pyFrame, traceEvent, args);
                 traceDispatchThrew = false;
             } finally {
                 thread.InTraceback = false;
-                _pythonContext.TracePipeline.TraceCallback = this;
+                PythonContext.TracePipeline.TraceCallback = this;
 
                 if (traceDispatchThrew) {
                     // We're matching CPython's behavior here.  If the trace dispatch throws any exceptions</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/PythonTracebackListener.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1965,7 +1965,19 @@ type(name, bases, dict) -&gt; creates a new type instance with the given name, base
 
             if (CheckForSlotWithDefault(context, bases, slots, &quot;__dict__&quot;)) {
                 _attrs |= PythonTypeAttributes.HasDictionary;
-                AddSlot(&quot;__dict__&quot;, new PythonTypeDictSlot(this));
+                PythonTypeSlot pts;
+                bool inheritsDict = false;
+                for(int i = 1; i&lt;_resolutionOrder.Count; i++) {
+                    PythonType pt = _resolutionOrder[i];
+                    if (pt.TryResolveSlot(context, &quot;__dict__&quot;, out pts)) {
+                        inheritsDict = true;
+                        break;
+                    }
+                }
+
+                if (!inheritsDict) {
+                    AddSlot(&quot;__dict__&quot;, new PythonTypeDictSlot(this));
+                }
             }
 
             object modName;</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/Types/PythonType.cs</filename>
    </modified>
    <modified>
      <diff>@@ -921,12 +921,7 @@ namespace IronPython.Runtime.Types {
         class DocumentationDescriptor : PythonTypeSlot {
             internal override bool TryGetValue(CodeContext context, object instance, PythonType owner, out object value) {
                 if (owner.IsSystemType) {
-                    if (instance is IDynamicMetaObjectProvider &amp;&amp; !(instance is IPythonObject) &amp;&amp; !DynamicHelpers.GetPythonType(instance).IsPythonType) {
-                        // ask the foreign IDO for it's documentation
-                        value = PythonContext.GetContext(context).GetDocumentation(instance);
-                    } else {
-                        value = PythonTypeOps.GetDocumentation(owner.UnderlyingSystemType);
-                    }
+                    value = PythonTypeOps.GetDocumentation(owner.UnderlyingSystemType);
                     return true;
                 }
 </diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/Types/TypeInfo.cs</filename>
    </modified>
    <modified>
      <diff>@@ -281,7 +281,6 @@ namespace IronPython.Runtime {
         #region IDisposable Members
 
         public void Dispose() {
-            GC.SuppressFinalize(this);
         }
 
         #endregion</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPython/Runtime/XRange.cs</filename>
    </modified>
    <modified>
      <diff>@@ -138,15 +138,5 @@
       &lt;Name&gt;IronPython %28Languages\IronPython\IronPython%29&lt;/Name&gt;
     &lt;/ProjectReference&gt;
   &lt;/ItemGroup&gt;
-  &lt;ItemGroup&gt;
-    &lt;COMReference Include=&quot;Shell32&quot;&gt;
-      &lt;Guid&gt;{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}&lt;/Guid&gt;
-      &lt;VersionMajor&gt;1&lt;/VersionMajor&gt;
-      &lt;VersionMinor&gt;0&lt;/VersionMinor&gt;
-      &lt;Lcid&gt;0&lt;/Lcid&gt;
-      &lt;WrapperTool&gt;tlbimp&lt;/WrapperTool&gt;
-      &lt;Isolated&gt;False&lt;/Isolated&gt;
-    &lt;/COMReference&gt;
-  &lt;/ItemGroup&gt;
   &lt;Import Project=&quot;$(MSBuildBinPath)\Microsoft.CSharp.targets&quot; Condition=&quot; '$(SilverlightTreeBuild)' != 'true' &quot; /&gt;
 &lt;/Project&gt;
\ No newline at end of file</diff>
      <filename>Merlin/Main/Languages/IronPython/IronPythonTest/IronPythonTest.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -141,6 +141,16 @@ namespace IronRuby.Builtins {
             }
         }
 
+        [RubyClass(&quot;ENOEXEC&quot;, Extends = typeof(ExecFormatError), Inherits = typeof(ExternalException))]
+        public class ExecFormatErrorOps {
+            [RubyConstructor]
+            public static BadFileDescriptorError/*!*/ Create(RubyClass/*!*/ self, [DefaultProtocol, DefaultParameterValue(null)]MutableString message) {
+                var result = new BadFileDescriptorError(RubyExceptions.MakeMessage(ref message, &quot;Exec format error&quot;));
+                RubyExceptionData.InitializeException(result, message);
+                return result;
+            }
+        }
+
         [RubyClass(&quot;EPIPE&quot;), Serializable]
         public class PipeError : ExternalException {
             private const string/*!*/ M = &quot;Broken pipe&quot;;</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/Errno.cs</filename>
    </modified>
    <modified>
      <diff>@@ -20,6 +20,7 @@ using Microsoft.Scripting.Ast;
 #endif
 
 using System;
+using System.ComponentModel;
 using System.Diagnostics;
 using System.IO;
 using System.Runtime.InteropServices;
@@ -34,6 +35,7 @@ using Microsoft.Scripting.Utils;
 
 namespace IronRuby.Builtins {
     using Ast = Expression;
+    using Utils = IronRuby.Runtime.Utils;
 
     /// &lt;summary&gt;
     /// Implementation of IO builtin class. 
@@ -218,13 +220,10 @@ namespace IronRuby.Builtins {
 
             IOMode mode = IOModeEnum.Parse(modeString);
 
-            ProcessStartInfo startInfo = KernelOps.GetShell(context, command);
-            startInfo.UseShellExecute = false;
-
             bool redirectStandardInput = mode.CanWrite();
             bool redirectStandardOutput = mode.CanRead();
 
-            Process process = OpenPipe(context, command, redirectStandardInput, redirectStandardOutput, false);
+            Process process = RubyProcess.CreateProcess(context, command, redirectStandardInput, redirectStandardOutput, false);
 
             StreamReader reader = null;
             StreamWriter writer = null;
@@ -239,28 +238,6 @@ namespace IronRuby.Builtins {
             return new RubyIO(context, reader, writer, mode);
         }
 
-        internal static Process/*!*/ OpenPipe(RubyContext/*!*/ context, MutableString/*!*/ command, 
-            bool redirectStandardInput, bool redirectStandardOutput, bool redirectStandardError) {
-
-            ProcessStartInfo startInfo = KernelOps.GetShell(context, command);
-            startInfo.UseShellExecute = false;
-
-            startInfo.RedirectStandardInput = redirectStandardInput;
-            startInfo.RedirectStandardOutput = redirectStandardOutput;
-            startInfo.RedirectStandardError = redirectStandardError;
-
-            Process process;
-            try {
-                process = Process.Start(startInfo);
-            } catch (Exception e) {
-                throw RubyExceptions.CreateENOENT(startInfo.FileName, e);
-            }
-
-            context.ChildProcessExitStatus = new RubyProcess.Status(process);
-
-            return process;
-        }
-
 #endif
         #endregion
 
@@ -473,12 +450,49 @@ namespace IronRuby.Builtins {
             self.Flush();
         }
 
-        [RubyMethod(&quot;isatty&quot;)]
-        [RubyMethod(&quot;tty?&quot;)]
+        #region isatty
+        
+#if !SILVERLIGHT
+        [RubyMethod(&quot;isatty&quot;, BuildConfig = &quot;!SILVERLIGHT&quot;)]
+        [RubyMethod(&quot;tty?&quot;, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         public static bool IsAtty(RubyIO/*!*/ self) {
-            return self.IsConsole;
+            ConsoleStreamType? console = self.ConsoleStreamType;
+            if (console == null) {
+                return self.GetStream().BaseStream == Stream.Null;
+            }
+
+            IntPtr handle = GetStdHandle(GetStdHandleId(console.Value));
+            if (handle == IntPtr.Zero) {
+                throw new Win32Exception();
+            }
+
+            return GetFileType(handle) == FILE_TYPE_CHAR;
         }
 
+        private static int GetStdHandleId(ConsoleStreamType streamType) {
+            switch (streamType) {
+                case ConsoleStreamType.Input: return STD_INPUT_HANDLE;
+                case ConsoleStreamType.Output: return STD_OUTPUT_HANDLE;
+                case ConsoleStreamType.ErrorOutput: return STD_ERROR_HANDLE;
+                default: throw Assert.Unreachable;
+            }
+        }
+
+        private const int FILE_TYPE_CHAR = 0x0002;
+
+        private const int STD_INPUT_HANDLE = -10;
+        private const int STD_OUTPUT_HANDLE = -11;
+        private const int STD_ERROR_HANDLE = -12;
+
+        [DllImport(&quot;kernel32&quot;)]
+        private extern static IntPtr GetStdHandle(int nStdHandle);
+        
+        [DllImport(&quot;kernel32&quot;)]
+        private extern static int GetFileType(IntPtr hFile);
+#endif
+
+        #endregion
+
         [RubyMethod(&quot;sync&quot;)]
         public static bool Sync(RubyIO/*!*/ self) {
             self.RequireOpen();</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/IoOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -17,6 +17,7 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
+using System.IO;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
@@ -998,81 +999,16 @@ namespace IronRuby.Builtins {
         #region `, exec, system, fork, 1.9: spawn
 
 #if !SILVERLIGHT
-        // Looks for RUBYSHELL and then COMSPEC under Windows
-        internal static ProcessStartInfo/*!*/ GetShell(RubyContext/*!*/ context, MutableString/*!*/ command) {
-            PlatformAdaptationLayer pal = context.DomainManager.Platform;
-            string shell = pal.GetEnvironmentVariable(&quot;RUBYSHELL&quot;);
-            if (shell == null) {
-                shell = pal.GetEnvironmentVariable(&quot;COMSPEC&quot;);
-            }
-
-            if (shell == null) {
-                string[] commandParts = command.ConvertToString().Split(new char[] { ' ' }, 2);
-                return new ProcessStartInfo(commandParts[0], commandParts.Length == 2 ? commandParts[1] : null);
-            } else {
-                return new ProcessStartInfo(shell, String.Format(&quot;/C \&quot;{0}\&quot;&quot;, command.ConvertToString()));
-            }
-        }
-
-        private static MutableString/*!*/ JoinArguments(MutableString/*!*/[]/*!*/ args) {
-            MutableString result = MutableString.CreateMutable(RubyEncoding.Binary);
-
-            for (int i = 0; i &lt; args.Length; i++) {
-                result.Append(args[i]);
-                if (args.Length &gt; 1 &amp;&amp; i &lt; args.Length - 1) {
-                    result.Append(' ');
-                }
-            }
-
-            return result;
-        }
-
-        private static Process/*!*/ ExecuteProcessAndWait(ProcessStartInfo/*!*/ psi) {
-            psi.UseShellExecute = false;
-            psi.RedirectStandardError = true;
-            try {
-                Process p = Process.Start(psi);
-                p.WaitForExit();
-                return p;
-            } catch (Exception e) {
-                throw RubyExceptions.CreateENOENT(psi.FileName, e);
-            }
-        }
-
-        internal static Process/*!*/ ExecuteProcessCapturingStandardOutput(ProcessStartInfo/*!*/ psi) {
-            psi.UseShellExecute = false;
-            psi.RedirectStandardError = true;
-            psi.RedirectStandardOutput = true;
-
-            try {
-                return Process.Start(psi);
-            } catch (Exception e) {
-                throw RubyExceptions.CreateENOENT(psi.FileName, e);
-            }
-        }
-
-        // Executes a command in a shell child process
-        private static Process/*!*/ ExecuteCommandInShell(RubyContext/*!*/ context, MutableString/*!*/ command) {
-            return ExecuteProcessAndWait(GetShell(context, command));
-        }
-
-        // Executes a command directly in a child process - command is the name of the executable
-        private static Process/*!*/ ExecuteCommand(MutableString/*!*/ command, MutableString[]/*!*/ args) {
-            return ExecuteProcessAndWait(new ProcessStartInfo(command.ToString(), JoinArguments(args).ToString()));
-        }
-
-        // Backtick always executes the command in a shell child process
-
         [RubyMethod(&quot;`&quot;, RubyMethodAttributes.PrivateInstance, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         [RubyMethod(&quot;`&quot;, RubyMethodAttributes.PublicSingleton, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         public static MutableString/*!*/ ExecuteCommand(RubyContext/*!*/ context, object self, [DefaultProtocol, NotNull]MutableString/*!*/ command) {
-            Process p = ExecuteProcessCapturingStandardOutput(GetShell(context, command));
+            Process p = RubyProcess.CreateProcess(context, command, true);
+
             string output = p.StandardOutput.ReadToEnd();
             if (Environment.NewLine != &quot;\n&quot;) {
                 output = output.Replace(Environment.NewLine, &quot;\n&quot;);
             }
             MutableString result = MutableString.Create(output, RubyEncoding.GetRubyEncoding(p.StandardOutput.CurrentEncoding));
-            context.ChildProcessExitStatus = new RubyProcess.Status(p);
             return result;
         }
 
@@ -1082,8 +1018,8 @@ namespace IronRuby.Builtins {
         [RubyMethod(&quot;exec&quot;, RubyMethodAttributes.PrivateInstance, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         [RubyMethod(&quot;exec&quot;, RubyMethodAttributes.PublicSingleton, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         public static void Execute(RubyContext/*!*/ context, object self, [DefaultProtocol, NotNull]MutableString/*!*/ command) {
-            Process p = ExecuteCommandInShell(context, command);
-            context.ChildProcessExitStatus = new RubyProcess.Status(p);
+            Process p = RubyProcess.CreateProcess(context, command, false);
+            p.WaitForExit();
             Exit(self, p.ExitCode);
         }
 
@@ -1091,26 +1027,32 @@ namespace IronRuby.Builtins {
         [RubyMethod(&quot;exec&quot;, RubyMethodAttributes.PublicSingleton, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         public static void Execute(RubyContext/*!*/ context, object self, [DefaultProtocol, NotNull]MutableString/*!*/ command,
             [DefaultProtocol, NotNull, NotNullItems]params MutableString[]/*!*/ args) {
-            Process p = ExecuteCommand(command, args);
-            context.ChildProcessExitStatus = new RubyProcess.Status(p);
+            Process p = RubyProcess.CreateProcess(context, command, args);
             Exit(self, p.ExitCode);
         }
 
         [RubyMethod(&quot;system&quot;, RubyMethodAttributes.PrivateInstance, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         [RubyMethod(&quot;system&quot;, RubyMethodAttributes.PublicSingleton, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         public static bool System(RubyContext/*!*/ context, object self, [DefaultProtocol, NotNull]MutableString/*!*/ command) {
-            Process p = ExecuteCommandInShell(context, command);
-            context.ChildProcessExitStatus = new RubyProcess.Status(p);
-            return p.ExitCode == 0;
+            try {
+                Process p = RubyProcess.CreateProcess(context, command, false);
+                p.WaitForExit();
+                return p.ExitCode == 0;
+            } catch (FileNotFoundException) {
+                return false;
+            }
         }
 
         [RubyMethod(&quot;system&quot;, RubyMethodAttributes.PrivateInstance, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         [RubyMethod(&quot;system&quot;, RubyMethodAttributes.PublicSingleton, BuildConfig = &quot;!SILVERLIGHT&quot;)]
         public static bool System(RubyContext/*!*/ context, object self, [DefaultProtocol, NotNull]MutableString/*!*/ command,
             [DefaultProtocol, NotNull, NotNullItems]params MutableString/*!*/[]/*!*/ args) {
-            Process p = ExecuteCommand(command, args);
-            context.ChildProcessExitStatus = new RubyProcess.Status(p);
-            return p.ExitCode == 0;
+            try {
+                Process p = RubyProcess.CreateProcess(context, command, args);
+                return p.ExitCode == 0;
+            } catch (FileNotFoundException) {
+                return false;
+            }
         }
 
         //fork</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/KernelOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -21,6 +21,8 @@ using Microsoft.Scripting;
 using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Utils;
 using IronRuby.Runtime;
+using System.Collections.Generic;
+using System.IO;
 
 namespace IronRuby.Builtins {
 
@@ -29,12 +31,287 @@ namespace IronRuby.Builtins {
     /// &lt;/summary&gt;
     [RubyModule(&quot;Process&quot;, BuildConfig = &quot;!SILVERLIGHT&quot;)]
     public static class RubyProcess {
-        
+        #region Utils
+
+        internal static Process/*!*/ CreateProcess(RubyContext/*!*/ context, MutableString/*!*/ command, MutableString[]/*!*/ args) {
+            var psi = new ProcessStartInfo(command.ToString(), JoinArguments(args).ToString());
+            psi.UseShellExecute = false;
+            psi.RedirectStandardError = true;
+            try {
+                Utils.Log(String.Format(&quot;Starting: '{0}' with args: '{1}'&quot;, psi.FileName, psi.Arguments), &quot;PROCESS&quot;);
+                Process p = Process.Start(psi);
+                p.WaitForExit();
+                context.ChildProcessExitStatus = new RubyProcess.Status(p);
+                return p;
+            } catch (Exception e) {
+                throw RubyExceptions.CreateENOENT(psi.FileName, e);
+            }
+        }
+
+        internal static Process/*!*/ CreateProcess(RubyContext/*!*/ context, MutableString/*!*/ command, bool redirectOutput) {
+            return CreateProcess(context, command, false, redirectOutput, false);
+        }
+
+        internal static Process/*!*/ CreateProcess(RubyContext/*!*/ context, MutableString/*!*/ command,
+            bool redirectInput, bool redirectOutput, bool redirectErrorOutput) {
+
+            string fileName, arguments;
+            RubyProcess.GetExecutable(context.DomainManager.Platform, command.ToString(), out fileName, out arguments);
+            Utils.Log(String.Format(&quot;Starting: '{0}' with args: '{1}'&quot;, fileName, arguments), &quot;PROCESS&quot;);
+
+            var p = new Process();
+            p.StartInfo.FileName = fileName;
+            p.StartInfo.Arguments = arguments;
+            p.StartInfo.UseShellExecute = false;
+            p.StartInfo.RedirectStandardInput = redirectInput;
+            p.StartInfo.RedirectStandardOutput = redirectOutput;
+            p.StartInfo.RedirectStandardError = redirectErrorOutput;
+            try {
+                p.Start();
+            } catch (Exception e) {
+                throw RubyExceptions.CreateENOENT(fileName, e);
+            }
+
+            context.ChildProcessExitStatus = new RubyProcess.Status(p);
+            return p;
+        }
+
+        private static void GetExecutable(PlatformAdaptationLayer/*!*/ pal, string/*!*/ command, out string executable, out string arguments) {
+            command = command.Trim(' ');
+            if (command.Length == 0) {
+                throw RubyExceptions.CreateEINVAL(command);
+            }
+
+            // This seems to be quite complicated:
+            // 1) If the first part of the command is a shell command (DIR, ECHO, ...) or
+            //    if the command contains unquoted &lt;, &gt; or | then
+            //    it uses ENV['COMSPEC'] to execute the command: %COMSPEC% /c &quot;COMMAND&quot;
+            // 2) It looks for the shortest prefix of command that is separated by space from the rest of the command that is either
+            //      a) An absolute path to an executable file.
+            //      b) Try prepend paths from ENV['PATH']
+            //      c) Try Environment.SpecialFolder.System.
+            //      d) Try SHGetFolderPath(CSIDL_WINDOWS) - we can't get this from Environment.SpecialFolder, so we need to use 
+            //         ENV[&quot;SystemRoot&quot;] environment variable.
+            //    In each step it tries to append &quot;.exe&quot; or &quot;.com&quot; extension if the path doesn't exist.
+            // 
+            //    For example, if the command is `x/a b/x` and the directory structure is
+            //      x\a b\x.exe
+            //      x\a.exe
+            //    it executes a.exe.
+            //    
+            //    MRI probably calls CreateProcess Win32 API with lpApplicationName it resolves as described above and 
+            //    lpCommandLine == command. System.Diagnostics.Process also uses this API with lpApplicationName == NULL and 
+            //    lpCommandLine == '&quot;{ProcessStartInfo.FileName}&quot; {ProcessStartInfo.Arguments}'.
+            //
+            //    Although CreateProcess does all the searching for an executable if passed no lpApplicationName, 
+            //    we need to do it ourselves because it is slightly different in MRI (is that a bug?) and also because System.Diagnostics.Process 
+            //    quotes the FileName :(
+            //    
+
+            string comspec = pal.GetEnvironmentVariable(&quot;COMSPEC&quot;);
+            if (!pal.FileExists(comspec)) {
+                comspec = null;
+            }
+
+            if (comspec != null &amp;&amp; IndexOfUnquotedSpecialCharacter(command) &gt;= 0) {
+                executable = comspec;
+                arguments = &quot;/c \&quot;&quot; + command + &quot;\&quot;&quot;;
+                return;
+            }
+
+            int start = 0;
+            while (true) {
+                int next = command.IndexOf(' ', start);
+
+                executable = (next &gt;= 0) ? command.Substring(0, next) : command;
+                arguments = (next &gt;= 0) ? command.Substring(next + 1) : &quot;&quot;;
+
+                if (start == 0 &amp;&amp; comspec != null &amp;&amp; IsShellCommand(executable)) {
+                    executable = comspec;
+                    arguments = &quot;/c \&quot;&quot; + command + &quot;\&quot;&quot;;
+                    return;
+                }
+
+                try {
+                    foreach (var path in GetExecutableFiles(pal, executable)) {
+                        if (pal.FileExists(path)) {
+                            // We need to set the path we found as executable. Althought makes command line of the target process
+                            // different from when called by MRI it will execute the right process. If we passed the original executable name
+                            // CreateProcess might resolve it to a different executable.
+                            executable = path;
+                            return;
+                        }
+                    }
+                } catch (Exception e) {
+                    if (next &lt; 0) {
+                        throw RubyExceptions.CreateENOENT(command, e);
+                    }
+                }
+
+                if (next &lt; 0) {
+                    throw RubyExceptions.CreateENOENT(command);
+                }
+
+                start = next + 1;
+                while (start &lt; command.Length &amp;&amp; command[start] == ' ') {
+                    start++;
+                }
+            }
+        }
+
+        private static int IndexOfUnquotedSpecialCharacter(string/*!*/ str) {
+            bool inDoubleQuote = false;
+            bool inSingleQuote = false;
+            for (int i = 0; i &lt; str.Length; i++) {
+                char c = str[i];
+                if (c == '&quot;') {
+                    inDoubleQuote = !inDoubleQuote;
+                } else if (c == '\'') {
+                    inSingleQuote = !inSingleQuote;
+                } else if (c == '&gt;' || c == '&lt;' || c == '|') {
+                    if (!inSingleQuote &amp;&amp; !inDoubleQuote) {
+                        return i;
+                    }
+                }
+            }
+            return -1;
+        }
+
+        private static string[] _ExecutableExtensions = new[] { &quot;.exe&quot;, &quot;.com&quot; };
+
+        private static IEnumerable&lt;string&gt;/*!*/ GetExecutableFiles(PlatformAdaptationLayer/*!*/ pal, string/*!*/ path) {
+            if (path[0] == '&quot;' || path[path.Length - 1] == '&quot;') {
+                if (path.Length &gt;= 3 &amp;&amp; path[0] == '&quot;' &amp;&amp; path[path.Length - 1] == '&quot;') {
+                    path = path.Substring(1, path.Length - 2);
+                } else {
+                    yield break;
+                }
+            }
+
+            string extension = Path.GetExtension(path);
+            bool hasExtension = !String.IsNullOrEmpty(extension);
+            bool isExecutable = hasExtension &amp;&amp; Array.IndexOf(_ExecutableExtensions, extension.ToLowerInvariant()) &gt;= 0;
+
+            if (!hasExtension || isExecutable) {
+                foreach (var fullPath in GetAbsolutePaths(pal, path)) {
+                    if (hasExtension) {
+                        yield return fullPath;
+                    } else {
+                        foreach (var ext in _ExecutableExtensions) {
+                            yield return fullPath + ext;
+                        }
+                    }
+                }
+            }
+        }
+
+        private static IEnumerable&lt;string&gt;/*!*/ GetAbsolutePaths(PlatformAdaptationLayer/*!*/ pal, string/*!*/ path) {
+            if (pal.IsAbsolutePath(path)) {
+                yield return path;
+            } else {
+                yield return pal.GetFullPath(path);
+
+                string var = pal.GetEnvironmentVariable(&quot;PATH&quot;);
+                if (!String.IsNullOrEmpty(var)) {
+                    foreach (var prefix in var.Split(Path.PathSeparator)) {
+                        if (prefix.Length &gt; 0) {
+                            yield return Path.Combine(prefix, path);
+                        }
+                    }
+                }
+
+                var = Environment.GetFolderPath(Environment.SpecialFolder.System);
+                if (!String.IsNullOrEmpty(var)) {
+                    yield return Path.Combine(var, path);
+                }
+
+                var = pal.GetEnvironmentVariable(&quot;SystemRoot&quot;);
+                if (!String.IsNullOrEmpty(var)) {
+                    yield return Path.Combine(var, path);
+                }
+            }
+        }
+
+        private static bool IsShellCommand(string/*!*/ str) {
+            if (Environment.OSVersion.Platform != PlatformID.Win32NT &amp;&amp;
+                Environment.OSVersion.Platform != PlatformID.Win32Windows) {
+                return false;
+            }
+
+            switch (str.ToUpperInvariant()) {
+                case &quot;ASSOC&quot;:
+                case &quot;BREAK&quot;:
+                case &quot;CALL&quot;:
+                case &quot;CD&quot;:
+                case &quot;CHDIR&quot;:
+                case &quot;CLS&quot;:
+                case &quot;COLOR&quot;:
+                case &quot;COPY&quot;:
+                case &quot;DATE&quot;:
+                case &quot;DEL&quot;:
+                case &quot;DIR&quot;:
+                case &quot;ECHO&quot;:
+                case &quot;ENDLOCAL&quot;:
+                case &quot;ERASE&quot;:
+                case &quot;EXIT&quot;:
+                case &quot;FOR&quot;:
+                case &quot;FTYPE&quot;:
+                case &quot;GOTO&quot;:
+                case &quot;IF&quot;:
+                case &quot;MD&quot;:
+                case &quot;MKDIR&quot;:
+                case &quot;MOVE&quot;:
+                case &quot;PATH&quot;:
+                case &quot;PAUSE&quot;:
+                case &quot;POPD&quot;:
+                case &quot;PROMPT&quot;:
+                case &quot;PUSHD&quot;:
+                case &quot;RD&quot;:
+                case &quot;REM&quot;:
+                case &quot;REN&quot;:
+                case &quot;RENAME&quot;:
+                case &quot;RMDIR&quot;:
+                case &quot;SET&quot;:
+                case &quot;SETLOCAL&quot;:
+                case &quot;SHIFT&quot;:
+                case &quot;START&quot;:
+                case &quot;TIME&quot;:
+                case &quot;TITLE&quot;:
+                case &quot;TYPE&quot;:
+                case &quot;VER&quot;:
+                case &quot;VERIFY&quot;:
+                case &quot;VOL&quot;:
+                    return true;
+
+                case &quot;MKLINK&quot;:
+                    return Environment.OSVersion.Version.Major &gt;= 6; // Vista and later
+            };
+            return false;
+        }
+
+        private static MutableString/*!*/ JoinArguments(MutableString/*!*/[]/*!*/ args) {
+            MutableString result = MutableString.CreateMutable(RubyEncoding.Binary);
+
+            for (int i = 0; i &lt; args.Length; i++) {
+                result.Append(args[i]);
+                if (args.Length &gt; 1 &amp;&amp; i &lt; args.Length - 1) {
+                    result.Append(' ');
+                }
+            }
+
+            return result;
+        }
+
+        #endregion
+
+        #region Status
+
         [RubyClass(&quot;Status&quot;, BuildConfig = &quot;!SILVERLIGHT&quot;)]
-        public class Status {
+        [HideMethod(&quot;new&quot;, IsStatic = true)]
+        public sealed class Status {
             private readonly Process/*!*/ _process;
 
-            public Status(Process/*!*/ process) {
+            internal Status(Process/*!*/ process) {
                 _process = process;
             }
 
@@ -81,8 +358,19 @@ namespace IronRuby.Builtins {
                 // Always nil on Windows
                 return null;
             }
+
+            [RubyMethod(&quot;inspect&quot;)]
+            public static MutableString/*!*/ Inspect(Status/*!*/ self) {
+                return MutableString.CreateAscii(String.Format(&quot;#&lt;Process::Status: pid={0},{1}({2})&gt;&quot;, 
+                    Pid(self),
+                    Exited(self) ? &quot;exited&quot; : &quot;running&quot;,
+                    ExitStatus(self)
+                ));
+            }
         }
 
+        #endregion
+
         // abort
         // detach
         // egid
@@ -183,6 +471,8 @@ namespace IronRuby.Builtins {
         // waitpid2  
     }
 
+    #region Struct::Tms
+
     public static partial class RubyStructOps {
         #region Tms
 
@@ -235,5 +525,7 @@ namespace IronRuby.Builtins {
 
         #endregion
     }
+
+    #endregion
 }
 #endif</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/RubyProcess.cs</filename>
    </modified>
    <modified>
      <diff>@@ -5,4 +5,4 @@ if &quot;%1&quot; == &quot;-4&quot; (
   set DIR=%MERLIN_ROOT%\Bin\Debug
 )
 
-&quot;%DIR%\ClassInitGenerator&quot; &quot;%DIR%\IronRuby.Libraries.dll&quot; /libraries:IronRuby.Builtins;IronRuby.StandardLibrary.Threading;IronRuby.StandardLibrary.Sockets;IronRuby.StandardLibrary.OpenSsl;IronRuby.StandardLibrary.Digest;IronRuby.StandardLibrary.Zlib;IronRuby.StandardLibrary.StringIO;IronRuby.StandardLibrary.StringScanner;IronRuby.StandardLibrary.Enumerator;IronRuby.StandardLibrary.FunctionControl;IronRuby.StandardLibrary.FileControl;IronRuby.StandardLibrary.BigDecimal;IronRuby.StandardLibrary.Iconv;IronRuby.StandardLibrary.ParseTree;IronRuby.StandardLibrary.Open3 /out:%~dp0\Initializers.Generated.cs
+&quot;%DIR%\ClassInitGenerator&quot; &quot;%DIR%\IronRuby.Libraries.dll&quot; /libraries:IronRuby.Builtins;IronRuby.StandardLibrary.Threading;IronRuby.StandardLibrary.Sockets;IronRuby.StandardLibrary.OpenSsl;IronRuby.StandardLibrary.Digest;IronRuby.StandardLibrary.Zlib;IronRuby.StandardLibrary.StringIO;IronRuby.StandardLibrary.StringScanner;IronRuby.StandardLibrary.Enumerator;IronRuby.StandardLibrary.FunctionControl;IronRuby.StandardLibrary.FileControl;IronRuby.StandardLibrary.BigDecimal;IronRuby.StandardLibrary.Iconv;IronRuby.StandardLibrary.ParseTree;IronRuby.StandardLibrary.Open3;IronRuby.StandardLibrary.Win32API /out:%~dp0\Initializers.Generated.cs</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/GenerateInitializers.cmd</filename>
    </modified>
    <modified>
      <diff>@@ -28,6 +28,7 @@
 [assembly: IronRuby.Runtime.RubyLibraryAttribute(typeof(IronRuby.StandardLibrary.Iconv.IconvLibraryInitializer))]
 [assembly: IronRuby.Runtime.RubyLibraryAttribute(typeof(IronRuby.StandardLibrary.ParseTree.ParseTreeLibraryInitializer))]
 [assembly: IronRuby.Runtime.RubyLibraryAttribute(typeof(IronRuby.StandardLibrary.Open3.Open3LibraryInitializer))]
+[assembly: IronRuby.Runtime.RubyLibraryAttribute(typeof(IronRuby.StandardLibrary.Win32API.Win32APILibraryInitializer))]
 
 namespace IronRuby.Builtins {
     using System;
@@ -48,29 +49,29 @@ namespace IronRuby.Builtins {
             
             // Skipped primitive: __ClassSingleton
             // Skipped primitive: __MainSingleton
-            IronRuby.Builtins.RubyModule def44 = DefineGlobalModule(&quot;Comparable&quot;, typeof(IronRuby.Builtins.Comparable), 0x00000107, LoadComparable_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyModule def35 = DefineGlobalModule(&quot;Enumerable&quot;, typeof(IronRuby.Builtins.Enumerable), 0x00000107, LoadEnumerable_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def45 = DefineGlobalModule(&quot;Comparable&quot;, typeof(IronRuby.Builtins.Comparable), 0x00000107, LoadComparable_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def36 = DefineGlobalModule(&quot;Enumerable&quot;, typeof(IronRuby.Builtins.Enumerable), 0x00000107, LoadEnumerable_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def2 = DefineGlobalModule(&quot;Errno&quot;, typeof(IronRuby.Builtins.Errno), 0x00000107, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyModule def26 = DefineModule(&quot;File::Constants&quot;, typeof(IronRuby.Builtins.RubyFileOps.Constants), 0x00000107, null, null, LoadFile__Constants_Constants, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def27 = DefineModule(&quot;File::Constants&quot;, typeof(IronRuby.Builtins.RubyFileOps.Constants), 0x00000107, null, null, LoadFile__Constants_Constants, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalModule(&quot;FileTest&quot;, typeof(IronRuby.Builtins.FileTest), 0x00000107, null, LoadFileTest_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalModule(&quot;GC&quot;, typeof(IronRuby.Builtins.RubyGC), 0x00000107, LoadGC_Instance, LoadGC_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyModule def22 = DefineGlobalModule(&quot;IronRuby&quot;, typeof(IronRuby.Ruby), 0x00000004, null, LoadIronRuby_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def23 = DefineGlobalModule(&quot;IronRuby&quot;, typeof(IronRuby.Ruby), 0x00000004, null, LoadIronRuby_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def4 = DefineModule(&quot;IronRuby::Clr&quot;, typeof(IronRuby.Builtins.IronRubyOps.ClrOps), 0x00000100, null, LoadIronRuby__Clr_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def5 = DefineModule(&quot;IronRuby::Clr::BigInteger&quot;, typeof(IronRuby.Builtins.ClrBigInteger), 0x00000107, LoadIronRuby__Clr__BigInteger_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyModule def20 = DefineModule(&quot;IronRuby::Clr::FlagEnumeration&quot;, typeof(IronRuby.Builtins.FlagEnumeration), 0x00000000, LoadIronRuby__Clr__FlagEnumeration_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def21 = DefineModule(&quot;IronRuby::Clr::FlagEnumeration&quot;, typeof(IronRuby.Builtins.FlagEnumeration), 0x00000000, LoadIronRuby__Clr__FlagEnumeration_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def6 = DefineModule(&quot;IronRuby::Clr::Float&quot;, typeof(IronRuby.Builtins.ClrFloat), 0x00000107, LoadIronRuby__Clr__Float_Instance, LoadIronRuby__Clr__Float_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def7 = DefineModule(&quot;IronRuby::Clr::Integer&quot;, typeof(IronRuby.Builtins.ClrInteger), 0x00000107, LoadIronRuby__Clr__Integer_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyModule def23 = DefineModule(&quot;IronRuby::Clr::MultiDimensionalArray&quot;, typeof(IronRuby.Builtins.MultiDimensionalArray), 0x00000000, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def24 = DefineModule(&quot;IronRuby::Clr::MultiDimensionalArray&quot;, typeof(IronRuby.Builtins.MultiDimensionalArray), 0x00000000, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             IronRuby.Builtins.RubyModule def8 = DefineModule(&quot;IronRuby::Clr::String&quot;, typeof(IronRuby.Builtins.ClrString), 0x00000107, LoadIronRuby__Clr__String_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyModule def24 = DefineModule(&quot;IronRuby::Print&quot;, typeof(IronRuby.Builtins.PrintOps), 0x00000107, LoadIronRuby__Print_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def25 = DefineModule(&quot;IronRuby::Print&quot;, typeof(IronRuby.Builtins.PrintOps), 0x00000107, LoadIronRuby__Print_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             // Skipped primitive: Kernel
             DefineGlobalModule(&quot;Marshal&quot;, typeof(IronRuby.Builtins.RubyMarshal), 0x00000107, null, LoadMarshal_Class, LoadMarshal_Constants, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalModule(&quot;Math&quot;, typeof(IronRuby.Builtins.RubyMath), 0x00000107, LoadMath_Instance, LoadMath_Class, LoadMath_Constants, IronRuby.Builtins.RubyModule.EmptyArray);
             ExtendClass(typeof(Microsoft.Scripting.Actions.TypeTracker), null, LoadMicrosoft__Scripting__Actions__TypeTracker_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalModule(&quot;ObjectSpace&quot;, typeof(IronRuby.Builtins.ObjectSpace), 0x00000107, null, LoadObjectSpace_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyModule def41 = DefineGlobalModule(&quot;Precision&quot;, typeof(IronRuby.Builtins.Precision), 0x00000107, LoadPrecision_Instance, LoadPrecision_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def42 = DefineGlobalModule(&quot;Precision&quot;, typeof(IronRuby.Builtins.Precision), 0x00000107, LoadPrecision_Instance, LoadPrecision_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             #if !SILVERLIGHT
-            IronRuby.Builtins.RubyModule def27 = DefineGlobalModule(&quot;Process&quot;, typeof(IronRuby.Builtins.RubyProcess), 0x00000107, LoadProcess_Instance, LoadProcess_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyModule def28 = DefineGlobalModule(&quot;Process&quot;, typeof(IronRuby.Builtins.RubyProcess), 0x00000107, LoadProcess_Instance, LoadProcess_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             #endif
             #if !SILVERLIGHT
             DefineGlobalModule(&quot;Signal&quot;, typeof(IronRuby.Builtins.Signal), 0x00000107, null, LoadSignal_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
@@ -78,258 +79,261 @@ namespace IronRuby.Builtins {
             ExtendClass(typeof(System.Type), null, LoadSystem__Type_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             // Skipped primitive: __ClassSingletonSingleton
             #if !SILVERLIGHT
-            object def1 = DefineSingleton(Load__Singleton_ArgFilesSingletonOps_Instance, null, null, def35);
+            object def1 = DefineSingleton(Load__Singleton_ArgFilesSingletonOps_Instance, null, null, def36);
             #endif
-            object def9 = DefineSingleton(Load__Singleton_EnvironmentSingletonOps_Instance, null, null, def35);
-            ExtendClass(typeof(Microsoft.Scripting.Actions.TypeGroup), null, LoadMicrosoft__Scripting__Actions__TypeGroup_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def35});
+            object def9 = DefineSingleton(Load__Singleton_EnvironmentSingletonOps_Instance, null, null, def36);
+            ExtendClass(typeof(Microsoft.Scripting.Actions.TypeGroup), null, LoadMicrosoft__Scripting__Actions__TypeGroup_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def36});
             // Skipped primitive: Object
-            ExtendClass(typeof(System.Char), null, null, null, null, new IronRuby.Builtins.RubyModule[] {def8, def35, def44}, 
+            ExtendClass(typeof(System.Char), null, null, null, null, new IronRuby.Builtins.RubyModule[] {def8, def36, def45}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Char, System.Char&gt;(IronRuby.Builtins.CharOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Char[], System.Char&gt;(IronRuby.Builtins.CharOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.String, System.Char&gt;(IronRuby.Builtins.CharOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.Char&gt;(IronRuby.Builtins.CharOps.Create)
             );
-            ExtendModule(typeof(System.Collections.Generic.IDictionary&lt;System.Object, System.Object&gt;), LoadSystem__Collections__Generic__IDictionary_Instance, null, null, def35);
-            ExtendModule(typeof(System.Collections.IEnumerable), LoadSystem__Collections__IEnumerable_Instance, null, null, def35);
-            ExtendModule(typeof(System.Collections.IList), LoadSystem__Collections__IList_Instance, null, null, def35);
-            ExtendModule(typeof(System.IComparable), LoadSystem__IComparable_Instance, null, null, def44);
-            ExtendClass(typeof(System.String), null, null, null, null, new IronRuby.Builtins.RubyModule[] {def8, def35, def44}, 
+            ExtendModule(typeof(System.Collections.Generic.IDictionary&lt;System.Object, System.Object&gt;), LoadSystem__Collections__Generic__IDictionary_Instance, null, null, def36);
+            ExtendModule(typeof(System.Collections.IEnumerable), LoadSystem__Collections__IEnumerable_Instance, null, null, def36);
+            ExtendModule(typeof(System.Collections.IList), LoadSystem__Collections__IList_Instance, null, null, def36);
+            ExtendModule(typeof(System.IComparable), LoadSystem__IComparable_Instance, null, null, def45);
+            ExtendClass(typeof(System.String), null, null, null, null, new IronRuby.Builtins.RubyModule[] {def8, def36, def45}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.String&gt;(IronRuby.Builtins.ClrStringOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Char, System.Int32, System.String&gt;(IronRuby.Builtins.ClrStringOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Char[], System.String&gt;(IronRuby.Builtins.ClrStringOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Char[], System.Int32, System.Int32, System.String&gt;(IronRuby.Builtins.ClrStringOps.Create)
             );
-            DefineGlobalClass(&quot;Array&quot;, typeof(IronRuby.Builtins.RubyArray), 0x00000007, Context.ObjectClass, LoadArray_Instance, LoadArray_Class, null, new IronRuby.Builtins.RubyModule[] {def35}, 
+            DefineGlobalClass(&quot;Array&quot;, typeof(IronRuby.Builtins.RubyArray), 0x00000007, Context.ObjectClass, LoadArray_Instance, LoadArray_Class, null, new IronRuby.Builtins.RubyModule[] {def36}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.RubyArray&gt;(IronRuby.Builtins.ArrayOps.CreateArray), 
                 new Func&lt;IronRuby.Runtime.ConversionStorage&lt;IronRuby.Runtime.Union&lt;System.Collections.IList, System.Int32&gt;&gt;, IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, System.Object, System.Object&gt;(IronRuby.Builtins.ArrayOps.CreateArray), 
                 new Func&lt;IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, System.Int32, System.Object, IronRuby.Builtins.RubyArray&gt;(IronRuby.Builtins.ArrayOps.CreateArray), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.Object, IronRuby.Builtins.RubyArray&gt;(IronRuby.Builtins.ArrayOps.CreateArray)
             );
             DefineGlobalClass(&quot;Binding&quot;, typeof(IronRuby.Builtins.Binding), 0x00000007, Context.ObjectClass, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            DefineGlobalClass(&quot;Dir&quot;, typeof(IronRuby.Builtins.RubyDir), 0x00000107, Context.ObjectClass, LoadDir_Instance, LoadDir_Class, null, new IronRuby.Builtins.RubyModule[] {def35});
+            DefineGlobalClass(&quot;Dir&quot;, typeof(IronRuby.Builtins.RubyDir), 0x00000107, Context.ObjectClass, LoadDir_Instance, LoadDir_Class, null, new IronRuby.Builtins.RubyModule[] {def36});
             #if !SILVERLIGHT
             if (Context.RubyOptions.Compatibility &gt;= RubyCompatibility.Ruby19) {
             DefineGlobalClass(&quot;Encoding&quot;, typeof(IronRuby.Builtins.RubyEncoding), 0x00000007, Context.ObjectClass, LoadEncoding_Instance, LoadEncoding_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             }
             #endif
-            IronRuby.Builtins.RubyClass def45 = Context.ExceptionClass = DefineGlobalClass(&quot;Exception&quot;, typeof(System.Exception), 0x00000007, Context.ObjectClass, LoadException_Instance, LoadException_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def46 = Context.ExceptionClass = DefineGlobalClass(&quot;Exception&quot;, typeof(System.Exception), 0x00000007, Context.ObjectClass, LoadException_Instance, LoadException_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__Exception));
             Context.FalseClass = DefineGlobalClass(&quot;FalseClass&quot;, typeof(IronRuby.Builtins.FalseClass), 0x00000107, Context.ObjectClass, LoadFalseClass_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             #if !SILVERLIGHT
-            IronRuby.Builtins.RubyClass def33 = DefineClass(&quot;File::Stat&quot;, typeof(System.IO.FileSystemInfo), 0x00000007, Context.ObjectClass, LoadFile__Stat_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def44}, 
+            IronRuby.Builtins.RubyClass def34 = DefineClass(&quot;File::Stat&quot;, typeof(System.IO.FileSystemInfo), 0x00000007, Context.ObjectClass, LoadFile__Stat_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def45}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.IO.FileSystemInfo&gt;(IronRuby.Builtins.RubyFileOps.RubyStatOps.Create)
             );
             #endif
-            DefineGlobalClass(&quot;Hash&quot;, typeof(IronRuby.Builtins.Hash), 0x00000007, Context.ObjectClass, LoadHash_Instance, LoadHash_Class, null, new IronRuby.Builtins.RubyModule[] {def35}, 
+            DefineGlobalClass(&quot;Hash&quot;, typeof(IronRuby.Builtins.Hash), 0x00000007, Context.ObjectClass, LoadHash_Instance, LoadHash_Class, null, new IronRuby.Builtins.RubyModule[] {def36}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.Hash&gt;(IronRuby.Builtins.HashOps.CreateHash), 
                 new Func&lt;IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, System.Object, IronRuby.Builtins.Hash&gt;(IronRuby.Builtins.HashOps.CreateHash), 
                 new Func&lt;IronRuby.Runtime.BlockParam, IronRuby.Builtins.RubyClass, IronRuby.Builtins.Hash&gt;(IronRuby.Builtins.HashOps.CreateHash)
             );
-            IronRuby.Builtins.RubyClass def46 = DefineGlobalClass(&quot;IO&quot;, typeof(IronRuby.Builtins.RubyIO), 0x00000007, Context.ObjectClass, LoadIO_Instance, LoadIO_Class, LoadIO_Constants, new IronRuby.Builtins.RubyModule[] {def26, def35}, 
+            IronRuby.Builtins.RubyClass def47 = DefineGlobalClass(&quot;IO&quot;, typeof(IronRuby.Builtins.RubyIO), 0x00000007, Context.ObjectClass, LoadIO_Instance, LoadIO_Class, LoadIO_Constants, new IronRuby.Builtins.RubyModule[] {def27, def36}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, IronRuby.Builtins.MutableString, IronRuby.Builtins.RubyIO&gt;(IronRuby.Builtins.RubyIOOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.Int32, IronRuby.Builtins.RubyIO&gt;(IronRuby.Builtins.RubyIOOps.Create)
             );
-            IronRuby.Builtins.RubyClass def29 = DefineClass(&quot;IronRuby::Clr::Name&quot;, typeof(IronRuby.Runtime.ClrName), 0x00000007, Context.ObjectClass, LoadIronRuby__Clr__Name_Instance, LoadIronRuby__Clr__Name_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def30 = DefineClass(&quot;IronRuby::Clr::Scope&quot;, typeof(Microsoft.Scripting.Runtime.Scope), 0x00000007, Context.ObjectClass, LoadIronRuby__Clr__Scope_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def30 = DefineClass(&quot;IronRuby::Clr::Name&quot;, typeof(IronRuby.Runtime.ClrName), 0x00000007, Context.ObjectClass, LoadIronRuby__Clr__Name_Instance, LoadIronRuby__Clr__Name_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def31 = DefineClass(&quot;IronRuby::Clr::Scope&quot;, typeof(Microsoft.Scripting.Runtime.Scope), 0x00000007, Context.ObjectClass, LoadIronRuby__Clr__Scope_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalClass(&quot;MatchData&quot;, typeof(IronRuby.Builtins.MatchData), 0x00000007, Context.ObjectClass, LoadMatchData_Instance, LoadMatchData_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalClass(&quot;Method&quot;, typeof(IronRuby.Builtins.RubyMethod), 0x00000007, Context.ObjectClass, LoadMethod_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             // Skipped primitive: Module
             Context.NilClass = DefineGlobalClass(&quot;NilClass&quot;, typeof(Microsoft.Scripting.Runtime.DynamicNull), 0x00000007, Context.ObjectClass, LoadNilClass_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def40 = DefineGlobalClass(&quot;Numeric&quot;, typeof(IronRuby.Builtins.Numeric), 0x00000107, Context.ObjectClass, LoadNumeric_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def44});
+            IronRuby.Builtins.RubyClass def41 = DefineGlobalClass(&quot;Numeric&quot;, typeof(IronRuby.Builtins.Numeric), 0x00000107, Context.ObjectClass, LoadNumeric_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def45});
             DefineGlobalClass(&quot;Proc&quot;, typeof(IronRuby.Builtins.Proc), 0x00000007, Context.ObjectClass, LoadProc_Instance, LoadProc_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Action&lt;IronRuby.Builtins.RubyClass, System.Object[]&gt;(IronRuby.Builtins.ProcOps.Error)
             );
             #if !SILVERLIGHT &amp;&amp; !SILVERLIGHT
-            IronRuby.Builtins.RubyClass def28 = DefineClass(&quot;Process::Status&quot;, typeof(IronRuby.Builtins.RubyProcess.Status), 0x00000107, Context.ObjectClass, LoadProcess__Status_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def29 = DefineClass(&quot;Process::Status&quot;, typeof(IronRuby.Builtins.RubyProcess.Status), 0x00000107, Context.ObjectClass, LoadProcess__Status_Instance, LoadProcess__Status_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             #endif
-            DefineGlobalClass(&quot;Range&quot;, typeof(IronRuby.Builtins.Range), 0x00000007, Context.ObjectClass, LoadRange_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def35}, 
+            DefineGlobalClass(&quot;Range&quot;, typeof(IronRuby.Builtins.Range), 0x00000007, Context.ObjectClass, LoadRange_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def36}, 
                 new Func&lt;IronRuby.Runtime.BinaryOpStorage, IronRuby.Builtins.RubyClass, System.Object, System.Object, System.Boolean, IronRuby.Builtins.Range&gt;(IronRuby.Builtins.RangeOps.CreateRange)
             );
-            DefineGlobalClass(&quot;Regexp&quot;, typeof(IronRuby.Builtins.RubyRegex), 0x00000007, Context.ObjectClass, LoadRegexp_Instance, LoadRegexp_Class, LoadRegexp_Constants, new IronRuby.Builtins.RubyModule[] {def35}, 
+            DefineGlobalClass(&quot;Regexp&quot;, typeof(IronRuby.Builtins.RubyRegex), 0x00000007, Context.ObjectClass, LoadRegexp_Instance, LoadRegexp_Class, LoadRegexp_Constants, new IronRuby.Builtins.RubyModule[] {def36}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.RubyRegex, IronRuby.Builtins.RubyRegex&gt;(IronRuby.Builtins.RegexpOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.RubyRegex, System.Int32, System.Object, IronRuby.Builtins.RubyRegex&gt;(IronRuby.Builtins.RegexpOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.RubyRegex, System.Object, System.Object, IronRuby.Builtins.RubyRegex&gt;(IronRuby.Builtins.RegexpOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.Int32, IronRuby.Builtins.MutableString, IronRuby.Builtins.RubyRegex&gt;(IronRuby.Builtins.RegexpOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.Boolean, IronRuby.Builtins.MutableString, IronRuby.Builtins.RubyRegex&gt;(IronRuby.Builtins.RegexpOps.Create)
             );
-            DefineGlobalClass(&quot;String&quot;, typeof(IronRuby.Builtins.MutableString), 0x00000007, Context.ObjectClass, LoadString_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def35, def44}, 
+            DefineGlobalClass(&quot;String&quot;, typeof(IronRuby.Builtins.MutableString), 0x00000007, Context.ObjectClass, LoadString_Instance, null, null, new IronRuby.Builtins.RubyModule[] {def36, def45}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.MutableStringOps.Create), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.MutableStringOps.Create)
             );
-            DefineGlobalClass(&quot;Struct&quot;, typeof(IronRuby.Builtins.RubyStruct), 0x00000007, Context.ObjectClass, LoadStruct_Instance, LoadStruct_Class, LoadStruct_Constants, new IronRuby.Builtins.RubyModule[] {def35}, 
+            DefineGlobalClass(&quot;Struct&quot;, typeof(IronRuby.Builtins.RubyStruct), 0x00000007, Context.ObjectClass, LoadStruct_Instance, LoadStruct_Class, LoadStruct_Constants, new IronRuby.Builtins.RubyModule[] {def36}, 
                 new Action&lt;IronRuby.Builtins.RubyClass, System.Object[]&gt;(IronRuby.Builtins.RubyStructOps.AllocatorUndefined)
             );
             DefineGlobalClass(&quot;Symbol&quot;, typeof(Microsoft.Scripting.SymbolId), 0x00000007, Context.ObjectClass, LoadSymbol_Instance, LoadSymbol_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalClass(&quot;Thread&quot;, typeof(System.Threading.Thread), 0x00000007, Context.ObjectClass, LoadThread_Instance, LoadThread_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalClass(&quot;ThreadGroup&quot;, typeof(IronRuby.Builtins.ThreadGroup), 0x00000107, Context.ObjectClass, LoadThreadGroup_Instance, null, LoadThreadGroup_Constants, IronRuby.Builtins.RubyModule.EmptyArray);
-            DefineGlobalClass(&quot;Time&quot;, typeof(System.DateTime), 0x00000007, Context.ObjectClass, LoadTime_Instance, LoadTime_Class, null, new IronRuby.Builtins.RubyModule[] {def44}, 
+            DefineGlobalClass(&quot;Time&quot;, typeof(System.DateTime), 0x00000007, Context.ObjectClass, LoadTime_Instance, LoadTime_Class, null, new IronRuby.Builtins.RubyModule[] {def45}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.DateTime&gt;(IronRuby.Builtins.TimeOps.Create)
             );
             Context.TrueClass = DefineGlobalClass(&quot;TrueClass&quot;, typeof(IronRuby.Builtins.TrueClass), 0x00000107, Context.ObjectClass, LoadTrueClass_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             DefineGlobalClass(&quot;UnboundMethod&quot;, typeof(IronRuby.Builtins.UnboundMethod), 0x00000107, Context.ObjectClass, LoadUnboundMethod_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
             // Skipped primitive: Class
-            IronRuby.Builtins.RubyClass def25 = DefineGlobalClass(&quot;File&quot;, typeof(IronRuby.Builtins.RubyFile), 0x00000007, def46, LoadFile_Instance, LoadFile_Class, LoadFile_Constants, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def26 = DefineGlobalClass(&quot;File&quot;, typeof(IronRuby.Builtins.RubyFile), 0x00000007, def47, LoadFile_Instance, LoadFile_Class, LoadFile_Constants, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Runtime.Union&lt;System.Int32, IronRuby.Builtins.MutableString&gt;, IronRuby.Builtins.MutableString, System.Int32, IronRuby.Builtins.RubyFile&gt;(IronRuby.Builtins.RubyFileOps.CreateFile), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Runtime.Union&lt;System.Int32, IronRuby.Builtins.MutableString&gt;, System.Int32, System.Int32, IronRuby.Builtins.RubyFile&gt;(IronRuby.Builtins.RubyFileOps.CreateFile), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.RubyFile&gt;(IronRuby.Builtins.RubyFileOps.CreateFile), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, IronRuby.Builtins.RubyFile&gt;(IronRuby.Builtins.RubyFileOps.CreateFile), 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.Int32, IronRuby.Builtins.RubyFile&gt;(IronRuby.Builtins.RubyFileOps.CreateFile)
             );
-            DefineGlobalClass(&quot;Float&quot;, typeof(System.Double), 0x00000007, def40, LoadFloat_Instance, LoadFloat_Class, LoadFloat_Constants, new IronRuby.Builtins.RubyModule[] {def41});
-            IronRuby.Builtins.RubyClass def47 = DefineGlobalClass(&quot;Integer&quot;, typeof(IronRuby.Builtins.Integer), 0x00000107, def40, LoadInteger_Instance, LoadInteger_Class, null, new IronRuby.Builtins.RubyModule[] {def41});
-            DefineGlobalClass(&quot;NoMemoryError&quot;, typeof(IronRuby.Builtins.NoMemoryError), 0x00000107, def45, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;Float&quot;, typeof(System.Double), 0x00000007, def41, LoadFloat_Instance, LoadFloat_Class, LoadFloat_Constants, new IronRuby.Builtins.RubyModule[] {def42});
+            IronRuby.Builtins.RubyClass def48 = DefineGlobalClass(&quot;Integer&quot;, typeof(IronRuby.Builtins.Integer), 0x00000107, def41, LoadInteger_Instance, LoadInteger_Class, null, new IronRuby.Builtins.RubyModule[] {def42});
+            DefineGlobalClass(&quot;NoMemoryError&quot;, typeof(IronRuby.Builtins.NoMemoryError), 0x00000107, def46, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__NoMemoryError));
-            IronRuby.Builtins.RubyClass def43 = DefineGlobalClass(&quot;ScriptError&quot;, typeof(IronRuby.Builtins.ScriptError), 0x00000007, def45, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def44 = DefineGlobalClass(&quot;ScriptError&quot;, typeof(IronRuby.Builtins.ScriptError), 0x00000007, def46, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__ScriptError));
-            IronRuby.Builtins.RubyClass def42 = DefineGlobalClass(&quot;SignalException&quot;, typeof(IronRuby.Builtins.SignalException), 0x00000107, def45, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def43 = DefineGlobalClass(&quot;SignalException&quot;, typeof(IronRuby.Builtins.SignalException), 0x00000107, def46, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__SignalException));
-            IronRuby.Builtins.RubyClass def37 = Context.StandardErrorClass = DefineGlobalClass(&quot;StandardError&quot;, typeof(System.SystemException), 0x00000007, def45, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def38 = Context.StandardErrorClass = DefineGlobalClass(&quot;StandardError&quot;, typeof(System.SystemException), 0x00000007, def46, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__StandardError));
-            ExtendClass(typeof(System.Single), def40, LoadSystem__Single_Instance, LoadSystem__Single_Class, null, new IronRuby.Builtins.RubyModule[] {def41}, 
+            ExtendClass(typeof(System.Single), def41, LoadSystem__Single_Instance, LoadSystem__Single_Class, null, new IronRuby.Builtins.RubyModule[] {def42}, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.Single&gt;(IronRuby.Builtins.SingleOps.Create)
             );
-            DefineGlobalClass(&quot;SystemExit&quot;, typeof(IronRuby.Builtins.SystemExit), 0x00000007, def45, LoadSystemExit_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;SystemExit&quot;, typeof(IronRuby.Builtins.SystemExit), 0x00000007, def46, LoadSystemExit_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Object, IronRuby.Builtins.SystemExit&gt;(IronRuby.Builtins.SystemExitOps.Factory), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.Object, IronRuby.Builtins.SystemExit&gt;(IronRuby.Builtins.SystemExitOps.Factory)
             );
-            DefineGlobalClass(&quot;ArgumentError&quot;, typeof(System.ArgumentException), 0x00000007, def37, LoadArgumentError_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;ArgumentError&quot;, typeof(System.ArgumentException), 0x00000007, def38, LoadArgumentError_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__ArgumentError));
-            DefineGlobalClass(&quot;Bignum&quot;, typeof(Microsoft.Scripting.Math.BigInteger), 0x00000007, def47, LoadBignum_Instance, LoadBignum_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            DefineGlobalClass(&quot;EncodingError&quot;, typeof(IronRuby.Builtins.EncodingError), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;Bignum&quot;, typeof(Microsoft.Scripting.Math.BigInteger), 0x00000007, def48, LoadBignum_Instance, LoadBignum_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            DefineGlobalClass(&quot;EncodingError&quot;, typeof(IronRuby.Builtins.EncodingError), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__EncodingError));
-            DefineGlobalClass(&quot;Fixnum&quot;, typeof(System.Int32), 0x00000007, def47, LoadFixnum_Instance, LoadFixnum_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            DefineGlobalClass(&quot;IndexError&quot;, typeof(System.IndexOutOfRangeException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;Fixnum&quot;, typeof(System.Int32), 0x00000007, def48, LoadFixnum_Instance, LoadFixnum_Class, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            DefineGlobalClass(&quot;IndexError&quot;, typeof(System.IndexOutOfRangeException), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__IndexError));
-            DefineGlobalClass(&quot;Interrupt&quot;, typeof(IronRuby.Builtins.Interrupt), 0x00000107, def42, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;Interrupt&quot;, typeof(IronRuby.Builtins.Interrupt), 0x00000107, def43, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__Interrupt));
-            IronRuby.Builtins.RubyClass def38 = DefineGlobalClass(&quot;IOError&quot;, typeof(System.IO.IOException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def39 = DefineGlobalClass(&quot;IOError&quot;, typeof(System.IO.IOException), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__IOError));
-            DefineGlobalClass(&quot;LoadError&quot;, typeof(IronRuby.Builtins.LoadError), 0x00000007, def43, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;LoadError&quot;, typeof(IronRuby.Builtins.LoadError), 0x00000007, def44, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__LoadError));
-            DefineGlobalClass(&quot;LocalJumpError&quot;, typeof(IronRuby.Builtins.LocalJumpError), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;LocalJumpError&quot;, typeof(IronRuby.Builtins.LocalJumpError), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__LocalJumpError));
-            IronRuby.Builtins.RubyClass def48 = DefineGlobalClass(&quot;NameError&quot;, typeof(System.MemberAccessException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def49 = DefineGlobalClass(&quot;NameError&quot;, typeof(System.MemberAccessException), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__NameError));
-            DefineGlobalClass(&quot;NotImplementedError&quot;, typeof(IronRuby.Builtins.NotImplementedError), 0x00000007, def43, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;NotImplementedError&quot;, typeof(IronRuby.Builtins.NotImplementedError), 0x00000007, def44, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__NotImplementedError));
-            IronRuby.Builtins.RubyClass def39 = DefineGlobalClass(&quot;RangeError&quot;, typeof(System.ArgumentOutOfRangeException), 0x00000007, def37, LoadRangeError_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def40 = DefineGlobalClass(&quot;RangeError&quot;, typeof(System.ArgumentOutOfRangeException), 0x00000007, def38, LoadRangeError_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__RangeError));
-            DefineGlobalClass(&quot;RegexpError&quot;, typeof(IronRuby.Builtins.RegexpError), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;RegexpError&quot;, typeof(IronRuby.Builtins.RegexpError), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__RegexpError));
-            DefineGlobalClass(&quot;RuntimeError&quot;, typeof(IronRuby.Builtins.RuntimeError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;RuntimeError&quot;, typeof(IronRuby.Builtins.RuntimeError), 0x00000107, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__RuntimeError));
-            DefineGlobalClass(&quot;SecurityError&quot;, typeof(System.Security.SecurityException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;SecurityError&quot;, typeof(System.Security.SecurityException), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__SecurityError));
-            DefineGlobalClass(&quot;SyntaxError&quot;, typeof(IronRuby.Builtins.SyntaxError), 0x00000007, def43, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;SyntaxError&quot;, typeof(IronRuby.Builtins.SyntaxError), 0x00000007, def44, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__SyntaxError));
-            ExtendClass(typeof(System.Byte), def47, LoadSystem__Byte_Instance, LoadSystem__Byte_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            ExtendClass(typeof(System.Byte), def48, LoadSystem__Byte_Instance, LoadSystem__Byte_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.Byte&gt;(IronRuby.Builtins.ByteOps.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, Microsoft.Scripting.Math.BigInteger, System.Byte&gt;(IronRuby.Builtins.ByteOps.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.Byte&gt;(IronRuby.Builtins.ByteOps.InducedFrom)
             );
-            ExtendClass(typeof(System.Decimal), def47, LoadSystem__Decimal_Instance, LoadSystem__Decimal_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            ExtendClass(typeof(System.Decimal), def48, LoadSystem__Decimal_Instance, LoadSystem__Decimal_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.Decimal&gt;(IronRuby.Builtins.DecimalOps.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, Microsoft.Scripting.Math.BigInteger, System.Decimal&gt;(IronRuby.Builtins.DecimalOps.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.Decimal&gt;(IronRuby.Builtins.DecimalOps.InducedFrom)
             );
-            ExtendClass(typeof(System.Int16), def47, LoadSystem__Int16_Instance, LoadSystem__Int16_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            ExtendClass(typeof(System.Int16), def48, LoadSystem__Int16_Instance, LoadSystem__Int16_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.Int16&gt;(IronRuby.Builtins.Int16Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, Microsoft.Scripting.Math.BigInteger, System.Int16&gt;(IronRuby.Builtins.Int16Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.Int16&gt;(IronRuby.Builtins.Int16Ops.InducedFrom)
             );
-            ExtendClass(typeof(System.Int64), def47, LoadSystem__Int64_Instance, LoadSystem__Int64_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            ExtendClass(typeof(System.Int64), def48, LoadSystem__Int64_Instance, LoadSystem__Int64_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.Int64&gt;(IronRuby.Builtins.Int64Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, Microsoft.Scripting.Math.BigInteger, System.Int64&gt;(IronRuby.Builtins.Int64Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.Int64&gt;(IronRuby.Builtins.Int64Ops.InducedFrom)
             );
-            ExtendClass(typeof(System.SByte), def47, LoadSystem__SByte_Instance, LoadSystem__SByte_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            ExtendClass(typeof(System.SByte), def48, LoadSystem__SByte_Instance, LoadSystem__SByte_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.SByte&gt;(IronRuby.Builtins.SByteOps.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, Microsoft.Scripting.Math.BigInteger, System.SByte&gt;(IronRuby.Builtins.SByteOps.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.SByte&gt;(IronRuby.Builtins.SByteOps.InducedFrom)
             );
-            ExtendClass(typeof(System.UInt16), def47, LoadSystem__UInt16_Instance, LoadSystem__UInt16_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            ExtendClass(typeof(System.UInt16), def48, LoadSystem__UInt16_Instance, LoadSystem__UInt16_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.UInt16&gt;(IronRuby.Builtins.UInt16Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, Microsoft.Scripting.Math.BigInteger, System.UInt16&gt;(IronRuby.Builtins.UInt16Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.UInt16&gt;(IronRuby.Builtins.UInt16Ops.InducedFrom)
             );
-            ExtendClass(typeof(System.UInt32), def47, LoadSystem__UInt32_Instance, LoadSystem__UInt32_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            ExtendClass(typeof(System.UInt32), def48, LoadSystem__UInt32_Instance, LoadSystem__UInt32_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.UInt32&gt;(IronRuby.Builtins.UInt32Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, Microsoft.Scripting.Math.BigInteger, System.UInt32&gt;(IronRuby.Builtins.UInt32Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.UInt32&gt;(IronRuby.Builtins.UInt32Ops.InducedFrom)
             );
-            ExtendClass(typeof(System.UInt64), def47, LoadSystem__UInt64_Instance, LoadSystem__UInt64_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            ExtendClass(typeof(System.UInt64), def48, LoadSystem__UInt64_Instance, LoadSystem__UInt64_Class, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.UInt64&gt;(IronRuby.Builtins.UInt64Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, Microsoft.Scripting.Math.BigInteger, System.UInt64&gt;(IronRuby.Builtins.UInt64Ops.InducedFrom), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Double, System.UInt64&gt;(IronRuby.Builtins.UInt64Ops.InducedFrom)
             );
-            IronRuby.Builtins.RubyClass def36 = DefineGlobalClass(&quot;SystemCallError&quot;, typeof(System.Runtime.InteropServices.ExternalException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def37 = DefineGlobalClass(&quot;SystemCallError&quot;, typeof(System.Runtime.InteropServices.ExternalException), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.Runtime.InteropServices.ExternalException&gt;(IronRuby.Builtins.SystemCallErrorOps.Factory), 
                 new Func&lt;IronRuby.Builtins.RubyClass, System.Int32, System.Runtime.InteropServices.ExternalException&gt;(IronRuby.Builtins.SystemCallErrorOps.Factory)
             );
-            DefineGlobalClass(&quot;SystemStackError&quot;, typeof(IronRuby.Builtins.SystemStackError), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;SystemStackError&quot;, typeof(IronRuby.Builtins.SystemStackError), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__SystemStackError));
-            DefineGlobalClass(&quot;ThreadError&quot;, typeof(IronRuby.Builtins.ThreadError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;ThreadError&quot;, typeof(IronRuby.Builtins.ThreadError), 0x00000107, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__ThreadError));
-            DefineGlobalClass(&quot;TypeError&quot;, typeof(System.InvalidOperationException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;TypeError&quot;, typeof(System.InvalidOperationException), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__TypeError));
-            DefineGlobalClass(&quot;ZeroDivisionError&quot;, typeof(System.DivideByZeroException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;ZeroDivisionError&quot;, typeof(System.DivideByZeroException), 0x00000007, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__ZeroDivisionError));
-            DefineGlobalClass(&quot;EOFError&quot;, typeof(IronRuby.Builtins.EOFError), 0x00000107, def38, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;EOFError&quot;, typeof(IronRuby.Builtins.EOFError), 0x00000107, def39, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__EOFError));
-            IronRuby.Builtins.RubyClass def34 = DefineClass(&quot;Errno::EACCES&quot;, typeof(System.UnauthorizedAccessException), 0x00000007, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def35 = DefineClass(&quot;Errno::EACCES&quot;, typeof(System.UnauthorizedAccessException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.UnauthorizedAccessException&gt;(IronRuby.Builtins.Errno.UnauthorizedAccessExceptionOps.Create)
             );
-            IronRuby.Builtins.RubyClass def10 = DefineClass(&quot;Errno::EADDRINUSE&quot;, typeof(IronRuby.Builtins.Errno.AddressInUseError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def3 = DefineClass(&quot;Errno::EBADF&quot;, typeof(IronRuby.Builtins.BadFileDescriptorError), 0x00000007, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def10 = DefineClass(&quot;Errno::EADDRINUSE&quot;, typeof(IronRuby.Builtins.Errno.AddressInUseError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def3 = DefineClass(&quot;Errno::EBADF&quot;, typeof(IronRuby.Builtins.BadFileDescriptorError), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.BadFileDescriptorError&gt;(IronRuby.Builtins.Errno.BadFileDescriptorErrorOps.Create)
             );
-            IronRuby.Builtins.RubyClass def11 = DefineClass(&quot;Errno::ECHILD&quot;, typeof(IronRuby.Builtins.Errno.ChildError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def12 = DefineClass(&quot;Errno::ECONNABORTED&quot;, typeof(IronRuby.Builtins.Errno.ConnectionAbortError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def13 = DefineClass(&quot;Errno::ECONNREFUSED&quot;, typeof(IronRuby.Builtins.Errno.ConnectionRefusedError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def14 = DefineClass(&quot;Errno::ECONNRESET&quot;, typeof(IronRuby.Builtins.Errno.ConnectionResetError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def15 = DefineClass(&quot;Errno::EDOM&quot;, typeof(IronRuby.Builtins.Errno.DomainError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def19 = DefineClass(&quot;Errno::EEXIST&quot;, typeof(IronRuby.Builtins.ExistError), 0x00000007, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def11 = DefineClass(&quot;Errno::ECHILD&quot;, typeof(IronRuby.Builtins.Errno.ChildError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def12 = DefineClass(&quot;Errno::ECONNABORTED&quot;, typeof(IronRuby.Builtins.Errno.ConnectionAbortError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def13 = DefineClass(&quot;Errno::ECONNREFUSED&quot;, typeof(IronRuby.Builtins.Errno.ConnectionRefusedError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def14 = DefineClass(&quot;Errno::ECONNRESET&quot;, typeof(IronRuby.Builtins.Errno.ConnectionResetError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def15 = DefineClass(&quot;Errno::EDOM&quot;, typeof(IronRuby.Builtins.Errno.DomainError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def20 = DefineClass(&quot;Errno::EEXIST&quot;, typeof(IronRuby.Builtins.ExistError), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.ExistError&gt;(IronRuby.Builtins.Errno.ExistErrorOps.Create)
             );
-            IronRuby.Builtins.RubyClass def21 = DefineClass(&quot;Errno::EINVAL&quot;, typeof(IronRuby.Builtins.InvalidError), 0x00000007, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def22 = DefineClass(&quot;Errno::EINVAL&quot;, typeof(IronRuby.Builtins.InvalidError), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.InvalidError&gt;(IronRuby.Builtins.Errno.InvalidErrorOps.Create)
             );
-            IronRuby.Builtins.RubyClass def32 = DefineClass(&quot;Errno::ENOENT&quot;, typeof(System.IO.FileNotFoundException), 0x00000007, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def33 = DefineClass(&quot;Errno::ENOENT&quot;, typeof(System.IO.FileNotFoundException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.IO.FileNotFoundException&gt;(IronRuby.Builtins.Errno.FileNotFoundExceptionOps.Create)
             );
-            IronRuby.Builtins.RubyClass def17 = DefineClass(&quot;Errno::ENOTCONN&quot;, typeof(IronRuby.Builtins.Errno.NotConnectedError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def31 = DefineClass(&quot;Errno::ENOTDIR&quot;, typeof(System.IO.DirectoryNotFoundException), 0x00000007, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def19 = DefineClass(&quot;Errno::ENOEXEC&quot;, typeof(IronRuby.Builtins.ExecFormatError), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+                new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.BadFileDescriptorError&gt;(IronRuby.Builtins.Errno.ExecFormatErrorOps.Create)
+            );
+            IronRuby.Builtins.RubyClass def17 = DefineClass(&quot;Errno::ENOTCONN&quot;, typeof(IronRuby.Builtins.Errno.NotConnectedError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def32 = DefineClass(&quot;Errno::ENOTDIR&quot;, typeof(System.IO.DirectoryNotFoundException), 0x00000007, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
                 new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, System.IO.DirectoryNotFoundException&gt;(IronRuby.Builtins.Errno.DirectoryNotFoundExceptionOps.Create)
             );
-            IronRuby.Builtins.RubyClass def18 = DefineClass(&quot;Errno::EPIPE&quot;, typeof(IronRuby.Builtins.Errno.PipeError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            IronRuby.Builtins.RubyClass def16 = DefineClass(&quot;Errno::EXDEV&quot;, typeof(IronRuby.Builtins.Errno.ImproperLinkError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            DefineGlobalClass(&quot;ESPIPE&quot;, typeof(IronRuby.Builtins.InvalidSeekError), 0x00000107, def36, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
-            DefineGlobalClass(&quot;FloatDomainError&quot;, typeof(IronRuby.Builtins.FloatDomainError), 0x00000107, def39, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            IronRuby.Builtins.RubyClass def18 = DefineClass(&quot;Errno::EPIPE&quot;, typeof(IronRuby.Builtins.Errno.PipeError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            IronRuby.Builtins.RubyClass def16 = DefineClass(&quot;Errno::EXDEV&quot;, typeof(IronRuby.Builtins.Errno.ImproperLinkError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            DefineGlobalClass(&quot;ESPIPE&quot;, typeof(IronRuby.Builtins.InvalidSeekError), 0x00000107, def37, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray);
+            DefineGlobalClass(&quot;FloatDomainError&quot;, typeof(IronRuby.Builtins.FloatDomainError), 0x00000107, def40, null, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__FloatDomainError));
-            DefineGlobalClass(&quot;NoMethodError&quot;, typeof(System.MissingMethodException), 0x00000007, def48, LoadNoMethodError_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+            DefineGlobalClass(&quot;NoMethodError&quot;, typeof(System.MissingMethodException), 0x00000007, def49, LoadNoMethodError_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
             new Func&lt;IronRuby.Builtins.RubyClass, System.Object, System.Exception&gt;(BuiltinsLibraryInitializer.ExceptionFactory__NoMethodError));
-            def25.SetBuiltinConstant(&quot;Constants&quot;, def26);
-            def22.SetBuiltinConstant(&quot;Clr&quot;, def4);
+            def26.SetBuiltinConstant(&quot;Constants&quot;, def27);
+            def23.SetBuiltinConstant(&quot;Clr&quot;, def4);
             def4.SetBuiltinConstant(&quot;BigInteger&quot;, def5);
-            def4.SetBuiltinConstant(&quot;FlagEnumeration&quot;, def20);
+            def4.SetBuiltinConstant(&quot;FlagEnumeration&quot;, def21);
             def4.SetBuiltinConstant(&quot;Float&quot;, def6);
             def4.SetBuiltinConstant(&quot;Integer&quot;, def7);
-            def4.SetBuiltinConstant(&quot;MultiDimensionalArray&quot;, def23);
+            def4.SetBuiltinConstant(&quot;MultiDimensionalArray&quot;, def24);
             def4.SetBuiltinConstant(&quot;String&quot;, def8);
-            def22.SetBuiltinConstant(&quot;Print&quot;, def24);
+            def23.SetBuiltinConstant(&quot;Print&quot;, def25);
             #if !SILVERLIGHT
             Context.ObjectClass.SetBuiltinConstant(&quot;ARGF&quot;, def1);
             #endif
             Context.ObjectClass.SetBuiltinConstant(&quot;ENV&quot;, def9);
             #if !SILVERLIGHT
-            def25.SetBuiltinConstant(&quot;Stat&quot;, def33);
+            def26.SetBuiltinConstant(&quot;Stat&quot;, def34);
             #endif
-            def4.SetBuiltinConstant(&quot;Name&quot;, def29);
-            def4.SetBuiltinConstant(&quot;Scope&quot;, def30);
+            def4.SetBuiltinConstant(&quot;Name&quot;, def30);
+            def4.SetBuiltinConstant(&quot;Scope&quot;, def31);
             #if !SILVERLIGHT &amp;&amp; !SILVERLIGHT
-            def27.SetBuiltinConstant(&quot;Status&quot;, def28);
+            def28.SetBuiltinConstant(&quot;Status&quot;, def29);
             #endif
-            def2.SetBuiltinConstant(&quot;EACCES&quot;, def34);
+            def2.SetBuiltinConstant(&quot;EACCES&quot;, def35);
             def2.SetBuiltinConstant(&quot;EADDRINUSE&quot;, def10);
             def2.SetBuiltinConstant(&quot;EBADF&quot;, def3);
             def2.SetBuiltinConstant(&quot;ECHILD&quot;, def11);
@@ -337,11 +341,12 @@ namespace IronRuby.Builtins {
             def2.SetBuiltinConstant(&quot;ECONNREFUSED&quot;, def13);
             def2.SetBuiltinConstant(&quot;ECONNRESET&quot;, def14);
             def2.SetBuiltinConstant(&quot;EDOM&quot;, def15);
-            def2.SetBuiltinConstant(&quot;EEXIST&quot;, def19);
-            def2.SetBuiltinConstant(&quot;EINVAL&quot;, def21);
-            def2.SetBuiltinConstant(&quot;ENOENT&quot;, def32);
+            def2.SetBuiltinConstant(&quot;EEXIST&quot;, def20);
+            def2.SetBuiltinConstant(&quot;EINVAL&quot;, def22);
+            def2.SetBuiltinConstant(&quot;ENOENT&quot;, def33);
+            def2.SetBuiltinConstant(&quot;ENOEXEC&quot;, def19);
             def2.SetBuiltinConstant(&quot;ENOTCONN&quot;, def17);
-            def2.SetBuiltinConstant(&quot;ENOTDIR&quot;, def31);
+            def2.SetBuiltinConstant(&quot;ENOTDIR&quot;, def32);
             def2.SetBuiltinConstant(&quot;EPIPE&quot;, def18);
             def2.SetBuiltinConstant(&quot;EXDEV&quot;, def16);
         }
@@ -1747,10 +1752,12 @@ namespace IronRuby.Builtins {
                 new Func&lt;IronRuby.Builtins.RubyIO, System.Int32, System.Int32, System.Int32&gt;(IronRuby.Builtins.RubyIOOps.FileControl)
             );
             
+            #if !SILVERLIGHT
             module.DefineLibraryMethod(&quot;isatty&quot;, 0x51, 
                 new Func&lt;IronRuby.Builtins.RubyIO, System.Boolean&gt;(IronRuby.Builtins.RubyIOOps.IsAtty)
             );
             
+            #endif
             module.DefineLibraryMethod(&quot;lineno&quot;, 0x51, 
                 new Func&lt;IronRuby.Builtins.RubyIO, System.Int32&gt;(IronRuby.Builtins.RubyIOOps.GetLineNumber)
             );
@@ -1842,10 +1849,12 @@ namespace IronRuby.Builtins {
                 new Func&lt;IronRuby.Builtins.RubyIO, IronRuby.Builtins.RubyIO&gt;(IronRuby.Builtins.RubyIOOps.ToIO)
             );
             
+            #if !SILVERLIGHT
             module.DefineLibraryMethod(&quot;tty?&quot;, 0x51, 
                 new Func&lt;IronRuby.Builtins.RubyIO, System.Boolean&gt;(IronRuby.Builtins.RubyIOOps.IsAtty)
             );
             
+            #endif
             module.DefineLibraryMethod(&quot;ungetc&quot;, 0x51, 
                 new Action&lt;IronRuby.Builtins.RubyIO, System.Int32&gt;(IronRuby.Builtins.RubyIOOps.SetPreviousByte)
             );
@@ -2925,8 +2934,8 @@ namespace IronRuby.Builtins {
             );
             
             module.DefineLibraryMethod(&quot;printf&quot;, 0x52, 
-                new Action&lt;IronRuby.Builtins.StringFormatterSiteStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.BinaryOpStorage, System.Object, System.Object, System.Object, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PrintFormatted), 
-                new Action&lt;IronRuby.Builtins.StringFormatterSiteStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.BinaryOpStorage, System.Object, IronRuby.Builtins.MutableString, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PrintFormatted)
+                new Action&lt;IronRuby.Builtins.StringFormatterSiteStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.BinaryOpStorage, System.Object, IronRuby.Builtins.MutableString, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PrintFormatted), 
+                new Action&lt;IronRuby.Builtins.StringFormatterSiteStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.BinaryOpStorage, System.Object, System.Object, System.Object, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PrintFormatted)
             );
             
             module.DefineLibraryMethod(&quot;private_methods&quot;, 0x51, 
@@ -2951,10 +2960,10 @@ namespace IronRuby.Builtins {
             );
             
             module.DefineLibraryMethod(&quot;puts&quot;, 0x52, 
+                new Action&lt;IronRuby.Runtime.BinaryOpStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.ConversionStorage&lt;System.Collections.IList&gt;, System.Object, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PutString), 
                 new Action&lt;IronRuby.Runtime.BinaryOpStorage, System.Object&gt;(IronRuby.Builtins.KernelOps.PutsEmptyLine), 
                 new Action&lt;IronRuby.Runtime.BinaryOpStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.ConversionStorage&lt;System.Collections.IList&gt;, System.Object, System.Object&gt;(IronRuby.Builtins.KernelOps.PutString), 
-                new Action&lt;IronRuby.Runtime.BinaryOpStorage, System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.KernelOps.PutString), 
-                new Action&lt;IronRuby.Runtime.BinaryOpStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.ConversionStorage&lt;System.Collections.IList&gt;, System.Object, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PutString)
+                new Action&lt;IronRuby.Runtime.BinaryOpStorage, System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.KernelOps.PutString)
             );
             
             module.DefineLibraryMethod(&quot;raise&quot;, 0x52, 
@@ -3239,8 +3248,8 @@ namespace IronRuby.Builtins {
             );
             
             module.DefineLibraryMethod(&quot;printf&quot;, 0x61, 
-                new Action&lt;IronRuby.Builtins.StringFormatterSiteStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.BinaryOpStorage, System.Object, System.Object, System.Object, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PrintFormatted), 
-                new Action&lt;IronRuby.Builtins.StringFormatterSiteStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.BinaryOpStorage, System.Object, IronRuby.Builtins.MutableString, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PrintFormatted)
+                new Action&lt;IronRuby.Builtins.StringFormatterSiteStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.BinaryOpStorage, System.Object, IronRuby.Builtins.MutableString, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PrintFormatted), 
+                new Action&lt;IronRuby.Builtins.StringFormatterSiteStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.BinaryOpStorage, System.Object, System.Object, System.Object, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PrintFormatted)
             );
             
             module.DefineLibraryMethod(&quot;proc&quot;, 0x61, 
@@ -3253,10 +3262,10 @@ namespace IronRuby.Builtins {
             );
             
             module.DefineLibraryMethod(&quot;puts&quot;, 0x61, 
+                new Action&lt;IronRuby.Runtime.BinaryOpStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.ConversionStorage&lt;System.Collections.IList&gt;, System.Object, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PutString), 
                 new Action&lt;IronRuby.Runtime.BinaryOpStorage, System.Object&gt;(IronRuby.Builtins.KernelOps.PutsEmptyLine), 
                 new Action&lt;IronRuby.Runtime.BinaryOpStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.ConversionStorage&lt;System.Collections.IList&gt;, System.Object, System.Object&gt;(IronRuby.Builtins.KernelOps.PutString), 
-                new Action&lt;IronRuby.Runtime.BinaryOpStorage, System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.KernelOps.PutString), 
-                new Action&lt;IronRuby.Runtime.BinaryOpStorage, IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Runtime.ConversionStorage&lt;System.Collections.IList&gt;, System.Object, System.Object[]&gt;(IronRuby.Builtins.KernelOps.PutString)
+                new Action&lt;IronRuby.Runtime.BinaryOpStorage, System.Object, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.KernelOps.PutString)
             );
             
             module.DefineLibraryMethod(&quot;raise&quot;, 0x61, 
@@ -4350,6 +4359,10 @@ namespace IronRuby.Builtins {
                 new Func&lt;IronRuby.Builtins.RubyProcess.Status, System.Int32&gt;(IronRuby.Builtins.RubyProcess.Status.ExitStatus)
             );
             
+            module.DefineLibraryMethod(&quot;inspect&quot;, 0x51, 
+                new Func&lt;IronRuby.Builtins.RubyProcess.Status, IronRuby.Builtins.MutableString&gt;(IronRuby.Builtins.RubyProcess.Status.Inspect)
+            );
+            
             module.DefineLibraryMethod(&quot;pid&quot;, 0x51, 
                 new Func&lt;IronRuby.Builtins.RubyProcess.Status, System.Int32&gt;(IronRuby.Builtins.RubyProcess.Status.Pid)
             );
@@ -4373,6 +4386,12 @@ namespace IronRuby.Builtins {
         }
         #endif
         
+        #if !SILVERLIGHT &amp;&amp; !SILVERLIGHT
+        private static void LoadProcess__Status_Class(IronRuby.Builtins.RubyModule/*!*/ module) {
+            module.HideMethod(&quot;new&quot;);
+        }
+        #endif
+        
         private static void LoadRange_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
             module.DefineLibraryMethod(&quot;==&quot;, 0x51, 
                 new Func&lt;IronRuby.Builtins.Range, System.Object, System.Boolean&gt;(IronRuby.Builtins.RangeOps.Equals), 
@@ -8667,3 +8686,37 @@ namespace IronRuby.StandardLibrary.Open3 {
     }
 }
 
+namespace IronRuby.StandardLibrary.Win32API {
+    using System;
+    using Microsoft.Scripting.Utils;
+    
+    public sealed class Win32APILibraryInitializer : IronRuby.Builtins.LibraryInitializer {
+        protected override void LoadModules() {
+            IronRuby.Builtins.RubyClass classRef0 = GetClass(typeof(System.Object));
+            
+            
+            #if !SILVERLIGHT
+            DefineGlobalClass(&quot;Win32API&quot;, typeof(IronRuby.StandardLibrary.Win32API.Win32API), 0x00000100, classRef0, LoadWin32API_Instance, null, null, IronRuby.Builtins.RubyModule.EmptyArray, 
+                new Func&lt;IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, IronRuby.StandardLibrary.Win32API.Win32API&gt;(IronRuby.StandardLibrary.Win32API.Win32API.Create), 
+                new Func&lt;IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.Builtins.RubyClass, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, System.Collections.IList, IronRuby.Builtins.MutableString, IronRuby.StandardLibrary.Win32API.Win32API&gt;(IronRuby.StandardLibrary.Win32API.Win32API.Create)
+            );
+            #endif
+        }
+        
+        #if !SILVERLIGHT
+        private static void LoadWin32API_Instance(IronRuby.Builtins.RubyModule/*!*/ module) {
+            module.DefineRuleGenerator(&quot;call&quot;, 0x11, IronRuby.StandardLibrary.Win32API.Win32API.Call());
+            
+            module.DefineRuleGenerator(&quot;Call&quot;, 0x11, IronRuby.StandardLibrary.Win32API.Win32API.Call());
+            
+            module.DefineLibraryMethod(&quot;initialize&quot;, 0x12, 
+                new Func&lt;IronRuby.StandardLibrary.Win32API.Win32API, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, IronRuby.StandardLibrary.Win32API.Win32API&gt;(IronRuby.StandardLibrary.Win32API.Win32API.Reinitialize), 
+                new Func&lt;IronRuby.Runtime.ConversionStorage&lt;IronRuby.Builtins.MutableString&gt;, IronRuby.StandardLibrary.Win32API.Win32API, IronRuby.Builtins.MutableString, IronRuby.Builtins.MutableString, System.Collections.IList, IronRuby.Builtins.MutableString, IronRuby.StandardLibrary.Win32API.Win32API&gt;(IronRuby.StandardLibrary.Win32API.Win32API.Reinitialize)
+            );
+            
+        }
+        #endif
+        
+    }
+}
+</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializers.Generated.cs</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/IronRuby.Libraries.Build.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -189,6 +189,7 @@
     &lt;Compile Include=&quot;Thread\RubyMutex.cs&quot; /&gt;
     &lt;Compile Include=&quot;Thread\RubyQueue.cs&quot; /&gt;
     &lt;Compile Include=&quot;Thread\SizedQueue.cs&quot; /&gt;
+    &lt;Compile Include=&quot;Win32API\Win32API.cs&quot; /&gt;
     &lt;Compile Include=&quot;Zlib\zlib.cs&quot; /&gt;
   &lt;/ItemGroup&gt;
   &lt;ItemGroup&gt;</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/IronRuby.Libraries.csproj</filename>
    </modified>
    <modified>
      <diff>@@ -29,7 +29,7 @@ namespace IronRuby.StandardLibrary.Open3 {
             object self, 
             [DefaultProtocol, NotNull]MutableString/*!*/ command) {
 
-            Process process = RubyIOOps.OpenPipe(context, command, true, true, true);
+            Process process = RubyProcess.CreateProcess(context, command, true, true, true);
             RubyArray result = new RubyArray();
             result.Add(new RubyIO(context, null, process.StandardInput, IOMode.WriteOnly));
             result.Add(new RubyIO(context, process.StandardOutput, null, IOMode.ReadOnly));</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Open3/Open3.cs</filename>
    </modified>
    <modified>
      <diff>@@ -13,6 +13,10 @@
  *
  * ***************************************************************************/
 
+#if !SILVERLIGHT
+using System.IO.Compression;
+#endif
+
 using System;
 using System.Collections.Generic;
 using System.IO;
@@ -21,9 +25,6 @@ using IronRuby.Builtins;
 using IronRuby.Runtime;
 using Microsoft.Scripting.Runtime;
 using Microsoft.Scripting.Generation;
-#if !SILVERLIGHT
-    using System.IO.Compression;
-#endif
 using System.Diagnostics;
 using System.Text;
 using System.Runtime.InteropServices;</diff>
      <filename>Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Zlib/zlib.cs</filename>
    </modified>
    <modified>
      <diff>@@ -154,8 +154,8 @@ Global
 		{2AE75F5A-CD1F-4925-9647-AF4D1C282FB4}.V4 Release|Any CPU.Build.0 = Release|Any CPU
 		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.FxCop|Any CPU.ActiveCfg = Release|Any CPU
-		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.FxCop|Any CPU.Build.0 = Release|Any CPU
+		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.FxCop|Any CPU.ActiveCfg = FxCop|Any CPU
+		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.FxCop|Any CPU.Build.0 = FxCop|Any CPU
 		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.Release|Any CPU.Build.0 = Release|Any CPU
 		{77323B06-15A2-4CF4-8A7A-86EAA2B66498}.Silverlight Debug|Any CPU.ActiveCfg = Silverlight Debug|Any CPU</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby.sln</filename>
    </modified>
    <modified>
      <diff>@@ -25,7 +25,7 @@ namespace IronRuby.Builtins {
     /// &lt;summary&gt;
     /// A custom Stream class that forwards calls to Console In/Out/Error based on ConsoleType
     /// &lt;/summary&gt;
-    internal class ConsoleStream : Stream {
+    internal sealed class ConsoleStream : Stream {
         private ConsoleStreamType _consoleType;
         private readonly SharedIO _io;
 
@@ -35,6 +35,10 @@ namespace IronRuby.Builtins {
             _io = io;
         }
 
+        public ConsoleStreamType StreamType {
+            get { return _consoleType; }
+        }
+
         public override bool CanRead {
             get { return _consoleType == ConsoleStreamType.Input ? true : false; }
         }</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Builtins/ConsoleStream.cs</filename>
    </modified>
    <modified>
      <diff>@@ -238,6 +238,21 @@ namespace IronRuby.Builtins {
     }
 
     [Serializable]
+    public class ExecFormatError : ExternalException {
+        private const string/*!*/ M = &quot;Exec format error&quot;;
+
+        public ExecFormatError() : this(null, null) { }
+        public ExecFormatError(string message) : this(message, null) { }
+        public ExecFormatError(string message, Exception inner) : base(RubyExceptions.MakeMessage(message, M), inner) { }
+        public ExecFormatError(MutableString message) : base(RubyExceptions.MakeMessage(ref message, M)) { RubyExceptionData.InitializeException(this, message); }
+
+#if !SILVERLIGHT
+        protected ExecFormatError(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
+            : base(info, context) { }
+#endif
+    }
+
+    [Serializable]
     public class InvalidError : ExternalException {
         private const string/*!*/ M = &quot;Invalid argument&quot;;
 </diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Builtins/Exceptions.cs</filename>
    </modified>
    <modified>
      <diff>@@ -122,10 +122,14 @@ namespace IronRuby.Builtins {
             _fileDescriptor = value; 
         }
 
-        public bool IsConsole {
+        /// &lt;summary&gt;
+        /// Returns true if the IO object represents stdin/stdout/stderr (no matter whether or not the actual streams are redirected).
+        /// &lt;/summary&gt;
+        public ConsoleStreamType? ConsoleStreamType {
             get {
                 var stream = GetStream();
-                return stream.BaseStream is ConsoleStream || stream.BaseStream == Stream.Null; 
+                var console = stream.BaseStream as ConsoleStream;
+                return console != null ? console.StreamType : (ConsoleStreamType?)null;
             } 
         }
 </diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyIO.cs</filename>
    </modified>
    <modified>
      <diff>@@ -248,6 +248,8 @@ namespace IronRuby.Compiler {
         private static MethodInfo _GetMethodUnwinderReturnValue;
         public static MethodInfo/*!*/ GetMissingConstant { get { return _GetMissingConstant ?? (_GetMissingConstant = GetMethod(typeof(RubyOps), &quot;GetMissingConstant&quot;)); } }
         private static MethodInfo _GetMissingConstant;
+        public static MethodInfo/*!*/ GetMutableStringBytes { get { return _GetMutableStringBytes ?? (_GetMutableStringBytes = GetMethod(typeof(RubyOps), &quot;GetMutableStringBytes&quot;)); } }
+        private static MethodInfo _GetMutableStringBytes;
         public static MethodInfo/*!*/ GetParentLocals { get { return _GetParentLocals ?? (_GetParentLocals = GetMethod(typeof(RubyOps), &quot;GetParentLocals&quot;)); } }
         private static MethodInfo _GetParentLocals;
         public static MethodInfo/*!*/ GetParentScope { get { return _GetParentScope ?? (_GetParentScope = GetMethod(typeof(RubyOps), &quot;GetParentScope&quot;)); } }
@@ -300,8 +302,6 @@ namespace IronRuby.Compiler {
         private static MethodInfo _IsClrSingletonRuleValid;
         public static MethodInfo/*!*/ IsDefinedClassVariable { get { return _IsDefinedClassVariable ?? (_IsDefinedClassVariable = GetMethod(typeof(RubyOps), &quot;IsDefinedClassVariable&quot;)); } }
         private static MethodInfo _IsDefinedClassVariable;
-        public static MethodInfo/*!*/ IsDefinedExpressionConstant { get { return _IsDefinedExpressionConstant ?? (_IsDefinedExpressionConstant = GetMethod(typeof(RubyOps), &quot;IsDefinedExpressionConstant&quot;)); } }
-        private static MethodInfo _IsDefinedExpressionConstant;
         public static MethodInfo/*!*/ IsDefinedExpressionQualifiedConstant { get { return _IsDefinedExpressionQualifiedConstant ?? (_IsDefinedExpressionQualifiedConstant = GetMethod(typeof(RubyOps), &quot;IsDefinedExpressionQualifiedConstant&quot;)); } }
         private static MethodInfo _IsDefinedExpressionQualifiedConstant;
         public static MethodInfo/*!*/ IsDefinedGlobalConstant { get { return _IsDefinedGlobalConstant ?? (_IsDefinedGlobalConstant = GetMethod(typeof(RubyOps), &quot;IsDefinedGlobalConstant&quot;)); } }</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Compiler/ReflectionCache.Generated.cs</filename>
    </modified>
    <modified>
      <diff>@@ -17,6 +17,7 @@ using System;
 using IronRuby.Builtins;
 using IronRuby.Runtime;
 using Microsoft.Scripting;
+using Microsoft.Scripting.Hosting;
 using Microsoft.Scripting.Hosting.Shell;
 using Microsoft.Scripting.Runtime;
 using System.Reflection;
@@ -65,13 +66,21 @@ namespace IronRuby.Hosting {
             return RunFile(Engine.CreateScriptSourceFromFile(RubyUtils.CanonicalizePath(fileName), (((RubyContext)Language).RubyOptions.KCode ?? RubyEncoding.Binary).Encoding));
         }
 
-        protected override void ExecuteCommand(string command) {
+        protected override void ExecuteCommand(string/*!*/ command) {
+            ExecuteCommand(CreateCommandSource(command, SourceCodeKind.InteractiveCode));
+        }
+
+        protected override int RunCommand(string/*!*/ command) {
+            return RunFile(CreateCommandSource(command, SourceCodeKind.Statements));
+        }
+
+        private ScriptSource/*!*/ CreateCommandSource(string/*!*/ command, SourceCodeKind kind) {
 #if SILVERLIGHT
-            base.ExecuteCommand(command);
+            return Engine.CreateScriptSourceFromString(command, kind);
 #else
             var kcode = ((RubyContext)Language).RubyOptions.KCode;
             var encoding = kcode != null ? kcode.Encoding : System.Console.InputEncoding;
-            ExecuteCommand(Engine.CreateScriptSource(new BinaryContentProvider(encoding.GetBytes(command)), null, encoding, SourceCodeKind.InteractiveCode));
+            return Engine.CreateScriptSource(new BinaryContentProvider(encoding.GetBytes(command)), null, encoding, kind);
 #endif
         }
         </diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Hosting/RubyCommandLine.cs</filename>
    </modified>
    <modified>
      <diff>@@ -38,7 +38,7 @@ using AstUtils = Microsoft.Scripting.Ast.Utils;
 namespace IronRuby.Runtime.Calls {
     using Ast = Expression;
 
-    internal sealed class RubyOverloadResolver : OverloadResolver {
+    public sealed class RubyOverloadResolver : OverloadResolver {
         private readonly CallArguments/*!*/ _args;
         private readonly MetaObjectBuilder/*!*/ _metaBuilder;
         private readonly SelfCallConvention _callConvention;
@@ -58,19 +58,19 @@ namespace IronRuby.Runtime.Calls {
         private ParameterExpression _listVariable;
         private IList _list;
 
-        public RubyContext/*!*/ Context {
+        internal RubyContext/*!*/ Context {
             get { return _args.RubyContext; }
         }
 
-        public Expression/*!*/ ScopeExpression {
+        internal Expression/*!*/ ScopeExpression {
             get { return _args.MetaScope.Expression; }
         }
 
-        public Expression/*!*/ ContextExpression {
+        internal Expression/*!*/ ContextExpression {
             get { return _args.MetaContext.Expression; }
         }
 
-        public RubyOverloadResolver(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args, SelfCallConvention callConvention,
+        internal RubyOverloadResolver(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args, SelfCallConvention callConvention,
             bool implicitProtocolConversions)
             : base(args.RubyContext.Binder) {
             _args = args;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyOverloadResolver.cs</filename>
    </modified>
    <modified>
      <diff>@@ -2475,8 +2475,8 @@ namespace IronRuby.Runtime {
             return new InteropBinder.CreateInstance(this, callInfo);
         }
 
-        public override ConvertBinder/*!*/ CreateConvertBinder(Type toType, bool explicitCast) {
-            return new InteropBinder.Convert(this, toType, explicitCast);
+        public override ConvertBinder/*!*/ CreateConvertBinder(Type toType, bool? explicitCast) {
+            return new InteropBinder.Convert(this, toType, explicitCast ?? true);
         }
 
         // TODO: override GetMemberNames?</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs</filename>
    </modified>
    <modified>
      <diff>@@ -1572,11 +1572,22 @@ namespace IronRuby.Runtime {
 
         #endregion
 
+        #region Strings, Encodings
+
         [Emitted]
         public static RubyEncoding/*!*/ CreateEncoding(int codepage) {
             return RubyEncoding.GetRubyEncoding(codepage);
         }
 
+        [Emitted, Obsolete(&quot;Internal only&quot;)]
+        public static byte[]/*!*/ GetMutableStringBytes(MutableString/*!*/ str) {
+            return str.GetByteArray();
+        }
+
+        #endregion
+
+        #region Booleans
+
         [Emitted]
         public static bool IsTrue(object obj) {
             return (obj is bool) ? (bool)obj == true : obj != null;
@@ -1597,6 +1608,8 @@ namespace IronRuby.Runtime {
             return (obj is bool &amp;&amp; !(bool)obj || obj == null) ? DefaultArgument : null;
         }
 
+        #endregion
+
         #region Exceptions
 
         //
@@ -1828,6 +1841,8 @@ namespace IronRuby.Runtime {
             return module == _currentDeclaringModule &amp;&amp; methodName == _currentMethodName;
         }
 
+        #region Ranges
+
         [Emitted]
         public static Range/*!*/ CreateInclusiveRange(object begin, object end, RubyScope/*!*/ scope, BinaryOpStorage/*!*/ comparisonStorage) {
             return new Range(comparisonStorage, scope.RubyContext, begin, end, false);
@@ -1848,11 +1863,7 @@ namespace IronRuby.Runtime {
             return new Range(begin, end, true);
         }
 
-        [Emitted]
-        public static object CreateDefaultInstance() {
-            // nop (stub)
-            return null;
-        }
+        #endregion
 
         #region Dynamic Operations
 
@@ -2358,5 +2369,11 @@ namespace IronRuby.Runtime {
         [Emitted]
         public static void X(string marker) {
         }
+        
+        [Emitted]
+        public static object CreateDefaultInstance() {
+            // nop (stub)
+            return null;
+        }
     }
 }</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs</filename>
    </modified>
    <modified>
      <diff>@@ -57,7 +57,7 @@ namespace IronRuby.Runtime {
                     } else {
                         codeLine = null;
                     }
-                    encoding = RubyEncoding.GetRubyEncoding(reader.Encoding);
+                    encoding = reader.Encoding != null ? RubyEncoding.GetRubyEncoding(reader.Encoding) : RubyEncoding.UTF8;
                 }
             } else {
                 path = null;</diff>
      <filename>Merlin/Main/Languages/Ruby/Ruby/Runtime/RuntimeErrorSink.cs</filename>
    </modified>
    <modified>
      <diff>@@ -203,14 +203,16 @@ namespace Microsoft.Scripting.Hosting {
         }
 
         /// &lt;summary&gt;
-        /// Convers the object obj to the type T.
+        /// Converts the object obj to the type T.  The conversion will be explicit or implicit depending on 
+        /// what the langauge prefers.
         /// &lt;/summary&gt;
         public T ConvertTo&lt;T&gt;(object obj) {
             return _ops.ConvertTo&lt;T&gt;(obj);
         }
 
         /// &lt;summary&gt;
-        /// Converts the object obj to the type type.
+        /// Converts the object obj to the type type. The conversion will be explicit or implicit depending on 
+        /// what the langauge prefers.
         /// &lt;/summary&gt;
         public object ConvertTo(object obj, Type type) {
             ContractUtils.RequiresNotNull(type, &quot;type&quot;);
@@ -220,6 +222,8 @@ namespace Microsoft.Scripting.Hosting {
 
         /// &lt;summary&gt;
         /// Converts the object obj to the type T.  Returns true if the value can be converted, false if it cannot.
+        /// 
+        /// The conversion will be explicit or implicit depending on what the langauge prefers.
         /// &lt;/summary&gt;
         public bool TryConvertTo&lt;T&gt;(object obj, out T result) {
             return _ops.TryConvertTo&lt;T&gt;(obj, out result);
@@ -227,6 +231,8 @@ namespace Microsoft.Scripting.Hosting {
 
         /// &lt;summary&gt;
         /// Converts the object obj to the type type.  Returns true if the value can be converted, false if it cannot.
+        /// 
+        /// The conversion will be explicit or implicit depending on what the langauge prefers.
         /// &lt;/summary&gt;
         public bool TryConvertTo(object obj, Type type, out object result) {
             return _ops.TryConvertTo(obj, type, out result);
@@ -268,6 +274,40 @@ namespace Microsoft.Scripting.Hosting {
 
 
         /// &lt;summary&gt;
+        /// Converts the object obj to the type T including implicit conversions.
+        /// &lt;/summary&gt;
+        public T ImplicitConvertTo&lt;T&gt;(object obj) {
+            return _ops.ImplicitConvertTo&lt;T&gt;(obj);
+        }
+
+        /// &lt;summary&gt;
+        /// Converts the object obj to the type type including implicit conversions.
+        /// &lt;/summary&gt;
+        public object ImplicitConvertTo(object obj, Type type) {
+            ContractUtils.RequiresNotNull(type, &quot;type&quot;);
+
+            return _ops.ImplicitConvertTo(obj, type);
+        }
+
+        /// &lt;summary&gt;
+        /// Converts the object obj to the type T including implicit conversions.
+        /// 
+        /// Returns true if the value can be converted, false if it cannot.
+        /// &lt;/summary&gt;
+        public bool TryImplicitConvertTo&lt;T&gt;(object obj, out T result) {
+            return _ops.TryImplicitConvertTo&lt;T&gt;(obj, out result);
+        }
+
+        /// &lt;summary&gt;
+        /// Converts the object obj to the type type including implicit conversions.  
+        /// 
+        /// Returns true if the value can be converted, false if it cannot.
+        /// &lt;/summary&gt;
+        public bool TryImplicitConvertTo(object obj, Type type, out object result) {
+            return _ops.TryImplicitConvertTo(obj, type, out result);
+        }
+
+        /// &lt;summary&gt;
         /// Performs a generic unary operation on the specified target and returns the result.
         /// &lt;/summary&gt;
         public dynamic DoOperation(ExpressionType operation, object target) {</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Hosting/ObjectOperations.cs</filename>
    </modified>
    <modified>
      <diff>@@ -82,7 +82,7 @@ namespace Microsoft.Scripting {
             _showClrExceptions = GetOption(options, &quot;ShowClrExceptions&quot;, false);
             _perfStats = GetOption(options, &quot;PerfStats&quot;, false);
             _noAdaptiveCompilation = GetOption(options, &quot;NoAdaptiveCompilation&quot;, false);
-            _searchPaths = GetSearchPathsOption(options) ?? new ReadOnlyCollection&lt;string&gt;(new[] { &quot;.&quot; });
+            _searchPaths = GetSearchPathsOption(options) ?? new ReadOnlyCollection&lt;string&gt;(new string[0]);
         }
 
         public static T GetOption&lt;T&gt;(IDictionary&lt;string, object&gt; options, string name, T defaultValue) {</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/LanguageOptions.cs</filename>
    </modified>
    <modified>
      <diff>@@ -227,21 +227,23 @@ namespace Microsoft.Scripting.Runtime {
         }
 
         /// &lt;summary&gt;
-        /// Convers the object obj to the type T.
+        /// Converts the object obj to the type T.  The conversion will be explicit or implicit
+        /// depending on what the langauge prefers.
         /// &lt;/summary&gt;
         public T ConvertTo&lt;T&gt;(object obj) {
             CallSite&lt;Func&lt;CallSite, object, T&gt;&gt; site;
-            site = GetOrCreateSite&lt;object, T&gt;(_lc.CreateConvertBinder(typeof(T), false));
+            site = GetOrCreateSite&lt;object, T&gt;(_lc.CreateConvertBinder(typeof(T), null));
             return site.Target(site, obj);
         }
 
-        /// &lt;summary&gt;
-        /// Converts the object obj to the type type.
+        /// &lt;summary&gt; 
+        /// Converts the object obj to the type type.  The conversion will be explicit or implicit
+        /// depending on what the langauge prefers.
         /// &lt;/summary&gt;
         public object ConvertTo(object obj, Type type) {
             if (type.IsInterface || type.IsClass) {
                 CallSite&lt;Func&lt;CallSite, object, object&gt;&gt; site;
-                site = GetOrCreateSite&lt;object, object&gt;(_lc.CreateConvertBinder(type, false));
+                site = GetOrCreateSite&lt;object, object&gt;(_lc.CreateConvertBinder(type, null));
                 return site.Target(site, obj);
             }
 
@@ -261,6 +263,8 @@ namespace Microsoft.Scripting.Runtime {
 
         /// &lt;summary&gt;
         /// Converts the object obj to the type T.  Returns true if the value can be converted, false if it cannot.
+        /// 
+        /// The conversion will be explicit or implicit depending on what the langauge prefers.
         /// &lt;/summary&gt;
         public bool TryConvertTo&lt;T&gt;(object obj, out T result) {
             try {
@@ -277,6 +281,8 @@ namespace Microsoft.Scripting.Runtime {
 
         /// &lt;summary&gt;
         /// Converts the object obj to the type type.  Returns true if the value can be converted, false if it cannot.
+        /// 
+        /// The conversion will be explicit or implicit depending on what the langauge prefers.
         /// &lt;/summary&gt;
         public bool TryConvertTo(object obj, Type type, out object result) {
             try {
@@ -344,6 +350,58 @@ namespace Microsoft.Scripting.Runtime {
         }
 
         /// &lt;summary&gt;
+        /// Convers the object obj to the type T including implicit conversions.
+        /// &lt;/summary&gt;
+        public T ImplicitConvertTo&lt;T&gt;(object obj) {
+            CallSite&lt;Func&lt;CallSite, object, T&gt;&gt; site;
+            site = GetOrCreateSite&lt;object, T&gt;(_lc.CreateConvertBinder(typeof(T), false));
+            return site.Target(site, obj);
+        }
+
+        /// &lt;summary&gt;
+        /// Converts the object obj to the type type including implicit conversions.
+        /// &lt;/summary&gt;
+        public object ImplicitConvertTo(object obj, Type type) {
+            CallSite&lt;Func&lt;CallSite, object, object&gt;&gt; site;
+            site = GetOrCreateSite&lt;object, object&gt;(_lc.CreateConvertBinder(type, false));
+            return site.Target(site, obj);
+        }
+
+        /// &lt;summary&gt;
+        /// Converts the object obj to the type type including implicit conversions. 
+        /// 
+        /// Returns true if the value can be converted, false if it cannot.
+        /// &lt;/summary&gt;
+        public bool TryImplicitConvertTo(object obj, Type type, out object result) {
+            try {
+                result = ImplicitConvertTo(obj, type);
+                return true;
+            } catch (ArgumentTypeException) {
+                result = null;
+                return false;
+            } catch (InvalidCastException) {
+                result = null;
+                return false;
+            }
+        }
+
+        /// &lt;summary&gt;
+        /// Converts the object obj to the type T.  Returns true if the value can be converted, false if it cannot.
+        /// &lt;/summary&gt;
+        public bool TryImplicitConvertTo&lt;T&gt;(object obj, out T result) {
+            try {
+                result = ImplicitConvertTo&lt;T&gt;(obj);
+                return true;
+            } catch (ArgumentTypeException) {
+                result = default(T);
+                return false;
+            } catch (InvalidCastException) {
+                result = default(T);
+                return false;
+            }
+        }
+
+        /// &lt;summary&gt;
         /// Performs a generic unary operation on the strongly typed target and returns the value as the specified type
         /// &lt;/summary&gt;
         public TResult DoOperation&lt;TTarget, TResult&gt;(ExpressionType operation, TTarget target) {</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Runtime/DynamicOperations.cs</filename>
    </modified>
    <modified>
      <diff>@@ -344,8 +344,17 @@ namespace Microsoft.Scripting.Runtime {
             }
         }
 
-        public virtual ConvertBinder CreateConvertBinder(Type toType, bool explicitCast) {
-            return new DefaultConvertAction(toType, explicitCast);
+        /// &lt;summary&gt;
+        /// Creates a conversion binder.
+        /// 
+        /// If explicitCast is true then the binder should do explicit conversions.
+        /// If explicitCast is false then the binder should do implicit conversions.
+        /// 
+        /// If explicitCast is null it is up to the language to select the conversions
+        /// which closest match their normal behavior.
+        /// &lt;/summary&gt;
+        public virtual ConvertBinder CreateConvertBinder(Type toType, bool? explicitCast) {
+            return new DefaultConvertAction(toType, explicitCast ?? false);
         }
 
         private class DefaultGetMemberAction : GetMemberBinder {</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Runtime/LanguageContext.cs</filename>
    </modified>
    <modified>
      <diff>@@ -203,7 +203,7 @@ namespace Microsoft.Scripting {
                         new[] { tmp },
                         Expression.Condition(
                             Expression.Call(
-                                Expression.Constant(variable),
+                                Variable(variable),
                                 variable.GetType().GetMethod(&quot;TryGetValue&quot;),
                                 tmp
                             ),
@@ -215,6 +215,17 @@ namespace Microsoft.Scripting {
                 );
             }
 
+            private static Expression Variable(IScopeVariable variable) {
+                
+                return Expression.Convert(
+                    Expression.Property(
+                        Expression.Constant(((IWeakReferencable)variable).WeakReference),
+                        typeof(WeakReference).GetProperty(&quot;Target&quot;)
+                    ), 
+                    variable.GetType()
+                );
+            }
+
             public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value) {
                 IScopeVariable variable = Value.GetVariable(binder.Name, binder.IgnoreCase);
 
@@ -222,7 +233,7 @@ namespace Microsoft.Scripting {
                 return new DynamicMetaObject(
                     Expression.Block(
                         Expression.Call(
-                            Expression.Constant(variable),
+                            Variable(variable),
                             variable.GetType().GetMethod(&quot;SetValue&quot;),
                             objExpression
                         ),
@@ -237,7 +248,7 @@ namespace Microsoft.Scripting {
                 return new DynamicMetaObject(
                     Expression.Condition(
                         Expression.Call(
-                            Expression.Constant(variable),
+                            Variable(variable),
                             variable.GetType().GetMethod(&quot;DeleteValue&quot;)
                         ),
                         Expression.Default(binder.ReturnType),
@@ -291,6 +302,12 @@ namespace Microsoft.Scripting {
         bool DeleteValue();
     }
 
+    internal interface IWeakReferencable {
+        WeakReference WeakReference {
+            get;
+        }
+    }
+
     /// &lt;summary&gt;
     /// Boxes the value for storage in a scope. Languages or consumers of the scope
     /// can save this value and use it to get/set the current value in the scope for
@@ -298,8 +315,9 @@ namespace Microsoft.Scripting {
     /// 
     /// ScopeVariables are case sensitive and will only refer to a single value.
     /// &lt;/summary&gt;
-    public sealed class ScopeVariable : IScopeVariable {
+    public sealed class ScopeVariable : IScopeVariable, IWeakReferencable {
         private object _value;
+        private WeakReference _weakref;
         private static readonly object _novalue = new object();
         
         internal ScopeVariable() {
@@ -345,6 +363,20 @@ namespace Microsoft.Scripting {
         }
 
         #endregion
+
+        #region IWeakReferencable Members
+
+        public WeakReference WeakReference {
+            get {
+                if (_weakref == null) {
+                    _weakref = new WeakReference(this);
+                }
+
+                return _weakref;
+            }
+        }
+
+        #endregion
     }
 
     /// &lt;summary&gt;
@@ -355,9 +387,10 @@ namespace Microsoft.Scripting {
     /// ScopeVariablesIgnoreCase are case insensitive and may access different casings
     /// depending on how other gets/sets occur in the scope.
     /// &lt;/summary&gt;
-    public sealed class ScopeVariableIgnoreCase : IScopeVariable {
+    public sealed class ScopeVariableIgnoreCase : IScopeVariable, IWeakReferencable {
         private readonly string _firstCasing;
         private readonly ScopeVariable _firstVariable;
+        private WeakReference _weakref;
         private Dictionary&lt;string, ScopeVariable&gt; _overflow;
         
         internal ScopeVariableIgnoreCase(string casing) {
@@ -496,5 +529,19 @@ namespace Microsoft.Scripting {
         }
 
         #endregion
+
+        #region IWeakReferencable Members
+
+        public WeakReference WeakReference {
+            get {
+                if (_weakref == null) {
+                    _weakref = new WeakReference(this);
+                }
+
+                return _weakref;
+            }
+        }
+
+        #endregion
     }
 }</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Runtime/ScopeStorage.cs</filename>
    </modified>
    <modified>
      <diff>@@ -361,11 +361,11 @@ namespace Microsoft.Scripting {
         }
 
         /// &lt;summary&gt;
-        /// A string like  &quot;pecified path is invalid.&quot;
+        /// A string like  &quot;Specified path is invalid.&quot;
         /// &lt;/summary&gt;
         internal static string InvalidPath {
             get {
-                return &quot;pecified path is invalid.&quot;;
+                return &quot;Specified path is invalid.&quot;;
             }
         }
 
@@ -790,7 +790,7 @@ namespace Microsoft.Scripting {
         }
 
         /// &lt;summary&gt;
-        /// ArgumentException with message like &quot;pecified path is invalid.&quot;
+        /// ArgumentException with message like &quot;Specified path is invalid.&quot;
         /// &lt;/summary&gt;
         internal static Exception InvalidPath() {
             return new ArgumentException(Strings.InvalidPath);</diff>
      <filename>Merlin/Main/Runtime/Microsoft.Scripting/Utils/ExceptionFactory.Generated.cs</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/ironruby-tags/language/execution_tags.txt</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>03054a5be81928afaacd16b5ef5d4067f7ecc69a</id>
    </parent>
  </parents>
  <author>
    <name>Jim Deville</name>
    <email>jdeville@microsoft.com</email>
  </author>
  <url>http://github.com/shri/ironruby/commit/7d9391319aa533fe3be3cee1462452dd093e9bef</url>
  <id>7d9391319aa533fe3be3cee1462452dd093e9bef</id>
  <committed-date>2009-09-30T22:07:46-07:00</committed-date>
  <authored-date>2009-09-30T22:07:46-07:00</authored-date>
  <message>syncing to head of tfs</message>
  <tree>29e748e91aedfb67d12e277ad4653c085a1ebdae</tree>
  <committer>
    <name>Jim Deville</name>
    <email>jdeville@microsoft.com</email>
  </committer>
</commit>
