This test checks our implementation of the special RegExp member variables.

Properties of RegExp at startup:
$1: {} (read-only)
$2: {} (read-only)
$3: {} (read-only)
$4: {} (read-only)
$5: {} (read-only)
$6: {} (read-only)
$7: {} (read-only)
$8: {} (read-only)
$9: {} (read-only)
input: {} (read-write)
lastMatch: {} (read-only)
lastParen: {} (read-only)
leftContext: {} (read-only)
multiline: {false} (read-write)
rightContext: {} (read-only)

Properties of RegExp after /(1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/.exec(<1234567890>):
$1: {1}
$2: {2}
$3: {3}
$4: {4}
$5: {5}
$6: {6}
$7: {7}
$8: {8}
$9: {9}
input: {<1234567890>}
lastMatch: {1234567890}
lastParen: {0}
leftContext: {<}
multiline: {false}
rightContext: {>}

RegExp.$0 does not exist
RegExp.$10 does not exist
RegExp uses RegExp.input
RegExp.multiline coerces values to booleans
RegExp.input coerces values to strings

Properties of RegExp after /(1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/.exec(XXX):
$1: {}
$2: {}
$3: {}
$4: {}
$5: {}
$6: {}
$7: {}
$8: {}
$9: {}
input: {0}
lastMatch: {}
lastParen: {}
leftContext: {0}
multiline: {true}
rightContext: {}

---------- [Cleared RegExp values] ----------
Properties of RegExp after <1234567890>.search(/(1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/):
$1: {1}
$2: {2}
$3: {3}
$4: {4}
$5: {5}
$6: {6}
$7: {7}
$8: {8}
$9: {9}
input: {<1234567890>}
lastMatch: {1234567890}
lastParen: {0}
leftContext: {<}
multiline: {true}
rightContext: {>}

---------- [Cleared RegExp values] ----------
Properties of RegExp after <1234567890>.replace(/(1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/):
$1: {1}
$2: {2}
$3: {3}
$4: {4}
$5: {5}
$6: {6}
$7: {7}
$8: {8}
$9: {9}
input: {<1234567890>}
lastMatch: {1234567890}
lastParen: {0}
leftContext: {<}
multiline: {true}
rightContext: {>}

