[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / dfg-put-accessors-by-id-class.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error('bad value: ' + actual);
4 }
5
6 function testAttribute(object, name, type) {
7     shouldBe(Reflect.has(object, name), true);
8     let desc = Reflect.getOwnPropertyDescriptor(object, name);
9     shouldBe(desc.configurable, true);
10     shouldBe(desc.enumerable, false);
11     if (type === 'get') {
12         shouldBe(typeof desc.get, 'function');
13         shouldBe(typeof desc.set, 'undefined');
14     } else if (type === 'set') {
15         shouldBe(typeof desc.get, 'undefined');
16         shouldBe(typeof desc.set, 'function');
17     } else {
18         shouldBe(typeof desc.get, 'function');
19         shouldBe(typeof desc.set, 'function');
20     }
21 }
22 noInline(testAttribute);
23
24 function getter()
25 {
26     class Cocoa {
27         get hello() {
28             return 42;
29         }
30     }
31
32     let object = new Cocoa();
33     testAttribute(object.__proto__, 'hello', 'get');
34     return object.hello;
35 }
36 noInline(getter);
37
38 function setter()
39 {
40     class Cocoa {
41         constructor() {
42             this.value = 0;
43         }
44         set hello(value) {
45             this.value = value;
46         }
47     }
48
49     let object = new Cocoa();
50     testAttribute(object.__proto__, 'hello', 'set');
51     object.hello = 42;
52     return object.value;
53
54 }
55 noInline(setter);
56
57 function accessors()
58 {
59     class Cocoa {
60         constructor() {
61             this.value = 0;
62         }
63         get hello() {
64             return this.value;
65         }
66         set hello(value) {
67             this.value = value;
68         }
69     }
70
71     let object = new Cocoa();
72     testAttribute(object.__proto__, 'hello', 'getset');
73     object.hello = 42;
74     return object.hello;
75 }
76 noInline(accessors);
77
78 for (var i = 0; i < 10000; ++i) {
79     shouldBe(getter(), 42);
80     shouldBe(setter(), 42);
81     shouldBe(accessors(), 42);
82 }