Skip to content

Commit 5d385b1

Browse files
LaszloLangoszledan
authored andcommitted
Fix properties of RegExp prototype
JerryScript-DCO-1.0-Signed-off-by: László Langó [email protected]
1 parent 144c3ba commit 5d385b1

File tree

4 files changed

+72
-42
lines changed

4 files changed

+72
-42
lines changed

jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17+
#include "ecma-alloc.h"
1718
#include "ecma-builtins.h"
1819
#include "ecma-conversion.h"
1920
#include "ecma-exceptions.h"

jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,18 @@
2626
# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable)
2727
#endif /* !OBJECT_VALUE */
2828

29+
#ifndef NUMBER_VALUE
30+
# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable)
31+
#endif /* !NUMBER_VALUE */
32+
33+
#ifndef SIMPLE_VALUE
34+
# define SIMPLE_VALUE(name, simple_value, prop_writable, prop_enumerable, prop_configurable)
35+
#endif /* !SIMPLE_VALUE */
36+
37+
#ifndef STRING_VALUE
38+
# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable)
39+
#endif /* !STRING_VALUE */
40+
2941
#ifndef ROUTINE
3042
# define ROUTINE(name, c_function_name, args_number, length_prop_value)
3143
#endif /* !ROUTINE */
@@ -40,6 +52,40 @@ OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR,
4052
ECMA_PROPERTY_NOT_ENUMERABLE,
4153
ECMA_PROPERTY_CONFIGURABLE)
4254

55+
// ECMA-262 v5, 15.10.7.1
56+
STRING_VALUE (LIT_MAGIC_STRING_SOURCE,
57+
LIT_MAGIC_STRING_EMPTY_NON_CAPTURE_GROUP,
58+
ECMA_PROPERTY_NOT_WRITABLE,
59+
ECMA_PROPERTY_NOT_ENUMERABLE,
60+
ECMA_PROPERTY_NOT_CONFIGURABLE)
61+
62+
// ECMA-262 v5, 15.10.7.2
63+
SIMPLE_VALUE (LIT_MAGIC_STRING_GLOBAL,
64+
ECMA_SIMPLE_VALUE_FALSE,
65+
ECMA_PROPERTY_NOT_WRITABLE,
66+
ECMA_PROPERTY_NOT_ENUMERABLE,
67+
ECMA_PROPERTY_NOT_CONFIGURABLE)
68+
69+
// ECMA-262 v5, 15.10.7.3
70+
SIMPLE_VALUE (LIT_MAGIC_STRING_IGNORECASE_UL,
71+
ECMA_SIMPLE_VALUE_FALSE,
72+
ECMA_PROPERTY_NOT_WRITABLE,
73+
ECMA_PROPERTY_NOT_ENUMERABLE,
74+
ECMA_PROPERTY_NOT_CONFIGURABLE)
75+
// ECMA-262 v5, 15.10.7.4
76+
SIMPLE_VALUE (LIT_MAGIC_STRING_MULTILINE,
77+
ECMA_SIMPLE_VALUE_FALSE,
78+
ECMA_PROPERTY_NOT_WRITABLE,
79+
ECMA_PROPERTY_NOT_ENUMERABLE,
80+
ECMA_PROPERTY_NOT_CONFIGURABLE)
81+
82+
// ECMA-262 v5, 15.10.7.5
83+
NUMBER_VALUE (LIT_MAGIC_STRING_LASTINDEX_UL,
84+
0,
85+
ECMA_PROPERTY_WRITABLE,
86+
ECMA_PROPERTY_NOT_ENUMERABLE,
87+
ECMA_PROPERTY_NOT_CONFIGURABLE)
88+
4389
ROUTINE (LIT_MAGIC_STRING_EXEC, ecma_builtin_regexp_prototype_exec, 1, 1)
4490
ROUTINE (LIT_MAGIC_STRING_TEST, ecma_builtin_regexp_prototype_test, 1, 1)
4591
ROUTINE (LIT_MAGIC_STRING_TO_STRING_UL, ecma_builtin_regexp_prototype_to_string, 0, 0)

jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,6 @@
3030
# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable)
3131
#endif /* !NUMBER_VALUE */
3232

