Update RegExp.prototype accessors for ES11 (#4103)

JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai daniel.batyai@h-lab.eu
This commit is contained in:
Dániel Bátyai
2020-08-06 14:24:48 +02:00
committed by GitHub
parent 531f724926
commit 3d44b26aeb
6 changed files with 42 additions and 72 deletions
@@ -48,15 +48,6 @@ enum
/** These routines must be in this order */
ECMA_REGEXP_PROTOTYPE_ROUTINE_START = ECMA_BUILTIN_ID__COUNT - 1,
ECMA_REGEXP_PROTOTYPE_ROUTINE_EXEC,
#if ENABLED (JERRY_ESNEXT)
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_SOURCE,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_GLOBAL,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_IGNORE_CASE,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_MULTILINE,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_STICKY,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_UNICODE,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_DOT_ALL,
#endif /* ENABLED (JERRY_ESNEXT) */
#if ENABLED (JERRY_BUILTIN_ANNEXB)
ECMA_REGEXP_PROTOTYPE_ROUTINE_COMPILE,
#endif /* ENABLED (JERRY_BUILTIN_ANNEXB) */
@@ -64,8 +55,16 @@ enum
ECMA_REGEXP_PROTOTYPE_ROUTINE_TEST,
ECMA_REGEXP_PROTOTYPE_ROUTINE_TO_STRING,
#if ENABLED (JERRY_ESNEXT)
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_SOURCE,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_FLAGS,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_GLOBAL,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_IGNORE_CASE,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_MULTILINE,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_STICKY,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_UNICODE,
ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_DOT_ALL,
ECMA_REGEXP_PROTOTYPE_ROUTINE_SYMBOL_SEARCH,
ECMA_REGEXP_PROTOTYPE_ROUTINE_SYMBOL_MATCH,
ECMA_REGEXP_PROTOTYPE_ROUTINE_SYMBOL_REPLACE,
@@ -603,8 +602,17 @@ ecma_builtin_regexp_prototype_dispatch_routine (uint16_t builtin_routine_id, /**
}
case ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_SOURCE:
{
ecma_extended_object_t *re_obj_p = (ecma_extended_object_t *) obj_p;
if (!ecma_object_class_is (obj_p, LIT_MAGIC_STRING_REGEXP_UL))
{
if (ecma_builtin_is (obj_p, ECMA_BUILTIN_ID_REGEXP_PROTOTYPE))
{
return ecma_make_magic_string_value (LIT_MAGIC_STRING_EMPTY_NON_CAPTURE_GROUP);
}
return ecma_raise_type_error (ECMA_ERR_MSG ("'this' is not a RegExp object"));
}
ecma_extended_object_t *re_obj_p = (ecma_extended_object_t *) obj_p;
return ecma_builtin_regexp_prototype_get_source (re_obj_p);
}
case ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_GLOBAL:
@@ -614,8 +622,17 @@ ecma_builtin_regexp_prototype_dispatch_routine (uint16_t builtin_routine_id, /**
case ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_UNICODE:
case ECMA_REGEXP_PROTOTYPE_ROUTINE_GET_DOT_ALL:
{
ecma_extended_object_t *re_obj_p = (ecma_extended_object_t *) obj_p;
if (!ecma_object_class_is (obj_p, LIT_MAGIC_STRING_REGEXP_UL))
{
if (ecma_builtin_is (obj_p, ECMA_BUILTIN_ID_REGEXP_PROTOTYPE))
{
return ECMA_VALUE_UNDEFINED;
}
return ecma_raise_type_error (ECMA_ERR_MSG ("'this' is not a RegExp object"));
}
ecma_extended_object_t *re_obj_p = (ecma_extended_object_t *) obj_p;
return ecma_builtin_regexp_prototype_flags_helper (re_obj_p, builtin_routine_id);
}
#endif /* ENABLED (JERRY_ESNEXT) */
+8 -41
View File
@@ -50,44 +50,11 @@ try {
assert (e instanceof TypeError);
}
try {
RegExp.prototype.source;
assert (false);
} catch (e) {
assert (e instanceof TypeError);
}
try {
RegExp.prototype.global;
assert (false);
} catch (e) {
assert (e instanceof TypeError);
}
try {
RegExp.prototype.ignoreCase;
assert (false);
} catch (e) {
assert (e instanceof TypeError);
}
try {
RegExp.prototype.multiline;
assert (false);
} catch (e) {
assert (e instanceof TypeError);
}
try {
RegExp.prototype.sticky;
assert (false);
} catch (e) {
assert (e instanceof TypeError);
}
try {
RegExp.prototype.unicode;
assert (false);
} catch (e) {
assert (e instanceof TypeError);
}
assert (RegExp.prototype.source === '(?:)');
assert (RegExp.prototype.global === undefined);
assert (RegExp.prototype.ignoreCase === undefined);
assert (RegExp.prototype.multiline === undefined);
assert (RegExp.prototype.sticky === undefined);
assert (RegExp.prototype.unicode === undefined);
assert (RegExp.prototype.dotAll === undefined);
assert (RegExp.prototype.flags === '');
+1 -6
View File
@@ -61,12 +61,7 @@ var r = /abc/yg;
m = r.exec ("strabcstr");
assert (m === null);
try {
RegExp.prototype.flags;
assert (false);
} catch (e) {
assert (e instanceof TypeError);
}
assert (RegExp.prototype.flags === "");
var flagsProp = Object.getOwnPropertyDescriptor (RegExp.prototype, "flags");
assert(flagsProp.get.call({}) === '');
@@ -39,12 +39,7 @@ assert(new RegExp('/\n/').source.length === 6);
assert(new RegExp(/\/\//).source === '\\/\\/');
assert(new RegExp(/\?\//g).source === '\\?\\/');
try {
RegExp.prototype.source;
assert (false);
} catch (e) {
assert (e instanceof TypeError);
}
assert (RegExp.prototype.source === '(?:)')
var sourceProp = Object.getOwnPropertyDescriptor (RegExp.prototype, "source");
try {
+4
View File
@@ -353,4 +353,8 @@
<test id="built-ins/parseInt/S15.1.2.2_A2_T10.js"><reason>Unicode 13: 0x180E is no longer whitespace character</reason></test>
<test id="built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore-err.js"><reason>lastIndex handling in Symbol.search has changed since ES6</reason></test>
<test id="built-ins/RegExp/prototype/Symbol.search/set-lastindex-restore.js"><reason>lastIndex handling in Symbol.search has changed since ES6</reason></test>
<test id="built-ins/RegExp/prototype/global/15.10.7.2-1.js"><reason>RegExp accessors should no longer throw when called on the RegExp prototype</reason></test>
<test id="built-ins/RegExp/prototype/ignoreCase/15.10.7.3-1.js"><reason>RegExp accessors should no longer throw when called on the RegExp prototype</reason></test>
<test id="built-ins/RegExp/prototype/multiline/15.10.7.4-1.js"><reason>RegExp accessors should no longer throw when called on the RegExp prototype</reason></test>
<test id="built-ins/RegExp/prototype/source/15.10.7.1-1.js"><reason>RegExp accessors should no longer throw when called on the RegExp prototype</reason></test>
</excludeList>
-8
View File
@@ -1876,20 +1876,12 @@
<test id="built-ins/RegExp/prototype/Symbol.replace/result-get-groups-prop-err.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.split/splitter-proto-from-ctor-realm.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/dotAll/cross-realm.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/dotAll/this-val-regexp-prototype.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/flags/this-val-regexp-prototype.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/global/cross-realm.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/global/this-val-regexp-prototype.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/ignoreCase/cross-realm.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/ignoreCase/this-val-regexp-prototype.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/multiline/cross-realm.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/multiline/this-val-regexp-prototype.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/source/cross-realm.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/source/this-val-regexp-prototype.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/sticky/cross-realm.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/sticky/this-val-regexp-prototype.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/unicode/cross-realm.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/unicode/this-val-regexp-prototype.js"><reason></reason></test>
<test id="built-ins/RegExpStringIteratorPrototype/Symbol.toStringTag.js"><reason></reason></test>
<test id="built-ins/RegExpStringIteratorPrototype/ancestry.js"><reason></reason></test>
<test id="built-ins/RegExpStringIteratorPrototype/next/custom-regexpexec-call-throws.js"><reason></reason></test>