diff options
author | Jose <jose@zeroc.com> | 2019-02-26 00:13:38 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2019-02-26 00:14:51 +0100 |
commit | 668a3838e26b4e21a8635bd4ea39c3f7da96e2c8 (patch) | |
tree | 3a598d5e05995ef82787dfd262ace44511ca8db3 /cpp/src/Slice | |
parent | Float/double fixes and some linting (diff) | |
download | ice-668a3838e26b4e21a8635bd4ea39c3f7da96e2c8.tar.bz2 ice-668a3838e26b4e21a8635bd4ea39c3f7da96e2c8.tar.xz ice-668a3838e26b4e21a8635bd4ea39c3f7da96e2c8.zip |
Generate imports for types defined in separate Swift modules
Diffstat (limited to 'cpp/src/Slice')
-rw-r--r-- | cpp/src/Slice/Parser.cpp | 60 | ||||
-rw-r--r-- | cpp/src/Slice/Parser.h | 27 |
2 files changed, 87 insertions, 0 deletions
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp index e49c20f1c50..52004688edf 100644 --- a/cpp/src/Slice/Parser.cpp +++ b/cpp/src/Slice/Parser.cpp @@ -19,6 +19,52 @@ using namespace std; using namespace Slice; + +Slice::CompilerException::CompilerException(const char* file, int line, const string& r) : + IceUtil::Exception(file, line), + _reason(r) +{ +} + +#ifndef ICE_CPP11_COMPILER +Slice::CompilerException::~CompilerException() throw() +{ +} +#endif + +string +Slice::CompilerException::ice_id() const +{ + return "::Slice::CompilerException"; +} + +void +Slice::CompilerException::ice_print(ostream& out) const +{ + IceUtil::Exception::ice_print(out); + out << ": " << _reason; +} + +#ifndef ICE_CPP11_MAPPING +Slice::CompilerException* +Slice::CompilerException::ice_clone() const +{ + return new CompilerException(*this); +} +#endif + +void +Slice::CompilerException::ice_throw() const +{ + throw *this; +} + +string +Slice::CompilerException::reason() const +{ + return _reason; +} + extern FILE* slice_in; extern int slice_debug; @@ -227,6 +273,20 @@ Slice::DefinitionContext::warning(WarningCategory category, const string& file, } } +void +Slice::DefinitionContext::error(const string& file, int line, const string& msg) const +{ + emitError(file, line, msg); + throw CompilerException(__FILE__, __LINE__, msg); +} + +void +Slice::DefinitionContext::error(const string& file, const string& line, const string& msg) const +{ + emitError(file, line, msg); + throw CompilerException(__FILE__, __LINE__, msg); +} + bool Slice::DefinitionContext::suppressWarning(WarningCategory category) const { diff --git a/cpp/src/Slice/Parser.h b/cpp/src/Slice/Parser.h index 77bbce0c6e1..a4bfccd6a2d 100644 --- a/cpp/src/Slice/Parser.h +++ b/cpp/src/Slice/Parser.h @@ -7,6 +7,7 @@ #include <IceUtil/Shared.h> #include <IceUtil/Handle.h> +#include <IceUtil/Exception.h> #include <string> #include <vector> #include <list> @@ -18,6 +19,29 @@ namespace Slice { +class CompilerException : public ::IceUtil::Exception +{ +public: + + CompilerException(const char*, int, const std::string&); +#ifndef ICE_CPP11_COMPILER + ~CompilerException() throw(); +#endif + virtual std::string ice_id() const; + virtual void ice_print(std::ostream&) const; +#ifndef ICE_CPP11_MAPPING + virtual CompilerException* ice_clone() const; +#endif + virtual void ice_throw() const; + + std::string reason() const; + +private: + + static const char* _name; + const std::string _reason; +}; + #if defined(_WIN32) && !defined(__MINGW32__) const IceUtil::Int64 Int32Max = 0x7fffffffi64; @@ -241,6 +265,9 @@ public: void warning(WarningCategory, const std::string&, int, const std::string&) const; void warning(WarningCategory, const std::string&, const std::string&, const std::string&) const; + void error(const std::string&, int, const std::string&) const; + void error(const std::string&, const std::string&, const std::string&) const; + private: bool suppressWarning(WarningCategory) const; |