Skip to content

Commit 9a6f442

Browse files
jaro-sevcikCommit Bot
authored andcommitted
[deoptimizer] Fix materialization of iterators.
Bug: chromium:787301 Change-Id: If32310f9f2f3f04daa5bdaa9779302f4a012d397 Reviewed-on: https://chromium-review.googlesource.com/806223 Commit-Queue: Jaroslav Sevcik <[email protected]> Reviewed-by: Benedikt Meurer <[email protected]> Cr-Commit-Position: refs/heads/master@{#49843}
1 parent 52ff3ae commit 9a6f442

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/deoptimizer.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3317,6 +3317,7 @@ Handle<Object> TranslatedState::MaterializeCapturedObjectAt(
33173317
case JS_SET_VALUE_ITERATOR_TYPE: {
33183318
Handle<JSSetIterator> object = Handle<JSSetIterator>::cast(
33193319
isolate_->factory()->NewJSObjectFromMap(map, NOT_TENURED));
3320+
slot->value_ = object;
33203321
Handle<Object> properties = materializer.FieldAt(value_index);
33213322
Handle<Object> elements = materializer.FieldAt(value_index);
33223323
Handle<Object> table = materializer.FieldAt(value_index);
@@ -3332,6 +3333,7 @@ Handle<Object> TranslatedState::MaterializeCapturedObjectAt(
33323333
case JS_MAP_VALUE_ITERATOR_TYPE: {
33333334
Handle<JSMapIterator> object = Handle<JSMapIterator>::cast(
33343335
isolate_->factory()->NewJSObjectFromMap(map, NOT_TENURED));
3336+
slot->value_ = object;
33353337
Handle<Object> properties = materializer.FieldAt(value_index);
33363338
Handle<Object> elements = materializer.FieldAt(value_index);
33373339
Handle<Object> table = materializer.FieldAt(value_index);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright 2017 the V8 project authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// Flags: --allow-natives-syntax
6+
7+
function opt(b) {
8+
let iterator = new Set().values();
9+
iterator.x = 0;
10+
11+
let arr = [iterator, iterator];
12+
if (b)
13+
return arr.slice();
14+
}
15+
16+
opt(false);
17+
opt(false);
18+
%OptimizeFunctionOnNextCall(opt);
19+
20+
let res = opt(true);
21+
let a = res[0];
22+
let b = res[1];
23+
24+
assertTrue(a === b);
25+
a.x = 7;
26+
assertEquals(7, b.x);

0 commit comments

Comments
 (0)