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