Reviewers: Mads Ager,

Description:
Make sure to invoke valueOf methods on both operands of & and >> -- even
when the left operand lets us shortcut the computation.

Please review this at http://codereview.chromium.org/125176

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
   M     src/runtime.js


Index: src/runtime.js
===================================================================
--- src/runtime.js      (revision 2176)
+++ src/runtime.js      (working copy)
@@ -224,14 +224,19 @@
    var x;
    if (IS_NUMBER(this)) {
      x = this;
+    if (!IS_NUMBER(y)) y = %ToNumber(y);
    } else {
      x = %ToNumber(this);
+    // Make sure to convert the right operand to a number before
+    // bailing out in the fast case, but after converting the
+    // left operand. This ensures that valueOf methods on the right
+    // operand are always executed.
+    if (!IS_NUMBER(y)) y = %ToNumber(y);
      // Optimize for the case where we end up AND'ing a value
      // that doesn't convert to a number. This is common in
      // certain benchmarks.
      if (NUMBER_IS_NAN(x)) return 0;
    }
-  if (!IS_NUMBER(y)) y = %ToNumber(y);
    return %NumberAnd(x, y);
  }

@@ -271,14 +276,19 @@
    var x;
    if (IS_NUMBER(this)) {
      x = this;
+    if (!IS_NUMBER(y)) y = %ToNumber(y);
    } else {
      x = %ToNumber(this);
+    // Make sure to convert the right operand to a number before
+    // bailing out in the fast case, but after converting the
+    // left operand. This ensures that valueOf methods on the right
+    // operand are always executed.
+    if (!IS_NUMBER(y)) y = %ToNumber(y);
      // Optimize for the case where we end up shifting a value
      // that doesn't convert to a number. This is common in
      // certain benchmarks.
      if (NUMBER_IS_NAN(x)) return 0;
    }
-  if (!IS_NUMBER(y)) y = %ToNumber(y);
    return %NumberSar(x, y);
  }




--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to