diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Compile.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 27 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Namespace.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 12 |
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{ |