summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStuart Halloway <stu@thinkrelevance.com>2010-05-07 03:30:07 -0400
committerStuart Halloway <stu@thinkrelevance.com>2010-05-07 07:46:51 -0400
commitc4eb5719b0f30ea4c113e6e98a1c171c43a01abe (patch)
treedd6ce4df526a381a0eab708ebce7a4926614e588 /src
parent33a3759f9f511f0566d8c590181f04fa1196b512 (diff)
duck type RT.err #343
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Compile.java2
-rw-r--r--src/jvm/clojure/lang/Compiler.java27
-rw-r--r--src/jvm/clojure/lang/Namespace.java3
-rw-r--r--src/jvm/clojure/lang/RT.java12
4 files changed, 26 insertions, 18 deletions
diff --git a/src/jvm/clojure/lang/Compile.java b/src/jvm/clojure/lang/Compile.java
index 26a417c5..81d1c811 100644
--- a/src/jvm/clojure/lang/Compile.java
+++ b/src/jvm/clojure/lang/Compile.java
@@ -31,7 +31,7 @@ private static final Var warn_on_reflection = RT.var("clojure.core", "*warn-on-r
public static void main(String[] args) throws Exception{
OutputStreamWriter out = (OutputStreamWriter) RT.OUT.deref();
- PrintWriter err = (PrintWriter) RT.ERR.deref();
+ PrintWriter err = RT.errPrintWriter();
String path = System.getProperty(PATH_PROP);
int count = args.length;
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 1506cb27..be924769 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -923,9 +923,9 @@ static class InstanceFieldExpr extends FieldExpr implements AssignableExpr{
this.tag = tag;
if(field == null && RT.booleanCast(RT.WARN_ON_REFLECTION.deref()))
{
- ((PrintWriter) RT.ERR.deref())
- .format("Reflection warning, %s:%d - reference to field %s can't be resolved.\n",
- SOURCE_PATH.deref(), line, fieldName);
+ RT.errPrintWriter()
+ .format("Reflection warning, %s:%d - reference to field %s can't be resolved.\n",
+ SOURCE_PATH.deref(), line, fieldName);
}
}
@@ -1134,8 +1134,7 @@ static abstract class MethodExpr extends HostExpr{
}
catch(Exception e1)
{
- e1.printStackTrace((PrintWriter) RT.ERR
- .deref()); //To change body of catch statement use File | Settings | File Templates.
+ e1.printStackTrace(RT.errPrintWriter());
}
}
@@ -1199,9 +1198,9 @@ static class InstanceMethodExpr extends MethodExpr{
if(method == null && RT.booleanCast(RT.WARN_ON_REFLECTION.deref()))
{
- ((PrintWriter) RT.ERR.deref())
- .format("Reflection warning, %s:%d - call to %s can't be resolved.\n",
- SOURCE_PATH.deref(), line, methodName);
+ RT.errPrintWriter()
+ .format("Reflection warning, %s:%d - call to %s can't be resolved.\n",
+ SOURCE_PATH.deref(), line, methodName);
}
}
@@ -1348,9 +1347,9 @@ static class StaticMethodExpr extends MethodExpr{
method = (java.lang.reflect.Method) (methodidx >= 0 ? methods.get(methodidx) : null);
if(method == null && RT.booleanCast(RT.WARN_ON_REFLECTION.deref()))
{
- ((PrintWriter) RT.ERR.deref())
- .format("Reflection warning, %s:%d - call to %s can't be resolved.\n",
- SOURCE_PATH.deref(), line, methodName);
+ RT.errPrintWriter()
+ .format("Reflection warning, %s:%d - call to %s can't be resolved.\n",
+ SOURCE_PATH.deref(), line, methodName);
}
}
@@ -2064,9 +2063,9 @@ public static class NewExpr implements Expr{
this.ctor = ctoridx >= 0 ? (Constructor) ctors.get(ctoridx) : null;
if(ctor == null && RT.booleanCast(RT.WARN_ON_REFLECTION.deref()))
{
- ((PrintWriter) RT.ERR.deref())
- .format("Reflection warning, %s:%d - call to %s ctor can't be resolved.\n",
- SOURCE_PATH.deref(), line, c.getName());
+ RT.errPrintWriter()
+ .format("Reflection warning, %s:%d - call to %s ctor can't be resolved.\n",
+ SOURCE_PATH.deref(), line, c.getName());
}
}
diff --git a/src/jvm/clojure/lang/Namespace.java b/src/jvm/clojure/lang/Namespace.java
index 34a5c50d..383719f5 100644
--- a/src/jvm/clojure/lang/Namespace.java
+++ b/src/jvm/clojure/lang/Namespace.java
@@ -14,7 +14,6 @@ package clojure.lang;
import java.io.ObjectStreamException;
import java.io.Serializable;
-import java.io.PrintWriter;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicReference;
@@ -82,7 +81,7 @@ public Var intern(Symbol sym){
}
private void warnOnReplace(Symbol sym, Object o, Object v){
- ((PrintWriter) RT.ERR.deref()).println("WARNING: " + sym + " already refers to: " + o + " in namespace: " + name
+ RT.errPrintWriter().println("WARNING: " + sym + " already refers to: " + o + " in namespace: " + name
+ ", being replaced by: " + v);
}
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 4c9de96c..44ad1474 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -237,6 +237,16 @@ public static List<String> processCommandLine(String[] args){
return arglist;
}
+// duck typing stderr plays nice with e.g. swank
+public static PrintWriter errPrintWriter(){
+ Writer w = (Writer) ERR.deref();
+ if (w instanceof PrintWriter) {
+ return (PrintWriter) w;
+ } else {
+ return new PrintWriter(w);
+ }
+}
+
static public final Object[] EMPTY_ARRAY = new Object[]{};
static public final Comparator DEFAULT_COMPARATOR = new DefaultComparator();
@@ -337,7 +347,7 @@ public static void loadResourceScript(Class c, String name, boolean failIfNotFou
}
static public void init() throws Exception{
- ((PrintWriter) RT.ERR.deref()).println("No need to call RT.init() anymore");
+ RT.errPrintWriter().println("No need to call RT.init() anymore");
}
static public long lastModified(URL url, String libfile) throws Exception{