| // Copyright (C) 2015 the V8 project authors. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| description: Initialization from a RegExp-like object (with flag overrides) |
| es6id: 21.2.3.1 |
| info: | |
| 1. Let patternIsRegExp be IsRegExp(pattern). |
| [...] |
| 6. Else if patternIsRegExp is true, then |
| a. Let P be Get(pattern, "source"). |
| b. ReturnIfAbrupt(P). |
| c. If flags is undefined, then |
| [...] |
| d. Else, let F be flags. |
| [...] |
| 10. Return RegExpInitialize(O, P, F). |
| features: [Symbol, Symbol.match] |
| ---*/ |
| |
| var obj = { |
| source: 'source text' |
| }; |
| var result; |
| |
| Object.defineProperty(obj, 'flags', { |
| get: function() { |
| $ERROR('The `flags` property value should not be referenced.'); |
| } |
| }); |
| |
| obj[Symbol.match] = true; |
| result = new RegExp(obj, 'g'); |
| assert.sameValue( |
| result.source, 'source text', '@@match specified as a primitive boolean' |
| ); |
| assert.sameValue( |
| result.flags, 'g', '@@match specified as a primitive boolean' |
| ); |
| |
| obj[Symbol.match] = 'string'; |
| result = new RegExp(obj, 'g'); |
| assert.sameValue( |
| result.source, 'source text', '@@match specified as a primitive string' |
| ); |
| assert.sameValue(result.flags, 'g', '@@match specified as a primitive string'); |
| |
| obj[Symbol.match] = []; |
| result = new RegExp(obj, 'g'); |
| assert.sameValue( |
| result.source, 'source text', '@@match specified as an array' |
| ); |
| assert.sameValue(result.flags, 'g', '@@match specified as an array'); |
| |
| obj[Symbol.match] = Symbol(); |
| result = new RegExp(obj, 'g'); |
| assert.sameValue( |
| result.source, 'source text', '@@match specified as a Symbol' |
| ); |
| assert.sameValue(result.flags, 'g', '@@match specified as a Symbol'); |
| |
| obj[Symbol.match] = 86; |
| result = new RegExp(obj, 'g'); |
| assert.sameValue( |
| result.source, 'source text', '@@match specified as a primitive number' |
| ); |
| assert.sameValue(result.flags, 'g', '@@match specified as a primitive number'); |