33-
#ifndef SIMPLE_VALUE
34-
# define SIMPLE_VALUE(name, simple_value, prop_writable, prop_enumerable, prop_configurable)
35-
#endif /* !SIMPLE_VALUE */
36-
37-
#ifndef STRING_VALUE
38-
# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable)
39-
#endif /* !STRING_VALUE */
40-
4133
/* Object identifier */
4234
OBJECT_ID (ECMA_BUILTIN_ID_REGEXP)
4335

@@ -48,40 +40,6 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
4840
ECMA_PROPERTY_NOT_ENUMERABLE,
4941
ECMA_PROPERTY_NOT_CONFIGURABLE)
5042

51-
// ECMA-262 v5, 15.10.7.1
52-
STRING_VALUE (LIT_MAGIC_STRING_SOURCE,
53-
LIT_MAGIC_STRING_REGEXP_SOURCE_UL,
54-
ECMA_PROPERTY_NOT_WRITABLE,
55-
ECMA_PROPERTY_NOT_ENUMERABLE,
56-
ECMA_PROPERTY_NOT_CONFIGURABLE)
57-
58-
// ECMA-262 v5, 15.10.7.2
59-
SIMPLE_VALUE (LIT_MAGIC_STRING_GLOBAL,
60-
ECMA_SIMPLE_VALUE_FALSE,
61-
ECMA_PROPERTY_NOT_WRITABLE,
62-
ECMA_PROPERTY_NOT_ENUMERABLE,
63-
ECMA_PROPERTY_NOT_CONFIGURABLE)
64-
65-
// ECMA-262 v5, 15.10.7.3
66-
SIMPLE_VALUE (LIT_MAGIC_STRING_IGNORECASE_UL,
67-
ECMA_SIMPLE_VALUE_FALSE,
68-
ECMA_PROPERTY_NOT_WRITABLE,
69-
ECMA_PROPERTY_NOT_ENUMERABLE,
70-
ECMA_PROPERTY_NOT_CONFIGURABLE)
71-
// ECMA-262 v5, 15.10.7.4
72-
SIMPLE_VALUE (LIT_MAGIC_STRING_MULTILINE,
73-
ECMA_SIMPLE_VALUE_FALSE,
74-
ECMA_PROPERTY_NOT_WRITABLE,
75-
ECMA_PROPERTY_NOT_ENUMERABLE,
76-
ECMA_PROPERTY_NOT_CONFIGURABLE)
77-
78-
// ECMA-262 v5, 15.10.7.5
79-
NUMBER_VALUE (LIT_MAGIC_STRING_LASTINDEX_UL,
80-
0,
81-
ECMA_PROPERTY_NOT_WRITABLE,
82-
ECMA_PROPERTY_NOT_ENUMERABLE,
83-
ECMA_PROPERTY_NOT_CONFIGURABLE)
84-
8543
// ECMA-262 v5, 15.10.5
8644
NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
8745
2,

tests/jerry/regexp-construct.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,3 +136,28 @@ assert (r.source == "(?:)");
136136
assert (r.global == false);
137137
assert (r.ignoreCase == false);
138138
assert (r.multiline == false);
139+
140+
/* RegExp properties */
141+
assert (RegExp.length === 2);
142+
assert (RegExp.prototype.source === "(?:)");
143+
assert (RegExp.prototype.global === false);
144+
assert (RegExp.prototype.ignoreCase === false);
145+
assert (RegExp.prototype.multiline === false);
146+
147+
RegExp.prototype.source = "a";
148+
RegExp.prototype.global = true;
149+
RegExp.prototype.ignoreCase = true;
150+
RegExp.prototype.multiline = true;
151+
assert (RegExp.prototype.source === "(?:)");
152+
assert (RegExp.prototype.global === false);
153+
assert (RegExp.prototype.ignoreCase === false);
154+
assert (RegExp.prototype.multiline === false);
155+
156+
delete RegExp.prototype.source;
157+
delete RegExp.prototype.global;
158+
delete RegExp.prototype.ignoreCase;
159+
delete RegExp.prototype.multiline;
160+
assert (RegExp.prototype.source === "(?:)");
161+
assert (RegExp.prototype.global === false);
162+
assert (RegExp.prototype.ignoreCase === false);
163+
assert (RegExp.prototype.multiline === false);

0 commit comments

Comments
 (0)