From aa1777b1a04d31afae52c8e306f00b7690fd242b Mon Sep 17 00:00:00 2001 From: Rafal Walczyna Date: Fri, 8 May 2020 12:25:45 +0200 Subject: [PATCH] Update ES6 Regexp accessors descriptors (#3726) In ES6 accessors of built in object are by default configurable. Also lastIndex property of RegExp object is created when only used. JerryScript-DCO-1.0-Signed-off-by: Rafal Walczyna r.walczyna@samsung.com --- .../ecma-builtin-regexp-prototype.inc.h | 16 ++++++------- .../es2015/regexp-accessors-descriptors.js | 23 +++++++++++++++++++ tests/jerry/es2015/regexp-lastindex.js | 2 ++ 3 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 tests/jerry/es2015/regexp-accessors-descriptors.js diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h index c7ba4ea1f..ead2be393 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h @@ -29,31 +29,31 @@ OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, #if ENABLED (JERRY_ES2015) ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_FLAGS, ecma_builtin_regexp_prototype_get_flags, - ECMA_PROPERTY_FIXED) + ECMA_PROPERTY_FLAG_CONFIGURABLE) ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_SOURCE, ecma_builtin_regexp_prototype_get_source, - ECMA_PROPERTY_FIXED) + ECMA_PROPERTY_FLAG_CONFIGURABLE) ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_GLOBAL, ecma_builtin_regexp_prototype_get_global, - ECMA_PROPERTY_FIXED) + ECMA_PROPERTY_FLAG_CONFIGURABLE) ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_IGNORECASE_UL, ecma_builtin_regexp_prototype_get_ignorecase, - ECMA_PROPERTY_FIXED) + ECMA_PROPERTY_FLAG_CONFIGURABLE) ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_MULTILINE, ecma_builtin_regexp_prototype_get_multiline, - ECMA_PROPERTY_FIXED) + ECMA_PROPERTY_FLAG_CONFIGURABLE) ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_UNICODE, ecma_builtin_regexp_prototype_get_unicode, - ECMA_PROPERTY_FIXED) + ECMA_PROPERTY_FLAG_CONFIGURABLE) ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_STICKY, ecma_builtin_regexp_prototype_get_sticky, - ECMA_PROPERTY_FIXED) + ECMA_PROPERTY_FLAG_CONFIGURABLE) ROUTINE (LIT_GLOBAL_SYMBOL_REPLACE, ecma_builtin_regexp_prototype_symbol_replace, 2, 2) ROUTINE (LIT_GLOBAL_SYMBOL_SEARCH, ecma_builtin_regexp_prototype_symbol_search, 1, 1) @@ -79,12 +79,12 @@ SIMPLE_VALUE (LIT_MAGIC_STRING_IGNORECASE_UL, SIMPLE_VALUE (LIT_MAGIC_STRING_MULTILINE, ECMA_VALUE_FALSE, ECMA_PROPERTY_FIXED) -#endif /* ENABLED (JERRY_ES2015) */ /* ECMA-262 v5, 15.10.7.5 */ NUMBER_VALUE (LIT_MAGIC_STRING_LASTINDEX_UL, 0, ECMA_PROPERTY_FLAG_WRITABLE) +#endif /* ENABLED (JERRY_ES2015) */ #if ENABLED (JERRY_BUILTIN_ANNEXB) ROUTINE (LIT_MAGIC_STRING_COMPILE, ecma_builtin_regexp_prototype_compile, 2, 1) diff --git a/tests/jerry/es2015/regexp-accessors-descriptors.js b/tests/jerry/es2015/regexp-accessors-descriptors.js new file mode 100644 index 000000000..46ee29686 --- /dev/null +++ b/tests/jerry/es2015/regexp-accessors-descriptors.js @@ -0,0 +1,23 @@ +// Copyright JS Foundation and other contributors, http://js.foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var accessors = [ 'flags', 'global', 'ignoreCase', 'multiline', 'source', 'sticky', 'unicode' ] + +accessors.forEach(function(attr) { + var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, attr); + assert(typeof desc.get === 'function') + assert(desc.set === undefined) + assert(desc.enumerable === false) + assert(desc.configurable === true) +}); diff --git a/tests/jerry/es2015/regexp-lastindex.js b/tests/jerry/es2015/regexp-lastindex.js index 94af81d00..0e7521f85 100644 --- a/tests/jerry/es2015/regexp-lastindex.js +++ b/tests/jerry/es2015/regexp-lastindex.js @@ -18,3 +18,5 @@ result = t.exec("abc abc"); assert(result[0] === "abc"); assert(result.index === 0); assert(t.lastIndex === 3); + +assert(RegExp.prototype.lastIndex === undefined)