Skip to content

Commit

Permalink
[MATLAB] Fixed overloaded functions in .m file
Browse files Browse the repository at this point in the history
  • Loading branch information
jaeandersson committed Apr 8, 2014
1 parent 5b29f29 commit 2d6fc84
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 10 deletions.
5 changes: 5 additions & 0 deletions Examples/matlab/class/example.h
Expand Up @@ -21,6 +21,11 @@ class Circle : public Shape {
public:
Circle(double r) : radius(r) { }
virtual double area();

// Test overloading
virtual double foo(int d){ return area();}
virtual double foo(){ return perimeter();}

virtual double perimeter();
};

Expand Down
32 changes: 22 additions & 10 deletions Source/Modules/matlab.cxx
Expand Up @@ -770,11 +770,17 @@ int MATLAB::memberfunctionHandler(Node *n) {
#ifdef MATLABPRINTFUNCTIONENTRY
Printf(stderr,"Entering memberfunctionHandler\n");
#endif
String *symname = Getattr(n, "sym:name");
String *fullname = Swig_name_member(NSPACE_TODO, class_name, symname);
Printf(f_wrap_m,"function varargout = %s(this,varargin)\n",symname);
Printf(f_wrap_m,"[varargout{1:nargout}] = %s('%s',this.h,varargin{:})\n",mex_fcn,fullname);
Printf(f_wrap_m,"end\n");
bool overloaded = !!Getattr(n, "sym:overloaded");
bool last_overload = overloaded && !Getattr(n, "sym:nextSibling");

// Add function to .m wrapper
if(!overloaded || last_overload){
String *symname = Getattr(n, "sym:name");
String *fullname = Swig_name_member(NSPACE_TODO, class_name, symname);
Printf(f_wrap_m,"function varargout = %s(this,varargin)\n",symname);
Printf(f_wrap_m,"[varargout{1:nargout}] = %s('%s',this.h,varargin{:})\n",mex_fcn,fullname);
Printf(f_wrap_m,"end\n");
}

return Language::memberfunctionHandler(n);
}
Expand All @@ -790,11 +796,17 @@ int MATLAB::constructorHandler(Node *n) {
#ifdef MATLABPRINTFUNCTIONENTRY
Printf(stderr,"Entering constructorHandler\n");
#endif
String *symname = Getattr(n, "sym:name");
String *fullname = Swig_name_construct(NSPACE_TODO, symname);
Printf(f_wrap_m,"function this = %s(varargin)\n",symname);
Printf(f_wrap_m,"this.h = %s('%s',varargin{:})\n",mex_fcn,fullname);
Printf(f_wrap_m,"end\n");
bool overloaded = !!Getattr(n, "sym:overloaded");
bool last_overload = overloaded && !Getattr(n, "sym:nextSibling");

// Add function to .m wrapper
if(!overloaded || last_overload){
String *symname = Getattr(n, "sym:name");
String *fullname = Swig_name_construct(NSPACE_TODO, symname);
Printf(f_wrap_m,"function this = %s(varargin)\n",symname);
Printf(f_wrap_m,"this.h = %s('%s',varargin{:})\n",mex_fcn,fullname);
Printf(f_wrap_m,"end\n");
}
return Language::constructorHandler(n);
}

Expand Down

0 comments on commit 2d6fc84

Please sign in to comment.