Invalid flags in a RegExp literal should be an early SyntaxError
[WebKit-https.git] / JSTests / stress / dfg-object-proto-getter.js
1 function shouldBe(actual, expected)
2 {
3     if (actual !== expected)
4         throw new Error('bad value: ' + actual);
5 }
6
7 function shouldThrow(func, errorMessage) {
8     var errorThrown = false;
9     var error = null;
10     try {
11         func();
12     } catch (e) {
13         errorThrown = true;
14         error = e;
15     }
16     if (!errorThrown)
17         throw new Error('not thrown');
18     if (String(error) !== errorMessage)
19         throw new Error(`bad error: ${String(error)}`);
20 }
21
22 var protoFunction = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").get;
23
24 (function () {
25     function target(object)
26     {
27         return protoFunction.call(object);
28     }
29     noInline(target);
30
31     for (var i = 0; i < 1e3; ++i)
32         shouldBe(target({}), Object.prototype);
33 }());
34
35 (function () {
36     function target(object)
37     {
38         return protoFunction.call(object);
39     }
40     noInline(target);
41
42     for (var i = 0; i < 1e3; ++i) {
43         shouldThrow(() => target(null), `TypeError: null is not an object (evaluating 'protoFunction.call(object)')`);
44         shouldThrow(() => target(undefined), `TypeError: undefined is not an object (evaluating 'protoFunction.call(object)')`);
45     }
46 }());
47
48 (function () {
49     function target(object)
50     {
51         return protoFunction.call(object);
52     }
53     noInline(target);
54
55     for (var i = 0; i < 1e3; ++i)
56         shouldBe(target("Cocoa"), String.prototype);
57 }());
58
59 (function () {
60     function target(object)
61     {
62         return protoFunction.call(object);
63     }
64     noInline(target);
65
66     for (var i = 0; i < 1e3; ++i)
67         shouldBe(target(42), Number.prototype);
68 }());
69
70 (function () {
71     function target(object)
72     {
73         return protoFunction.call(object);
74     }
75     noInline(target);
76
77     for (var i = 0; i < 1e3; ++i)
78         shouldBe(target(42.195), Number.prototype);
79 }());
80
81 (function () {
82     function target(object)
83     {
84         return protoFunction.call(object);
85     }
86     noInline(target);
87
88     for (var i = 0; i < 1e3; ++i)
89         shouldBe(target(true), Boolean.prototype);
90 }());
91
92 (function () {
93     function target(object)
94     {
95         return protoFunction.call(object);
96     }
97     noInline(target);
98
99     for (var i = 0; i < 1e3; ++i)
100         shouldBe(target(Symbol("Cocoa")), Symbol.prototype);
101 }());
102
103 (function () {
104     function target(object)
105     {
106         return protoFunction.call(object);
107     }
108     noInline(target);
109
110     for (var i = 0; i < 1e3; ++i) {
111         shouldBe(target("Cocoa"), String.prototype);
112         shouldBe(target(42), Number.prototype);
113         shouldBe(target(42.195), Number.prototype);
114         shouldBe(target(true), Boolean.prototype);
115         shouldBe(target(Symbol("Cocoa")), Symbol.prototype);
116     }
117 }());