18b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// Copyright 2011 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/ast/variables.h" 6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/ast/scopes.h" 8f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#include "src/globals.h" 962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "src/objects-inl.h" 10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace v8 { 12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace internal { 13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ---------------------------------------------------------------------------- 15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Implementation Variable. 16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochVariable::Variable(Scope* scope, const AstRawString* name, VariableMode mode, 18f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch VariableKind kind, InitializationFlag initialization_flag, 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch MaybeAssignedFlag maybe_assigned_flag) 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch : scope_(scope), 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch name_(name), 22f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch local_if_not_shadowed_(nullptr), 23c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch next_(nullptr), 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch index_(-1), 25f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch initializer_position_(kNoSourcePosition), 26f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch bit_field_(MaybeAssignedFlagField::encode(maybe_assigned_flag) | 27f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch InitializationFlagField::encode(initialization_flag) | 28f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch VariableModeField::encode(mode) | IsUsedField::encode(false) | 29f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch ForceContextAllocationField::encode(false) | 30f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch LocationField::encode(VariableLocation::UNALLOCATED) | 31f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch VariableKindField::encode(kind)) { 323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Var declared variables never need initialization. 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK(!(mode == VAR && initialization_flag == kNeedsInitialization)); 34a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochbool Variable::IsGlobalObjectProperty() const { 38a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Temporaries are never global, they must always be allocated in the 39a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // activation frame. 4062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return (IsDynamicVariableMode(mode()) || mode() == VAR) && 4162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch scope_ != nullptr && scope_->is_script_scope(); 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 46