Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deps: backport 819b40a from V8 upstream (v4.x) #3938

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion deps/v8/src/arm/full-codegen-arm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ void FullCodeGenerator::Generate() {
// redeclaration.
if (scope()->HasIllegalRedeclaration()) {
Comment cmnt(masm_, "[ Declarations");
scope()->VisitIllegalRedeclaration(this);
VisitForEffect(scope()->GetIllegalRedeclaration());

} else {
PrepareForBailoutForId(BailoutId::FunctionEntry(), NO_REGISTERS);
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/arm64/full-codegen-arm64.cc
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ void FullCodeGenerator::Generate() {
// redeclaration.
if (scope()->HasIllegalRedeclaration()) {
Comment cmnt(masm_, "[ Declarations");
scope()->VisitIllegalRedeclaration(this);
VisitForEffect(scope()->GetIllegalRedeclaration());

} else {
PrepareForBailoutForId(BailoutId::FunctionEntry(), NO_REGISTERS);
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/ast-numbering.cc
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ bool AstNumberingVisitor::Renumber(FunctionLiteral* node) {
Scope* scope = node->scope();

if (scope->HasIllegalRedeclaration()) {
scope->VisitIllegalRedeclaration(this);
Visit(scope->GetIllegalRedeclaration());
DisableOptimization(kFunctionWithIllegalRedeclaration);
return Finish(node);
}
Expand Down
3 changes: 1 addition & 2 deletions deps/v8/src/compiler/ast-graph-builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -579,8 +579,7 @@ void AstGraphBuilder::CreateGraphBody(bool stack_check) {

// Visit illegal re-declaration and bail out if it exists.
if (scope->HasIllegalRedeclaration()) {
AstEffectContext for_effect(this);
scope->VisitIllegalRedeclaration(this);
VisitForEffect(scope->GetIllegalRedeclaration());
return;
}

Expand Down
1 change: 1 addition & 0 deletions deps/v8/src/compiler/linkage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ int Linkage::FrameStateInputCount(Runtime::FunctionId function) {
case Runtime::kInlineGetCallerJSFunction:
case Runtime::kInlineGetPrototype:
case Runtime::kInlineRegExpExec:
case Runtime::kInlineSubString:
return 1;
case Runtime::kInlineDeoptimizeNow:
case Runtime::kInlineThrowNotDateError:
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/ia32/full-codegen-ia32.cc
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ void FullCodeGenerator::Generate() {
// redeclaration.
if (scope()->HasIllegalRedeclaration()) {
Comment cmnt(masm_, "[ Declarations");
scope()->VisitIllegalRedeclaration(this);
VisitForEffect(scope()->GetIllegalRedeclaration());

} else {
PrepareForBailoutForId(BailoutId::FunctionEntry(), NO_REGISTERS);
Expand Down
9 changes: 7 additions & 2 deletions deps/v8/src/isolate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1279,9 +1279,14 @@ void Isolate::ComputeLocation(MessageLocation* target) {
Object* script = fun->shared()->script();
if (script->IsScript() &&
!(Script::cast(script)->source()->IsUndefined())) {
int pos = frame->LookupCode()->SourcePosition(frame->pc());
// Compute the location from the function and the reloc info.
Handle<Script> casted_script(Script::cast(script));
// Compute the location from the function and the relocation info of the
// baseline code. For optimized code this will use the deoptimization
// information to get canonical location information.
List<FrameSummary> frames(FLAG_max_inlining_levels + 1);
it.frame()->Summarize(&frames);
FrameSummary& summary = frames.last();
int pos = summary.code()->SourcePosition(summary.pc());
*target = MessageLocation(casted_script, pos, pos + 1, handle(fun));
}
}
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/mips/full-codegen-mips.cc
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ void FullCodeGenerator::Generate() {
// redeclaration.
if (scope()->HasIllegalRedeclaration()) {
Comment cmnt(masm_, "[ Declarations");
scope()->VisitIllegalRedeclaration(this);
VisitForEffect(scope()->GetIllegalRedeclaration());

} else {
PrepareForBailoutForId(BailoutId::FunctionEntry(), NO_REGISTERS);
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/mips64/full-codegen-mips64.cc
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ void FullCodeGenerator::Generate() {
// redeclaration.
if (scope()->HasIllegalRedeclaration()) {
Comment cmnt(masm_, "[ Declarations");
scope()->VisitIllegalRedeclaration(this);
VisitForEffect(scope()->GetIllegalRedeclaration());

} else {
PrepareForBailoutForId(BailoutId::FunctionEntry(), NO_REGISTERS);
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/ppc/full-codegen-ppc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ void FullCodeGenerator::Generate() {
// redeclaration.
if (scope()->HasIllegalRedeclaration()) {
Comment cmnt(masm_, "[ Declarations");
scope()->VisitIllegalRedeclaration(this);
VisitForEffect(scope()->GetIllegalRedeclaration());

} else {
PrepareForBailoutForId(BailoutId::FunctionEntry(), NO_REGISTERS);
Expand Down
4 changes: 2 additions & 2 deletions deps/v8/src/scopes.cc
Original file line number Diff line number Diff line change
Expand Up @@ -565,9 +565,9 @@ void Scope::SetIllegalRedeclaration(Expression* expression) {
}


void Scope::VisitIllegalRedeclaration(AstVisitor* visitor) {
Expression* Scope::GetIllegalRedeclaration() {
DCHECK(HasIllegalRedeclaration());
illegal_redecl_->Accept(visitor);
return illegal_redecl_;
}


Expand Down
4 changes: 2 additions & 2 deletions deps/v8/src/scopes.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,9 +191,9 @@ class Scope: public ZoneObject {
// the additional requests will be silently ignored.
void SetIllegalRedeclaration(Expression* expression);

// Visit the illegal redeclaration expression. Do not call if the
// Retrieve the illegal redeclaration expression. Do not call if the
// scope doesn't have an illegal redeclaration node.
void VisitIllegalRedeclaration(AstVisitor* visitor);
Expression* GetIllegalRedeclaration();

// Check if the scope has (at least) one illegal redeclaration.
bool HasIllegalRedeclaration() const { return illegal_redecl_ != NULL; }
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/x64/full-codegen-x64.cc
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ void FullCodeGenerator::Generate() {
// redeclaration.
if (scope()->HasIllegalRedeclaration()) {
Comment cmnt(masm_, "[ Declarations");
scope()->VisitIllegalRedeclaration(this);
VisitForEffect(scope()->GetIllegalRedeclaration());

} else {
PrepareForBailoutForId(BailoutId::FunctionEntry(), NO_REGISTERS);
Expand Down
2 changes: 1 addition & 1 deletion deps/v8/src/x87/full-codegen-x87.cc
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ void FullCodeGenerator::Generate() {
// redeclaration.
if (scope()->HasIllegalRedeclaration()) {
Comment cmnt(masm_, "[ Declarations");
scope()->VisitIllegalRedeclaration(this);
VisitForEffect(scope()->GetIllegalRedeclaration());

} else {
PrepareForBailoutForId(BailoutId::FunctionEntry(), NO_REGISTERS);
Expand Down
11 changes: 11 additions & 0 deletions deps/v8/test/message/regress/regress-4266.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(function() {
try {
[].foo();
} catch (e) {
throw e;
}
})();
10 changes: 10 additions & 0 deletions deps/v8/test/message/regress/regress-4266.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Copyright 2015 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

*%(basename)s:9: TypeError: [].foo is not a function
throw e;
^
TypeError: [].foo is not a function
at *%(basename)s:7:8
at *%(basename)s:11:3
17 changes: 17 additions & 0 deletions deps/v8/test/mjsunit/regress/regress-4266.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --turbo-filter=test --allow-natives-syntax

function test() {
try {
[].foo();
} catch (e) {
return e.message;
}
}

assertEquals("[].foo is not a function", test());
%OptimizeFunctionOnNextCall(test);
assertEquals("[].foo is not a function", test());