Index: test/mjsunit/regress/regress-1365.js |
diff --git a/test/mjsunit/regress/regress-1170.js b/test/mjsunit/regress/regress-1365.js |
similarity index 56% |
copy from test/mjsunit/regress/regress-1170.js |
copy to test/mjsunit/regress/regress-1365.js |
index 8a5a9cfb19b7f20247ce4a43819c5ebbdb5ff67a..f19bdd0856051d8857cd0b10bf0393bc08cd1838 100644 |
--- a/test/mjsunit/regress/regress-1170.js |
+++ b/test/mjsunit/regress/regress-1365.js |
@@ -25,42 +25,41 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-var setter_value = 0; |
+// See: http://code.google.com/p/v8/issues/detail?id=1365 |
-__proto__.__defineSetter__("a", function(v) { setter_value = v; }); |
-eval("var a = 1"); |
-assertEquals(1, setter_value); |
-assertFalse(hasOwnProperty("a")); |
+// Check that builtin methods are passed undefined as the receiver |
+// when called as functions through variables. |
-eval("with({}) { eval('var a = 2') }"); |
-assertEquals(2, setter_value); |
-assertFalse(hasOwnProperty("a")); |
+// Flags: --allow-natives-syntax |
-// Function declarations are treated specially to match Safari. We do |
-// not call setters for them. |
-eval("function a() {}"); |
-assertTrue(hasOwnProperty("a")); |
+// Global variable. |
+var valueOf = Object.prototype.valueOf; |
+var hasOwnProperty = Object.prototype.hasOwnProperty; |
-__proto__.__defineSetter__("b", function(v) { assertUnreachable(); }); |
-try { |
- eval("const b = 23"); |
- assertUnreachable(); |
-} catch(e) { |
- assertTrue(/TypeError/.test(e)); |
-} |
-try { |
- eval("with({}) { eval('const b = 23') }"); |
- assertUnreachable(); |
-} catch(e) { |
- assertTrue(/TypeError/.test(e)); |
-} |
+function callGlobalValueOf() { valueOf(); } |
+function callGlobalHasOwnProperty() { valueOf(); } |
+ |
+assertEquals(Object.prototype, Object.prototype.valueOf()); |
+assertThrows(callGlobalValueOf); |
+assertThrows(callGlobalHasOwnProperty); |
-__proto__.__defineSetter__("c", function(v) { throw 42; }); |
-try { |
- eval("var c = 1"); |
- assertUnreachable(); |
-} catch(e) { |
- assertEquals(42, e); |
- assertFalse(hasOwnProperty("c")); |
+%OptimizeFunctionOnNextCall(Object.prototype.valueOf); |
+Object.prototype.valueOf(); |
+ |
+assertEquals(Object.prototype, Object.prototype.valueOf()); |
+assertThrows(callGlobalValueOf); |
+assertThrows(callGlobalHasOwnProperty); |
+ |
+function CheckExceptionCallLocal() { |
+ var valueOf = Object.prototype.valueOf; |
+ var hasOwnProperty = Object.prototype.hasOwnProperty; |
+ try { valueOf(); assertUnreachable(); } catch(e) { } |
+ try { hasOwnProperty(); assertUnreachable(); } catch(e) { } |
} |
+CheckExceptionCallLocal(); |
+function CheckExceptionCallParameter(f) { |
+ try { f(); assertUnreachable(); } catch(e) { } |
+} |
+CheckExceptionCallParameter(Object.prototype.valueOf); |
+CheckExceptionCallParameter(Object.prototype.hasOwnProperty); |