Browse Source

LibJS: Add RawNonnullGCPtr<T>

This is really just a type alias for NonnullGCPtr<T>, but it provides
a way to have non-owning non-visited NonnullGCPtr<T> without getting
yelled at by the Clang plugin for catching GC errors.
Andreas Kling 8 months ago
parent
commit
6a6618f5ea
2 changed files with 6 additions and 1 deletions
  1. 4 0
      Libraries/LibJS/Heap/GCPtr.h
  2. 2 1
      Meta/Lagom/ClangPlugins/LibJSGCPluginAction.cpp

+ 4 - 0
Libraries/LibJS/Heap/GCPtr.h

@@ -190,6 +190,10 @@ private:
 template<typename T>
 using RawGCPtr = GCPtr<T>;
 
+// Non-Owning NonnullGCPtr
+template<typename T>
+using RawNonnullGCPtr = NonnullGCPtr<T>;
+
 template<typename T, typename U>
 inline bool operator==(GCPtr<T> const& a, GCPtr<U> const& b)
 {

+ 2 - 1
Meta/Lagom/ClangPlugins/LibJSGCPluginAction.cpp

@@ -61,6 +61,7 @@ static std::vector<clang::QualType> get_all_qualified_types(clang::QualType cons
             "JS::GCPtr",
             "JS::NonnullGCPtr",
             "JS::RawGCPtr",
+            "JS::RawNonnullGCPtr",
             "JS::MarkedVector",
             "JS::Handle",
         };
@@ -110,7 +111,7 @@ static std::optional<QualTypeGCInfo> validate_qualified_type(clang::QualType con
         OuterType outer_type;
         if (template_type_name == "JS::GCPtr" || template_type_name == "JS::NonnullGCPtr") {
             outer_type = OuterType::GCPtr;
-        } else if (template_type_name == "JS::RawGCPtr") {
+        } else if (template_type_name == "JS::RawGCPtr" || template_type_name == "JS::RawNonnullGCPtr") {
             outer_type = OuterType::RawGCPtr;
         } else if (template_type_name == "JS::Handle") {
             outer_type = OuterType::Handle;