aboutsummaryrefslogtreecommitdiff
path: root/clojurescript/clj.js
diff options
context:
space:
mode:
authorChouser <chouser@n01se.net>2008-11-01 05:55:06 +0000
committerChouser <chouser@n01se.net>2008-11-01 05:55:06 +0000
commit21885ba35e8c3fde17e25872b9562e6d28894db0 (patch)
tree1214021e70e57a4ca439f9d75abd27669d88378f /clojurescript/clj.js
parent898cedd75b5bf44446e49aaeb614a091cf20e84b (diff)
ClojureScript: Added "real" symbols, regex literals, re-wrote browser REPL in ClojureScript, updated to Clojure SVN 1086
Diffstat (limited to 'clojurescript/clj.js')
-rw-r--r--clojurescript/clj.js64
1 files changed, 56 insertions, 8 deletions
diff --git a/clojurescript/clj.js b/clojurescript/clj.js
index 8f754a58..2c2b8fcb 100644
--- a/clojurescript/clj.js
+++ b/clojurescript/clj.js
@@ -27,7 +27,7 @@ clojure = {
},
lang: {
Namespace: function( n, m ) {
- this.name = n;
+ this.name = n; // FIXME: this pollutes the namespace
clojure.JS.merge( this, m || {} );
}
}
@@ -45,7 +45,7 @@ if( ! clojure.JS.global["java"] ) {
clojure = new clojure.lang.Namespace("clojure",{
in_ns: function(s) {
- var i, nsparts = s.substring(1).split('.'),
+ var i, nsparts = s.getName().split('.'),
base = clojure.JS.global;
for( i = 0; i < nsparts.length; ++i ) {
if( ! base[nsparts[i]] ) {
@@ -211,9 +211,14 @@ clojure = new clojure.lang.Namespace("clojure",{
},
keyword: function(a,b) {
if( b === undefined )
- return clojure.lang.Keyword.intern( "", a );
+ return clojure.lang.Keyword.intern( null, a );
return clojure.lang.Keyword.intern( a, b );
},
+ symbol: function(a,b) {
+ if( b === undefined )
+ return clojure.lang.Symbol.intern( null, a );
+ return clojure.lang.Symbol.intern( a, b );
+ },
assoc: function( coll, key, val ) {
if( coll === null )
return new clojure.lang.PersistentArrayMap([key, val]);
@@ -488,8 +493,6 @@ clojure.JS.defclass( clojure.JS, "String", {
}
});
-clojure.JS.defclass( clojure.lang, "Symbol", {});
-
clojure.JS.definterface( clojure.lang, "IObj" );
clojure.JS.defclass( clojure.lang, "Obj", {
@@ -721,7 +724,7 @@ clojure.JS.defclass( clojure.lang, "Keyword", {
statics: {
table: {},
intern: function( ns, name ) {
- var key = ns + "/" + name,
+ var key = (ns || "") + "/" + name,
obj = clojure.lang.Keyword.table[ key ];
if( obj )
return obj;
@@ -756,6 +759,51 @@ clojure.JS.defclass( clojure.lang, "Keyword", {
}
});
+clojure.JS.defclass( clojure.lang, "Symbol", {
+ extend: clojure.lang.AFn,
+ implement: [clojure.lang.Named],
+ init: function( ns, name ) {
+ this._ns = ns;
+ this._name = name;
+ },
+ statics: {
+ table: {},
+ intern: function( ns, name ) {
+ var key = (ns || "") + "/" + name,
+ obj = clojure.lang.Symbol.table[ key ];
+ if( obj )
+ return obj;
+ return clojure.lang.Symbol.table[ key ] =
+ new clojure.lang.Symbol( ns, name );
+ }
+ },
+ methods: {
+ toString: function() {
+ return (this.ns ? this.ns+"/" : "") + this._name;
+ },
+ compareTo: function(o) {
+ if( this == o )
+ return 0;
+ if( this._ns === null && o._ns !== null )
+ return -1;
+ if( this._ns !== null ) {
+ if( o._ns === null )
+ return 1;
+ var nsc = clojure.JS.compare(this._ns, o._ns);
+ if( nsc !== 0 )
+ return nsc;
+ }
+ return clojure.JS.compare(this._name, o._name);
+ },
+ getNamespace: function() { return this._ns; },
+ getName: function() { return this._name; },
+ hashCode: function() {
+ return clojure.lang.Util.hash( this._ns + "/" + this._name );
+ },
+ invoke: function(coll, notFound) { return clojure.get( coll,this,notFound);}
+ }
+});
+
clojure.JS.definterface( clojure.lang, "IPersistentList",
[clojure.lang.Sequential, clojure.lang.IPersistentStack] );
@@ -1963,7 +2011,7 @@ clojure.JS.def(clojure,"_STAR_print_readably_STAR_",true);
clojure.JS.implement( clojure.lang.Namespace, "Namespace" );
clojure.lang.Namespace.find = function( s ) {
- return clojure.JS.global[ s.substring(1) ];
+ return clojure.JS.global[ s.getName() ];
};
clojure.JS.merge( clojure.lang.Namespace.prototype, {
@@ -1971,7 +2019,7 @@ clojure.JS.merge( clojure.lang.Namespace.prototype, {
hashCode: function() { return clojure.hash( this.name ); }
});
-clojure.in_ns("'user");
+clojure.in_ns(clojure.symbol("user"));
(function() {
var buf = [];