summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-09-01 19:22:53 +0000
committerRich Hickey <richhickey@gmail.com>2007-09-01 19:22:53 +0000
commit8a36fd5f840f13e2cb16e7876012d5dc43c244e3 (patch)
treeacd552f9647579b95e35b1e1abf6b4fbe474c2f4 /src
parentf96102812da70214ef45e4f7bb68707258d3a41c (diff)
renamed DynamicVar -> Var
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/BytecodeCompiler.java58
-rw-r--r--src/jvm/clojure/lang/Compiler.java62
-rw-r--r--src/jvm/clojure/lang/RT.java14
-rw-r--r--src/jvm/clojure/lang/Var.java (renamed from src/jvm/clojure/lang/DynamicVar.java)36
4 files changed, 85 insertions, 85 deletions
diff --git a/src/jvm/clojure/lang/BytecodeCompiler.java b/src/jvm/clojure/lang/BytecodeCompiler.java
index 0063c0f1..db448d7f 100644
--- a/src/jvm/clojure/lang/BytecodeCompiler.java
+++ b/src/jvm/clojure/lang/BytecodeCompiler.java
@@ -46,7 +46,7 @@ static Symbol _AMP_ = Symbol.create("&");
private static final int MAX_POSITIONAL_ARITY = 20;
private static Type OBJECT_TYPE;
private static Type KEYWORD_TYPE = Type.getType(Keyword.class);
-private static Type VAR_TYPE = Type.getType(DynamicVar.class);
+private static Type VAR_TYPE = Type.getType(Var.class);
private static Type[][] ARG_TYPES;
@@ -65,28 +65,28 @@ static
//symbol->localbinding
-static public DynamicVar LOCAL_ENV = DynamicVar.create(null);
+static public Var LOCAL_ENV = Var.create(null);
//vector<localbinding>
-static public DynamicVar LOOP_LOCALS = DynamicVar.create();
+static public Var LOOP_LOCALS = Var.create();
//keyword->keywordexpr
-static public DynamicVar KEYWORDS = DynamicVar.create();
+static public Var KEYWORDS = Var.create();
//var->var
-static public DynamicVar VARS = DynamicVar.create();
+static public Var VARS = Var.create();
//FnFrame
-static public DynamicVar METHOD = DynamicVar.create(null);
+static public Var METHOD = Var.create(null);
//String
-static public DynamicVar SOURCE = DynamicVar.create(null);
+static public Var SOURCE = Var.create(null);
//Integer
-static public DynamicVar NEXT_LOCAL_NUM = DynamicVar.create(0);
+static public Var NEXT_LOCAL_NUM = Var.create(0);
//DynamicClassLoader
-static public DynamicVar LOADER = DynamicVar.create();
+static public Var LOADER = Var.create();
enum C{
STATEMENT, //value ignored
@@ -100,10 +100,10 @@ interface Expr{
}
static class DefExpr implements Expr{
- final DynamicVar var;
+ final Var var;
final Expr init;
- public DefExpr(DynamicVar var, Expr init){
+ public DefExpr(Var var, Expr init){
this.var = var;
this.init = init;
}
@@ -120,7 +120,7 @@ static class DefExpr implements Expr{
throw new Exception("Too few arguments to def");
else if(!(RT.second(form) instanceof Symbol))
throw new Exception("Second argument to def must be a Symbol");
- DynamicVar v = lookupVar((Symbol) RT.second(form));
+ Var v = lookupVar((Symbol) RT.second(form));
if(!v.sym.ns.equals(currentNS()))
throw new Exception("Can't create defs outside of current ns");
return new DefExpr(v, analyze(C.EXPRESSION, RT.third(form), v.sym.name));
@@ -128,10 +128,10 @@ static class DefExpr implements Expr{
}
static class VarExpr implements Expr{
- final DynamicVar var;
+ final Var var;
final Symbol tag;
- public VarExpr(DynamicVar var, Symbol tag){
+ public VarExpr(Var var, Symbol tag){
this.var = var;
this.tag = tag;
}
@@ -299,7 +299,7 @@ static class FnExpr implements Expr{
fn.internalName = fn.name.replace('.', '/');
try
{
- DynamicVar.pushThreadBindings(
+ Var.pushThreadBindings(
RT.map(
KEYWORDS, PersistentHashMap.EMPTY,
VARS, PersistentHashMap.EMPTY));
@@ -346,7 +346,7 @@ static class FnExpr implements Expr{
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
fn.compile();
return fn;
@@ -454,7 +454,7 @@ static class FnMethod{
{
FnMethod method = new FnMethod(fn, (FnMethod) METHOD.get());
//register as the current method and set up a new env frame
- DynamicVar.pushThreadBindings(
+ Var.pushThreadBindings(
RT.map(
METHOD, method,
LOCAL_ENV, LOCAL_ENV.get(),
@@ -506,7 +506,7 @@ static class FnMethod{
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
}
}
@@ -612,7 +612,7 @@ static class LetExpr implements Expr{
try
{
- DynamicVar.pushThreadBindings(dynamicBindings);
+ Var.pushThreadBindings(dynamicBindings);
PersistentVector bindingInits = PersistentVector.EMPTY;
PersistentVector loopLocals = PersistentVector.EMPTY;
@@ -637,7 +637,7 @@ static class LetExpr implements Expr{
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
}
@@ -725,31 +725,31 @@ private static Expr analyzeSymbol(Symbol sym) throws Exception{
if(b != null)
return new LocalBindingExpr(b, tag);
}
- DynamicVar v = lookupVar(sym);
+ Var v = lookupVar(sym);
if(v != null)
return new VarExpr(v, tag);
throw new Exception("Unable to resolve symbol: " + sym + " in this context");
}
-static DynamicVar lookupVar(Symbol sym) throws Exception{
- DynamicVar var = null;
+static Var lookupVar(Symbol sym) throws Exception{
+ Var var = null;
//note - ns-qualified vars must already exist
if(sym.ns != null)
{
- var = DynamicVar.find(sym);
+ var = Var.find(sym);
}
else
{
//is it an alias?
IPersistentMap uses = (IPersistentMap) RT.USES.get();
- var = (DynamicVar) uses.valAt(sym);
+ var = (Var) uses.valAt(sym);
if(var == null)
{
//introduce a new var in the current ns
String ns = currentNS();
- var = DynamicVar.intern(Symbol.intern(ns, sym.name));
+ var = Var.intern(Symbol.intern(ns, sym.name));
}
}
if(var != null)
@@ -757,7 +757,7 @@ static DynamicVar lookupVar(Symbol sym) throws Exception{
return var;
}
-private static void registerVar(DynamicVar var) throws Exception{
+private static void registerVar(Var var) throws Exception{
if(!VARS.isBound())
return;
IPersistentMap varsMap = (IPersistentMap) VARS.get();
@@ -805,7 +805,7 @@ public static void main(String[] args){
{
try
{
- DynamicVar.pushThreadBindings(
+ Var.pushThreadBindings(
RT.map(LOADER, new DynamicClassLoader()));
Object r = LispReader.read(rdr, false, EOF, false);
if(r == EOF)
@@ -817,7 +817,7 @@ public static void main(String[] args){
}
catch(Exception e)
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
e.printStackTrace();
}
}
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 85f2347e..2446bcd6 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -39,33 +39,33 @@ static Symbol USE = Symbol.create("use");
static Symbol _AMP_KEY = Symbol.create("&key");
static Symbol _AMP_REST = Symbol.create("&rest");
-static public DynamicVar _CRT_OUT = RT.OUT;
-static public DynamicVar _CRT_MODULE = RT.CURRENT_MODULE;
+static public Var _CRT_OUT = RT.OUT;
+static public Var _CRT_MODULE = RT.CURRENT_MODULE;
static NilExpr NIL_EXPR = new NilExpr();
//short-name-string->full-name-string
-static public DynamicVar IMPORTS = DynamicVar.create();
+static public Var IMPORTS = Var.create();
//keyword->keywordexpr
-static public DynamicVar KEYWORDS = DynamicVar.create();
+static public Var KEYWORDS = Var.create();
//var->var
-static public DynamicVar VARS = DynamicVar.create();
+static public Var VARS = Var.create();
//symbol->localbinding
-static public DynamicVar LOCAL_ENV = DynamicVar.create();
+static public Var LOCAL_ENV = Var.create();
//FnFrame
-static public DynamicVar METHOD = DynamicVar.create();
+static public Var METHOD = Var.create();
//module->module
-static public DynamicVar USES = DynamicVar.create();
+static public Var USES = Var.create();
//ISeq FnExprs
-static public DynamicVar FNS = DynamicVar.create();
+static public Var FNS = Var.create();
static public IPersistentMap CHAR_MAP =
new PersistentArrayMap(new Object[]{'-', "_DASH_",
@@ -99,7 +99,7 @@ static String compile(String ns, String className, LineNumberingPushbackReader..
StringWriter w = new StringWriter();
try
{
- DynamicVar.pushThreadBindings(
+ Var.pushThreadBindings(
RT.map(
_CRT_OUT, w,
KEYWORDS, null,
@@ -118,7 +118,7 @@ static String compile(String ns, String className, LineNumberingPushbackReader..
{
try
{
- DynamicVar.pushThreadBindings(
+ Var.pushThreadBindings(
RT.map(
IMPORTS, null,
USES, null));
@@ -159,7 +159,7 @@ static String compile(String ns, String className, LineNumberingPushbackReader..
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
}
//declare static members for keywords, vars
@@ -170,7 +170,7 @@ static String compile(String ns, String className, LineNumberingPushbackReader..
}
for(ISeq vars = RT.seq(VARS.get()); vars != null; vars = vars.rest())
{
- DynamicVar v = (DynamicVar) ((IMapEntry) vars.first()).val();
+ Var v = (Var) ((IMapEntry) vars.first()).val();
format("static DynamicVar ~A;~%", munge(v.toString()));
}
@@ -194,7 +194,7 @@ static String compile(String ns, String className, LineNumberingPushbackReader..
}
for(ISeq vars = RT.seq(VARS.get()); vars != null; vars = vars.rest())
{
- DynamicVar v = (DynamicVar) ((IMapEntry) vars.first()).val();
+ Var v = (Var) ((IMapEntry) vars.first()).val();
//!format("~A = Module.intern(~S,~S);~%", munge(v.toString()), v.module.name, v.name.name);
}
//todo init syms and quoted aggregates
@@ -216,7 +216,7 @@ static String compile(String ns, String className, LineNumberingPushbackReader..
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
return w.toString();
}
@@ -283,13 +283,13 @@ static class AnExpr implements Expr{
StringWriter w = new StringWriter();
try
{
- DynamicVar.pushThreadBindings(RT.map(_CRT_OUT, w));
+ Var.pushThreadBindings(RT.map(_CRT_OUT, w));
emitExpression();
return w.toString();
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
}
@@ -791,7 +791,7 @@ private static Expr analyzeLet(C context, ISeq form) throws Exception{
}
try
{
- DynamicVar.pushThreadBindings(RT.map(LOCAL_ENV, LOCAL_ENV.get()));
+ Var.pushThreadBindings(RT.map(LOCAL_ENV, LOCAL_ENV.get()));
for(int i = 0; i < bindingInits.count(); i++)
{
BindingInit bi = (BindingInit) bindingInits.nth(i);
@@ -806,7 +806,7 @@ private static Expr analyzeLet(C context, ISeq form) throws Exception{
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
}
@@ -817,7 +817,7 @@ private static Expr analyzeLetFn(C context, ISeq form) throws Exception{
return analyze(context, RT.list(RT.list(FN, null, form)));
try
{
- DynamicVar.pushThreadBindings(RT.map(LOCAL_ENV, LOCAL_ENV.get()));
+ Var.pushThreadBindings(RT.map(LOCAL_ENV, LOCAL_ENV.get()));
ISeq bindings = (ISeq) RT.second(form);
ISeq body = RT.rest(RT.rest(form));
PersistentVector bindingPairs = PersistentVector.EMPTY;
@@ -846,7 +846,7 @@ private static Expr analyzeLetFn(C context, ISeq form) throws Exception{
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
}
@@ -864,7 +864,7 @@ private static Expr analyzeLetStar(C context, ISeq form) throws Exception{
try
{
- DynamicVar.pushThreadBindings(RT.map(LOCAL_ENV, LOCAL_ENV.get()));
+ Var.pushThreadBindings(RT.map(LOCAL_ENV, LOCAL_ENV.get()));
PersistentVector bindingInits = PersistentVector.EMPTY;
for(ISeq bs = bindings; bs != null; bs = RT.rest(RT.rest(bs)))
{
@@ -885,7 +885,7 @@ private static Expr analyzeLetStar(C context, ISeq form) throws Exception{
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
}
@@ -1409,7 +1409,7 @@ private static FnMethod analyzeMethod(FnExpr fn, ISeq form) throws Exception{
try
{
FnMethod method = new FnMethod(fn, (FnMethod) METHOD.get());
- DynamicVar.pushThreadBindings(
+ Var.pushThreadBindings(
RT.map(
METHOD, method,
LOCAL_ENV, LOCAL_ENV.get()));
@@ -1467,7 +1467,7 @@ private static FnMethod analyzeMethod(FnExpr fn, ISeq form) throws Exception{
}
finally
{
- DynamicVar.popThreadBindings();
+ Var.popThreadBindings();
}
}
@@ -1488,7 +1488,7 @@ private static Expr analyzeDef(C context, ISeq form) throws Exception{
throw new Exception("Too many arguments to def");
Symbol sym = (Symbol) RT.second(form);
Module module = (Module) _CRT_MODULE.get();
- DynamicVar var = null;//!module.intern(baseSymbol(sym));
+ Var var = null;//!module.intern(baseSymbol(sym));
registerVar(var);
VarExpr ve = new VarExpr(var, typeHint(sym));
Expr init = analyze(C.EXPRESSION, macroexpand(RT.third(form)));
@@ -1540,14 +1540,14 @@ private static Expr analyzeSymbol(Symbol sym, boolean inFnPosition) throws Excep
b.valueTaken = true;
return new LocalBindingExpr(b, typeHint);
}
- DynamicVar v = lookupVar(sym);
+ Var v = lookupVar(sym);
if(v != null)
return new VarExpr(v, typeHint);
throw new Exception("Unable to resolve symbol: " + sym.name + " in this context");
}
}
-static DynamicVar lookupVar(Symbol sym) throws Exception{
+static Var lookupVar(Symbol sym) throws Exception{
Module module = (Module) _CRT_MODULE.get();
// Var v = module.find(sym);
// if(v != null)
@@ -1574,7 +1574,7 @@ private static KeywordExpr registerKeyword(Keyword keyword) throws Exception{
return ke;
}
-private static void registerVar(DynamicVar var) throws Exception{
+private static void registerVar(Var var) throws Exception{
IPersistentMap varsMap = (IPersistentMap) VARS.get();
if(RT.get(varsMap, var) == null)
VARS.set(RT.assoc(varsMap, var, var));
@@ -1927,10 +1927,10 @@ static class LocalBindingExpr extends AnExpr{
}
static class VarExpr extends AnExpr{
- final DynamicVar var;
+ final Var var;
final String typeHint;
- public VarExpr(DynamicVar var, String typeHint){
+ public VarExpr(Var var, String typeHint){
this.var = var;
this.typeHint = typeHint;
}
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 314d783d..4a9648e5 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -19,19 +19,19 @@ import java.io.*;
public class RT{
static public Symbol T = Symbol.create(null, "t");
-final static public DynamicVar OUT =
- DynamicVar.intern(Symbol.create("clojure", "out"), new OutputStreamWriter(System.out));
+final static public Var OUT =
+ Var.intern(Symbol.create("clojure", "out"), new OutputStreamWriter(System.out));
final static Keyword TAG_KEY = Keyword.intern("clojure", "tag");
-final static public DynamicVar CURRENT_MODULE = DynamicVar.intern(Symbol.create("clojure", "current-module"),
- Module.findOrCreateModule("clojure/user"));
+final static public Var CURRENT_MODULE = Var.intern(Symbol.create("clojure", "current-module"),
+ Module.findOrCreateModule("clojure/user"));
//string
-final static DynamicVar CURRENT_NS = DynamicVar.intern(Symbol.create("clojure", "current-ns"), "clojure-user");
+final static Var CURRENT_NS = Var.intern(Symbol.create("clojure", "current-ns"), "clojure-user");
//simple-symbol->var
-final static DynamicVar USES = DynamicVar.intern(Symbol.create("clojure", "uses"), PersistentHashMap.EMPTY);
+final static Var USES = Var.intern(Symbol.create("clojure", "uses"), PersistentHashMap.EMPTY);
//simple-symbol->fully-qualified-class-name-symbol
-final static DynamicVar IMPORTS = DynamicVar.intern(Symbol.create("clojure", "imports"), PersistentHashMap.EMPTY);
+final static Var IMPORTS = Var.intern(Symbol.create("clojure", "imports"), PersistentHashMap.EMPTY);
static public final Object[] EMPTY_ARRAY = new Object[]{};
static public final Character[] chars;
diff --git a/src/jvm/clojure/lang/DynamicVar.java b/src/jvm/clojure/lang/Var.java
index a7d4852d..edcc7c23 100644
--- a/src/jvm/clojure/lang/DynamicVar.java
+++ b/src/jvm/clojure/lang/Var.java
@@ -16,7 +16,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
-public class DynamicVar implements IFn{
+public class Var implements IFn{
static class Frame{
Associative bmap;
@@ -46,19 +46,19 @@ Object root;
transient final AtomicInteger count;
final Symbol sym;
-static ConcurrentHashMap<Symbol, DynamicVar> table = new ConcurrentHashMap<Symbol, DynamicVar>();
+static ConcurrentHashMap<Symbol, Var> table = new ConcurrentHashMap<Symbol, Var>();
-public static DynamicVar intern(Symbol sym, Object root){
+public static Var intern(Symbol sym, Object root){
return intern(sym, root, true);
}
-public static DynamicVar intern(Symbol sym, Object root, boolean replaceRoot){
- DynamicVar dvout = table.get(sym);
+public static Var intern(Symbol sym, Object root, boolean replaceRoot){
+ Var dvout = table.get(sym);
boolean present = dvout != null;
if(!present)
{
- DynamicVar dvin = new DynamicVar(sym, root);
+ Var dvin = new Var(sym, root);
dvout = table.putIfAbsent(sym, dvin);
present = dvout != null; //might have snuck in
if(!present)
@@ -69,12 +69,12 @@ public static DynamicVar intern(Symbol sym, Object root, boolean replaceRoot){
return dvout;
}
-public static DynamicVar intern(Symbol sym){
- DynamicVar dvout = table.get(sym);
+public static Var intern(Symbol sym){
+ Var dvout = table.get(sym);
if(dvout != null)
return dvout;
- DynamicVar dvin = table.putIfAbsent(sym, dvout = new DynamicVar(sym));
+ Var dvin = table.putIfAbsent(sym, dvout = new Var(sym));
if(dvin != null)
return dvin;
return dvout;
@@ -84,25 +84,25 @@ public static void unintern(Symbol sym){
table.remove(sym);
}
-public static DynamicVar find(Symbol sym){
+public static Var find(Symbol sym){
return table.get(sym);
}
-public static DynamicVar create(){
- return new DynamicVar(null);
+public static Var create(){
+ return new Var(null);
}
-public static DynamicVar create(Object root){
- return new DynamicVar(null, root);
+public static Var create(Object root){
+ return new Var(null, root);
}
-private DynamicVar(Symbol sym){
+private Var(Symbol sym){
this.sym = sym;
this.count = new AtomicInteger();
this.root = dvals; //use dvals as magic not-bound value
}
-private DynamicVar(Symbol sym, Object root){
+private Var(Symbol sym, Object root){
this(sym);
this.root = root;
}
@@ -150,7 +150,7 @@ public static void pushThreadBindings(Associative bindings){
for(ISeq bs = bindings.seq(); bs != null; bs = bs.rest())
{
IMapEntry e = (IMapEntry) bs.first();
- DynamicVar v = (DynamicVar) e.key();
+ Var v = (Var) e.key();
v.count.incrementAndGet();
bmap = bmap.assoc(v, new Box(e.val()));
}
@@ -164,7 +164,7 @@ public static void popThreadBindings(){
for(ISeq bs = f.bindings.seq(); bs != null; bs = bs.rest())
{
IMapEntry e = (IMapEntry) bs.first();
- DynamicVar v = (DynamicVar) e.key();
+ Var v = (Var) e.key();
v.count.decrementAndGet();
}
dvals.set(f.prev);