diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-11-08 18:53:02 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-11-08 18:53:02 +0000 |
commit | 3d1daab442b6f6067d5f2fff066bdcee60f9379a (patch) | |
tree | 888561e35331358588eec7c5f815c398c8764813 /src | |
parent | 250c99e43c43a63542b2791d7329087cc26504ea (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.clj | 2 | ||||
-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.clj | 2 | ||||
-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.java | 44 | ||||
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 24 | ||||
-rw-r--r-- | src/jvm/clojure/lang/MultiFn.java | 10 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 20 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Repl.java | 24 |
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{ |