Update SymbolTable::takeOwnership interface to improve type safety.
Previously, `takeOwnership` was overloaded to take Symbols or IRNodes.
However, Symbols themselves are a subclass of IRNode, so attempting to
call `takeOwnership` with any subclass of Symbol was considered
ambiguous. This was fixed by splitting the API into
`takeOwnershipOfSymbol` and `takeOwnershipOfIRNode`, letting the caller
decide explicitly rather than forcing the compiler to choose.
These APIs also returned their input back to the caller as
`const Symbol*` and `const IRNode*`, although generally the caller
actually wanted the object in its original type. This meant most uses
of the return type were immediately cast back to their actual type.
(Some callers accidentally stripped const as well, although it would be
wrong to mutate an object in the symbol table.) Added templates to
allow the input to be returned as its original type, and removed
the now-unnecessary casts.
The String `takeOwnership` call was updated to `takeOwnershipOfString`
for consistency with its peers.
Change-Id: Ib44a08097d89caec2c30deb4a25463330b7d2bf2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307841
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
8 files changed