From bf8dd22d35e1f8f5afd6896d65a4f106305665d3 Mon Sep 17 00:00:00 2001 From: brian Date: Sat, 3 Jul 2004 09:41:02 +0000 Subject: [PATCH] use JS.toString() everywhere darcs-hash:20040703094102-24bed-d772c08a198d15fa07cad9db565715f087041ca5.gz --- src/org/ibex/js/Interpreter.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/org/ibex/js/Interpreter.java b/src/org/ibex/js/Interpreter.java index 504bbd2..983b471 100644 --- a/src/org/ibex/js/Interpreter.java +++ b/src/org/ibex/js/Interpreter.java @@ -486,7 +486,7 @@ class Interpreter implements ByteCodes, Tokens { if (right == null) right = JS.N(0); int result = 0; if (left instanceof String || right instanceof String) { - result = left.toString().compareTo(right.toString()); + result = JS.toString(left).compareTo(JS.toString(right)); } else { result = (int)java.lang.Math.ceil(JS.toDouble(left) - JS.toDouble(right)); } @@ -497,6 +497,7 @@ class Interpreter implements ByteCodes, Tokens { case EQ: case NE: { + // FIXME: This is not correct, see ECMA-262 11.9.3 Object l = left; Object r = right; boolean ret; @@ -505,7 +506,7 @@ class Interpreter implements ByteCodes, Tokens { else if (r == null) ret = false; // l != null, so its false else if (l instanceof Boolean) ret = JS.B(JS.toBoolean(r)).equals(l); else if (l instanceof Number) ret = JS.toNumber(r).doubleValue() == JS.toNumber(l).doubleValue(); - else if (l instanceof String) ret = r != null && l.equals(r.toString()); + else if (l instanceof String) ret = r != null && l.equals(JS.toString(r)); else ret = l.equals(r); stack.push(JS.B(op == EQ ? ret : !ret)); break; } @@ -652,13 +653,13 @@ class Interpreter implements ByteCodes, Tokens { return sb.toString(); } case "indexOf": { - String search = alength >= 1 ? arg0.toString() : "null"; + String search = alength >= 1 ? JS.toString(arg0) : "null"; int start = alength >= 2 ? JS.toInt(arg1) : 0; // Java's indexOf handles an out of bounds start index, it'll return -1 return JS.N(s.indexOf(search,start)); } case "lastIndexOf": { - String search = alength >= 1 ? arg0.toString() : "null"; + String search = alength >= 1 ? JS.toString(arg0) : "null"; int start = alength >= 2 ? JS.toInt(arg1) : 0; // Java's indexOf handles an out of bounds start index, it'll return -1 return JS.N(s.lastIndexOf(search,start)); @@ -696,7 +697,7 @@ class Interpreter implements ByteCodes, Tokens { } if (!returnJS) { // the string stuff applies to everything - String s = o.toString(); + String s = JS.toString(o); // this is sort of ugly, but this list should never change // These should provide a complete (enough) implementation of the ECMA-262 String object @@ -722,7 +723,7 @@ class Interpreter implements ByteCodes, Tokens { } if (returnJS) { final Object target = o; - final String method = key.toString(); + final String method = JS.toString(o); return new JS() { public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn { if (nargs > 2) throw new JSExn("cannot call that method with that many arguments"); -- 1.7.10.4