rs_bindings_from_cc: fix bindings for inherited static member functions. - #2047
Merged
Merged
Conversation
copybara-service
Bot
force-pushed
the
test_983387807
branch
2 times, most recently
from
September 18, 2026 02:25
e6ade87 to
46d65cc
Compare
Derived classes inherit static member functions, but the bindings generated for the derived class rewrote the type of the first parameter to `Self`. That rewrite models the implicit `this` pointer, so it is only correct for instance methods. When a static member function has a first parameter naming the enclosing class, the derived class declared that parameter with the derived type while the wrapper it forwards to still expected the base type, and the generated crate failed to compile. A static member function taking two such parameters was also rewritten asymmetrically, changing only the first one. Gate the rewrite on `Func::is_instance_method`, the condition already used to decide whether the first parameter is formatted as `self`. `Derived::f` now takes a `Base` argument, matching C++, where a static member function reached through a derived class still accepts a base class argument. PiperOrigin-RevId: 983572212
copybara-service
Bot
force-pushed
the
test_983387807
branch
from
September 18, 2026 02:44
46d65cc to
cfb6d62
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
rs_bindings_from_cc: fix bindings for inherited static member functions.
Derived classes inherit static member functions, but the bindings generated for
the derived class rewrote the type of the first parameter to
Self. Thatrewrite models the implicit
thispointer, so it is only correct for instancemethods. When a static member function has a first parameter naming the
enclosing class, the derived class declared that parameter with the derived
type while the wrapper it forwards to still expected the base type, and the
generated crate failed to compile. A static member function taking two such
parameters was also rewritten asymmetrically, changing only the first one.
Gate the rewrite on
Func::is_instance_method, the condition already used todecide whether the first parameter is formatted as
self.Derived::fnowtakes a
Baseargument, matching C++, where a static member function reachedthrough a derived class still accepts a base class argument.