Isolated argument check
parent
0261c59063
commit
370f2c6763
|
@ -36,7 +36,8 @@ Argument Argument::expandTemplate(const TemplateSubstitution& ts) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
ArgumentList ArgumentList::expandTemplate(const TemplateSubstitution& ts) const {
|
ArgumentList ArgumentList::expandTemplate(
|
||||||
|
const TemplateSubstitution& ts) const {
|
||||||
ArgumentList instArgList;
|
ArgumentList instArgList;
|
||||||
BOOST_FOREACH(const Argument& arg, *this) {
|
BOOST_FOREACH(const Argument& arg, *this) {
|
||||||
Argument instArg = arg.expandTemplate(ts);
|
Argument instArg = arg.expandTemplate(ts);
|
||||||
|
@ -97,6 +98,12 @@ void Argument::matlab_unwrap(FileWriter& file, const string& matlabName) const {
|
||||||
file.oss << ");" << endl;
|
file.oss << ");" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
void Argument::proxy_check(FileWriter& proxyFile, size_t sequenceNr) const {
|
||||||
|
proxyFile.oss << "isa(varargin{" << sequenceNr << "},'" << matlabClass(".")
|
||||||
|
<< "')";
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
string ArgumentList::types() const {
|
string ArgumentList::types() const {
|
||||||
string str;
|
string str;
|
||||||
|
@ -177,7 +184,7 @@ void ArgumentList::emit_prototype(FileWriter& file, const string& name) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
void ArgumentList::proxy_check_arguments(FileWriter& proxyFile) const {
|
void ArgumentList::proxy_check(FileWriter& proxyFile) const {
|
||||||
// Check nr of arguments
|
// Check nr of arguments
|
||||||
proxyFile.oss << "if length(varargin) == " << size();
|
proxyFile.oss << "if length(varargin) == " << size();
|
||||||
if (size() > 0)
|
if (size() > 0)
|
||||||
|
@ -187,11 +194,11 @@ void ArgumentList::proxy_check_arguments(FileWriter& proxyFile) const {
|
||||||
for (size_t i = 0; i < size(); i++) {
|
for (size_t i = 0; i < size(); i++) {
|
||||||
if (!first)
|
if (!first)
|
||||||
proxyFile.oss << " && ";
|
proxyFile.oss << " && ";
|
||||||
proxyFile.oss << "isa(varargin{" << i + 1 << "},'"
|
(*this)[i].proxy_check(proxyFile, i + 1);
|
||||||
<< (*this)[i].matlabClass(".") << "')";
|
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
proxyFile.oss << "\n";
|
proxyFile.oss << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,12 @@ struct Argument {
|
||||||
/// MATLAB code generation, MATLAB to C++
|
/// MATLAB code generation, MATLAB to C++
|
||||||
void matlab_unwrap(FileWriter& file, const std::string& matlabName) const;
|
void matlab_unwrap(FileWriter& file, const std::string& matlabName) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* emit checking argument to MATLAB proxy
|
||||||
|
* @param proxyFile output stream
|
||||||
|
*/
|
||||||
|
void proxy_check(FileWriter& proxyFile, size_t sequenceNr) const;
|
||||||
|
|
||||||
friend std::ostream& operator<<(std::ostream& os, const Argument& arg) {
|
friend std::ostream& operator<<(std::ostream& os, const Argument& arg) {
|
||||||
os << (arg.is_const ? "const " : "") << arg.type << (arg.is_ptr ? "*" : "")
|
os << (arg.is_const ? "const " : "") << arg.type << (arg.is_ptr ? "*" : "")
|
||||||
<< (arg.is_ref ? "&" : "");
|
<< (arg.is_ref ? "&" : "");
|
||||||
|
@ -91,7 +97,7 @@ struct ArgumentList: public std::vector<Argument> {
|
||||||
* emit checking arguments to MATLAB proxy
|
* emit checking arguments to MATLAB proxy
|
||||||
* @param proxyFile output stream
|
* @param proxyFile output stream
|
||||||
*/
|
*/
|
||||||
void proxy_check_arguments(FileWriter& proxyFile) const;
|
void proxy_check(FileWriter& proxyFile) const;
|
||||||
|
|
||||||
/// Output stream operator
|
/// Output stream operator
|
||||||
friend std::ostream& operator<<(std::ostream& os,
|
friend std::ostream& operator<<(std::ostream& os,
|
||||||
|
@ -106,7 +112,6 @@ struct ArgumentList: public std::vector<Argument> {
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // \namespace wrap
|
} // \namespace wrap
|
||||||
|
|
|
@ -69,7 +69,7 @@ void Function::emit_conditional_call(FileWriter& proxyFile,
|
||||||
const string& wrapperName, int id) const {
|
const string& wrapperName, int id) const {
|
||||||
|
|
||||||
// Check all arguments
|
// Check all arguments
|
||||||
args.proxy_check_arguments(proxyFile);
|
args.proxy_check(proxyFile);
|
||||||
|
|
||||||
// output call to C++ wrapper
|
// output call to C++ wrapper
|
||||||
proxyFile.oss << " ";
|
proxyFile.oss << " ";
|
||||||
|
|
Loading…
Reference in New Issue