Skip to content

Commit db176aa

Browse files
yichoiejjeong
authored andcommitted
Numbers are permitted as property name in object literal
JerryScript-DCO-1.0-Signed-off-by: Youngil Choi [email protected]
1 parent f2bae40 commit db176aa

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

jerry-core/vm/opcodes.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ opfunc_set_accessor (bool is_getter, /**< is getter accessor */
153153
ecma_value_t accessor) /**< accessor value */
154154
{
155155
ecma_object_t *object_p = ecma_get_object_from_value (object);
156-
ecma_string_t *accessor_name_p = ecma_get_string_from_value (accessor_name);
156+
JERRY_ASSERT (ecma_is_value_string (accessor_name) || ecma_is_value_number (accessor_name));
157+
ecma_string_t *accessor_name_p = ecma_get_string_from_value (ecma_op_to_string (accessor_name));
157158
ecma_property_t *property_p = ecma_find_named_property (object_p, accessor_name_p);
158159

159160
if (property_p != NULL && ECMA_PROPERTY_GET_TYPE (property_p) != ECMA_PROPERTY_TYPE_NAMEDACCESSOR)
@@ -198,6 +199,8 @@ opfunc_set_accessor (bool is_getter, /**< is getter accessor */
198199
property_p,
199200
setter_func_p);
200201
}
202+
203+
ecma_deref_ecma_string (accessor_name_p);
201204
} /* opfunc_set_accessor */
202205

203206
/**
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2016 Samsung Electronics Co., Ltd.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
var counter = 0;
16+
17+
({ get "0"() { counter += 1; } })[0];
18+
({ get 0() { counter += 2; } })[0];
19+
({ get 0.0() { counter += 3; } })[0];
20+
({ get 0.() { counter += 4; } })[0];
21+
({ get 1.() { counter += 5; } })[1];
22+
({ get 5.2322341234123() { counter += 6; } })[5.2322341234123];
23+
24+
assert (counter == 21);
25+
26+
({ set "0"(q) { counter -= 1; } })[0] = "dummy";
27+
({ set 0(q) { counter -= 2; } })[0] = "dummy";
28+
({ set 0.0(q) { counter -= 3; } })[0] = "dummy";
29+
({ set 0.(q) { counter -= 4; } })[0] = "dummy";
30+
({ set 1.(q) { counter -= 5; } })[1] = "dummy";
31+
({ set 5.2322341234123(q) { counter -= 6; } })[5.2322341234123] = "dummy";
32+
33+
assert (counter == 0);

0 commit comments

Comments
 (0)