Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(489)

Unified Diff: test/mjsunit/regress/regress-1365.js

Issue 7068009: Pass undefined to JS builtins when called with implicit receiver. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Update sputnik test expectations. Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/regress/regress-124.js ('k') | test/mjsunit/regress/regress-485.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « test/mjsunit/regress/regress-124.js ('k') | test/mjsunit/regress/regress-485.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698