v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
global-context.h
Go to the documentation of this file.
1// Copyright 2017 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#ifndef V8_TORQUE_GLOBAL_CONTEXT_H_
6#define V8_TORQUE_GLOBAL_CONTEXT_H_
7
8#include <map>
9#include <memory>
10
11#include "src/base/contextual.h"
12#include "src/common/globals.h"
13#include "src/torque/ast.h"
16
17namespace v8 {
18namespace internal {
19namespace torque {
20
21class GlobalContext : public base::ContextualClass<GlobalContext> {
22 public:
24 GlobalContext& operator=(GlobalContext&&) V8_NOEXCEPT = default;
25 explicit GlobalContext(Ast ast);
26
27 static Namespace* GetDefaultNamespace() { return Get().default_namespace_; }
28 template <class T>
29 T* RegisterDeclarable(std::unique_ptr<T> d) {
30 T* ptr = d.get();
31 declarables_.push_back(std::move(d));
32 return ptr;
33 }
34
35 static const std::vector<std::unique_ptr<Declarable>>& AllDeclarables() {
36 return Get().declarables_;
37 }
38
39 static void AddCppInclude(std::string include_path) {
40 Get().cpp_includes_.insert(std::move(include_path));
41 }
42 static const std::set<std::string>& CppIncludes() {
43 return Get().cpp_includes_;
44 }
45
47 Get().collect_language_server_data_ = true;
48 }
50 return Get().collect_language_server_data_;
51 }
52 static void SetCollectKytheData() { Get().collect_kythe_data_ = true; }
53 static bool collect_kythe_data() { return Get().collect_kythe_data_; }
55 Get().force_assert_statements_ = true;
56 }
58 return Get().force_assert_statements_;
59 }
60 static void SetAnnotateIR() { Get().annotate_ir_ = true; }
61 static bool annotate_ir() { return Get().annotate_ir_; }
62 static Ast* ast() { return &Get().ast_; }
63 static std::string MakeUniqueName(const std::string& base) {
64 return base + "_" + std::to_string(Get().fresh_ids_[base]++);
65 }
66
74 std::stringstream csa_headerfile;
76 std::stringstream csa_ccfile;
78
79 std::stringstream class_definition_headerfile;
80
81 // The beginning of the generated -inl.inc file, which includes declarations
82 // for functions corresponding to Torque macros.
84 // The second part of the generated -inl.inc file, which includes
85 // definitions for functions declared in the first part.
87 // The portion of the generated -inl.inc file containing member function
88 // definitions for the generated class.
90
91 std::stringstream class_definition_ccfile;
93
94 std::set<SourceId> required_builtin_includes;
95 };
97 PerFileStreams& result = Get().generated_per_file_[file];
99 return result;
100 }
101
104 Get().instance_types_initialized_ = true;
105 }
107 return Get().instance_types_initialized_;
108 }
109 static void EnsureInCCOutputList(TorqueMacro* macro, SourceId source) {
110 GlobalContext& c = Get();
111 auto item = std::make_pair(macro, source);
112 if (c.macros_for_cc_output_set_.insert(item).second) {
113 c.macros_for_cc_output_.push_back(item);
114 }
115 EnsureInCCDebugOutputList(macro, source);
116 }
117 static const std::vector<std::pair<TorqueMacro*, SourceId>>&
119 return Get().macros_for_cc_output_;
120 }
121 static void EnsureInCCDebugOutputList(TorqueMacro* macro, SourceId source) {
122 GlobalContext& c = Get();
123 auto item = std::make_pair(macro, source);
124 if (c.macros_for_cc_debug_output_set_.insert(item).second) {
125 c.macros_for_cc_debug_output_.push_back(item);
126 }
127 }
128 static const std::vector<std::pair<TorqueMacro*, SourceId>>&
130 return Get().macros_for_cc_debug_output_;
131 }
132
133 private:
140 std::vector<std::unique_ptr<Declarable>> declarables_;
141 std::set<std::string> cpp_includes_;
142 std::map<SourceId, PerFileStreams> generated_per_file_;
143 std::map<std::string, size_t> fresh_ids_;
144 std::vector<std::pair<TorqueMacro*, SourceId>> macros_for_cc_output_;
145 std::set<std::pair<TorqueMacro*, SourceId>> macros_for_cc_output_set_;
146 std::vector<std::pair<TorqueMacro*, SourceId>> macros_for_cc_debug_output_;
147 std::set<std::pair<TorqueMacro*, SourceId>> macros_for_cc_debug_output_set_;
149
150 friend class LanguageServerData;
151};
152
153template <class T>
154T* RegisterDeclarable(std::unique_ptr<T> d) {
155 return GlobalContext::Get().RegisterDeclarable(std::move(d));
156}
157
158class TargetArchitecture : public base::ContextualClass<TargetArchitecture> {
159 public:
160 explicit TargetArchitecture(bool force_32bit);
161
162 static size_t TaggedSize() { return Get().tagged_size_; }
163 static size_t RawPtrSize() { return Get().raw_ptr_size_; }
164 static size_t ExternalPointerSize() { return Get().external_ptr_size_; }
165 static size_t CppHeapPointerSize() { return Get().cppheap_ptr_size_; }
166 static size_t TrustedPointerSize() { return Get().trusted_ptr_size_; }
167 static size_t ProtectedPointerSize() { return TaggedSize(); }
168 static size_t MaxHeapAlignment() { return TaggedSize(); }
169 static bool ArePointersCompressed() { return TaggedSize() < RawPtrSize(); }
170 static int SmiTagAndShiftSize() { return Get().smi_tag_and_shift_size_; }
171
172 private:
173 const size_t tagged_size_;
174 const size_t raw_ptr_size_;
176 const size_t external_ptr_size_;
177 const size_t cppheap_ptr_size_;
178 const size_t trusted_ptr_size_;
179};
180
181} // namespace torque
182} // namespace internal
183} // namespace v8
184
185#endif // V8_TORQUE_GLOBAL_CONTEXT_H_
static VarType & Get()
Definition contextual.h:64
std::map< SourceId, PerFileStreams > generated_per_file_
static void AddCppInclude(std::string include_path)
static const std::vector< std::unique_ptr< Declarable > > & AllDeclarables()
std::set< std::string > cpp_includes_
std::vector< std::pair< TorqueMacro *, SourceId > > macros_for_cc_debug_output_
static PerFileStreams & GeneratedPerFile(SourceId file)
GlobalContext(GlobalContext &&) V8_NOEXCEPT=default
std::set< std::pair< TorqueMacro *, SourceId > > macros_for_cc_output_set_
static Namespace * GetDefaultNamespace()
std::map< std::string, size_t > fresh_ids_
std::vector< std::pair< TorqueMacro *, SourceId > > macros_for_cc_output_
std::vector< std::unique_ptr< Declarable > > declarables_
static const std::vector< std::pair< TorqueMacro *, SourceId > > & AllMacrosForCCDebugOutput()
static void EnsureInCCDebugOutputList(TorqueMacro *macro, SourceId source)
static void EnsureInCCOutputList(TorqueMacro *macro, SourceId source)
static const std::set< std::string > & CppIncludes()
std::set< std::pair< TorqueMacro *, SourceId > > macros_for_cc_debug_output_set_
static const std::vector< std::pair< TorqueMacro *, SourceId > > & AllMacrosForCCOutput()
static std::string MakeUniqueName(const std::string &base)
T * RegisterDeclarable(std::unique_ptr< T > d)
ZoneVector< RpoNumber > & result
T * RegisterDeclarable(std::unique_ptr< T > d)
#define V8_NOEXCEPT
#define DCHECK(condition)
Definition logging.h:482
Symbol file