<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>src/arc/rainbow/bm.arc</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -26,7 +26,9 @@
         &lt;SOURCES /&gt;
       &lt;/library&gt;
     &lt;/orderEntry&gt;
-    &lt;orderEntryProperties /&gt;
+  &lt;/component&gt;
+  &lt;component name=&quot;RSpecModuleSettingsStorage&quot;&gt;
+    &lt;RSPEC_MODULE_SETTINGS_STORAGE_ID NAME=&quot;RSPEC_SUPPORT_TYPE&quot; VALUE=&quot;NONE&quot; /&gt;
   &lt;/component&gt;
 &lt;/module&gt;
 </diff>
      <filename>rainbow.iml</filename>
    </modified>
    <modified>
      <diff>@@ -116,6 +116,7 @@
     &lt;option name=&quot;ADDITIONAL_OPTIONS_STRING&quot; value=&quot;&quot; /&gt;
     &lt;option name=&quot;MAXIMUM_HEAP_SIZE&quot; value=&quot;128&quot; /&gt;
   &lt;/component&gt;
+  &lt;component name=&quot;Encoding&quot; useUTFGuessing=&quot;true&quot; native2AsciiForPropertiesFiles=&quot;false&quot; /&gt;
   &lt;component name=&quot;EntryPointsManager&quot;&gt;
     &lt;entry_points version=&quot;2.0&quot; /&gt;
   &lt;/component&gt;
@@ -310,13 +311,16 @@
     &lt;option name=&quot;USE_CLIENT_FILTER&quot; value=&quot;true&quot; /&gt;
     &lt;option name=&quot;CLIENT&quot; value=&quot;&quot; /&gt;
   &lt;/component&gt;
+  &lt;component name=&quot;ProjectDetails&quot;&gt;
+    &lt;option name=&quot;projectName&quot; value=&quot;rainbow&quot; /&gt;
+  &lt;/component&gt;
   &lt;component name=&quot;ProjectFileVersion&quot; converted=&quot;true&quot; /&gt;
   &lt;component name=&quot;ProjectModuleManager&quot;&gt;
     &lt;modules&gt;
       &lt;module fileurl=&quot;file://$PROJECT_DIR$/rainbow.iml&quot; filepath=&quot;$PROJECT_DIR$/rainbow.iml&quot; /&gt;
     &lt;/modules&gt;
   &lt;/component&gt;
-  &lt;component name=&quot;ProjectRootManager&quot; version=&quot;2&quot; assert-keyword=&quot;true&quot; jdk-15=&quot;true&quot; project-jdk-name=&quot;Ruby SDK 1.8.6&quot; project-jdk-type=&quot;RUBY_SDK&quot;&gt;
+  &lt;component name=&quot;ProjectRootManager&quot; version=&quot;2&quot; languageLevel=&quot;JDK_1_5&quot; assert-keyword=&quot;true&quot; jdk-15=&quot;true&quot; project-jdk-name=&quot;Ruby SDK 1.8.6&quot; project-jdk-type=&quot;RUBY_SDK&quot;&gt;
     &lt;output url=&quot;file://$PROJECT_DIR$/out&quot; /&gt;
   &lt;/component&gt;
   &lt;component name=&quot;RUBY_DOC_SETTINGS&quot;&gt;
@@ -382,7 +386,7 @@
     &lt;option name=&quot;SHOW_FILE_HISTORY_AS_TREE&quot; value=&quot;true&quot; /&gt;
   &lt;/component&gt;
   &lt;component name=&quot;VcsDirectoryMappings&quot;&gt;
-    &lt;mapping directory=&quot;&quot; vcs=&quot;&quot; /&gt;
+    &lt;mapping directory=&quot;&quot; vcs=&quot;Git&quot; /&gt;
   &lt;/component&gt;
   &lt;component name=&quot;WebServicesPlugin&quot; addRequiredLibraries=&quot;true&quot; /&gt;
   &lt;component name=&quot;com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable&quot; proportions=&quot;&quot; version=&quot;1&quot;&gt;</diff>
      <filename>rainbow.ipr</filename>
    </modified>
    <modified>
      <diff>@@ -12,5 +12,3 @@
 
 (def prime-bench (n) (time (primes-under n)))
 
-
-</diff>
      <filename>src/arc/rainbow/prime-bench.arc</filename>
    </modified>
    <modified>
      <diff>@@ -18,4 +18,7 @@
     &quot;rainbow/tests/java-interface-test&quot;))
 
 (prn &quot;self-test:&quot;)
