X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=codegen%2Fmain.cpp;h=c7f5b2cbb064bee57a6fce25fa357a504e1822cb;hp=a76baa77d481aefad4a3545aa572fdaa3bf1bb1c;hb=9c627fabb9df8ed74cdfa83f83cb7bd996ee1004;hpb=5f5fa5fc0cbb49c63e1ab1dee6722e4b89c727ea diff --git a/codegen/main.cpp b/codegen/main.cpp index a76baa7..c7f5b2c 100644 --- a/codegen/main.cpp +++ b/codegen/main.cpp @@ -226,6 +226,20 @@ std::ostream &operator<<(std::ostream &o, const t2n_procedure &f) { return o; } +std::pair +get_file_and_line(const xmlpp::Element* root, const xmlpp::Element* element) +{ + return std::pair(get_file(root, element->get_attribute("file")->get_value()), + boost::lexical_cast(element->get_attribute("line")->get_value())-1); +} + +std::string +get_file_and_line_as_string(const xmlpp::Element* root, const xmlpp::Element* element) +{ + std::pair fl(get_file_and_line(root,element)); + return std::string(fl.first)+":"+boost::lexical_cast(fl.second); +} + class Parser { public: @@ -284,13 +298,14 @@ protected: if (f.args.back().second.name.empty()) { assert(element->get_attribute("file")); assert(element->get_attribute("line")); - throw parse_error(get_file(root, element->get_attribute("file")->get_value()), - boost::lexical_cast(element->get_attribute("line")->get_value())-1, + std::pair file_and_line(get_file_and_line(root, element)); + throw parse_error(file_and_line.first, + file_and_line.second, std::string("type of parameter `")+f.args.back().first+"' not (yet?) supported"); } } } - std::cerr << "Found function: " << f << std::endl; + std::cerr << get_file_and_line_as_string(root, element) << ":\texport procedure: " << f << std::endl; m_procedures.push_back(f); } @@ -471,19 +486,25 @@ void output_server_cpp(std::ostream &o, const std::string &group, const std::lis for (std::list::const_iterator it=procs.begin();it!=procs.end();++it) { o << *it << ";\n"; o << "libt2n::result* " << it->cmd_classname() << "::operator()() { "; - if (it->hasReturn()) { - o << "return new " << it->ret_classname() << "(" << it->name << "("; - for (t2n_procedure::Args::const_iterator ait=it->args.begin();ait!=it->args.end();++ait) { - if (ait!=it->args.begin()) o << ", "; - // get pointer - if (ait->second.name.find_first_of('*')!=std::string::npos) - o << '&'; - o << ait->first; - } - o << "));"; - }else{ - o << it->name << "(); return new " << it->ret_classname() << "();"; + + if (it->hasReturn()) + o << "return new " << it->ret_classname() << "("; + + // output function name and args + o << it->name << "("; + for (t2n_procedure::Args::const_iterator ait=it->args.begin();ait!=it->args.end();++ait) { + if (ait!=it->args.begin()) o << ", "; + // get pointer + if (ait->second.name.find_first_of('*')!=std::string::npos) + o << '&'; + o << ait->first; } + + if (it->hasReturn()) + o << "));"; + else + o << "); return new " << it->ret_classname() << "();"; + o << " }\n"; } o << "#include \"" << common_cpp << "\"\n"; @@ -540,7 +561,7 @@ main(int argc, char* argv[]) std::copy(p.begin(), p.end(), std::back_inserter(procedures)); } - std::cerr << "Procedures:" << std::endl; + std::cerr << "All procedures:" << std::endl; for (std::list::const_iterator it=procedures.begin();it!=procedures.end();++it) std::cerr << *it << ";" << std::endl;