diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-09-25 18:46:24 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-09-25 18:46:24 +0000 |
commit | 86fcd18f4ef4d0cfc17df28649ae10b5060f2432 (patch) | |
tree | 80c3df20f1ea328545f94eefb4104c66e53612a8 | |
parent | 51c468f878a842bc6e469c32acbc58543448d081 (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.cs | 12 | ||||
-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.cs | 35 | ||||
-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.java | 26 | ||||
-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.java | 28 |
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; } +*/ + } |