From c1ce7caa97b3dd6f7536d5c3b8b482d823c51891 Mon Sep 17 00:00:00 2001 From: Mark Spruiell Date: Mon, 2 Feb 2009 10:15:06 -0800 Subject: bug 3644 - improve integration between eclipse plugin and translator bug 3657 - improve error reporting in translators --- cpp/src/Slice/FileTracker.cpp | 83 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) (limited to 'cpp/src/Slice/FileTracker.cpp') diff --git a/cpp/src/Slice/FileTracker.cpp b/cpp/src/Slice/FileTracker.cpp index 43d9632ad17..051fa6919d6 100644 --- a/cpp/src/Slice/FileTracker.cpp +++ b/cpp/src/Slice/FileTracker.cpp @@ -61,7 +61,8 @@ Slice::FileException::reason() const static Slice::FileTrackerPtr Instance; -Slice::FileTracker::FileTracker() +Slice::FileTracker::FileTracker() : + _curr(_generated.end()) { } @@ -80,10 +81,31 @@ Slice::FileTracker::instance() return Instance; } +void +Slice::FileTracker::setSource(const string& source, const string& output, bool error) +{ + _source = source; + _errors.insert(make_pair(source, output)); + if(error) + { + _curr = _generated.end(); + } + else + { + pair >::iterator, bool> p = _generated.insert(make_pair(source, list())); + assert(p.second); + _curr = p.first; + } +} + void Slice::FileTracker::addFile(const string& file) { _files.push_front(make_pair(file, false)); + if(_curr != _generated.end()) + { + _curr->second.push_back(file); + } } void @@ -115,3 +137,62 @@ Slice::FileTracker::cleanup() } } } + +void +Slice::FileTracker::dumpxml() +{ + cout << "" << endl; + + cout << "" << endl; + for(map::const_iterator p = _errors.begin(); p != _errors.end(); ++p) + { + cout << " first << "\""; + + map >::const_iterator q = _generated.find(p->first); + if(q == _generated.end()) + { + cout << " error=\"true\">" << endl; + } + else + { + cout << ">" << endl; + for(list::const_iterator r = q->second.begin(); r != q->second.end(); ++r) + { + cout << " " << endl; + } + } + cout << " " << escape(p->second) << "" << endl; + cout << " " << endl; + } + cout << "" << endl; +} + +string +Slice::FileTracker::escape(const string& str) const +{ + ostringstream ostr; + + for(string::const_iterator p = str.begin(); p != str.end(); ++p) + { + switch(*p) + { + case '<': + ostr << "<"; + break; + case '>': + ostr << ">"; + break; + case '&': + ostr << "&"; + break; + case '"': + ostr << """; + break; + default: + ostr << *p; + break; + } + } + + return ostr.str(); +} -- cgit v1.2.3 From 400999d070c59c253cdfac9948ff896e2fc2b50e Mon Sep 17 00:00:00 2001 From: Michi Henning Date: Thu, 5 Feb 2009 14:39:01 +1000 Subject: Fixed compilation bug with VC60. --- cpp/src/Slice/FileTracker.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'cpp/src/Slice/FileTracker.cpp') diff --git a/cpp/src/Slice/FileTracker.cpp b/cpp/src/Slice/FileTracker.cpp index 051fa6919d6..65dfa682a6f 100644 --- a/cpp/src/Slice/FileTracker.cpp +++ b/cpp/src/Slice/FileTracker.cpp @@ -36,7 +36,11 @@ Slice::FileException::ice_name() const void Slice::FileException::ice_print(ostream& out) const { +#if defined(_MSC_VER) && (_MSC_VER < 1300) + Exception::ice_print(out); +#else IceUtil::Exception::ice_print(out); +#endif out << ": " << _reason; } -- cgit v1.2.3 From 3f3f6103ff3396d600233e33655ad36baf3b1435 Mon Sep 17 00:00:00 2001 From: Dwayne Boone Date: Tue, 3 Mar 2009 12:10:43 -0500 Subject: Fixed Solaris compile error --- cpp/src/Slice/FileTracker.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'cpp/src/Slice/FileTracker.cpp') diff --git a/cpp/src/Slice/FileTracker.cpp b/cpp/src/Slice/FileTracker.cpp index 65dfa682a6f..5c8bb1be161 100644 --- a/cpp/src/Slice/FileTracker.cpp +++ b/cpp/src/Slice/FileTracker.cpp @@ -9,6 +9,10 @@ #include +#ifdef __sun +# include +#endif + #ifdef _WIN32 # include #endif -- cgit v1.2.3 From d99bc460dcabd96c089deebf8a542036fe0edc8d Mon Sep 17 00:00:00 2001 From: Mark Spruiell Date: Fri, 20 Mar 2009 09:55:55 -0700 Subject: bug 3916 - slice2java --list-generated bug --- cpp/include/Slice/FileTracker.h | 3 ++- cpp/src/Slice/FileTracker.cpp | 19 +++++++++++-------- cpp/src/slice2java/Main.cpp | 10 ++++++---- 3 files changed, 19 insertions(+), 13 deletions(-) (limited to 'cpp/src/Slice/FileTracker.cpp') diff --git a/cpp/include/Slice/FileTracker.h b/cpp/include/Slice/FileTracker.h index aa3041b4f42..81261f361d3 100644 --- a/cpp/include/Slice/FileTracker.h +++ b/cpp/include/Slice/FileTracker.h @@ -47,7 +47,8 @@ public: static FileTrackerPtr instance(); - void setSource(const std::string&, const std::string&, bool); + void setSource(const std::string&); + void setOutput(const std::string&, bool); void addFile(const std::string&); void addDirectory(const std::string&); diff --git a/cpp/src/Slice/FileTracker.cpp b/cpp/src/Slice/FileTracker.cpp index 5c8bb1be161..2d4ce2293e4 100644 --- a/cpp/src/Slice/FileTracker.cpp +++ b/cpp/src/Slice/FileTracker.cpp @@ -90,20 +90,23 @@ Slice::FileTracker::instance() } void -Slice::FileTracker::setSource(const string& source, const string& output, bool error) +Slice::FileTracker::setSource(const string& source) { _source = source; - _errors.insert(make_pair(source, output)); + pair >::iterator, bool> p = _generated.insert(make_pair(source, list())); + assert(p.second); + _curr = p.first; +} + +void +Slice::FileTracker::setOutput(const string& output, bool error) +{ + assert(!_source.empty()); + _errors.insert(make_pair(_source, output)); if(error) { _curr = _generated.end(); } - else - { - pair >::iterator, bool> p = _generated.insert(make_pair(source, list())); - assert(p.second); - _curr = p.first; - } } void diff --git a/cpp/src/slice2java/Main.cpp b/cpp/src/slice2java/Main.cpp index e8428077d58..0ed57b5d415 100644 --- a/cpp/src/slice2java/Main.cpp +++ b/cpp/src/slice2java/Main.cpp @@ -224,12 +224,14 @@ main(int argc, char* argv[]) Slice::setErrorStream(os); } + FileTracker::instance()->setSource(*i); + Preprocessor icecpp(argv[0], *i, cppArgs); FILE* cppHandle = icecpp.preprocess(false); if(cppHandle == 0) { - FileTracker::instance()->setSource(*i, os.str(), true); + FileTracker::instance()->setOutput(os.str(), true); status = EXIT_FAILURE; break; } @@ -263,7 +265,7 @@ main(int argc, char* argv[]) if(parseStatus == EXIT_FAILURE) { p->destroy(); - FileTracker::instance()->setSource(*i, os.str(), true); + FileTracker::instance()->setOutput(os.str(), true); status = EXIT_FAILURE; } else @@ -292,7 +294,7 @@ main(int argc, char* argv[]) ChecksumMap m = createChecksums(p); copy(m.begin(), m.end(), inserter(checksums, checksums.begin())); } - FileTracker::instance()->setSource(*i, os.str(), false); + FileTracker::instance()->setOutput(os.str(), false); } catch(const Slice::FileException& ex) { @@ -302,7 +304,7 @@ main(int argc, char* argv[]) FileTracker::instance()->cleanup(); p->destroy(); os << argv[0] << ": error: " << ex.reason() << endl; - FileTracker::instance()->setSource(*i, os.str(), true); + FileTracker::instance()->setOutput(os.str(), true); status = EXIT_FAILURE; break; } -- cgit v1.2.3