X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=codegen%2Fmain.cpp;h=7271b228a93dc3246ccc07c6fd9b8fc1320d8acf;hp=105dc24d799dc4acdff79b36196b756a7683fc6f;hb=6f59dcf596103d0bc69be841627cd9926faa4139;hpb=ab2a4234912fd8325e966235d592b632290413df diff --git a/codegen/main.cpp b/codegen/main.cpp index 105dc24..7271b22 100644 --- a/codegen/main.cpp +++ b/codegen/main.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include "config.h" @@ -142,6 +143,15 @@ struct parse_error : public std::runtime_error {} }; +struct error_name_too_long : public std::runtime_error +{ + error_name_too_long(const std::string &name) + : std::runtime_error("symbol name '" + name + "' too long for serialization (" + + boost::lexical_cast(name.length()) + ">" + + boost::lexical_cast(BOOST_SERIALIZATION_MAX_KEY_SIZE-1) + ")") + {} +}; + //! get type by id /*! \return type name or empty string on error @@ -224,11 +234,17 @@ struct t2n_procedure std::string ret_classname() const { - return name+mangled+"_res"; + std::string result = name+mangled+"_res"; + if (result.length() >= BOOST_SERIALIZATION_MAX_KEY_SIZE) + throw error_name_too_long(result); + return result; } std::string cmd_classname() const { - return name+mangled+"_cmd"; + std::string result = name+mangled+"_cmd"; + if (result.length() >= BOOST_SERIALIZATION_MAX_KEY_SIZE) + throw error_name_too_long(result); + return result; } bool hasReturn() const {return !ret_type.isVoid();} };