mirror of
https://github.com/RGBCube/serenity
synced 2025-05-19 00:55:08 +00:00
![]() The compiler-generated copy constructor and copy assignment operator already do the right thing (which is to simply copy the underlying pointer). The [Itanium C++ ABI][1] treats any class with non-trivial copy/move constructors and destructors as non-trivial for the purposes of calls -- even if they are functionally identical to the compiler-generated ones. If a class is non-trivial, it cannot be passed or returned in registers, only via an invisible reference, which is worse for codegen. This commit makes `{Nonnull,}GCPtr` trivial. As the compiler can be sure that capturing a `GCPtr` by value has no side effects, a few `-Wunused-lambda-capture` warnings had to be addressed in LibWeb. GCC seems to have a bug that prevents `ExceptionOr<Variant<GCPtr<T>>>` from being implicitly constructed from `GCPtr<T>` after this change. A non-invasive workaround is to explicitly construct the inner Variant type. [1]: https://itanium-cxx-abi.github.io/cxx-abi/abi.html#non-trivial |
||
---|---|---|
.. | ||
ClassicScript.cpp | ||
ClassicScript.h | ||
Environments.cpp | ||
Environments.h | ||
ExceptionReporter.cpp | ||
ExceptionReporter.h | ||
Fetching.cpp | ||
Fetching.h | ||
ImportMap.h | ||
ModuleMap.cpp | ||
ModuleMap.h | ||
ModuleScript.cpp | ||
ModuleScript.h | ||
Script.cpp | ||
Script.h | ||
TemporaryExecutionContext.cpp | ||
TemporaryExecutionContext.h | ||
WindowEnvironmentSettingsObject.cpp | ||
WindowEnvironmentSettingsObject.h | ||
WorkerEnvironmentSettingsObject.h |