diff options
Diffstat (limited to 'deps/v8/src/torque/contextual.h')
-rw-r--r-- | deps/v8/src/torque/contextual.h | 18 |
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 |