1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = void 0;
|
7 |
|
8 | var _index = require("./index.js");
|
9 |
|
10 | var _is = require("../methods/is.js");
|
11 |
|
12 | var _has = require("../methods/has.js");
|
13 |
|
14 | var _abstract = require("../methods/abstract.js");
|
15 |
|
16 | var _get = require("../methods/get.js");
|
17 |
|
18 | var _singletons = require("../singletons.js");
|
19 |
|
20 | var _invariant = _interopRequireDefault(require("../invariant.js"));
|
21 |
|
22 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | class ArgumentsExotic extends _index.ObjectValue {
|
35 | constructor(realm, intrinsicName) {
|
36 | super(realm, realm.intrinsics.ObjectPrototype, intrinsicName);
|
37 | }
|
38 |
|
39 |
|
40 | $GetOwnProperty(P) {
|
41 |
|
42 | let args = this;
|
43 |
|
44 | let desc = _singletons.Properties.OrdinaryGetOwnProperty(this.$Realm, args, P);
|
45 |
|
46 |
|
47 | if (desc === undefined) return undefined;
|
48 |
|
49 | _singletons.Properties.ThrowIfMightHaveBeenDeleted(desc.value);
|
50 |
|
51 |
|
52 | let map = args.$ParameterMap;
|
53 | (0, _invariant.default)(map);
|
54 |
|
55 | let isMapped = (0, _has.HasOwnProperty)(this.$Realm, map, P);
|
56 |
|
57 | if (isMapped === true) {
|
58 |
|
59 | desc.value = (0, _get.Get)(this.$Realm, map, P);
|
60 | }
|
61 |
|
62 |
|
63 | return desc;
|
64 | }
|
65 |
|
66 |
|
67 | $DefineOwnProperty(P, Desc) {
|
68 |
|
69 | let args = this;
|
70 |
|
71 | let map = args.$ParameterMap;
|
72 | (0, _invariant.default)(map);
|
73 |
|
74 | let isMapped = (0, _has.HasOwnProperty)(this.$Realm, map, P);
|
75 |
|
76 | let newArgDesc = Desc;
|
77 |
|
78 | if (isMapped === true && (0, _is.IsDataDescriptor)(this.$Realm, Desc) === true) {
|
79 |
|
80 | if (Desc.value === undefined && Desc.writable === false) {
|
81 |
|
82 | newArgDesc = Object.assign({}, Desc);
|
83 |
|
84 | newArgDesc.value = (0, _get.Get)(this.$Realm, map, P);
|
85 | }
|
86 | }
|
87 |
|
88 |
|
89 | let allowed = _singletons.Properties.OrdinaryDefineOwnProperty(this.$Realm, args, P, newArgDesc);
|
90 |
|
91 |
|
92 | if (allowed === false) return false;
|
93 |
|
94 | if (isMapped === true) {
|
95 |
|
96 | if ((0, _is.IsAccessorDescriptor)(this.$Realm, Desc) === true) {
|
97 |
|
98 | map.$Delete(P);
|
99 | } else {
|
100 |
|
101 |
|
102 | if (Desc.value !== undefined) {
|
103 |
|
104 | (0, _invariant.default)(Desc.value instanceof _index.Value);
|
105 |
|
106 | let setStatus = _singletons.Properties.Set(this.$Realm, map, P, Desc.value, false);
|
107 |
|
108 |
|
109 | (0, _invariant.default)(setStatus === true);
|
110 | }
|
111 |
|
112 |
|
113 | if (Desc.writable === false) {
|
114 |
|
115 | map.$Delete(P);
|
116 | }
|
117 | }
|
118 | }
|
119 |
|
120 |
|
121 | return true;
|
122 | }
|
123 |
|
124 |
|
125 | $Get(P, Receiver) {
|
126 |
|
127 | let args = this;
|
128 |
|
129 | let map = args.$ParameterMap;
|
130 | (0, _invariant.default)(map);
|
131 |
|
132 | let isMapped = (0, _has.HasOwnProperty)(this.$Realm, map, P);
|
133 |
|
134 | if (isMapped === false) {
|
135 |
|
136 | return (0, _get.OrdinaryGet)(this.$Realm, args, P, Receiver);
|
137 | } else {
|
138 |
|
139 |
|
140 | return (0, _get.Get)(this.$Realm, map, P);
|
141 | }
|
142 | }
|
143 |
|
144 |
|
145 | $Set(P, V, Receiver) {
|
146 |
|
147 | let args = this;
|
148 | let isMapped, map;
|
149 |
|
150 | if ((0, _abstract.SameValuePartial)(this.$Realm, args, Receiver) === false) {
|
151 |
|
152 | isMapped = false;
|
153 | } else {
|
154 |
|
155 |
|
156 | map = args.$ParameterMap;
|
157 | (0, _invariant.default)(map);
|
158 |
|
159 | isMapped = (0, _has.HasOwnProperty)(this.$Realm, map, P);
|
160 | }
|
161 |
|
162 |
|
163 | if (isMapped === true) {
|
164 | (0, _invariant.default)(map);
|
165 |
|
166 | let setStatus = _singletons.Properties.Set(this.$Realm, map, P, V, false);
|
167 |
|
168 |
|
169 | (0, _invariant.default)(setStatus === true);
|
170 | }
|
171 |
|
172 |
|
173 | return _singletons.Properties.OrdinarySet(this.$Realm, args, P, V, Receiver);
|
174 | }
|
175 |
|
176 |
|
177 | $Delete(P) {
|
178 |
|
179 | let args = this;
|
180 |
|
181 | let map = args.$ParameterMap;
|
182 | (0, _invariant.default)(map);
|
183 |
|
184 | let isMapped = (0, _has.HasOwnProperty)(this.$Realm, map, P);
|
185 |
|
186 | let result = _singletons.Properties.OrdinaryDelete(this.$Realm, args, P);
|
187 |
|
188 |
|
189 | if (result === true && isMapped === true) {
|
190 |
|
191 | map.$Delete(P);
|
192 | }
|
193 |
|
194 |
|
195 | return result;
|
196 | }
|
197 |
|
198 | }
|
199 |
|
200 | exports.default = ArgumentsExotic;
|
201 |
|
\ | No newline at end of file |