<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>src/main/ioke/lang/TypeCheckingArgumentsDefinition.java</filename>
    </added>
    <added>
      <filename>src/main/ioke/lang/TypeCheckingJavaMethod.java</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -205,9 +205,10 @@ public class IokeList extends IokeData {
             }));
 
         obj.registerMethod(runtime.newJavaMethod(&quot;returns a new list that contains the receivers elements and the elements of the list sent in as the argument.&quot;, new JavaMethod(&quot;+&quot;) {
-                private final DefaultArgumentsDefinition ARGUMENTS = DefaultArgumentsDefinition
+                private final TypeCheckingArgumentsDefinition ARGUMENTS = TypeCheckingArgumentsDefinition
                     .builder()
-                    .withRequiredPositional(&quot;otherList&quot;)
+                    .receiverMustMimic(runtime.list)
+                    .withRequiredPositional(&quot;otherList&quot;).whichMustMimic(runtime.list)
                     .getArguments();
 
                 @Override
@@ -218,11 +219,11 @@ public class IokeList extends IokeData {
                 @Override
                 public Object activate(IokeObject method, IokeObject context, IokeObject message, Object on) throws ControlFlow {
                     List&lt;Object&gt; args = new ArrayList&lt;Object&gt;();
-                    getArguments().getEvaluatedArguments(context, message, on, args, new HashMap&lt;String, Object&gt;());
+                    Object receiver = ARGUMENTS.getValidatedArgumentsAndReceiver(context, message, on, args, new HashMap&lt;String, Object&gt;());
                     List&lt;Object&gt; newList = new ArrayList&lt;Object&gt;();
-                    newList.addAll(((IokeList)IokeObject.data(on)).getList());
+                    newList.addAll(((IokeList)IokeObject.data(receiver)).getList());
                     newList.addAll(((IokeList)IokeObject.data(args.get(0))).getList());
-                    return context.runtime.newList(newList, IokeObject.as(on));
+                    return context.runtime.newList(newList, IokeObject.as(receiver));
                 }
             }));
 </diff>
      <filename>src/main/ioke/lang/IokeList.java</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,8 @@ package ioke.lang;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import ioke.lang.exceptions.ControlFlow;
 
@@ -64,12 +66,18 @@ public abstract class JavaMethod extends Method {
 
     @Override
     public Object activate(IokeObject self, IokeObject context, IokeObject message, Object on) throws ControlFlow {
+        return activate(self, on, null, null, context, message);
+    }
+
+    public Object activate(IokeObject self, Object on, List&lt;Object&gt; args,
+            Map&lt;String, Object&gt; keywords, IokeObject context, IokeObject message) throws ControlFlow {
         IokeObject condition = IokeObject.as(IokeObject.getCellChain(context.runtime.condition, 
-                                                                     message, 
-                                                                     context, 
-                                                                     &quot;Error&quot;, 
-                                                                     &quot;Invocation&quot;,
-                                                                     &quot;NotActivatable&quot;)).mimic(message, context);
+                message, 
+                context, 
+                &quot;Error&quot;, 
+                &quot;Invocation&quot;,
+                &quot;NotActivatable&quot;)).mimic(message, context);
+        
         condition.setCell(&quot;message&quot;, message);
         condition.setCell(&quot;context&quot;, context);
         condition.setCell(&quot;receiver&quot;, on);
@@ -79,7 +87,7 @@ public abstract class JavaMethod extends Method {
 
         return self.runtime.nil;
     }
-
+    
     private String getDominantClassName() {
         String name = getClass().getName();
         int dollar = name.indexOf(&quot;$&quot;);</diff>
      <filename>src/main/ioke/lang/JavaMethod.java</filename>
    </modified>
    <modified>
      <diff>@@ -683,6 +683,16 @@ describe(List,
       x = [1,2,3]
       ([4,5,6] + x) should == [4,5,6,1,2,3]
     )
+
+    it(&quot;should validate type of receiver&quot;,
+      x = Origin mimic
+      x cell(&quot;+&quot;) = List cell(&quot;+&quot;)
+      fn(x + [3]) should signal(Condition Error Type IncorrectType)
+    )
+
+    it(&quot;should validate type of argument&quot;,
+      fn([1,2,3] + 3) should signal(Condition Error Type IncorrectType)
+    )
   )
 
   describe(&quot;-&quot;,</diff>
      <filename>test/list_spec.ik</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>1b8ff3428792d39d2add21db07e6868cce8df83c</id>
    </parent>
    <parent>
      <id>0e20b492b8e057e9d2c006698deca02ebf8f45f7</id>
    </parent>
  </parents>
  <author>
    <name>Ola Bini</name>
    <email>ola.bini@gmail.com</email>
  </author>
  <url>http://github.com/olabini/ioke/commit/b6cb75a77cf8764f5b0f6adb4ae1bb78cf393d77</url>
  <id>b6cb75a77cf8764f5b0f6adb4ae1bb78cf393d77</id>
  <committed-date>2009-01-18T23:51:17-08:00</committed-date>
  <authored-date>2009-01-18T23:51:17-08:00</authored-date>
  <message>Merge branch 'new-type-checker' of git://github.com/melwin/ioke into melwin/new-type-checker</message>
  <tree>3b450f1c231daa5fa24b8b8eb73c785f9934d8e3</tree>
  <committer>
    <name>Ola Bini</name>
    <email>ola.bini@gmail.com</email>
  </committer>
</commit>
