// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-regular-expressions-patterns
es6id: B1.4
description: Extensions to NonemptyClassRanges production
info: |
    The production NonemptyClassRanges :: ClassAtom-ClassAtom ClassRanges
    evaluates as follows:

    1. Evaluate the first ClassAtom to obtain a CharSet A.
    2. Evaluate the second ClassAtom to obtain a CharSet B.
    3. Evaluate ClassRanges to obtain a CharSet C.
    4. Call CharacterRangeOrUnion(A, B) and let D be the resulting CharSet.
    5. Return the union of CharSets D and C.

    B.1.4.1.1 Runtime Semantics: CharacterRangeOrUnion Abstract Operation

    1. If Unicode is false, then
       a. If A does not contain exactly one character or B does not contain
          exactly one character, then
          i. Let C be the CharSet containing the single character - U+002D
             (HYPHEN-MINUS).
          ii. Return the union of CharSets A, B and C.
    2. Return CharacterRange(A, B).
---*/

var match;

match = /[--\d]+/.exec('.-0123456789-.');
assert.sameValue(match[0], '-0123456789-');

match = /[--\dz]+/.exec('.-0123456789z-.');
assert.sameValue(match[0], '-0123456789z-');
