From 06dd89e13e5c0b67736b168dbc7c96847fb1c095 Mon Sep 17 00:00:00 2001
From: Michael Drogalis <mjd3089@rit.edu>
Date: Sun, 6 Jan 2013 21:28:36 -0500
Subject: [PATCH 1/2] Improve error message for coercing a string to an
 integer with the int and unchecked-int functions.

---
 src/jvm/clojure/lang/RT.java          |    8 ++++++++
 test/clojure/test_clojure/numbers.clj |    5 ++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index cea1bb5..33e8d67 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -1094,6 +1094,10 @@ static public int intCast(int x){
 	return x;
 }
 
+static public int intCast(String x){
+    throw new IllegalArgumentException("java.lang.String cannot be coerced to java.lang.Integer");
+}
+
 static public int intCast(float x){
 	if(x < Integer.MIN_VALUE || x > Integer.MAX_VALUE)
 		throw new IllegalArgumentException("Value out of range for int: " + x);
@@ -1361,6 +1365,10 @@ static public int uncheckedIntCast(double x){
     return (int) x;
 }
 
+static public int uncheckedIntCast(String x){
+    throw new IllegalArgumentException("java.lang.String cannot be coerced to java.lang.Integer");
+}
+
 static public long uncheckedLongCast(Object x){
     return ((Number) x).longValue();
 }
diff --git a/test/clojure/test_clojure/numbers.clj b/test/clojure/test_clojure/numbers.clj
index d00b3f4..3a336a7 100644
--- a/test/clojure/test_clojure/numbers.clj
+++ b/test/clojure/test_clojure/numbers.clj
@@ -23,8 +23,11 @@
 ; and more...
 
 
-;; *** Types ***
+(deftest Coerced-String
+  (is (thrown? IllegalArgumentException (int "0")))
+  (is (thrown? IllegalArgumentException (unchecked-int "0"))))
 
+;; *** Types ***
 
 (deftest Coerced-BigDecimal
   (doseq [v [(bigdec 3) (bigdec (inc (bigint Long/MAX_VALUE)))]]
-- 
1.7.10.4


From edbcb336db9e6517ceb78c4c19fa927725a47c59 Mon Sep 17 00:00:00 2001
From: Michael Drogalis <mjd3089@rit.edu>
Date: Sun, 6 Jan 2013 21:39:49 -0500
Subject: [PATCH 2/2] Improve error message for coercing a string to a
 character with the char and unchecked-char functions.

---
 src/jvm/clojure/lang/RT.java               |    8 ++++++++
 test/clojure/test_clojure/java_interop.clj |    8 +++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 33e8d67..31ef682 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -966,6 +966,10 @@ static public char charCast(double x){
     throw new IllegalArgumentException("Value out of range for char: " + x);
 }
 
+static public char charCast(String x){
+    throw new IllegalArgumentException("java.lang.String cannot be coerced to java.lang.Character");
+}
+
 static public boolean booleanCast(Object x){
 	if(x instanceof Boolean)
 		return ((Boolean) x).booleanValue();
@@ -1331,6 +1335,10 @@ static public char uncheckedCharCast(double x){
     return (char) x;
 }
 
+static public char uncheckedCharCast(String x){
+    throw new IllegalArgumentException("java.lang.String cannot be coerced to java.lang.Character");
+}
+
 static public int uncheckedIntCast(Object x){
     if(x instanceof Number)
 	return ((Number)x).intValue();
diff --git a/test/clojure/test_clojure/java_interop.clj b/test/clojure/test_clojure/java_interop.clj
index e073f9d..2c1731c 100644
--- a/test/clojure/test_clojure/java_interop.clj
+++ b/test/clojure/test_clojure/java_interop.clj
@@ -492,6 +492,12 @@
 
   ; char -> char
   (is (instance? java.lang.Character (char \a)))
-  (is (= (char \a) \a)))
+  (is (= (char \a) \a))
+
+  ; char -> String
+  (is (thrown? IllegalArgumentException (char "a"))))
+
+(deftest test-unchecked-char
+  (is (thrown? IllegalArgumentException (unchecked-char "a"))))
 
 ;; Note: More coercions in numbers.clj
-- 
1.7.10.4

