| // Copyright 2017 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <fstream> |
| #include <iostream> |
| #include <string> |
| |
| #include "src/torque/global-context.h" |
| |
| #include "src/torque/scope.h" |
| |
| namespace v8 { |
| namespace internal { |
| namespace torque { |
| |
| Scope::Scope(ScopeChain& scope_chain) |
| : scope_chain_(scope_chain), |
| scope_number_(scope_chain_.GetNextScopeNumber()), |
| private_label_number_(0) {} |
| |
| Scope* ScopeChain::NewScope() { |
| Scope* new_scope = new Scope(*this); |
| scopes_.emplace_back(std::unique_ptr<Scope>(new_scope)); |
| return new_scope; |
| } |
| |
| void Scope::AddLiveVariables(std::set<const Variable*>& set) { |
| for (auto& current : lookup_) { |
| if (current.second->IsVariable()) { |
| set.insert(Variable::cast(current.second)); |
| } |
| } |
| } |
| |
| void Scope::Print() { |
| std::cout << "scope #" << std::to_string(scope_number_) << "\n"; |
| for (auto& i : lookup_) { |
| std::cout << i.first << ": " << i.second << "\n"; |
| } |
| } |
| |
| Scope::Activator::Activator(Scope* scope) : scope_(scope) { |
| scope->GetScopeChain().PushScope(scope); |
| } |
| |
| Scope::Activator::~Activator() { scope_->GetScopeChain().PopScope(); } |
| |
| } // namespace torque |
| } // namespace internal |
| } // namespace v8 |