-(run-all-tests)
\ No newline at end of file
+(run-all-tests)
+
+(let func (random-elt:keys help*)
+    (prn &quot;Documentation for &quot; func &quot; &quot; (helpstr func)))</diff>
      <filename>src/arc/rainbow/rainbow-libs.arc</filename>
    </modified>
    <modified>
      <diff>@@ -457,7 +457,7 @@
     (on-doc-update tf!getDocument (c)
       (search tf!getText))
     (sf 'hide)
-    (obj sf sf show show hide hide next next prev prev)))
+    (nobj sf show hide next prev)))
 
 (set welder-initialisers nil)
 </diff>
      <filename>src/arc/rainbow/welder.arc</filename>
    </modified>
    <modified>
      <diff>@@ -3,8 +3,10 @@ package rainbow;
 import rainbow.functions.*;
 import rainbow.types.*;
 
-import java.util.*;
-import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
 
 public class Environment {
   private java.util.Set defaults;
@@ -20,7 +22,7 @@ public class Environment {
     Threads.collect(this);
 
     addBuiltin(&quot;t&quot;, ArcObject.T);
-    addBuiltin(&quot;nil&quot;, ArcObject.NIL);
+//    addBuiltin(&quot;nil&quot;, ArcObject.NIL);
     addBuiltin(&quot;uniq&quot;, new Uniq());
     addBuiltin(&quot;newstring&quot;, new Lists.NewString());
     addBuiltin(&quot;macex&quot;, new Macex());
@@ -30,7 +32,7 @@ public class Environment {
     addBuiltin(&quot;err&quot;, new Errors.Err());
     addBuiltin(&quot;on-err&quot;, new Errors.OnErr());
     addBuiltin(&quot;details&quot;, new Errors.Details());
-    
+
     /* lists */
     addBuiltin(&quot;car&quot;, new Lists.Car());
     addBuiltin(&quot;cdr&quot;, new Lists.Cdr());
@@ -85,15 +87,24 @@ public class Environment {
   }
 
   private void addBuiltin(String name, ArcObject o) {
-    namespace.put(Symbol.make(name), o);
+//    bindingFor((Symbol) Symbol.make(name)).set(o);
+//    namespace.put(Symbol.make(name), o);
+    ((Symbol) Symbol.make(name)).setValue(o);
   }
 
   public void addToNamespace(Symbol s, ArcObject o) {
-    namespace.put(s, o);
+//    bindingFor(s).set(o);
+//    namespace.put(s, o);
+    s.setValue(o);
   }
 
   public ArcObject lookup(Symbol s) {
-    return (ArcObject) namespace.get(s);
+//    return bindingFor(s).lookup();
+//    return (ArcObject) namespace.get(s);
+    if (!s.bound()) {
+      return null;
+    }
+    return s.value();
   }
 
   public Output stdOut() {
@@ -121,7 +132,7 @@ public class Environment {
     return sb.toString();
   }
 
-  
+
   protected synchronized void collectKeys(java.util.Set s) {
     java.util.Set top = new HashSet(namespace.keySet());
     top.removeAll(defaults);</diff>
      <filename>src/java/rainbow/Environment.java</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,19 @@
 package rainbow.types;
 
-import rainbow.types.ArcObject;
-import rainbow.*;
+import rainbow.ArcError;
+import rainbow.Environment;
+import rainbow.Truth;
 
-import java.util.Map;
 import java.util.HashMap;
+import java.util.Map;
 
 public class Symbol extends ArcObject {
   private static final Map&lt;String, Symbol&gt; map = new HashMap();
   public static final Symbol TYPE = (Symbol) Symbol.make(&quot;sym&quot;);
   public static final Symbol EMPTY_STRING = (Symbol) Symbol.make(&quot;||&quot;);
-  private static int count = 0;
   private String name;
   private int hash;
+  private ArcObject value;
 
   protected Symbol(String name) {
     this.name = name;
@@ -72,17 +73,33 @@ public class Symbol extends ArcObject {
   }
 
   public ArcObject eval(Environment env) {
-    ArcObject result = env.lookup(this);
-    if (result == null) {
-      throw new Unbound(this);
-    }
-    return result;
+    return value();
+//    ArcObject result = env.lookup(this);
+//    if (result == null) {
+//      throw new Unbound(this);
+//    }
+//    return result;
   }
 
   public static boolean is(String s, ArcObject o) {
     return (o instanceof Symbol) &amp;&amp; ((Symbol)o).name().equals(s);
   }
 
+  public void setValue(ArcObject value) {
+    this.value = value;
+  }
+
+  public ArcObject value() {
+    if (value == null) {
+      throw new Unbound(this);
+    }
+    return value;
+  }
+
+  public boolean bound() {
+    return value != null;
+  }
+
   private class Unbound extends ArcError {
     public Unbound(Symbol name) {
       super(&quot;Symbol &quot; + name + &quot; is not bound&quot;);</diff>
      <filename>src/java/rainbow/types/Symbol.java</filename>
    </modified>
    <modified>
      <diff>@@ -1,17 +1,16 @@
 package rainbow.vm.compiler;
 
-import rainbow.vm.ArcThread;
-import rainbow.vm.Continuation;
-import rainbow.vm.BoundSymbol;
-import rainbow.vm.continuations.*;
-import rainbow.vm.compiler.QuasiQuoteCompiler;
 import rainbow.Function;
 import rainbow.LexicalClosure;
 import rainbow.functions.Evaluation;
-import rainbow.types.Pair;
 import rainbow.types.ArcObject;
+import rainbow.types.Pair;
 import rainbow.types.Symbol;
 import rainbow.types.Tagged;
+import rainbow.vm.ArcThread;
+import rainbow.vm.BoundSymbol;
+import rainbow.vm.Continuation;
+import rainbow.vm.continuations.ContinuationSupport;
 
 import java.util.Map;
 
@@ -40,6 +39,7 @@ public class Compiler extends ContinuationSupport {
         }
       }
       caller.receive(expression);
+//      caller.receive(thread.environment().bindingFor((Symbol) expression));
     } else {
       caller.receive(expression);
     }
@@ -52,6 +52,7 @@ public class Compiler extends ContinuationSupport {
     } else {
       ArcObject fun = expression.car();
       if (Symbol.is(&quot;quote&quot;, fun)) {
+//        caller.receive(Pair.buildFrom(thread.environment().bindingFor((Symbol) fun), expression.cdr()));
         caller.receive(expression);
       } else if (fun == QuasiQuoteCompiler.QUASIQUOTE) {
         Rebuilder rebuilder = new Rebuilder(caller, QuasiQuoteCompiler.QUASIQUOTE);</diff>
      <filename>src/java/rainbow/vm/compiler/Compiler.java</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,14 @@
 package rainbow.vm.continuations;
 
 import rainbow.*;
-import rainbow.functions.Builtin;
-import rainbow.functions.InterpretedFunction;
 import rainbow.types.*;
 import rainbow.vm.ArcThread;
 import rainbow.vm.Continuation;
 import rainbow.vm.Interpreter;
 
-import javax.swing.*;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
-import java.awt.*;
 
 public class FunctionDispatcher extends ContinuationSupport {
   public static final boolean ALLOW_MACRO_EXPANSION = false;
@@ -31,17 +27,6 @@ public class FunctionDispatcher extends ContinuationSupport {
     super(thread, lc, caller);
     this.args = expression.cdr();
     this.functionName = expression.car();
-//    if (caller instanceof FunctionDispatcher) {
-//      System.out.println(&quot;FD trail: &quot; + fdtrail());
-//    }
-  }
-
-  private String fdtrail() {
-    if (caller instanceof FunctionDispatcher) {
-      return functionName + &quot; &quot; + ((FunctionDispatcher) caller).fdtrail();
-    } else {
-      return &quot;&quot;;
-    }
   }
 
   public void process() {</diff>
      <filename>src/java/rainbow/vm/continuations/FunctionDispatcher.java</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,6 @@
 package rainbow.vm.continuations;
 
 import rainbow.LexicalClosure;
-import rainbow.functions.Builtin;
 import rainbow.types.ArcObject;
 import rainbow.types.Symbol;
 import rainbow.vm.ArcThread;</diff>
      <filename>src/java/rainbow/vm/continuations/SetSetterContinuation.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>49941a9e8fd18d3bfb98a94f971816c2fe779e27</id>
    </parent>
  </parents>
  <author>
    <name>conan</name>
    <email>conan@london.local</email>
  </author>
  <url>http://github.com/conanite/rainbow/commit/1cf58bc66aca3eb6475f5abbb8bec2edfd14ecf2</url>
  <id>1cf58bc66aca3eb6475f5abbb8bec2edfd14ecf2</id>
  <committed-date>2009-01-05T06:31:49-08:00</committed-date>
  <authored-date>2009-01-05T06:31:49-08:00</authored-date>
  <message>faster symbol lookup</message>
  <tree>d46ff40e1e877c273497a8a3b5590cddfba8f872</tree>
  <committer>
    <name>conan</name>
    <email>conan@london.local</email>
  </committer>
</commit>
