| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| 11 // with the distribution. | 11 // with the distribution. |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 | 122 |
| 123 | 123 |
| 124 function MapHas(key) { | 124 function MapHas(key) { |
| 125 if (!IS_MAP(this)) { | 125 if (!IS_MAP(this)) { |
| 126 throw MakeTypeError('incompatible_method_receiver', | 126 throw MakeTypeError('incompatible_method_receiver', |
| 127 ['Map.prototype.has', this]); | 127 ['Map.prototype.has', this]); |
| 128 } | 128 } |
| 129 if (IS_UNDEFINED(key)) { | 129 if (IS_UNDEFINED(key)) { |
| 130 key = undefined_sentinel; | 130 key = undefined_sentinel; |
| 131 } | 131 } |
| 132 return !IS_UNDEFINED(%MapGet(this, key)); | 132 return %MapHas(this, key); |
| 133 } | 133 } |
| 134 | 134 |
| 135 | 135 |
| 136 function MapDelete(key) { | 136 function MapDelete(key) { |
| 137 if (!IS_MAP(this)) { | 137 if (!IS_MAP(this)) { |
| 138 throw MakeTypeError('incompatible_method_receiver', | 138 throw MakeTypeError('incompatible_method_receiver', |
| 139 ['Map.prototype.delete', this]); | 139 ['Map.prototype.delete', this]); |
| 140 } | 140 } |
| 141 if (IS_UNDEFINED(key)) { | 141 if (IS_UNDEFINED(key)) { |
| 142 key = undefined_sentinel; | 142 key = undefined_sentinel; |
| 143 } | 143 } |
| 144 if (!IS_UNDEFINED(%MapGet(this, key))) { | 144 return %MapDelete(this, key); |
| 145 %MapSet(this, key, void 0); | |
| 146 return true; | |
| 147 } else { | |
| 148 return false; | |
| 149 } | |
| 150 } | 145 } |
| 151 | 146 |
| 152 | 147 |
| 153 function WeakMapConstructor() { | 148 function WeakMapConstructor() { |
| 154 if (%_IsConstructCall()) { | 149 if (%_IsConstructCall()) { |
| 155 %WeakMapInitialize(this); | 150 %WeakMapInitialize(this); |
| 156 } else { | 151 } else { |
| 157 return new $WeakMap(); | 152 return new $WeakMap(); |
| 158 } | 153 } |
| 159 } | 154 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 184 | 179 |
| 185 | 180 |
| 186 function WeakMapHas(key) { | 181 function WeakMapHas(key) { |
| 187 if (!IS_WEAKMAP(this)) { | 182 if (!IS_WEAKMAP(this)) { |
| 188 throw MakeTypeError('incompatible_method_receiver', | 183 throw MakeTypeError('incompatible_method_receiver', |
| 189 ['WeakMap.prototype.has', this]); | 184 ['WeakMap.prototype.has', this]); |
| 190 } | 185 } |
| 191 if (!IS_SPEC_OBJECT(key)) { | 186 if (!IS_SPEC_OBJECT(key)) { |
| 192 throw %MakeTypeError('invalid_weakmap_key', [this, key]); | 187 throw %MakeTypeError('invalid_weakmap_key', [this, key]); |
| 193 } | 188 } |
| 194 return !IS_UNDEFINED(%WeakMapGet(this, key)); | 189 return %WeakMapHas(this, key); |
| 195 } | 190 } |
| 196 | 191 |
| 197 | 192 |
| 198 function WeakMapDelete(key) { | 193 function WeakMapDelete(key) { |
| 199 if (!IS_WEAKMAP(this)) { | 194 if (!IS_WEAKMAP(this)) { |
| 200 throw MakeTypeError('incompatible_method_receiver', | 195 throw MakeTypeError('incompatible_method_receiver', |
| 201 ['WeakMap.prototype.delete', this]); | 196 ['WeakMap.prototype.delete', this]); |
| 202 } | 197 } |
| 203 if (!IS_SPEC_OBJECT(key)) { | 198 if (!IS_SPEC_OBJECT(key)) { |
| 204 throw %MakeTypeError('invalid_weakmap_key', [this, key]); | 199 throw %MakeTypeError('invalid_weakmap_key', [this, key]); |
| 205 } | 200 } |
| 206 if (!IS_UNDEFINED(%WeakMapGet(this, key))) { | 201 return %WeakMapDelete(this, key); |
| 207 %WeakMapSet(this, key, void 0); | |
| 208 return true; | |
| 209 } else { | |
| 210 return false; | |
| 211 } | |
| 212 } | 202 } |
| 213 | 203 |
| 214 // ------------------------------------------------------------------- | 204 // ------------------------------------------------------------------- |
| 215 | 205 |
| 216 (function () { | 206 (function () { |
| 217 %CheckIsBootstrapping(); | 207 %CheckIsBootstrapping(); |
| 218 | 208 |
| 219 // Set up the Set and Map constructor function. | 209 // Set up the Set and Map constructor function. |
| 220 %SetCode($Set, SetConstructor); | 210 %SetCode($Set, SetConstructor); |
| 221 %SetCode($Map, MapConstructor); | 211 %SetCode($Map, MapConstructor); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 246 %SetProperty($WeakMap.prototype, "constructor", $WeakMap, DONT_ENUM); | 236 %SetProperty($WeakMap.prototype, "constructor", $WeakMap, DONT_ENUM); |
| 247 | 237 |
| 248 // Set up the non-enumerable functions on the WeakMap prototype object. | 238 // Set up the non-enumerable functions on the WeakMap prototype object. |
| 249 InstallFunctions($WeakMap.prototype, DONT_ENUM, $Array( | 239 InstallFunctions($WeakMap.prototype, DONT_ENUM, $Array( |
| 250 "get", WeakMapGet, | 240 "get", WeakMapGet, |
| 251 "set", WeakMapSet, | 241 "set", WeakMapSet, |
| 252 "has", WeakMapHas, | 242 "has", WeakMapHas, |
| 253 "delete", WeakMapDelete | 243 "delete", WeakMapDelete |
| 254 )); | 244 )); |
| 255 })(); | 245 })(); |
| OLD | NEW |