summaryrefslogtreecommitdiff
path: root/src/cli
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 /src/cli
parent51c468f878a842bc6e469c32acbc58543448d081 (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.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
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;
}
-
+*/
}
}