Skip to content
Snippets Groups Projects
Commit 8c216322 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

fix segfaults in composers

parent a7bdcef1
No related branches found
No related tags found
No related merge requests found
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
   
namespace alib { namespace alib {
   
void ExceptionToXMLComposer::Visit(std::list<sax::Token>& out, const AlibException& exception) { void ExceptionToXMLComposer::Visit(void* userData, const AlibException& exception) {
std::list<sax::Token> &out = *((std::list<sax::Token>*) userData);
out.push_back(sax::Token("exception", sax::Token::START_ELEMENT)); out.push_back(sax::Token("exception", sax::Token::START_ELEMENT));
out.push_back(sax::Token(exception.getCause(), sax::Token::CHARACTER)); out.push_back(sax::Token(exception.getCause(), sax::Token::CHARACTER));
out.push_back(sax::Token("exception", sax::Token::END_ELEMENT)); out.push_back(sax::Token("exception", sax::Token::END_ELEMENT));
...@@ -17,7 +19,7 @@ void ExceptionToXMLComposer::Visit(std::list<sax::Token>& out, const AlibExcepti ...@@ -17,7 +19,7 @@ void ExceptionToXMLComposer::Visit(std::list<sax::Token>& out, const AlibExcepti
   
std::list<sax::Token> ExceptionToXMLComposer::compose(const AlibException& exception) { std::list<sax::Token> ExceptionToXMLComposer::compose(const AlibException& exception) {
std::list<sax::Token> out; std::list<sax::Token> out;
Visit(out, exception); Visit((void*) &out, exception);
return out; return out;
} }
   
......
...@@ -18,7 +18,7 @@ namespace alib { ...@@ -18,7 +18,7 @@ namespace alib {
* This class contains methods to print XML representation of string to the output stream. * This class contains methods to print XML representation of string to the output stream.
*/ */
class ExceptionToXMLComposer { class ExceptionToXMLComposer {
static void Visit(std::list<sax::Token>&, const AlibException& exception); static void Visit(void* userData, const AlibException& exception);
public: public:
/** /**
* Prints XML representation of AlibException to the output stream. * Prints XML representation of AlibException to the output stream.
......
...@@ -32,7 +32,7 @@ void SymbolToStringComposer::Visit(void* userData, const LabeledSymbol& symbol) ...@@ -32,7 +32,7 @@ void SymbolToStringComposer::Visit(void* userData, const LabeledSymbol& symbol)
std::stringstream &out = *((std::stringstream*) userData); std::stringstream &out = *((std::stringstream*) userData);
   
out << '\''; out << '\'';
Visit(out, symbol.getLabel()); Visit(userData, symbol.getLabel());
out << '\''; out << '\'';
} }
   
...@@ -49,7 +49,7 @@ void SymbolToStringComposer::Visit(void* userData, const Symbol& symbol) { ...@@ -49,7 +49,7 @@ void SymbolToStringComposer::Visit(void* userData, const Symbol& symbol) {
   
std::string SymbolToStringComposer::compose(const Symbol& symbol) { std::string SymbolToStringComposer::compose(const Symbol& symbol) {
std::stringstream out; std::stringstream out;
Visit(out, symbol); Visit((void*) &out, symbol);
return std::move(out).str(); return std::move(out).str();
} }
   
......
...@@ -8,13 +8,9 @@ ...@@ -8,13 +8,9 @@
#include "SymbolToXMLComposer.h" #include "SymbolToXMLComposer.h"
#include "LabeledSymbol.h" #include "LabeledSymbol.h"
   
namespace alphabet { #include "../ToXMLComposers.h"
void SymbolToXMLComposer::Visit(void* userData, const label::Label& label) const {
std::list<sax::Token> &out = *((std::list<sax::Token>*) userData);
   
out.push_back(sax::Token((std::string) label, sax::Token::CHARACTER)); namespace alphabet {
}
   
void SymbolToXMLComposer::Visit(void* userData, const BlankSymbol&) const { void SymbolToXMLComposer::Visit(void* userData, const BlankSymbol&) const {
std::list<sax::Token> &out = *((std::list<sax::Token>*) userData); std::list<sax::Token> &out = *((std::list<sax::Token>*) userData);
...@@ -27,7 +23,7 @@ void SymbolToXMLComposer::Visit(void* userData, const LabeledSymbol& symbol) con ...@@ -27,7 +23,7 @@ void SymbolToXMLComposer::Visit(void* userData, const LabeledSymbol& symbol) con
std::list<sax::Token> &out = *((std::list<sax::Token>*) userData); std::list<sax::Token> &out = *((std::list<sax::Token>*) userData);
   
out.push_back(sax::Token("LabeledSymbol", sax::Token::START_ELEMENT)); out.push_back(sax::Token("LabeledSymbol", sax::Token::START_ELEMENT));
Visit(userData, symbol.getLabel()); out.splice(out.end(), alib::ToXMLComposers::labelComposer.compose(symbol.getLabel()));
out.push_back(sax::Token("LabeledSymbol", sax::Token::END_ELEMENT)); out.push_back(sax::Token("LabeledSymbol", sax::Token::END_ELEMENT));
} }
   
......
...@@ -19,7 +19,6 @@ namespace alphabet { ...@@ -19,7 +19,6 @@ namespace alphabet {
* This class contains methods to print XML representation of string to the output stream. * This class contains methods to print XML representation of string to the output stream.
*/ */
class SymbolToXMLComposer : public SymbolBase::const_visitor_type { class SymbolToXMLComposer : public SymbolBase::const_visitor_type {
void Visit(void*, const label::Label& slabel) const;
void Visit(void*, const Symbol& symbol) const; void Visit(void*, const Symbol& symbol) const;
void Visit(void*, const LabeledSymbol& symbol) const; void Visit(void*, const LabeledSymbol& symbol) const;
void Visit(void*, const BlankSymbol& symbol) const; void Visit(void*, const BlankSymbol& symbol) const;
......
...@@ -46,7 +46,7 @@ void StringToStringComposer::Visit(void* userData, const CyclicString& string) { ...@@ -46,7 +46,7 @@ void StringToStringComposer::Visit(void* userData, const CyclicString& string) {
else else
out << ' '; out << ' ';
   
Visit(out, symbol); Visit(userData, symbol);
} }
out << ">"; out << ">";
   
...@@ -69,7 +69,7 @@ void StringToStringComposer::Visit(void* userData, const LinearString& string) { ...@@ -69,7 +69,7 @@ void StringToStringComposer::Visit(void* userData, const LinearString& string) {
else else
out << ' '; out << ' ';
Visit(out, symbol); Visit(userData, symbol);
} }
   
} }
...@@ -88,7 +88,7 @@ void StringToStringComposer::Visit(void* userData, const String& string) { ...@@ -88,7 +88,7 @@ void StringToStringComposer::Visit(void* userData, const String& string) {
   
std::string StringToStringComposer::compose(const String& string) { std::string StringToStringComposer::compose(const String& string) {
std::stringstream out; std::stringstream out;
Visit(out, string); Visit((void*) &out, string);
return std::move(out).str(); return std::move(out).str();
} }
   
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment