smartptr inheritance fix when using templates and typedefs
Fixes SF bug 3333549 - %shared_ptr fixes when the type is a template using template parameters that are typedef'd to another type. Also fixes python -O optimization where the smart pointer conversion to the base class needs to work because of the virtual methods that have been optimized away.
This commit is contained in:
parent
cc7319f52f
commit
38cda92938
2 changed files with 9 additions and 4 deletions
|
|
@ -265,7 +265,13 @@ class TypePass:private Dispatcher {
|
|||
SwigType *bsmart = Copy(smart);
|
||||
SwigType *rclsname = SwigType_typedef_resolve_all(clsname);
|
||||
SwigType *rbname = SwigType_typedef_resolve_all(bname);
|
||||
Replaceall(bsmart, rclsname, rbname);
|
||||
int replace_count = Replaceall(bsmart, rclsname, rbname);
|
||||
if (replace_count == 0) {
|
||||
// If no replacement made, it will be because rclsname is fully resolved, but the
|
||||
// type in the smartptr feature used a typedef or not fully resolved name.
|
||||
String *firstname = Getattr(first, "name");
|
||||
Replaceall(bsmart, firstname, rbname);
|
||||
}
|
||||
Delete(rclsname);
|
||||
Delete(rbname);
|
||||
String *smartnamestr = SwigType_namestr(smart);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue