Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: cherry-pick 014e1f857c33 from v8 (#31673)
- Loading branch information
Showing
2 changed files
with
60 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: =?UTF-8?q?Marja=20H=C3=B6ltt=C3=A4?= <marja@chromium.org> | ||
Date: Mon, 25 Oct 2021 12:17:15 +0200 | ||
Subject: Merged: [super ic] Fix receiver vs lookup start object confusion | ||
related to module exports | ||
MIME-Version: 1.0 | ||
Content-Type: text/plain; charset=UTF-8 | ||
Content-Transfer-Encoding: 8bit | ||
|
||
Revision: e4dba97006ca20337deafb85ac00524a94a62fe | ||
|
||
BUG=chromium:1260577 | ||
NOTRY=true | ||
NOPRESUBMIT=true | ||
NOTREECHECKS=true | ||
R=ishell@chromium.org | ||
|
||
Change-Id: Ia85235fecdb37a5da6a28f7a0092a754a8620552 | ||
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3240826 | ||
Reviewed-by: Igor Sheludko <ishell@chromium.org> | ||
Commit-Queue: Marja Hölttä <marja@chromium.org> | ||
Cr-Commit-Position: refs/branch-heads/9.4@{#48} | ||
Cr-Branched-From: 3b51863bc25492549a8bf96ff67ce481b1a3337b-refs/heads/9.4.146@{#1} | ||
Cr-Branched-From: 2890419fc8fb9bdb507fdd801d76fa7dd9f022b5-refs/heads/master@{#76233} | ||
|
||
diff --git a/src/ic/accessor-assembler.cc b/src/ic/accessor-assembler.cc | ||
index 35d1da5cd92900114a609f4553a738018269ee1e..e489d5a304385e4bafaa2ca4619edadc6108b0be 100644 | ||
--- a/src/ic/accessor-assembler.cc | ||
+++ b/src/ic/accessor-assembler.cc | ||
@@ -655,8 +655,8 @@ void AccessorAssembler::HandleLoadICSmiHandlerLoadNamedCase( | ||
Comment("module export"); | ||
TNode<UintPtrT> index = | ||
DecodeWord<LoadHandler::ExportsIndexBits>(handler_word); | ||
- TNode<Module> module = LoadObjectField<Module>( | ||
- CAST(p->receiver()), JSModuleNamespace::kModuleOffset); | ||
+ TNode<Module> module = | ||
+ LoadObjectField<Module>(CAST(holder), JSModuleNamespace::kModuleOffset); | ||
TNode<ObjectHashTable> exports = | ||
LoadObjectField<ObjectHashTable>(module, Module::kExportsOffset); | ||
TNode<Cell> cell = CAST(LoadFixedArrayElement(exports, index)); | ||
diff --git a/src/ic/ic.cc b/src/ic/ic.cc | ||
index 81e31d1c2d83d6a807745234ffdae513e0904cbe..94829bd199a0baa5730889746e3b65797bdae08a 100644 | ||
--- a/src/ic/ic.cc | ||
+++ b/src/ic/ic.cc | ||
@@ -860,7 +860,13 @@ Handle<Object> LoadIC::ComputeHandler(LookupIterator* lookup) { | ||
// We found the accessor, so the entry must exist. | ||
DCHECK(entry.is_found()); | ||
int index = ObjectHashTable::EntryToValueIndex(entry); | ||
- return LoadHandler::LoadModuleExport(isolate(), index); | ||
+ Handle<Smi> smi_handler = | ||
+ LoadHandler::LoadModuleExport(isolate(), index); | ||
+ if (holder_is_lookup_start_object) { | ||
+ return smi_handler; | ||
+ } | ||
+ return LoadHandler::LoadFromPrototype(isolate(), map, holder, | ||
+ smi_handler); | ||
} | ||
|
||
Handle<Object> accessors = lookup->GetAccessors(); |