1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 18:27:35 +00:00

Lagom: Add a tool to verify correctness of the LibJS GC

This is implemented as a Clang frontend tool, and currently does two
things:
  - Ensure for all fields wrapped in {Nonnull,}GCPtr<T>, T inherits from
    JS::Cell
  - Ensure for all fields not wrapped in {Nonnull,}GCPtr, that the type
    does not inherit from JS::Cell (otherwise it should be wrapped in a
    Ptr class).

In the future, this tool could be extended further. For example, we may
consider validating all implementations of Cell::visit_impl.
This commit is contained in:
Matthew Olsson 2023-03-03 17:15:59 -07:00 committed by Linus Groh
parent 176beeb08e
commit b33b950e45
7 changed files with 341 additions and 0 deletions

View file

@ -0,0 +1,15 @@
### LibJSGCVerifier
This is a simple Clang tool to validate certain behavior relating to LibJS's GC. It currently validates
two things:
- For all types wrapped by `GCPtr` or `NonnullGCPtr`, that the wrapped type inherits from `Cell`
- For all types not wrapped by `GCPtr` or `NonnullGCPtr`, that the wrapped type does not inherit from `Cell`
(otherwise it should be wrapped).
Usage:
```
cmake -GNinja -B build
cmake --build build
src/main.py -b <path to serenity>/Build
```