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