diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2017-01-23 23:21:20 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2017-01-24 19:01:43 +0000 |
commit | 83519138e8ca5daf61592b8222d6b8f279ed9b8f (patch) | |
tree | 205bb0c6cfee00baac5b151c69aea137c654cce2 | |
parent | f3029dda7d9135f76cb472de68cfe35805015a42 (diff) | |
download | swig-83519138e8ca5daf61592b8222d6b8f279ed9b8f.tar.gz |
Tweak %extend templates
Previous commit turned on the generation of an extra extend function
wrapper of a member template function when %template was inside a %extend
block instead of calling the real member template - reversed this side
effect.
-rw-r--r-- | Source/CParse/parser.y | 3 | ||||
-rw-r--r-- | Source/Modules/lang.cxx | 5 |
2 files changed, 5 insertions, 3 deletions
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y index 68d2c7eb6..0536f4c34 100644 --- a/Source/CParse/parser.y +++ b/Source/CParse/parser.y @@ -372,7 +372,8 @@ static void add_symbols(Node *n) { } if (extendmode) { - Setattr(n,"isextendmember","1"); + if (!Getattr(n, "template")) + SetFlag(n,"isextendmember"); } if (!isfriend && inclass) { diff --git a/Source/Modules/lang.cxx b/Source/Modules/lang.cxx index 5dad125e0..ab4fa2b9e 100644 --- a/Source/Modules/lang.cxx +++ b/Source/Modules/lang.cxx @@ -1267,8 +1267,9 @@ int Language::memberfunctionHandler(Node *n) { if (GetFlag(n, "explicitcall")) DirectorExtraCall = CWRAP_DIRECTOR_ONE_CALL; - Swig_MethodToFunction(n, NSpace, ClassType, Getattr(n, "template") ? Extend | SmartPointer : Extend | SmartPointer | DirectorExtraCall, director_type, - is_member_director(CurrentClass, n)); + int extendmember = GetFlag(n, "isextendmember") ? Extend : 0; + int flags = Getattr(n, "template") ? extendmember | SmartPointer : Extend | SmartPointer | DirectorExtraCall; + Swig_MethodToFunction(n, NSpace, ClassType, flags, director_type, is_member_director(CurrentClass, n)); Setattr(n, "sym:name", fname); functionWrapper(n); |