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 /src/cli | |
parent | 51c468f878a842bc6e469c32acbc58543448d081 (diff) |
reorg of host symbols
Diffstat (limited to 'src/cli')
-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 |
5 files changed, 54 insertions, 22 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;
}
-
+*/
} } |