<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>src/ikj/main/com/google/common/base/FinalizablePhantomReference.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/FinalizableReference.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/FinalizableReferenceQueue.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/FinalizableSoftReference.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/FinalizableWeakReference.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/Function.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/Functions.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/Joiner.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/Objects.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/Platform.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/Preconditions.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/Predicate.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/Predicates.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/base/internal/Finalizer.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/collect/AbstractMapEntry.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/collect/AsynchronousComputationException.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/collect/ComputationException.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/collect/CustomConcurrentHashMap.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/collect/ExpirationTimer.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/collect/MapMaker.java</filename>
    </added>
    <added>
      <filename>src/ikj/main/com/google/common/collect/NullOutputException.java</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -4,6 +4,7 @@ ikj:
 The package ioke.lang is covered by the file LICENSE.
 The package gnu.math is covered by the file LICENSE.kawa.
 The package org.jregex and subpackages contains their own licensing information in the source files.
+The package com.google.common and subpackages contain their own licensing information.
 
 ikc:
 The namepsace Ioke.Lang is covered by the file LICENSE.</diff>
      <filename>COPYING</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,7 @@ iterativeFib = method(n,
     curr = succ
     succ += old
   )
-  return curr
+  curr
 )
 
 generativeFib = method(</diff>
      <filename>examples/misc/fibonacci.ik</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,8 @@ import java.util.Map;
 import java.util.IdentityHashMap;
 
 import ioke.lang.exceptions.ControlFlow;
-import ioke.lang.util.ObjectProxyCache;
+
+import com.google.common.collect.MapMaker;
 
 /**
  *
@@ -20,29 +21,14 @@ public class IokeRegistry {
     }
     
     public Runtime runtime;
-    private Creator regularCreator;
-    private Creator integratedCreator;
-
-    private final ObjectProxyCache&lt;IokeObject, Creator&gt; wrappedObjects = 
-        new ObjectProxyCache&lt;IokeObject, Creator&gt;(ObjectProxyCache.ReferenceType.WEAK) {
 
-        public IokeObject allocateProxy(Object javaObject, Creator creator) {
-            return creator.create(javaObject);
-        }
-    };
+    private final Map&lt;Object, IokeObject&gt; wrappedObjects = new MapMaker()
+        .weakKeys()
+        .weakValues()
+        .makeMap();
 
     public IokeRegistry(final Runtime runtime) {
         this.runtime = runtime;
-        this.regularCreator = new Creator() {
-                public IokeObject create(Object javaObject) {
-                    return runtime.createJavaWrapper(javaObject);
-                }
-            };
-        this.integratedCreator = new Creator() {
-                public IokeObject create(Object javaObject) {
-                    return runtime.createIntegratedJavaWrapper((Class)javaObject);
-                }
-            };
     }
     
     public static void makeWrapped(Object on, IokeObject wrapped, IokeObject context) {
@@ -61,8 +47,14 @@ public class IokeRegistry {
         } else if(on instanceof Boolean) {
             return ((Boolean)on).booleanValue() ? runtime._true : runtime._false;
         }
-        
-        return wrappedObjects.getOrCreate(on, regularCreator);
+
+        if(!wrappedObjects.containsKey(on)) {
+            IokeObject val = runtime.createJavaWrapper(on);
+            wrappedObjects.put(on, val);
+            return val;
+        }
+
+        return wrappedObjects.get(on);
     }
 
     public IokeObject integratedWrap(Class on) {
@@ -70,11 +62,17 @@ public class IokeRegistry {
             return runtime.nil;
         }
         
-        return wrappedObjects.getOrCreate(on, integratedCreator);
+        if(!wrappedObjects.containsKey(on)) {
+            IokeObject val = runtime.createIntegratedJavaWrapper(on);
+            wrappedObjects.put(on, val);
+            return val;
+        }
+
+        return wrappedObjects.get(on);
     }
 
     public boolean isWrapped(Object on) {
-        return wrappedObjects.get(on) != null;
+        return wrappedObjects.containsKey(on);
     }
 
     public static boolean isWrapped(Object on, IokeObject context) {</diff>
      <filename>src/ikj/main/ioke/lang/IokeRegistry.java</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,22 @@
 
 use(&quot;ispec&quot;)
 
-describe(Message,
-  describe(&quot;rewrite!&quot;,
-    it(&quot;should rewrite a very simple message chain&quot;)
+; describe(Message,
+;   describe(&quot;rewrite!&quot;,
+;     it(&quot;should rewrite a very simple message chain&quot;,
 ;       msg = 'foo
 ;       msg rewrite!(
 ;         '(:x) =&gt; '(something(:x))
 ;       )
-;       msg should == 'blah(foo)
+;       msg should == 'something(foo)
 ;     )
-  )
-)
+
+;     it(&quot;should rewrite a next into an argument&quot;,
+;       msg = '(foo bar)
+;       msg rewrite!(
+;         '(:x :y) =&gt; '(:x(:y))
+;       )
+;       msg should == 'foo(bar)
+;     )
+;   )
+; )</diff>
      <filename>test/rewrite_spec.ik</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>src/ikj/main/ioke/lang/util/ObjectProxyCache.java</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>87e67975b9bb30a00dbef97b72088e7e4fb9f12a</id>
    </parent>
  </parents>
  <author>
    <name>Ola Bini</name>
    <email>ola.bini@gmail.com</email>
  </author>
  <url>http://github.com/olabini/ioke/commit/656e33a040753de2f7a1fbf2a9de8a4c1800a451</url>
  <id>656e33a040753de2f7a1fbf2a9de8a4c1800a451</id>
  <committed-date>2009-06-03T18:22:45-07:00</committed-date>
  <authored-date>2009-06-03T18:22:45-07:00</authored-date>
  <message>Add Google MapMaker to handle references to Java objects correctly</message>
  <tree>4d4dbf1e39dab3059d8a1bca5edce9c08bf9b053</tree>
  <committer>
    <name>Ola Bini</name>
    <email>ola.bini@gmail.com</email>
  </committer>
</commit>
