variables.cc revision f91f0611dbaf29ca0f1d4aecb357ce243a19d2fa
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 10namespace v8 { 11namespace internal { 12 13// ---------------------------------------------------------------------------- 14// Implementation Variable. 15 16const char* Variable::Mode2String(VariableMode mode) { 17 switch (mode) { 18 case VAR: return "VAR"; 19 case CONST_LEGACY: return "CONST_LEGACY"; 20 case LET: return "LET"; 21 case CONST: return "CONST"; 22 case DYNAMIC: return "DYNAMIC"; 23 case DYNAMIC_GLOBAL: return "DYNAMIC_GLOBAL"; 24 case DYNAMIC_LOCAL: return "DYNAMIC_LOCAL"; 25 case TEMPORARY: return "TEMPORARY"; 26 } 27 UNREACHABLE(); 28 return NULL; 29} 30 31Variable::Variable(Scope* scope, const AstRawString* name, VariableMode mode, 32 Kind kind, InitializationFlag initialization_flag, 33 MaybeAssignedFlag maybe_assigned_flag) 34 : scope_(scope), 35 name_(name), 36 mode_(mode), 37 kind_(kind), 38 location_(VariableLocation::UNALLOCATED), 39 index_(-1), 40 initializer_position_(kNoSourcePosition), 41 local_if_not_shadowed_(NULL), 42 force_context_allocation_(false), 43 is_used_(false), 44 initialization_flag_(initialization_flag), 45 maybe_assigned_(maybe_assigned_flag) { 46 // Var declared variables never need initialization. 47 DCHECK(!(mode == VAR && initialization_flag == kNeedsInitialization)); 48} 49 50 51bool Variable::IsGlobalObjectProperty() const { 52 // Temporaries are never global, they must always be allocated in the 53 // activation frame. 54 return (IsDynamicVariableMode(mode_) || 55 (IsDeclaredVariableMode(mode_) && !IsLexicalVariableMode(mode_))) && 56 scope_ != NULL && scope_->is_script_scope(); 57} 58 59 60bool Variable::IsStaticGlobalObjectProperty() const { 61 // Temporaries are never global, they must always be allocated in the 62 // activation frame. 63 return (IsDeclaredVariableMode(mode_) && !IsLexicalVariableMode(mode_)) && 64 scope_ != NULL && scope_->is_script_scope(); 65} 66 67 68int Variable::CompareIndex(Variable* const* v, Variable* const* w) { 69 int x = (*v)->index(); 70 int y = (*w)->index(); 71 // Consider sorting them according to type as well? 72 return x - y; 73} 74 75} // namespace internal 76} // namespace v8 77