Commit 7b372433 authored by mstarzinger's avatar mstarzinger Committed by Commit bot

[turbofan] Implement top-level lookup slot declaration.

This implements declaration of lookup slots for variables and functions
within optimized code. Such a declaration only appears with top-level
eval code, which we only recently started handling in TurboFan.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/1962723002
Cr-Commit-Position: refs/heads/master@{#36125}
parent a37ab71e
......@@ -1114,10 +1114,22 @@ void AstGraphBuilder::VisitVariableDeclaration(VariableDeclaration* decl) {
NewNode(op, current_context(), value);
}
break;
case VariableLocation::LOOKUP:
// TODO(mstarzinger): Implement this case.
SetStackOverflow();
case VariableLocation::LOOKUP: {
Node* name = jsgraph()->Constant(variable->name());
// For variables we must not push an initial value (such as 'undefined')
// because we may have a (legal) redeclaration and we must not destroy
// the current value.
Node* value =
hole_init ? jsgraph()->TheHoleConstant()
: jsgraph()->ZeroConstant(); // Indicates no initial value.
Node* attr =
jsgraph()->Constant(variable->DeclarationPropertyAttributes());
const Operator* op =
javascript()->CallRuntime(Runtime::kDeclareLookupSlot);
Node* store = NewNode(op, name, value, attr);
PrepareFrameState(store, decl->proxy()->id());
break;
}
}
}
......@@ -1149,10 +1161,18 @@ void AstGraphBuilder::VisitFunctionDeclaration(FunctionDeclaration* decl) {
NewNode(op, current_context(), value);
break;
}
case VariableLocation::LOOKUP:
// TODO(mstarzinger): Implement this case.
SetStackOverflow();
case VariableLocation::LOOKUP: {
VisitForValue(decl->fun());
Node* value = environment()->Pop();
Node* name = jsgraph()->Constant(variable->name());
Node* attr =
jsgraph()->Constant(variable->DeclarationPropertyAttributes());
const Operator* op =
javascript()->CallRuntime(Runtime::kDeclareLookupSlot);
Node* store = NewNode(op, name, value, attr);
PrepareFrameState(store, decl->proxy()->id());
break;
}
}
}
......
......@@ -812,6 +812,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
__ Push(r2, r0);
__ Push(Smi::FromInt(variable->DeclarationPropertyAttributes()));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -869,6 +870,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -810,6 +810,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
}
__ Push(Smi::FromInt(variable->DeclarationPropertyAttributes()));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -867,6 +868,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -758,6 +758,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
__ push(
Immediate(Smi::FromInt(variable->DeclarationPropertyAttributes())));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -811,6 +812,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -810,6 +810,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
__ Push(a2, a0);
__ Push(Smi::FromInt(variable->DeclarationPropertyAttributes()));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -867,6 +868,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -809,6 +809,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
__ Push(a2, a0);
__ Push(Smi::FromInt(variable->DeclarationPropertyAttributes()));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -866,6 +867,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -774,6 +774,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
__ Push(r5, r3);
__ Push(Smi::FromInt(variable->DeclarationPropertyAttributes()));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -827,6 +828,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -752,6 +752,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
__ Push(r4, r2);
__ Push(Smi::FromInt(variable->DeclarationPropertyAttributes()));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -803,6 +804,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -770,6 +770,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
}
__ Push(Smi::FromInt(variable->DeclarationPropertyAttributes()));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -824,6 +825,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -755,6 +755,7 @@ void FullCodeGenerator::VisitVariableDeclaration(
__ push(
Immediate(Smi::FromInt(variable->DeclarationPropertyAttributes())));
__ CallRuntime(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......@@ -803,6 +804,7 @@ void FullCodeGenerator::VisitFunctionDeclaration(
VisitForStackValue(declaration->fun());
PushOperand(Smi::FromInt(variable->DeclarationPropertyAttributes()));
CallRuntimeWithOperands(Runtime::kDeclareLookupSlot);
PrepareForBailoutForId(proxy->id(), NO_REGISTERS);
break;
}
}
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --verify-heap --expose-gc
// Flags: --ignition --verify-heap --expose-gc
// Tests that verify heap works for BytecodeArrays in the large object space.
......
......@@ -76,6 +76,7 @@
'unicode-test': [PASS, NO_VARIANTS],
'whitespaces': [PASS, NO_VARIANTS],
'compiler/osr-assert': [PASS, NO_VARIANTS],
'ignition/regress-599001-verifyheap': [PASS, NO_VARIANTS],
'es6/string-fromcodepoint': [PASS, NO_VARIANTS],
'regress/regress-2185-2': [PASS, NO_VARIANTS],
'regress/regress-2612': [PASS, NO_VARIANTS],
......
......@@ -59,6 +59,7 @@
# TODO(turbofan): Causes timeouts since top-level code is optimized.
'ecma_3/Statements/regress-324650': [PASS, NO_VARIANTS],
'ecma_3/Statements/regress-444979': [PASS, NO_VARIANTS],
'ecma_3/Statements/regress-74474-002': [PASS, NO_VARIANTS],
'ecma_3/Statements/regress-74474-003': [PASS, NO_VARIANTS],
'js1_5/Regress/regress-111557': [PASS, NO_VARIANTS],
......@@ -189,7 +190,7 @@
'ecma_3/RegExp/regress-209067': [PASS, ['mode == debug', FAIL]],
'js1_5/GC/regress-278725': [PASS, ['mode == debug', FAIL]],
# http://b/issue?id=1206983
'js1_5/Regress/regress-367561-03': [PASS, ['mode == debug', FAIL]],
'js1_5/Regress/regress-367561-03': [PASS, ['mode == debug', FAIL], NO_VARIANTS],
'ecma/Date/15.9.5.10-2': [PASS, FAIL, ['mode == debug', TIMEOUT, NO_VARIANTS]],
# These tests create two Date objects just after each other and
......@@ -241,7 +242,7 @@
'js1_5/Array/regress-99120-01': [PASS, FAIL, NO_VARIANTS],
'js1_5/Array/regress-99120-02': [PASS, FAIL],
'js1_5/Regress/regress-347306-01': [PASS, FAIL],
'js1_5/Regress/regress-416628': [PASS, FAIL, ['mode == debug', TIMEOUT, NO_VARIANTS]],
'js1_5/Regress/regress-416628': [PASS, FAIL, ['mode == debug', TIMEOUT], NO_VARIANTS],
# The following two tests assume that daylight savings time starts first
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment