<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/method/binding/other_concerns_spec.rb</filename>
    </added>
    <added>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/tags/net/method/binding/other_concerns_tags.txt</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/A/a.generated.dll</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/B/b.generated.dll</filename>
    </modified>
    <modified>
      <diff>@@ -177,6 +177,7 @@ no_csc do
 
     class TestListEnumerator
       include System::Collections::IEnumerator
+      attr_reader :list
       def initialize(list)
         @list = list
         @position = -1</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/bcl/fixtures/classes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -735,6 +735,8 @@ public abstract partial class AbstractClassWithMethods {
     protected string ProtectedMethod() { return &quot;protected&quot;;}
     private string PrivateMethod() { return &quot;private&quot;;}
     public ArrayList Tracker { get; set;}
+    private static ArrayList _staticTracker = new ArrayList();
+    public static ArrayList StaticTracker { get { return _staticTracker;}}
       #region private methods
   private string Private1Generic0Arg&lt;T&gt;() {
     return &quot;private generic no args&quot;;
@@ -847,7 +849,8 @@ public abstract partial class AbstractClassWithMethods {
   }
   #endregion
 
-    public void Reset() { Tracker = new ArrayList();}
+    public void Reset() { Tracker.Clear(); }
+    public static void StaticReset() { StaticTracker.Clear(); }
     public int SummingMethod(int a, int b){
       return a+b;
     }
@@ -937,8 +940,138 @@ public abstract partial class AbstractClassWithMethods {
     // Default Value
     public string DefaultInt32Arg([DefaultParameterValue(10)] Int32 arg) { Tracker.Add(arg); return &quot;DefaultInt32Arg&quot;;}
     public string Int32ArgDefaultInt32Arg(Int32 arg, [DefaultParameterValue(10)] Int32 arg2) { Tracker.Add(arg); Tracker.Add(arg2); return &quot;Int32ArgDefaultInt32Arg&quot;;}
+
+    // static
+    public static string StaticMethodNoArg() { StaticTracker.Add(null); return &quot;StaticMethodNoArg&quot;;}
+    public static string StaticMethodClassWithMethodsArg(ClassWithMethods arg) {StaticTracker.Add(arg); return &quot;StaticMethodClassWithMethodsArg&quot;;}
+    public string ClassWithMethodsArg(ClassWithMethods arg) {Tracker.Add(arg); return &quot;ClassWithMethodsArg&quot;;}
+
+    // generic method
+    public string GenericArg&lt;T&gt;(T arg) {Tracker.Add(arg); return String.Format(&quot;GenericArg[{0}]&quot;, typeof(T));}
+
+    // out on non-byref
+    public string OutNonByRefInt32Arg([Out] int arg) {arg = 1; Tracker.Add(arg); return &quot;OutNonByRefInt32Arg&quot;;}
+    
+    // what does passing in nil mean?
+    public string ParamsIInterfaceArrTestArg(params IInterface[] args) { Tracker.Add(args == null); Tracker.Add(args); return &quot;ParamsIInterfaceArrTestArg&quot;;}
+
+    // ref, out, ...
+    public string RefOutInt32Args(ref int arg1, out int arg2, int arg3) {arg1=arg2=arg3; Tracker.Add(arg1); Tracker.Add(arg2); Tracker.Add(arg3); return &quot;RefOutInt32Args&quot;;}
+    public string RefInt32OutArgs(ref int arg1, int arg2, out int arg3) {arg3=arg1=arg2; Tracker.Add(arg1); Tracker.Add(arg2); Tracker.Add(arg3); return &quot;RefInt32OutArgs&quot;;}
+    public string Int32RefOutArgs(int arg1, ref int arg2, out int arg3) {arg2=arg3=arg1; Tracker.Add(arg1); Tracker.Add(arg2); Tracker.Add(arg3); return &quot;Int32RefOutArgs&quot;;}
+
+    // eight args
+    public string EightArgs(int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) {
+      Tracker.Add(arg1);
+      Tracker.Add(arg2);
+      Tracker.Add(arg3);
+      Tracker.Add(arg4);
+      Tracker.Add(arg5);
+      Tracker.Add(arg6);
+      Tracker.Add(arg7);
+      Tracker.Add(arg8);
+      return &quot;EightArgs&quot;;
+    }
+
+    public string IDictionaryOfIntIntArg(IDictionary&lt;int, int&gt; arg){ Tracker.Add(arg); return &quot;IDictionaryOfIntIntArg&quot;;}
+    public string HashtableArg(Hashtable arg) { Tracker.Add(arg); return &quot;HashtableArg&quot;;}
+    public string ListOfIntArg(List&lt;int&gt; arg) { Tracker.Add(arg); return &quot;ListOfIntArg&quot;;}
+
+    // iterator support
+    public string IEnumerableIteratingArg(IEnumerable arg) {
+      IEnumerator ienum = arg.GetEnumerator(); 
+      while (ienum.MoveNext()) 
+        Tracker.Add(ienum.Current); 
+      return &quot;IEnumerableIteratingArg&quot;;
+    }
+    public string IEnumeratorIteratingArg(IEnumerator arg) {
+      while (arg.MoveNext())
+        Tracker.Add(arg.Current);
+      return &quot;IEnumeratorIteratingArg&quot;;
+    }
+    public string IListArg(IList arg) { Tracker.Add(arg); Tracker.Add(arg.Count); return &quot;IListArg&quot;;}
+
+    public string IEnumerableOfCharIteratingArg(IEnumerable&lt;Char&gt; arg) {
+      IEnumerator ienum = arg.GetEnumerator(); 
+      while (ienum.MoveNext()) 
+        Tracker.Add(ienum.Current); 
+      return &quot;IEnumerableOfCharIteratingArg&quot;;
+    }
+    public string IEnumeratorOfCharIteratingArg(IEnumerator&lt;Char&gt; arg) {
+      while (arg.MoveNext())
+        Tracker.Add(arg.Current);
+      return &quot;IEnumeratorOfCharIteratingArg&quot;;
+    }
+    public string IListOfCharArg(IList&lt;Char&gt; arg) { Tracker.Add(arg); Tracker.Add(arg.Count); return &quot;IListOfCharArg&quot;;}
+
+    public string IEnumerableOfIntIteratingArg(IEnumerable&lt;int&gt; arg) {
+      IEnumerator ienum = arg.GetEnumerator(); 
+      while (ienum.MoveNext()) 
+        Tracker.Add(ienum.Current); 
+      return &quot;IEnumerableOfIntIteratingArg&quot;;
+    }
+    public string IEnumeratorOfIntIteratingArg(IEnumerator&lt;int&gt; arg) {
+      while (arg.MoveNext())
+        Tracker.Add(arg.Current);
+      return &quot;IEnumeratorOfIntIteratingArg&quot;;
+    }
+    public string IListOfIntArg2(IList&lt;int&gt; arg) { Tracker.Add(arg); Tracker.Add(arg.Count); return &quot;IListOfIntArg2&quot;;}
+
+    // delegate
+    public string DelegateArg(Delegate arg) {
+      IntIntDelegate d = (IntIntDelegate)arg;
+      Tracker.Add(d(10));
+      return &quot;DelegateArg&quot;;
+    }
+
+    public string IntIntDelegateArg(IntIntDelegate arg) { Tracker.Add(arg(10)); return &quot;IntIntDelegateArg&quot;;}
+
+    // byte array
+    public string RefByteArrArg(ref Byte[] arg) { Tracker.Add(arg); return &quot;RefByteArrArg&quot;;}
+    public string ByteArrRefByteArrArg(Byte[] input, ref Byte[] arg) { arg = input; Tracker.Add(arg); return &quot;ByteArrRefByteArrArg&quot;;}
+
+    // keywords
+    public string KeywordsArgs(int arg1, object arg2, ref string arg3) { arg3 = arg3.ToUpper(); Tracker.Add(arg3); return &quot;KeywordsArgs&quot;;}
+
+    //more ref/out
+    public string RefStructImplementsIInterfaceArg(ref StructImplementsIInterface arg) { arg = new StructImplementsIInterface(); Tracker.Add(arg); return &quot;RefStructImplementsIInterfaceArg&quot;;}
+    public string OutStructImplementsIInterfaceArg(out StructImplementsIInterface arg) { arg = new StructImplementsIInterface(); Tracker.Add(arg); return &quot;OutStructImplementsIInterfaceArg&quot;;}
+    public string RefImplementsIInterfaceArg(ref ImplementsIInterface arg) { Tracker.Add(arg); return &quot;RefImplementsIInterfaceArg&quot;;}
+    public string OutImplementsIInterfaceArg(out ImplementsIInterface arg) { arg = new ImplementsIInterface(); Tracker.Add(arg); return &quot;OutImplementsIInterfaceArg&quot;;}
+    public string RefBooleanArg(ref Boolean arg) { Tracker.Add(arg); return &quot;RefBooleanArg&quot;;}
+    public string OutBooleanArg(out Boolean arg) { arg = true; Tracker.Add(arg); return &quot;OutBooleanArg&quot;;}
+    public string RefInt32Int32OutInt32Arg(ref int arg1, int arg2, out int arg3) { 
+      arg3 = arg1 + arg2;
+      arg1 = 100;
+      Tracker.Add(arg1);
+      Tracker.Add(arg2);
+      Tracker.Add(arg3);
+      return &quot;RefInt32Int32OutInt32Arg&quot;;
+    }
+  }
+
+  public struct StructWithMethods {
+    private short _shortField;
+    public short ShortField {
+      get { 
+        return _shortField;
+      }
+      set {
+        _shortField = value;
+      }
+    }
   }
 
+  public partial class GenericClassWithMethods&lt;K&gt; {
+    public ArrayList Tracker { get; set;}
+    public GenericClassWithMethods() {
+      Tracker = new ArrayList();
+    }
+    public string GenericArg(K arg) { Tracker.Add(arg); return &quot;GenericArg&quot;;}
+  }
+
+  public delegate int IntIntDelegate(int arg);
+
   public class VirtualMethodBaseClass { 
     public virtual string VirtualMethod() { return &quot;virtual&quot;; } 
   }</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/fixtures.generated.cs</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/fixtures.generated.dll</filename>
    </modified>
    <modified>
      <diff>@@ -224,8 +224,11 @@ csc &lt;&lt;-EOL
     protected string ProtectedMethod() { return &quot;protected&quot;;}
     private string PrivateMethod() { return &quot;private&quot;;}
     public ArrayList Tracker { get; set;}
+    private static ArrayList _staticTracker = new ArrayList();
+    public static ArrayList StaticTracker { get { return _staticTracker;}}
     #{@methods_string}
-    public void Reset() { Tracker = new ArrayList();}
+    public void Reset() { Tracker.Clear(); }
+    public static void StaticReset() { StaticTracker.Clear(); }
     public int SummingMethod(int a, int b){
       return a+b;
     }
@@ -315,8 +318,138 @@ csc &lt;&lt;-EOL
     // Default Value
     public string DefaultInt32Arg([DefaultParameterValue(10)] Int32 arg) { Tracker.Add(arg); return &quot;DefaultInt32Arg&quot;;}
     public string Int32ArgDefaultInt32Arg(Int32 arg, [DefaultParameterValue(10)] Int32 arg2) { Tracker.Add(arg); Tracker.Add(arg2); return &quot;Int32ArgDefaultInt32Arg&quot;;}
+
+    // static
+    public static string StaticMethodNoArg() { StaticTracker.Add(null); return &quot;StaticMethodNoArg&quot;;}
+    public static string StaticMethodClassWithMethodsArg(ClassWithMethods arg) {StaticTracker.Add(arg); return &quot;StaticMethodClassWithMethodsArg&quot;;}
+    public string ClassWithMethodsArg(ClassWithMethods arg) {Tracker.Add(arg); return &quot;ClassWithMethodsArg&quot;;}
+
+    // generic method
+    public string GenericArg&lt;T&gt;(T arg) {Tracker.Add(arg); return String.Format(&quot;GenericArg[{0}]&quot;, typeof(T));}
+
+    // out on non-byref
+    public string OutNonByRefInt32Arg([Out] int arg) {arg = 1; Tracker.Add(arg); return &quot;OutNonByRefInt32Arg&quot;;}
+    
+    // what does passing in nil mean?
+    public string ParamsIInterfaceArrTestArg(params IInterface[] args) { Tracker.Add(args == null); Tracker.Add(args); return &quot;ParamsIInterfaceArrTestArg&quot;;}
+
+    // ref, out, ...
+    public string RefOutInt32Args(ref int arg1, out int arg2, int arg3) {arg1=arg2=arg3; Tracker.Add(arg1); Tracker.Add(arg2); Tracker.Add(arg3); return &quot;RefOutInt32Args&quot;;}
+    public string RefInt32OutArgs(ref int arg1, int arg2, out int arg3) {arg3=arg1=arg2; Tracker.Add(arg1); Tracker.Add(arg2); Tracker.Add(arg3); return &quot;RefInt32OutArgs&quot;;}
+    public string Int32RefOutArgs(int arg1, ref int arg2, out int arg3) {arg2=arg3=arg1; Tracker.Add(arg1); Tracker.Add(arg2); Tracker.Add(arg3); return &quot;Int32RefOutArgs&quot;;}
+
+    // eight args
+    public string EightArgs(int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) {
+      Tracker.Add(arg1);
+      Tracker.Add(arg2);
+      Tracker.Add(arg3);
+      Tracker.Add(arg4);
+      Tracker.Add(arg5);
+      Tracker.Add(arg6);
+      Tracker.Add(arg7);
+      Tracker.Add(arg8);
+      return &quot;EightArgs&quot;;
+    }
+
+    public string IDictionaryOfIntIntArg(IDictionary&lt;int, int&gt; arg){ Tracker.Add(arg); return &quot;IDictionaryOfIntIntArg&quot;;}
+    public string HashtableArg(Hashtable arg) { Tracker.Add(arg); return &quot;HashtableArg&quot;;}
+    public string ListOfIntArg(List&lt;int&gt; arg) { Tracker.Add(arg); return &quot;ListOfIntArg&quot;;}
+
+    // iterator support
+    public string IEnumerableIteratingArg(IEnumerable arg) {
+      IEnumerator ienum = arg.GetEnumerator(); 
+      while (ienum.MoveNext()) 
+        Tracker.Add(ienum.Current); 
+      return &quot;IEnumerableIteratingArg&quot;;
+    }
+    public string IEnumeratorIteratingArg(IEnumerator arg) {
+      while (arg.MoveNext())
+        Tracker.Add(arg.Current);
+      return &quot;IEnumeratorIteratingArg&quot;;
+    }
+    public string IListArg(IList arg) { Tracker.Add(arg); Tracker.Add(arg.Count); return &quot;IListArg&quot;;}
+
+    public string IEnumerableOfCharIteratingArg(IEnumerable&lt;Char&gt; arg) {
+      IEnumerator ienum = arg.GetEnumerator(); 
+      while (ienum.MoveNext()) 
+        Tracker.Add(ienum.Current); 
+      return &quot;IEnumerableOfCharIteratingArg&quot;;
+    }
+    public string IEnumeratorOfCharIteratingArg(IEnumerator&lt;Char&gt; arg) {
+      while (arg.MoveNext())
+        Tracker.Add(arg.Current);
+      return &quot;IEnumeratorOfCharIteratingArg&quot;;
+    }
+    public string IListOfCharArg(IList&lt;Char&gt; arg) { Tracker.Add(arg); Tracker.Add(arg.Count); return &quot;IListOfCharArg&quot;;}
+
+    public string IEnumerableOfIntIteratingArg(IEnumerable&lt;int&gt; arg) {
+      IEnumerator ienum = arg.GetEnumerator(); 
+      while (ienum.MoveNext()) 
+        Tracker.Add(ienum.Current); 
+      return &quot;IEnumerableOfIntIteratingArg&quot;;
+    }
+    public string IEnumeratorOfIntIteratingArg(IEnumerator&lt;int&gt; arg) {
+      while (arg.MoveNext())
+        Tracker.Add(arg.Current);
+      return &quot;IEnumeratorOfIntIteratingArg&quot;;
+    }
+    public string IListOfIntArg2(IList&lt;int&gt; arg) { Tracker.Add(arg); Tracker.Add(arg.Count); return &quot;IListOfIntArg2&quot;;}
+
+    // delegate
+    public string DelegateArg(Delegate arg) {
+      IntIntDelegate d = (IntIntDelegate)arg;
+      Tracker.Add(d(10));
+      return &quot;DelegateArg&quot;;
+    }
+
+    public string IntIntDelegateArg(IntIntDelegate arg) { Tracker.Add(arg(10)); return &quot;IntIntDelegateArg&quot;;}
+
+    // byte array
+    public string RefByteArrArg(ref Byte[] arg) { Tracker.Add(arg); return &quot;RefByteArrArg&quot;;}
+    public string ByteArrRefByteArrArg(Byte[] input, ref Byte[] arg) { arg = input; Tracker.Add(arg); return &quot;ByteArrRefByteArrArg&quot;;}
+
+    // keywords
+    public string KeywordsArgs(int arg1, object arg2, ref string arg3) { arg3 = arg3.ToUpper(); Tracker.Add(arg3); return &quot;KeywordsArgs&quot;;}
+
+    //more ref/out
+    public string RefStructImplementsIInterfaceArg(ref StructImplementsIInterface arg) { arg = new StructImplementsIInterface(); Tracker.Add(arg); return &quot;RefStructImplementsIInterfaceArg&quot;;}
+    public string OutStructImplementsIInterfaceArg(out StructImplementsIInterface arg) { arg = new StructImplementsIInterface(); Tracker.Add(arg); return &quot;OutStructImplementsIInterfaceArg&quot;;}
+    public string RefImplementsIInterfaceArg(ref ImplementsIInterface arg) { Tracker.Add(arg); return &quot;RefImplementsIInterfaceArg&quot;;}
+    public string OutImplementsIInterfaceArg(out ImplementsIInterface arg) { arg = new ImplementsIInterface(); Tracker.Add(arg); return &quot;OutImplementsIInterfaceArg&quot;;}
+    public string RefBooleanArg(ref Boolean arg) { Tracker.Add(arg); return &quot;RefBooleanArg&quot;;}
+    public string OutBooleanArg(out Boolean arg) { arg = true; Tracker.Add(arg); return &quot;OutBooleanArg&quot;;}
+    public string RefInt32Int32OutInt32Arg(ref int arg1, int arg2, out int arg3) { 
+      arg3 = arg1 + arg2;
+      arg1 = 100;
+      Tracker.Add(arg1);
+      Tracker.Add(arg2);
+      Tracker.Add(arg3);
+      return &quot;RefInt32Int32OutInt32Arg&quot;;
+    }
+  }
+
+  public struct StructWithMethods {
+    private short _shortField;
+    public short ShortField {
+      get { 
+        return _shortField;
+      }
+      set {
+        _shortField = value;
+      }
+    }
+  }
+
+  public partial class GenericClassWithMethods&lt;K&gt; {
+    public ArrayList Tracker { get; set;}
+    public GenericClassWithMethods() {
+      Tracker = new ArrayList();
+    }
+    public string GenericArg(K arg) { Tracker.Add(arg); return &quot;GenericArg&quot;;}
   }
 
+  public delegate int IntIntDelegate(int arg);
+
   public class VirtualMethodBaseClass { 
     public virtual string VirtualMethod() { return &quot;virtual&quot;; } 
   }
@@ -329,6 +462,8 @@ csc &lt;&lt;-EOL
 EOL
   
 no_csc do
+  include System::Collections
+  include System::Collections::Generic
   TE = TypeError
   AE = ArgumentError
   OE = System::OverflowException
@@ -337,8 +472,9 @@ no_csc do
   SAO = System::Array[Object]
   SAI = System::Array[IInterface]
   SAC = System::Array[CStruct]
-  DObjObj = System::Collections::Generic::Dictionary[Object, Object]
-  DIntStr = System::Collections::Generic::Dictionary[Fixnum, System::String]
+  DObjObj = Dictionary[Object, Object]
+  DIntStr = Dictionary[Fixnum, System::String]
+  DIntInt = Dictionary[Fixnum, Fixnum]
   module BindingSpecs
     class ImplementsEnumerable
       include Enumerable
@@ -403,6 +539,98 @@ no_csc do
         def to_str; &quot;to_str&quot; end
       end
     end
+    
+    class TestListOfInt
+      include IEnumerable.of(Fixnum)
+      def initialize
+        @store = []
+      end
+
+      def get_enumerator
+        TestListEnumeratorOfInt.new(@store)
+      end
+
+      def &lt;&lt;(val)
+        @store &lt;&lt; val
+        self
+      end
+
+      class TestListEnumeratorOfInt
+        include IEnumerator.of(Fixnum)
+        attr_reader :list
+        def initialize(list)
+          @list = list
+          @position = -1
+        end
+
+        def move_next
+          @position += 1
+          valid?
+        end
+
+        def reset
+          @position = -1
+        end
+
+        def valid?
+          @position != -1 &amp;&amp; @position &lt; @list.length
+        end
+
+        def current
+          if valid?
+            @list[@position]
+          else
+            raise System::InvalidOperationException.new
+          end
+        end
+      end
+    end
+    
+    class TestListOfChar
+      include IEnumerable.of(System::Char)
+      def initialize
+        @store = []
+      end
+
+      def get_enumerator
+        TestListEnumeratorOfChar.new(@store)
+      end
+
+      def &lt;&lt;(val)
+        @store &lt;&lt; val
+        self
+      end
+
+      class TestListEnumeratorOfChar
+        include IEnumerator.of(System::Char)
+        attr_reader :list
+        def initialize(list)
+          @list = list
+          @position = -1
+        end
+
+        def move_next
+          @position += 1
+          valid?
+        end
+
+        def reset
+          @position = -1
+        end
+
+        def valid?
+          @position != -1 &amp;&amp; @position &lt; @list.length
+        end
+
+        def current
+          if valid?
+            @list[@position]
+          else
+            raise System::InvalidOperationException.new
+          end
+        end
+      end
+    end
   end
 
   class Helper
@@ -413,7 +641,12 @@ no_csc do
           meth_call = (input == &quot;NoArg&quot; ? lambda { @target.send(meth)} : lambda {@target.send(meth, @values[input])})
           if result.class == Class &amp;&amp; result &lt; Exception
             meth_call.should raise_error result
-          else 
+          elsif result.class == Regexp
+            res, ref = meth_call.call
+            #require File.expand_path(&quot;~\\desktop\\repl.rb&quot;)
+            #repl binding
+            (res =~ result).should == 0
+          else
             res, ref = meth_call.call
             res.should == result
           end
@@ -423,7 +656,10 @@ no_csc do
           meth_call = (input == &quot;NoArg&quot; ? lambda { @target2.send(meth)} : lambda {@target2.send(meth, @values[input])})
           if result.class == Class &amp;&amp; result &lt; Exception
             meth_call.should raise_error result
-          else 
+          elsif result.class == Regexp
+            res, ref = meth_call.call
+            (res =~ result).should == 0
+          else
             res, ref = meth_call.call
             res.should == result
           end
@@ -453,7 +689,13 @@ no_csc do
                      end
             @target.tracker.should == result
           end
-          ref.should == result if ref
+          if ref
+            if result.is_a? ArrayList
+              ref.should == result[0]
+            else
+              ref.should == result
+            end
+          end
         end
         
         it &quot;passes the correct input (#{input}) into method (#{meth}) (RubyClassWithMethods)&quot; do
@@ -478,7 +720,13 @@ no_csc do
                      end
             @target2.tracker.should == result
           end
-          ref.should == result if ref
+          if ref
+            if result.is_a? ArrayList
+              ref.should == result[0]
+            else
+              ref.should == result
+            end
+          end
         end
       end
     end
@@ -488,6 +736,7 @@ no_csc do
         def test_BooleanArg(v)
           !!v
         end
+        alias_method :test_RefBooleanArg, :test_BooleanArg
 
         def test_SingleArg(v)
           case v
@@ -568,6 +817,79 @@ no_csc do
         [System::Byte, System::SByte, System::Int16, System::UInt16, System::UInt32, System::Int64, System::UInt64].each do |val|
           define_method(&quot;test_#{val.name.gsub(&quot;System::&quot;,&quot;&quot;)}Arg&quot;) {|v| val.induced_from(v.to_int) if test_value(v)}
         end
+        
+        def test_IEnumerableIteratingArg(v)
+          case v
+          when Hash
+            KeyValuePair.of(Object,Object).new(1,1)
+          when DObjObj
+            [KeyValuePair.of(Object,Object).new(1,1),KeyValuePair.of(Object,Object).new(2,2)]
+          when DIntInt
+            [KeyValuePair.of(Fixnum,Fixnum).new(1,1),KeyValuePair.of(Fixnum,Fixnum).new(2,2)]
+          when DIntStr
+            [KeyValuePair.of(Fixnum, System::String).new(1,&quot;1&quot;.to_clr_string),KeyValuePair.of(Fixnum, System::String).new(2,&quot;2&quot;.to_clr_string)]
+          when Hashtable
+            [DictionaryEntry.new(2,2), DictionaryEntry.new(1,1)]
+          when System::String
+            test_IEnumerableOfCharIteratingArg(v)
+          end
+        end
+
+        def test_ListOfIntArg(v)
+          if [List[Fixnum], System::Array[Fixnum], List[Object], Array, 
+              System::Array[System::Char], ArrayList, List[System::Char],
+              System::Array[System::Byte], List[System::Byte]].any? {|e| v.is_a?(e)}
+            ArrayList.new &lt;&lt; v
+          end
+        end
+        alias_method :test_GenericArg, :test_ListOfIntArg
+
+        def test_RefByteArrArg(v)
+          if v.is_a? String
+            res = System::Array.of(System::Byte).new(v.size)
+            i = 0
+            v.each_byte {|e| res[i] = System::Byte.induced_from(e); i+=1}
+            ArrayList.new &lt;&lt; res
+          elsif v.is_a? System::Array.of(System::Byte)
+            ArrayList.new &lt;&lt; v
+          end
+        end
+
+        def test_IEnumerableOfCharIteratingArg(v)
+          if v.is_a? System::String
+            v.to_s.split(//).map {|e| e.to_clr_string}
+          end
+        end
+
+        def test_IEnumeratorIteratingArg(v)
+          if [TestList::TestListEnumerator, BindingSpecs::TestListOfInt::TestListEnumeratorOfInt, BindingSpecs::TestListOfChar::TestListEnumeratorOfChar].any? {|e| v.is_a? e}
+            v.list
+          end
+        end
+        
+        def test_IEnumeratorOfIntIteratingArg(v)
+          if [BindingSpecs::TestListOfInt::TestListEnumeratorOfInt].any? {|e| v.is_a? e}
+            v.list
+          end
+        end
+        
+        def test_IEnumeratorOfCharIteratingArg(v)
+          if [BindingSpecs::TestListOfChar::TestListEnumeratorOfChar].any? {|e| v.is_a? e}
+            v.list
+          end
+        end
+
+        def test_DelegateArg(v)
+          case v
+          when IntIntDelegate
+            11
+          when Proc
+            12
+          when Method
+            14
+          end
+        end
+        alias_method :test_IntIntDelegateArg, :test_DelegateArg
 
         def method_missing(meth, *args, &amp;blk)
           if meth =~ /test_.*?Arg/
@@ -622,7 +944,7 @@ no_csc do
       &quot;System::Array[Object]InstanceEmpty&quot; =&gt; SAO.new(0), &quot;System::Array[Object]Instance&quot; =&gt; SAO.new(2,Object.new), 
       &quot;System::Array[IInterface]InstanceEmpty&quot; =&gt; SAI.new(0), &quot;System::Array[IInterface]Instance&quot; =&gt; SAI.new(2, BindingSpecs::RubyImplementsIInterface.new),
       &quot;System::Array[CStruct]InstanceEmpty&quot; =&gt; SAC.new(0), &quot;System::Array[CStruct]Instance&quot; =&gt; SAC.new(2, CStruct.new),
-      &quot;ArrayListInstanceEmpty&quot; =&gt; System::Collections::ArrayList.new, &quot;ArrayListInstance&quot; =&gt; (System::Collections::ArrayList.new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3),
+      &quot;ArrayListInstanceEmpty&quot; =&gt; ArrayList.new, &quot;ArrayListInstance&quot; =&gt; (ArrayList.new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3),
       #{}                                                       {1=&gt;1,2=&gt;2}
       &quot;Dictionary[Object,Object]InstanceEmpty&quot; =&gt; DObjObj.new, &quot;Dictionary[Object,Object]Instance&quot; =&gt; dobj,
       #{}                                                       {1=&gt;&quot;1&quot;,2=&gt;&quot;2&quot;}
@@ -632,8 +954,8 @@ no_csc do
       &quot;CStructInstance&quot; =&gt; CStruct.new,
       &quot;Int32Instance&quot; =&gt; 1,
       &quot;IInterfaceInstance&quot; =&gt; BindingSpecs::RubyImplementsIInterface.new,
-      &quot;System::Collections::Generic::List[Fixnum]InstanceEmpty&quot; =&gt; System::Collections::Generic::List[Fixnum].new, &quot;System::Collections::Generic::List[Fixnum]Instance&quot; =&gt; ( System::Collections::Generic::List[Fixnum].new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3 ),
-      &quot;System::Collections::Generic::List[Object]InstanceEmpty&quot; =&gt; System::Collections::Generic::List[Object].new, &quot;System::Collections::Generic::List[Object]Instance&quot; =&gt; ( System::Collections::Generic::List[Object].new &lt;&lt; Object.new &lt;&lt; Object.new &lt;&lt; Object.new ),
+      &quot;System::Collections::Generic::List[Fixnum]InstanceEmpty&quot; =&gt; List[Fixnum].new, &quot;System::Collections::Generic::List[Fixnum]Instance&quot; =&gt; ( List[Fixnum].new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3 ),
+      &quot;System::Collections::Generic::List[Object]InstanceEmpty&quot; =&gt; List[Object].new, &quot;System::Collections::Generic::List[Object]Instance&quot; =&gt; ( List[Object].new &lt;&lt; Object.new &lt;&lt; Object.new &lt;&lt; Object.new ),
       }
     end
     # TODO: More BigIntegerValues near boundaries
@@ -680,7 +1002,53 @@ no_csc do
           result
         end
     end
+    
+    def self.other_concern_args
+
+      dobj = DObjObj.new
+      dobj[1] = 1
+      dobj[2] = 2
+      dint = DIntStr.new
+      dint[1] = &quot;1&quot;.to_clr_string
+      dint[2] = &quot;2&quot;.to_clr_string
+      dii = DIntInt.new
+      dii[1] = 1
+      dii[2] = 2
+      ht = Hashtable.new
+      ht[1] = 1
+      ht[2] = 2
+      tl1 = TestList.new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3
+      tl2 = BindingSpecs::TestListOfInt.new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3
+      tl3 = BindingSpecs::TestListOfChar.new &lt;&lt; System::Char.new(&quot;a&quot;) &lt;&lt; System::Char.new(&quot;b&quot;) &lt;&lt; System::Char.new(&quot;c&quot;)
+      types = {&quot;ClassWithMethods&quot; =&gt; ClassWithMethods.new, &quot;int&quot; =&gt; 1, &quot;nil&quot; =&gt; nil, &quot;hash&quot; =&gt; {1=&gt; 1}, 
+               &quot;Dictionary[obj,obj]&quot; =&gt; dobj, &quot;Dictionary[int,str]&quot; =&gt; dint, &quot;Dictionary[int,int]&quot; =&gt; dii,
+               &quot;hashtable&quot; =&gt; ht, &quot;List[int]&quot; =&gt; ( List[Fixnum].new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3 ),
+               &quot;List[obj]&quot; =&gt; ( List[Object].new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3), &quot;Array[int]&quot; =&gt; System::Array.of(Fixnum).new(2,3),
+               &quot;String&quot; =&gt; &quot;String&quot;, &quot;Array&quot; =&gt; [Object.new, 1, :blue], &quot;Array[Char]&quot; =&gt; System::Array.of(System::Char).new(2, System::Char.new(&quot;a&quot;)),
+               &quot;System::String&quot; =&gt; &quot;System::String&quot;.to_clr_string, &quot;Array[System::String]&quot; =&gt; System::Array.of(System::String).new(2, &quot;a&quot;.to_clr_string),
+               &quot;ArrayList&quot; =&gt; (ArrayList.new &lt;&lt; 1 &lt;&lt; 2 &lt;&lt; 3),  &quot;List[Char]&quot; =&gt; ( List[System::Char].new &lt;&lt; System::Char.new(&quot;a&quot;) &lt;&lt; System::Char.new(&quot;b&quot;) &lt;&lt; System::Char.new(&quot;c&quot;)), 
+               &quot;IEnumerator&quot; =&gt; tl1.get_enumerator, &quot;IEnumerator[int]&quot; =&gt; tl2.get_enumerator, &quot;IEnumerator[Char]&quot; =&gt; tl3.get_enumerator,
+               &quot;IntIntDelegate&quot; =&gt; IntIntDelegate.new {|a| a+1 }, &quot;lambda&quot; =&gt; lambda {|a| a+2}, 
+              &quot;proc&quot; =&gt; proc {|a| a+2}, &quot;method&quot; =&gt; method(:test_method),
+               &quot;unboundmethod&quot; =&gt; method(:test_method).unbind, &quot;bool&quot; =&gt; true, &quot;Array[byte]&quot; =&gt; System::Array.of(System::Byte).new(2, System::Byte.MinValue), 
+               &quot;List[byte]&quot; =&gt; (List[System::Byte].new &lt;&lt; System::Byte.parse(&quot;1&quot;) &lt;&lt; System::Byte.parse(&quot;2&quot;) &lt;&lt; System::Byte.parse(&quot;3&quot;)), 
+               &quot;self&quot; =&gt; &quot;self&quot;, &quot;class&quot; =&gt; &quot;class&quot;, &quot;this&quot; =&gt; &quot;this&quot;, &quot;public&quot; =&gt; &quot;public&quot;,
+               &quot;StructImplementsIInterface&quot; =&gt; StructImplementsIInterface.new, &quot;RubyImplementsIInterface&quot; =&gt; BindingSpecs::RubyImplementsIInterface.new, 
+               &quot;ImplementsIInterface&quot; =&gt; ImplementsIInterface.new
+               }
+      #TODO: Add the byref types when make_by_ref_type works
+      #byrefStructImplementsIInterfaceInstance
+      #byrefRubyImplementsIInterface
+      #byrefImpelemntsIInterface, byrefbool
+      #ref_types = {&quot;ByRefInt&quot; =&gt; Fixnum.get_type.make_by_ref_type, &quot;Array[ByRefByte]&quot; =&gt; System::Array.of(System::Byte.get_type.make_by_ref_type),
+                   #&quot;List[ByRefByte]&quot; =&gt; List[System::Byte.get_type.make_by_ref_type]} 
+      types
+    end
 
+    
+    def self.test_method(a)
+      a+4
+    end
     private
     #returns random number between the given values. Using 0 for min value will
     #give an abnormlly high probability of 0 as the result.</diff>
      <filename>Merlin/Main/Languages/Ruby/Tests/Interop/net/method/fixtures/classes.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>dfd226030be04332eaba5d61a05e48885cafdb9e</id>
    </parent>
  </parents>
  <author>
    <name>Jim Deville</name>
    <email>jdeville@microsoft.com</email>
  </author>
  <url>http://github.com/shri/ironruby/commit/1426560d76e4b91f9c939e32c80e5eddb900e7b5</url>
  <id>1426560d76e4b91f9c939e32c80e5eddb900e7b5</id>
  <committed-date>2009-09-25T10:08:32-07:00</committed-date>
  <authored-date>2009-09-25T10:08:32-07:00</authored-date>
  <message>specs for other misc concerns in binding</message>
  <tree>2fa87a3e309bac5a31f135cab1beb7f5694ac287</tree>
  <committer>
    <name>Jim Deville</name>
    <email>jdeville@microsoft.com</email>
  </committer>
</commit>
