summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-11-08 18:53:02 +0000
committerRich Hickey <richhickey@gmail.com>2008-11-08 18:53:02 +0000
commit3d1daab442b6f6067d5f2fff066bdcee60f9379a (patch)
tree888561e35331358588eec7c5f815c398c8764813 /src
parent250c99e43c43a63542b2791d7329087cc26504ea (diff)
Interim checkin - DO NOT USE!!
Unless you are interested in helping test: Moved clojure ns to clojure.core, moved set/xml etc up out of dirs New binding syntax (breaking change) for: doseq dotimes with-open when-first if-let when-let plus: new print-dup functionality for replica generation of compilation constants new *print-dup* flag, prints duplicators back to simplified readably printing for repl readable fns, as long as they are not closures
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/core.clj (renamed from src/clj/clojure/boot.clj)22
-rw-r--r--src/clj/clojure/genclass.clj2
-rw-r--r--src/clj/clojure/inspector.clj (renamed from src/clj/clojure/inspector/inspector.clj)83
-rw-r--r--src/clj/clojure/parallel.clj (renamed from src/clj/clojure/parallel/parallel.clj)0
-rw-r--r--src/clj/clojure/proxy.clj2
-rw-r--r--src/clj/clojure/set.clj (renamed from src/clj/clojure/set/set.clj)0
-rw-r--r--src/clj/clojure/xml.clj (renamed from src/clj/clojure/xml/xml.clj)0
-rw-r--r--src/clj/clojure/zip.clj (renamed from src/clj/clojure/zip/zip.clj)0
-rw-r--r--src/jvm/clojure/lang/Compiler.java44
-rw-r--r--src/jvm/clojure/lang/LispReader.java24
-rw-r--r--src/jvm/clojure/lang/MultiFn.java10
-rw-r--r--src/jvm/clojure/lang/RT.java20
-rw-r--r--src/jvm/clojure/lang/Repl.java24
13 files changed, 152 insertions, 79 deletions
diff --git a/src/clj/clojure/boot.clj b/src/clj/clojure/core.clj
index 8eb8db0f..1d81d4f1 100644
--- a/src/clj/clojure/boot.clj
+++ b/src/clj/clojure/core.clj
@@ -6,7 +6,7 @@
; the terms of this license.
; You must not remove this notice, or any other, from this software.
-(in-ns 'clojure)
+(in-ns 'clojure.core)
(def
#^{:arglists '([& items])
@@ -3097,18 +3097,18 @@
[name & references]
(let [process-reference
(fn [[kname & args]]
- `(~(symbol "clojure" (clojure/name kname))
+ `(~(symbol "clojure.core" (clojure.core/name kname))
~@(map #(list 'quote %) args)))]
`(do
- (clojure/in-ns '~name)
+ (clojure.core/in-ns '~name)
~@(when (not-any? #(= :refer-clojure (first %)) references)
- `((clojure/refer '~'clojure)))
+ `((clojure.core/refer '~'clojure.core)))
~@(map process-reference references))))
(defmacro refer-clojure
"Same as (refer 'clojure <filters>)"
[& filters]
- `(clojure/refer '~'clojure ~@filters))
+ `(clojure.core/refer '~'clojure.core ~@filters))
(defmacro defonce
"defs name to have the root value of the expr iff the named var has no root value,
@@ -3227,14 +3227,14 @@
(throw-if (and need-ns (not (find-ns lib)))
"namespace '%s' not found" lib))
(when (and need-ns *loading-verbosely*)
- (printf "(clojure/in-ns '%s)\n" (ns-name *ns*)))
+ (printf "(clojure.core/in-ns '%s)\n" (ns-name *ns*)))
(when as
(when *loading-verbosely*
- (printf "(clojure/alias '%s '%s)\n" as lib))
+ (printf "(clojure.core/alias '%s '%s)\n" as lib))
(alias as lib))
(when use
(when *loading-verbosely*
- (printf "(clojure/refer '%s" lib)
+ (printf "(clojure.core/refer '%s" lib)
(doseq [opt filter-opts]
(printf " %s '%s" (key opt) (print-str (val opt))))
(printf ")\n"))
@@ -3312,12 +3312,12 @@
(defn use
"Like 'require, but also refers to each lib's namespace using
- clojure/refer. Use :use in the ns macro in preference to calling
+ clojure.core/refer. Use :use in the ns macro in preference to calling
this directly.
'use accepts additional options in libspecs: :exclude, :only, :rename.
The arguments and semantics for :exclude, :only, and :rename are the same
- as those documented for clojure/refer."
+ as those documented for clojure.core/refer."
[& args] (apply load-libs :require :use args))
(defn loaded-libs
@@ -3334,7 +3334,7 @@
path
(str (root-directory (ns-name *ns*)) \/ path))]
(when *loading-verbosely*
- (printf "(clojure/load \"%s\")\n" path)
+ (printf "(clojure.core/load \"%s\")\n" path)
(flush))
(throw-if (*pending-paths* path)
"cannot load '%s' again while it is loading"
diff --git a/src/clj/clojure/genclass.clj b/src/clj/clojure/genclass.clj
index 49e9ad4e..39370d9d 100644
--- a/src/clj/clojure/genclass.clj
+++ b/src/clj/clojure/genclass.clj
@@ -6,7 +6,7 @@
; the terms of this license.
; You must not remove this notice, or any other, from this software.
-(in-ns 'clojure)
+(in-ns 'clojure.core)
(import '(java.lang.reflect Modifier Constructor)
'(clojure.asm ClassWriter ClassVisitor Opcodes Type)
diff --git a/src/clj/clojure/inspector/inspector.clj b/src/clj/clojure/inspector.clj
index 8a88465b..f60f6561 100644
--- a/src/clj/clojure/inspector/inspector.clj
+++ b/src/clj/clojure/inspector.clj
@@ -7,9 +7,12 @@
; You must not remove this notice, or any other, from this software.
(ns clojure.inspector
- (:import (javax.swing.tree TreeModel)
- (javax.swing.table TableModel)
- (javax.swing JTree JTable JScrollPane JFrame)))
+ (:import
+ (java.awt BorderLayout)
+ (java.awt.event ActionEvent ActionListener)
+ (javax.swing.tree TreeModel)
+ (javax.swing.table TableModel AbstractTableModel)
+ (javax.swing JPanel JTree JTable JScrollPane JFrame JToolBar JButton SwingUtilities)))
(defn atom? [x]
(not (instance? clojure.lang.IPersistentCollection x)))
@@ -61,7 +64,7 @@
(removeTreeModelListener [treeModelListener])))
-(defn table-model [data]
+(defn old-table-model [data]
(let [row1 (first data)
colcnt (count row1)
cnt (count data)
@@ -94,10 +97,80 @@
of equal length"
[data]
(doto (new JFrame "Clojure Inspector")
- (add (new JScrollPane (new JTable (table-model data))))
+ (add (new JScrollPane (new JTable (old-table-model data))))
(setSize 400 600)
(setVisible true)))
+
+(defmulti list-provider class)
+
+(defmethod list-provider :default [x]
+ {:nrows 1 :get-value (fn [i] x) :get-label (fn [i] (.getName (class x)))})
+
+(defmethod list-provider java.util.List [c]
+ (let [v (if (vector? c) c (vec c))]
+ {:nrows (count v)
+ :get-value (fn [i] (v i))
+ :get-label (fn [i] i)}))
+
+(defmethod list-provider java.util.Map [c]
+ (let [v (vec (sort (map (fn [[k v]] (vector k v)) c)))]
+ {:nrows (count v)
+ :get-value (fn [i] ((v i) 1))
+ :get-label (fn [i] ((v i) 0))}))
+
+(defn list-model [provider]
+ (let [{:keys [nrows get-value get-label]} provider]
+ (proxy [AbstractTableModel] []
+ (getColumnCount [] 2)
+ (getRowCount [] nrows)
+ (getValueAt [rowIndex columnIndex]
+ (cond
+ (= 0 columnIndex) (get-label rowIndex)
+ (= 1 columnIndex) (print-str (get-value rowIndex)))))))
+
+(defmulti table-model class)
+
+(defmethod table-model :default [x]
+ (proxy [AbstractTableModel] []
+ (getColumnCount [] 2)
+ (getRowCount [] 1)
+ (getValueAt [rowIndex columnIndex]
+ (if (zero? columnIndex)
+ (class x)
+ x))))
+
+(defn make-inspector [x]
+ (agent {:frame frame :data x :parent nil :index 0}))
+
+
+(defn inspect
+ "creates a graphical (Swing) inspector on the supplied object"
+ [x]
+ (doto (JFrame. "Clojure Inspector")
+ (add
+ (doto (JPanel. (BorderLayout.))
+ (add (doto (JToolBar.)
+ (add (JButton. "Back"))
+ (addSeparator)
+ (add (JButton. "List"))
+ (add (JButton. "Table"))
+ (add (JButton. "Bean"))
+ (add (JButton. "Line"))
+ (add (JButton. "Bar"))
+ (addSeparator)
+ (add (JButton. "Prev"))
+ (add (JButton. "Next")))
+ BorderLayout/NORTH)
+ (add
+ (JScrollPane.
+ (doto (JTable. (list-model (list-provider x)))
+ (setAutoResizeMode JTable/AUTO_RESIZE_LAST_COLUMN)))
+ BorderLayout/CENTER)))
+ (setSize 400 400)
+ (setVisible true)))
+
+
(comment
(load-file "src/inspector.clj")
diff --git a/src/clj/clojure/parallel/parallel.clj b/src/clj/clojure/parallel.clj
index ae177b2f..ae177b2f 100644
--- a/src/clj/clojure/parallel/parallel.clj
+++ b/src/clj/clojure/parallel.clj
diff --git a/src/clj/clojure/proxy.clj b/src/clj/clojure/proxy.clj
index 2bf37b8e..b1491adb 100644
--- a/src/clj/clojure/proxy.clj
+++ b/src/clj/clojure/proxy.clj
@@ -6,7 +6,7 @@
; the terms of this license.
; You must not remove this notice, or any other, from this software.
-(in-ns 'clojure)
+(in-ns 'clojure.core)
(import
'(clojure.asm ClassWriter ClassVisitor Opcodes Type)
diff --git a/src/clj/clojure/set/set.clj b/src/clj/clojure/set.clj
index a59fc145..a59fc145 100644
--- a/src/clj/clojure/set/set.clj
+++ b/src/clj/clojure/set.clj
diff --git a/src/clj/clojure/xml/xml.clj b/src/clj/clojure/xml.clj
index 117016af..117016af 100644
--- a/src/clj/clojure/xml/xml.clj
+++ b/src/clj/clojure/xml.clj
diff --git a/src/clj/clojure/zip/zip.clj b/src/clj/clojure/zip.clj
index 1115b729..1115b729 100644
--- a/src/clj/clojure/zip/zip.clj
+++ b/src/clj/clojure/zip.clj
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 4ee53cef..ace59409 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -62,10 +62,10 @@ static final Symbol MONITOR_EXIT = Symbol.create("monitor-exit");
static final Symbol NEW = Symbol.create("new");
//static final Symbol UNQUOTE = Symbol.create("unquote");
//static final Symbol UNQUOTE_SPLICING = Symbol.create("unquote-splicing");
-//static final Symbol SYNTAX_QUOTE = Symbol.create("clojure", "syntax-quote");
-static final Symbol LIST = Symbol.create("clojure", "list");
-static final Symbol HASHMAP = Symbol.create("clojure", "hash-map");
-static final Symbol VECTOR = Symbol.create("clojure", "vector");
+//static final Symbol SYNTAX_QUOTE = Symbol.create("clojure.core", "syntax-quote");
+static final Symbol LIST = Symbol.create("clojure.core", "list");
+static final Symbol HASHMAP = Symbol.create("clojure.core", "hash-map");
+static final Symbol VECTOR = Symbol.create("clojure.core", "vector");
static final Symbol _AMP_ = Symbol.create("&");
static final Symbol ISEQ = Symbol.create("clojure.lang.ISeq");
@@ -177,7 +177,7 @@ static final public Var IN_CATCH_FINALLY = Var.create(null);
static final public Var SOURCE = Var.create("NO_SOURCE_FILE");
//String
-static final public Var SOURCE_PATH = Var.intern(Namespace.findOrCreate(Symbol.create("clojure")),
+static final public Var SOURCE_PATH = Var.intern(Namespace.findOrCreate(Symbol.create("clojure.core")),
Symbol.create("*file*"), null);
//Integer
@@ -2871,7 +2871,7 @@ static public class FnExpr implements Expr{
String basename = enclosingMethod != null ?
(enclosingMethod.fn.name + "$")
: //"clojure.fns." +
- (munge(currentNS().name.name) + ".");
+ (munge(currentNS().name.name) + "$");
if(RT.second(form) instanceof Symbol)
name = ((Symbol) RT.second(form)).name;
fn.simpleName = ((name != null ?
@@ -3172,27 +3172,27 @@ static public class FnExpr implements Expr{
loader = (DynamicClassLoader) LOADER.get();
bytecode = cw.toByteArray();
-// String path = "gen" + File.separator + internalName + ".class";
-// File cf = new File(path);
-// cf.getParentFile().mkdirs();
-// cf.createNewFile();
-// OutputStream cfs = new FileOutputStream(cf);
-// try
-// {
-// cfs.write(bytecode);
-// }
-// finally
-// {
-// cfs.close();
-// }
+ String path = "gen" + File.separator + internalName + ".class";
+ File cf = new File(path);
+ cf.getParentFile().mkdirs();
+ cf.createNewFile();
+ OutputStream cfs = new FileOutputStream(cf);
+ try
+ {
+ cfs.write(bytecode);
+ }
+ finally
+ {
+ cfs.close();
+ }
}
synchronized Class getCompiledClass(){
if(compiledClass == null)
try
{
- //compiledClass = RT.classForName(name);//loader.defineClass(name, bytecode);
- compiledClass = loader.defineClass(name, bytecode);
+ compiledClass = RT.classForName(name);//loader.defineClass(name, bytecode);
+ //compiledClass = loader.defineClass(name, bytecode);
}
catch(Exception e)
{
@@ -3206,7 +3206,7 @@ static public class FnExpr implements Expr{
}
public void emit(C context, FnExpr fn, GeneratorAdapter gen){
- getCompiledClass();
+ //getCompiledClass();
//emitting a Fn means constructing an instance, feeding closed-overs from enclosing scope, if any
//fn arg is enclosing fn, not this
gen.newInstance(fntype);
diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java
index 963253d0..4847692d 100644
--- a/src/jvm/clojure/lang/LispReader.java
+++ b/src/jvm/clojure/lang/LispReader.java
@@ -27,16 +27,16 @@ static final Symbol THE_VAR = Symbol.create("var");
//static Symbol SYNTAX_QUOTE = Symbol.create(null, "syntax-quote");
//static Symbol UNQUOTE = Symbol.create(null, "unquote");
//static Symbol UNQUOTE_SPLICING = Symbol.create(null, "unquote-splicing");
-static Symbol CONCAT = Symbol.create("clojure", "concat");
-static Symbol LIST = Symbol.create("clojure", "list");
-static Symbol APPLY = Symbol.create("clojure", "apply");
-static Symbol HASHMAP = Symbol.create("clojure", "hash-map");
-static Symbol HASHSET = Symbol.create("clojure", "hash-set");
-static Symbol VECTOR = Symbol.create("clojure", "vector");
-static Symbol WITH_META = Symbol.create("clojure", "with-meta");
-static Symbol META = Symbol.create("clojure", "meta");
-static Symbol DEREF = Symbol.create("clojure", "deref");
-//static Symbol DEREF_BANG = Symbol.create("clojure", "deref!");
+static Symbol CONCAT = Symbol.create("clojure.core", "concat");
+static Symbol LIST = Symbol.create("clojure.core", "list");
+static Symbol APPLY = Symbol.create("clojure.core", "apply");
+static Symbol HASHMAP = Symbol.create("clojure.core", "hash-map");
+static Symbol HASHSET = Symbol.create("clojure.core", "hash-set");
+static Symbol VECTOR = Symbol.create("clojure.core", "vector");
+static Symbol WITH_META = Symbol.create("clojure.core", "with-meta");
+static Symbol META = Symbol.create("clojure.core", "meta");
+static Symbol DEREF = Symbol.create("clojure.core", "deref");
+//static Symbol DEREF_BANG = Symbol.create("clojure.core", "deref!");
static IFn[] macros = new IFn[256];
static IFn[] dispatchMacros = new IFn[256];
@@ -50,7 +50,7 @@ static Pattern intPat =
static Pattern ratioPat = Pattern.compile("([-+]?[0-9]+)/([0-9]+)");
static Pattern floatPat = Pattern.compile("[-+]?[0-9]+(\\.[0-9]+)?([eE][-+]?[0-9]+)?[M]?");
static final Symbol SLASH = Symbol.create("/");
-static final Symbol CLOJURE_SLASH = Symbol.create("clojure","/");
+static final Symbol CLOJURE_SLASH = Symbol.create("clojure.core","/");
//static Pattern accessorPat = Pattern.compile("\\.[a-zA-Z_]\\w*");
//static Pattern instanceMemberPat = Pattern.compile("\\.([a-zA-Z_][\\w\\.]*)\\.([a-zA-Z_]\\w*)");
//static Pattern staticMemberPat = Pattern.compile("([a-zA-Z_][\\w\\.]*)\\.([a-zA-Z_]\\w*)");
@@ -270,7 +270,7 @@ static private Object interpretToken(String s) throws Exception{
{
return SLASH;
}
- else if(s.equals("clojure//"))
+ else if(s.equals("clojure.core//"))
{
return CLOJURE_SLASH;
}
diff --git a/src/jvm/clojure/lang/MultiFn.java b/src/jvm/clojure/lang/MultiFn.java
index 527a0d38..4f127491 100644
--- a/src/jvm/clojure/lang/MultiFn.java
+++ b/src/jvm/clojure/lang/MultiFn.java
@@ -23,11 +23,11 @@ IPersistentMap preferTable;
IPersistentMap methodCache;
Object cachedHierarchy;
-static final Var assoc = RT.var("clojure", "assoc");
-static final Var dissoc = RT.var("clojure", "dissoc");
-static final Var isa = RT.var("clojure", "isa?");
-static final Var parents = RT.var("clojure", "parents");
-static final Var hierarchy = RT.var("clojure", "global-hierarchy");
+static final Var assoc = RT.var("clojure.core", "assoc");
+static final Var dissoc = RT.var("clojure.core", "dissoc");
+static final Var isa = RT.var("clojure.core", "isa?");
+static final Var parents = RT.var("clojure.core", "parents");
+static final Var hierarchy = RT.var("clojure.core", "global-hierarchy");
public MultiFn(IFn dispatchFn, Object defaultDispatchVal) throws Exception{
this.dispatchFn = dispatchFn;
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 9ab615e5..741dba22 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -164,7 +164,7 @@ Symbol.create("SuppressWarnings"), SuppressWarnings.class
// single instance of UTF-8 Charset, so as to avoid catching UnsupportedCharsetExceptions everywhere
static public Charset UTF8 = Charset.forName("UTF-8");
-static public final Namespace CLOJURE_NS = Namespace.findOrCreate(Symbol.create("clojure"));
+static public final Namespace CLOJURE_NS = Namespace.findOrCreate(Symbol.create("clojure.core"));
//static final Namespace USER_NS = Namespace.findOrCreate(Symbol.create("user"));
final static public Var OUT =
Var.intern(CLOJURE_NS, Symbol.create("*out*"), new OutputStreamWriter(System.out, UTF8));
@@ -182,7 +182,7 @@ static Keyword LINE_KEY = Keyword.intern(null, "line");
static Keyword FILE_KEY = Keyword.intern(null, "file");
final static public Var USE_CONTEXT_CLASSLOADER =
Var.intern(CLOJURE_NS, Symbol.create("*use-context-classloader*"), null);
-//final static public Var CURRENT_MODULE = Var.intern(Symbol.create("clojure", "current-module"),
+//final static public Var CURRENT_MODULE = Var.intern(Symbol.create("clojure.core", "current-module"),
// Module.findOrCreateModule("clojure/user"));
final static Symbol LOAD_FILE = Symbol.create("load-file");
@@ -222,7 +222,7 @@ final static IFn inNamespace = new AFn(){
// if(!refers.isBound())
// {
// refers.bindRoot(PersistentHashMap.EMPTY);
-// Compiler.eval(list(Symbol.create("clojure", "refer"), EXPORTS));
+// Compiler.eval(list(Symbol.create("clojure.core", "refer"), EXPORTS));
// }
return ns;
}
@@ -377,12 +377,12 @@ static public void init() throws Exception{
}
static void doInit() throws Exception{
- loadResourceScript(RT.class, "clojure/boot.clj");
+ loadResourceScript(RT.class, "clojure/core.clj");
loadResourceScript(RT.class, "clojure/proxy.clj", false);
loadResourceScript(RT.class, "clojure/genclass.clj", false);
- loadResourceScript(RT.class, "clojure/zip/zip.clj", false);
- loadResourceScript(RT.class, "clojure/xml/xml.clj", false);
- loadResourceScript(RT.class, "clojure/set/set.clj", false);
+ loadResourceScript(RT.class, "clojure/zip.clj", false);
+ loadResourceScript(RT.class, "clojure/xml.clj", false);
+ loadResourceScript(RT.class, "clojure/set.clj", false);
Var.pushThreadBindings(
RT.map(CURRENT_NS, CURRENT_NS.get(),
@@ -390,10 +390,10 @@ static void doInit() throws Exception{
try
{
Symbol USER = Symbol.create("user");
- Symbol CLOJURE = Symbol.create("clojure");
+ Symbol CLOJURE = Symbol.create("clojure.core");
- Var in_ns = var("clojure", "in-ns");
- Var refer = var("clojure", "refer");
+ Var in_ns = var("clojure.core", "in-ns");
+ Var refer = var("clojure.core", "refer");
in_ns.invoke(USER);
refer.invoke(CLOJURE);
maybeLoadResourceScript("user.clj");
diff --git a/src/jvm/clojure/lang/Repl.java b/src/jvm/clojure/lang/Repl.java
index daeba5a8..0c31d045 100644
--- a/src/jvm/clojure/lang/Repl.java
+++ b/src/jvm/clojure/lang/Repl.java
@@ -18,19 +18,19 @@ import java.io.PrintWriter;
public class Repl{
static final Symbol USER = Symbol.create("user");
-static final Symbol CLOJURE = Symbol.create("clojure");
+static final Symbol CLOJURE = Symbol.create("clojure.core");
-static final Var in_ns = RT.var("clojure", "in-ns");
-static final Var refer = RT.var("clojure", "refer");
-static final Var ns = RT.var("clojure", "*ns*");
-static final Var warn_on_reflection = RT.var("clojure", "*warn-on-reflection*");
-static final Var print_meta = RT.var("clojure", "*print-meta*");
-static final Var print_length = RT.var("clojure", "*print-length*");
-static final Var print_level = RT.var("clojure", "*print-level*");
-static final Var star1 = RT.var("clojure", "*1");
-static final Var star2 = RT.var("clojure", "*2");
-static final Var star3 = RT.var("clojure", "*3");
-static final Var stare = RT.var("clojure", "*e");
+static final Var in_ns = RT.var("clojure.core", "in-ns");
+static final Var refer = RT.var("clojure.core", "refer");
+static final Var ns = RT.var("clojure.core", "*ns*");
+static final Var warn_on_reflection = RT.var("clojure.core", "*warn-on-reflection*");
+static final Var print_meta = RT.var("clojure.core", "*print-meta*");
+static final Var print_length = RT.var("clojure.core", "*print-length*");
+static final Var print_level = RT.var("clojure.core", "*print-level*");
+static final Var star1 = RT.var("clojure.core", "*1");
+static final Var star2 = RT.var("clojure.core", "*2");
+static final Var star3 = RT.var("clojure.core", "*3");
+static final Var stare = RT.var("clojure.core", "*e");
public static void main(String[] args) throws Exception{