summaryrefslogtreecommitdiff
path: root/deps/v8/src/torque/contextual.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/torque/contextual.h')
-rw-r--r--deps/v8/src/torque/contextual.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/deps/v8/src/torque/contextual.h b/deps/v8/src/torque/contextual.h
index 628d5b8514..92d2bdf3d7 100644
--- a/deps/v8/src/torque/contextual.h
+++ b/deps/v8/src/torque/contextual.h
@@ -14,6 +14,9 @@ namespace v8 {
namespace internal {
namespace torque {
+template <class Variable>
+V8_EXPORT_PRIVATE typename Variable::VariableType*& ContextualVariableTop();
+
// {ContextualVariable} provides a clean alternative to a global variable.
// The contextual variable is mutable, and supports managing the value of
// a variable in a well-nested fashion via the {Scope} class.
@@ -66,7 +69,9 @@ class ContextualVariable {
}
private:
- V8_EXPORT_PRIVATE static VarType*& Top();
+ template <class T>
+ friend typename T::VariableType*& ContextualVariableTop();
+ static VarType*& Top() { return ContextualVariableTop<Derived>(); }
static bool HasScope() { return Top() != nullptr; }
friend class MessageBuilder;
@@ -77,12 +82,11 @@ class ContextualVariable {
struct VarName \
: v8::internal::torque::ContextualVariable<VarName, __VA_ARGS__> {}
-#define DEFINE_CONTEXTUAL_VARIABLE(VarName) \
- template <> \
- V8_EXPORT_PRIVATE VarName::VariableType*& \
- ContextualVariable<VarName, VarName::VariableType>::Top() { \
- static thread_local VarName::VariableType* top = nullptr; \
- return top; \
+#define DEFINE_CONTEXTUAL_VARIABLE(VarName) \
+ template <> \
+ V8_EXPORT_PRIVATE VarName::VariableType*& ContextualVariableTop<VarName>() { \
+ static thread_local VarName::VariableType* top = nullptr; \
+ return top; \
}
// By inheriting from {ContextualClass} a class can become a contextual variable