summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2017-01-23 23:21:20 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2017-01-24 19:01:43 +0000
commit83519138e8ca5daf61592b8222d6b8f279ed9b8f (patch)
tree205bb0c6cfee00baac5b151c69aea137c654cce2
parentf3029dda7d9135f76cb472de68cfe35805015a42 (diff)
downloadswig-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.y3
-rw-r--r--Source/Modules/lang.cxx5
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);