| Index: src/compiler/ast-graph-builder.cc
|
| diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc
|
| index 31cd3fd2d68240571428a7eea72abff45ccfb54a..93a33f5a711b4c662e2cb9f3e66dc43e85fc7dc2 100644
|
| --- a/src/compiler/ast-graph-builder.cc
|
| +++ b/src/compiler/ast-graph-builder.cc
|
| @@ -638,8 +638,8 @@ void AstGraphBuilder::ClearNonLiveSlotsInFrameStates() {
|
| // Gets the bailout id just before reading a variable proxy, but only for
|
| // unallocated variables.
|
| static BailoutId BeforeId(VariableProxy* proxy) {
|
| - return proxy->var()->location() == Variable::UNALLOCATED ? proxy->BeforeId()
|
| - : BailoutId::None();
|
| + return proxy->var()->IsUnallocatedOrGlobalSlot() ? proxy->BeforeId()
|
| + : BailoutId::None();
|
| }
|
|
|
|
|
| @@ -1057,7 +1057,8 @@ void AstGraphBuilder::VisitVariableDeclaration(VariableDeclaration* decl) {
|
| VariableMode mode = decl->mode();
|
| bool hole_init = mode == CONST || mode == CONST_LEGACY || mode == LET;
|
| switch (variable->location()) {
|
| - case Variable::UNALLOCATED: {
|
| + case VariableLocation::GLOBAL:
|
| + case VariableLocation::UNALLOCATED: {
|
| Handle<Oddball> value = variable->binding_needs_init()
|
| ? isolate()->factory()->the_hole_value()
|
| : isolate()->factory()->undefined_value();
|
| @@ -1065,21 +1066,21 @@ void AstGraphBuilder::VisitVariableDeclaration(VariableDeclaration* decl) {
|
| globals()->push_back(value);
|
| break;
|
| }
|
| - case Variable::PARAMETER:
|
| - case Variable::LOCAL:
|
| + case VariableLocation::PARAMETER:
|
| + case VariableLocation::LOCAL:
|
| if (hole_init) {
|
| Node* value = jsgraph()->TheHoleConstant();
|
| environment()->Bind(variable, value);
|
| }
|
| break;
|
| - case Variable::CONTEXT:
|
| + case VariableLocation::CONTEXT:
|
| if (hole_init) {
|
| Node* value = jsgraph()->TheHoleConstant();
|
| const Operator* op = javascript()->StoreContext(0, variable->index());
|
| NewNode(op, current_context(), value);
|
| }
|
| break;
|
| - case Variable::LOOKUP:
|
| + case VariableLocation::LOOKUP:
|
| UNIMPLEMENTED();
|
| }
|
| }
|
| @@ -1088,7 +1089,8 @@ void AstGraphBuilder::VisitVariableDeclaration(VariableDeclaration* decl) {
|
| void AstGraphBuilder::VisitFunctionDeclaration(FunctionDeclaration* decl) {
|
| Variable* variable = decl->proxy()->var();
|
| switch (variable->location()) {
|
| - case Variable::UNALLOCATED: {
|
| + case VariableLocation::GLOBAL:
|
| + case VariableLocation::UNALLOCATED: {
|
| Handle<SharedFunctionInfo> function = Compiler::GetSharedFunctionInfo(
|
| decl->fun(), info()->script(), info());
|
| // Check for stack-overflow exception.
|
| @@ -1097,21 +1099,21 @@ void AstGraphBuilder::VisitFunctionDeclaration(FunctionDeclaration* decl) {
|
| globals()->push_back(function);
|
| break;
|
| }
|
| - case Variable::PARAMETER:
|
| - case Variable::LOCAL: {
|
| + case VariableLocation::PARAMETER:
|
| + case VariableLocation::LOCAL: {
|
| VisitForValue(decl->fun());
|
| Node* value = environment()->Pop();
|
| environment()->Bind(variable, value);
|
| break;
|
| }
|
| - case Variable::CONTEXT: {
|
| + case VariableLocation::CONTEXT: {
|
| VisitForValue(decl->fun());
|
| Node* value = environment()->Pop();
|
| const Operator* op = javascript()->StoreContext(0, variable->index());
|
| NewNode(op, current_context(), value);
|
| break;
|
| }
|
| - case Variable::LOOKUP:
|
| + case VariableLocation::LOOKUP:
|
| UNIMPLEMENTED();
|
| }
|
| }
|
| @@ -2084,9 +2086,9 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) {
|
| switch (assign_type) {
|
| case VARIABLE: {
|
| Variable* variable = expr->target()->AsVariableProxy()->var();
|
| - if (variable->location() == Variable::PARAMETER ||
|
| - variable->location() == Variable::LOCAL ||
|
| - variable->location() == Variable::CONTEXT) {
|
| + if (variable->location() == VariableLocation::PARAMETER ||
|
| + variable->location() == VariableLocation::LOCAL ||
|
| + variable->location() == VariableLocation::CONTEXT) {
|
| needs_frame_state_before = false;
|
| }
|
| break;
|
| @@ -2342,7 +2344,7 @@ void AstGraphBuilder::VisitCall(Call* expr) {
|
| }
|
| case Call::LOOKUP_SLOT_CALL: {
|
| Variable* variable = callee->AsVariableProxy()->var();
|
| - DCHECK(variable->location() == Variable::LOOKUP);
|
| + DCHECK(variable->location() == VariableLocation::LOOKUP);
|
| Node* name = jsgraph()->Constant(variable->name());
|
| const Operator* op =
|
| javascript()->CallRuntime(Runtime::kLoadLookupSlot, 2);
|
| @@ -3236,7 +3238,8 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable,
|
| Node* the_hole = jsgraph()->TheHoleConstant();
|
| VariableMode mode = variable->mode();
|
| switch (variable->location()) {
|
| - case Variable::UNALLOCATED: {
|
| + case VariableLocation::GLOBAL:
|
| + case VariableLocation::UNALLOCATED: {
|
| // Global var, const, or let variable.
|
| Node* global = BuildLoadGlobalObject();
|
| Handle<Name> name = variable->name();
|
| @@ -3244,8 +3247,8 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable,
|
| states.AddToNode(value, bailout_id, combine);
|
| return value;
|
| }
|
| - case Variable::PARAMETER:
|
| - case Variable::LOCAL: {
|
| + case VariableLocation::PARAMETER:
|
| + case VariableLocation::LOCAL: {
|
| // Local var, const, or let variable.
|
| Node* value = environment()->Lookup(variable);
|
| if (mode == CONST_LEGACY) {
|
| @@ -3266,7 +3269,7 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable,
|
| }
|
| return value;
|
| }
|
| - case Variable::CONTEXT: {
|
| + case VariableLocation::CONTEXT: {
|
| // Context variable (potentially up the context chain).
|
| int depth = current_scope()->ContextChainLength(variable->scope());
|
| bool immutable = variable->maybe_assigned() == kNotAssigned;
|
| @@ -3286,7 +3289,7 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable,
|
| }
|
| return value;
|
| }
|
| - case Variable::LOOKUP: {
|
| + case VariableLocation::LOOKUP: {
|
| // Dynamic lookup of context variable (anywhere in the chain).
|
| Node* value = jsgraph()->TheHoleConstant();
|
| Handle<String> name = variable->name();
|
| @@ -3298,7 +3301,8 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable,
|
| states.AddToNode(value, bailout_id, combine);
|
| } else if (mode == DYNAMIC_LOCAL) {
|
| Variable* local = variable->local_if_not_shadowed();
|
| - DCHECK(local->location() == Variable::CONTEXT); // Must be context.
|
| + DCHECK(local->location() ==
|
| + VariableLocation::CONTEXT); // Must be context.
|
| int depth = current_scope()->ContextChainLength(local->scope());
|
| uint32_t check_bitset = ComputeBitsetForDynamicContext(variable);
|
| const Operator* op = javascript()->LoadDynamicContext(
|
| @@ -3333,7 +3337,8 @@ Node* AstGraphBuilder::BuildVariableDelete(Variable* variable,
|
| BailoutId bailout_id,
|
| OutputFrameStateCombine combine) {
|
| switch (variable->location()) {
|
| - case Variable::UNALLOCATED: {
|
| + case VariableLocation::GLOBAL:
|
| + case VariableLocation::UNALLOCATED: {
|
| // Global var, const, or let variable.
|
| Node* global = BuildLoadGlobalObject();
|
| Node* name = jsgraph()->Constant(variable->name());
|
| @@ -3342,13 +3347,13 @@ Node* AstGraphBuilder::BuildVariableDelete(Variable* variable,
|
| PrepareFrameState(result, bailout_id, combine);
|
| return result;
|
| }
|
| - case Variable::PARAMETER:
|
| - case Variable::LOCAL:
|
| - case Variable::CONTEXT: {
|
| + case VariableLocation::PARAMETER:
|
| + case VariableLocation::LOCAL:
|
| + case VariableLocation::CONTEXT: {
|
| // Local var, const, or let variable or context variable.
|
| return jsgraph()->BooleanConstant(variable->HasThisName(isolate()));
|
| }
|
| - case Variable::LOOKUP: {
|
| + case VariableLocation::LOOKUP: {
|
| // Dynamic lookup of context variable (anywhere in the chain).
|
| Node* name = jsgraph()->Constant(variable->name());
|
| const Operator* op =
|
| @@ -3370,7 +3375,8 @@ Node* AstGraphBuilder::BuildVariableAssignment(
|
| Node* the_hole = jsgraph()->TheHoleConstant();
|
| VariableMode mode = variable->mode();
|
| switch (variable->location()) {
|
| - case Variable::UNALLOCATED: {
|
| + case VariableLocation::GLOBAL:
|
| + case VariableLocation::UNALLOCATED: {
|
| // Global var, const, or let variable.
|
| Node* global = BuildLoadGlobalObject();
|
| Handle<Name> name = variable->name();
|
| @@ -3379,8 +3385,8 @@ Node* AstGraphBuilder::BuildVariableAssignment(
|
| states.AddToNode(store, bailout_id, combine);
|
| return store;
|
| }
|
| - case Variable::PARAMETER:
|
| - case Variable::LOCAL:
|
| + case VariableLocation::PARAMETER:
|
| + case VariableLocation::LOCAL:
|
| // Local var, const, or let variable.
|
| if (mode == CONST_LEGACY && op == Token::INIT_CONST_LEGACY) {
|
| // Perform an initialization check for legacy const variables.
|
| @@ -3419,7 +3425,7 @@ Node* AstGraphBuilder::BuildVariableAssignment(
|
| }
|
| environment()->Bind(variable, value);
|
| return value;
|
| - case Variable::CONTEXT: {
|
| + case VariableLocation::CONTEXT: {
|
| // Context variable (potentially up the context chain).
|
| int depth = current_scope()->ContextChainLength(variable->scope());
|
| if (mode == CONST_LEGACY && op == Token::INIT_CONST_LEGACY) {
|
| @@ -3453,7 +3459,7 @@ Node* AstGraphBuilder::BuildVariableAssignment(
|
| const Operator* op = javascript()->StoreContext(depth, variable->index());
|
| return NewNode(op, current_context(), value);
|
| }
|
| - case Variable::LOOKUP: {
|
| + case VariableLocation::LOOKUP: {
|
| // Dynamic lookup of context variable (anywhere in the chain).
|
| Node* name = jsgraph()->Constant(variable->name());
|
| Node* language = jsgraph()->Constant(language_mode());
|
|
|