summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2006-09-25 18:46:24 +0000
committerRich Hickey <richhickey@gmail.com>2006-09-25 18:46:24 +0000
commit86fcd18f4ef4d0cfc17df28649ae10b5060f2432 (patch)
tree80c3df20f1ea328545f94eefb4104c66e53612a8
parent51c468f878a842bc6e469c32acbc58543448d081 (diff)
reorg of host symbols
-rw-r--r--src/cli/runtime/ClassSymbol.cs (renamed from src/cli/runtime/ClassName.cs)6
-rw-r--r--src/cli/runtime/HostSymbol.cs12
-rw-r--r--src/cli/runtime/InstanceMemberSymbol.cs (renamed from src/cli/runtime/StaticMemberName.cs)13
-rw-r--r--src/cli/runtime/StaticMemberSymbol.cs (renamed from src/cli/runtime/InstanceMemberName.cs)10
-rw-r--r--src/cli/runtime/Symbol.cs35
-rw-r--r--src/jvm/clojure/lang/ClassSymbol.java (renamed from src/jvm/clojure/lang/StaticMemberName.java)10
-rw-r--r--src/jvm/clojure/lang/HostSymbol.java (renamed from src/jvm/clojure/lang/ClassName.java)7
-rw-r--r--src/jvm/clojure/lang/InstanceMemberSymbol.java26
-rw-r--r--src/jvm/clojure/lang/StaticMemberSymbol.java (renamed from src/jvm/clojure/lang/InstanceMemberName.java)11
-rw-r--r--src/jvm/clojure/lang/Symbol.java28
10 files changed, 113 insertions, 45 deletions
diff --git a/src/cli/runtime/ClassName.cs b/src/cli/runtime/ClassSymbol.cs
index 5d777974..484ce488 100644
--- a/src/cli/runtime/ClassName.cs
+++ b/src/cli/runtime/ClassSymbol.cs
@@ -13,11 +13,11 @@ using System;
namespace clojure.lang
{
-public class ClassName {
+public class ClassSymbol :HostSymbol {
readonly public String className;
-public ClassName(String className) {
- this.className = className;
+public ClassSymbol(String className) : base(className) {
+this.className = className.Substring(0, className.Length - 2); //strip trailing dot
}
}
diff --git a/src/cli/runtime/HostSymbol.cs b/src/cli/runtime/HostSymbol.cs
new file mode 100644
index 00000000..29d951c3
--- /dev/null
+++ b/src/cli/runtime/HostSymbol.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace clojure.lang
+ {
+ public class HostSymbol : Symbol
+ {
+ public HostSymbol(string name) : base(name) {
+ }
+ }
+ }
diff --git a/src/cli/runtime/StaticMemberName.cs b/src/cli/runtime/InstanceMemberSymbol.cs
index e1d9bdb9..35827e7b 100644
--- a/src/cli/runtime/StaticMemberName.cs
+++ b/src/cli/runtime/InstanceMemberSymbol.cs
@@ -13,15 +13,18 @@ using System;
namespace clojure.lang
{
-public class StaticMemberName {
+public class InstanceMemberSymbol :HostSymbol {
readonly public String className;
readonly public String memberName;
-public StaticMemberName(String className, String memberName) {
- this.className = className;
- this.memberName = memberName;
+public InstanceMemberSymbol(String name) : base(name) {
+int lastDot = name.LastIndexOf('.');
+if (lastDot == 0)
+ this.className = null;
+else
+ this.className = name.Substring(1, lastDot-1);
+this.memberName = name.Substring(lastDot + 1);
}
-
}
}
diff --git a/src/cli/runtime/InstanceMemberName.cs b/src/cli/runtime/StaticMemberSymbol.cs
index 594b44cb..509111c9 100644
--- a/src/cli/runtime/InstanceMemberName.cs
+++ b/src/cli/runtime/StaticMemberSymbol.cs
@@ -13,14 +13,16 @@ using System;
namespace clojure.lang
{
-public class InstanceMemberName {
+public class StaticMemberSymbol : HostSymbol{
readonly public String className;
readonly public String memberName;
-public InstanceMemberName(String className, String memberName) {
- this.className = className;
- this.memberName = memberName;
+public StaticMemberSymbol(String name) : base(name) {
+ int lastDot = name.LastIndexOf('.');
+ this.className = name.Substring(0,lastDot);
+ this.memberName = name.Substring(lastDot + 1);
}
+
}
}
diff --git a/src/cli/runtime/Symbol.cs b/src/cli/runtime/Symbol.cs
index c7dd6368..1a72b60e 100644
--- a/src/cli/runtime/Symbol.cs
+++ b/src/cli/runtime/Symbol.cs
@@ -15,25 +15,40 @@ using System.Collections;
namespace clojure.lang
{
-public class Symbol : Obj, IComparable{
+public class Symbol
+// : Obj, IComparable
+{
static public readonly Hashtable table = new Hashtable(1001);
-static public readonly Hashtable hashes = new Hashtable(1001);
-static readonly Random rand = new Random(42);
+//static public readonly Hashtable hashes = new Hashtable(1001);
+//static readonly Random rand = new Random(42);
public readonly String name;
-int hash = 0;
+//int hash = 0;
override public String ToString()
{
return name;
}
-public static Symbol intern(String name) { lock(table) { Symbol sym = (Symbol) table[name]; if(sym == null) { if(name[0] == ':') sym = new Keyword(name);
- else if (name[0] == '.')
- sym = new Accessor(name);
- else sym = new Symbol(name); if(table[name] != null) //defend against recursive static init
+public static Symbol intern(String name) { lock(table) { Symbol sym = (Symbol) table[name];
+ int dot = 0;
+ if (sym == null)
+ {
+ if (name[0] == ':')
+ sym = new Keyword(name);
+ else if ((dot = name.IndexOf('.')) != -1)
+ {
+ if (dot == 0)
+ sym = new InstanceMemberSymbol(name);
+ else if (name.LastIndexOf('.') == name.Length - 1)
+ sym = new ClassSymbol(name);
+ else
+ sym = new StaticMemberSymbol(name);
+ }
+ else
+ sym = new Symbol(name); if(table[name] != null) //defend against recursive static init
return (Symbol)table[name]; table.Add(name, sym); } return sym; } }
/**
* Used by Module.intern()
@@ -45,7 +60,7 @@ internal Symbol(String name)
this.name = name;
}
-
+/*
public override int GetHashCode()
{
if(hash == 0)
@@ -80,6 +95,6 @@ override public Obj withMeta(IPersistentMap meta) {
this._meta = meta;
return this;
}
-
+*/
}
}
diff --git a/src/jvm/clojure/lang/StaticMemberName.java b/src/jvm/clojure/lang/ClassSymbol.java
index 4cbc89c4..2bbd6945 100644
--- a/src/jvm/clojure/lang/StaticMemberName.java
+++ b/src/jvm/clojure/lang/ClassSymbol.java
@@ -10,13 +10,11 @@
package clojure.lang;
-public class StaticMemberName {
+public class ClassSymbol extends HostSymbol{
final public String className;
-final public String memberName;
-public StaticMemberName(String className, String memberName) {
- this.className = className;
- this.memberName = memberName;
+public ClassSymbol(String className) {
+ super(className);
+ this.className = className.substring(0,className.length()-1); //strip trailing dot
}
-
}
diff --git a/src/jvm/clojure/lang/ClassName.java b/src/jvm/clojure/lang/HostSymbol.java
index d039cd5e..0887457b 100644
--- a/src/jvm/clojure/lang/ClassName.java
+++ b/src/jvm/clojure/lang/HostSymbol.java
@@ -10,10 +10,9 @@
package clojure.lang;
-public class ClassName {
-final public String className;
+public class HostSymbol extends Symbol{
-public ClassName(String className) {
- this.className = className;
+HostSymbol(String name) {
+ super(name);
}
}
diff --git a/src/jvm/clojure/lang/InstanceMemberSymbol.java b/src/jvm/clojure/lang/InstanceMemberSymbol.java
new file mode 100644
index 00000000..c100d9bc
--- /dev/null
+++ b/src/jvm/clojure/lang/InstanceMemberSymbol.java
@@ -0,0 +1,26 @@
+/**
+ * Copyright (c) Rich Hickey. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+ * which can be found in the file CPL.TXT at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ **/
+
+package clojure.lang;
+
+public class InstanceMemberSymbol extends HostSymbol{
+final public String className;
+final public String memberName;
+
+public InstanceMemberSymbol(String name) {
+ super(name);
+ int lastDot = name.lastIndexOf('.');
+ if(lastDot == 0)
+ this.className = null;
+ else
+ this.className = name.substring(1,lastDot);
+ this.memberName = name.substring(lastDot + 1);
+}
+}
diff --git a/src/jvm/clojure/lang/InstanceMemberName.java b/src/jvm/clojure/lang/StaticMemberSymbol.java
index b0f8ff4b..136f2315 100644
--- a/src/jvm/clojure/lang/InstanceMemberName.java
+++ b/src/jvm/clojure/lang/StaticMemberSymbol.java
@@ -10,12 +10,15 @@
package clojure.lang;
-public class InstanceMemberName {
+public class StaticMemberSymbol extends HostSymbol{
final public String className;
final public String memberName;
-public InstanceMemberName(String className, String memberName) {
- this.className = className;
- this.memberName = memberName;
+public StaticMemberSymbol(String name) {
+ super(name);
+ int lastDot = name.lastIndexOf('.');
+ this.className = name.substring(0,lastDot);
+ this.memberName = name.substring(lastDot + 1);
}
+
}
diff --git a/src/jvm/clojure/lang/Symbol.java b/src/jvm/clojure/lang/Symbol.java
index fc97543c..49d87a10 100644
--- a/src/jvm/clojure/lang/Symbol.java
+++ b/src/jvm/clojure/lang/Symbol.java
@@ -13,17 +13,17 @@
package clojure.lang;
import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Random;
-public class Symbol extends Obj implements Comparable{
+public class Symbol
+ //extends Obj implements Comparable
+{
final public static HashMap table = new HashMap();
-final public static HashSet hashes = new HashSet();
-final static Random rand = new Random(42);
+//final public static HashSet hashes = new HashSet();
+//final static Random rand = new Random(42);
public final String name;
-int hash = 0;
+//int hash = 0;
public String toString()
{
@@ -35,12 +35,20 @@ public static Symbol intern(String name)
synchronized(table)
{
Symbol sym = (Symbol) table.get(name);
+ int dot = 0;
if(sym == null)
{
if(name.charAt(0) == ':')
sym = new Keyword(name);
- else if(name.charAt(0) == '.')
- sym = new Accessor(name);
+ else if((dot = name.indexOf('.')) != -1)
+ {
+ if(dot == 0)
+ sym = new InstanceMemberSymbol(name);
+ else if(name.lastIndexOf('.') == name.length() - 1)
+ sym = new ClassSymbol(name);
+ else
+ sym = new StaticMemberSymbol(name);
+ }
else
sym = new Symbol(name);
if(table.get(name) != null) //defend against recursive static init
@@ -59,7 +67,7 @@ Symbol(String name)
{
this.name = name;
}
-
+ /*
public int hashCode(){
if(hash == 0)
{
@@ -88,4 +96,6 @@ public Obj withMeta(IPersistentMap meta) {
this._meta = meta;
return this;
}
+*/
+
}