From 3e8a76588121fd0e92be1e63c7f3bf738f53cfd0 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 18 Sep 2017 15:05:33 +0200
Subject: [PATCH] rethrow parsed exception in abstraction

---
 aarbology2/src/aarbology.cpp                             | 2 ++
 acast2/src/acast.cpp                                     | 2 ++
 acompaction2/src/acompaction.cpp                         | 2 ++
 aconversions2/src/aconversion.cpp                        | 2 ++
 aderivation2/src/aderivation.cpp                         | 2 ++
 adeterminize2/src/adeterminize.cpp                       | 2 ++
 aecho2/src/aecho.cpp                                     | 2 ++
 aepsilon2/src/aepsilon.cpp                               | 2 ++
 agenerate2/src/agenerate.cpp                             | 2 ++
 aintegral2/src/aintegral.cpp                             | 2 ++
 alangop2/src/alangop.cpp                                 | 2 ++
 alib2cli/src/ast/params/FileParam.h                      | 4 +++-
 alib2cli/src/ast/statements/FileStatement.cpp            | 4 +++-
 alib2common/src/abstraction/CastRegistry.hpp             | 1 +
 alib2common/src/abstraction/DowncastRegistry.hpp         | 1 +
 alib2common/src/abstraction/ImmediateRegistry.hpp        | 5 ++---
 alib2common/src/abstraction/NormalizeRegistry.hpp        | 1 +
 alib2common/src/abstraction/OperationAbstraction.hpp     | 1 -
 alib2common/src/abstraction/ValuePrinterRegistry.hpp     | 1 +
 alib2common/src/abstraction/XmlComposerAbstraction.hpp   | 1 +
 alib2common/src/abstraction/XmlComposerRegistry.hpp      | 1 +
 alib2common/src/abstraction/XmlFileWriterAbstraction.hpp | 1 +
 alib2common/src/abstraction/XmlFileWriterRegistry.hpp    | 1 +
 alib2common/src/abstraction/XmlParserAbstraction.hpp     | 8 ++++++++
 alib2common/src/abstraction/XmlParserRegistry.hpp        | 2 ++
 aminimize2/src/aminimize.cpp                             | 2 ++
 anormalize2/src/anormalize.cpp                           | 2 ++
 aql2/src/aql.cpp                                         | 2 ++
 aql2/src/prompt/Prompt.cpp                               | 2 ++
 aquery2/src/aquery.cpp                                   | 2 ++
 arand2/src/arand.cpp                                     | 2 ++
 arename2/src/arename.cpp                                 | 2 ++
 areverse2/src/areverse.cpp                               | 2 ++
 arun2/src/arun.cpp                                       | 2 ++
 astringology2/src/astringology.cpp                       | 2 ++
 atrim2/src/atrim.cpp                                     | 2 ++
 36 files changed, 70 insertions(+), 6 deletions(-)

diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp
index 40f838d0a9..7116a1a1db 100644
--- a/aarbology2/src/aarbology.cpp
+++ b/aarbology2/src/aarbology.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/acast2/src/acast.cpp b/acast2/src/acast.cpp
index 357c92b93a..c680c38079 100644
--- a/acast2/src/acast.cpp
+++ b/acast2/src/acast.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 // -----------------------------------------------------------------------------------------
 
 int main(int argc, char** argv) {
diff --git a/acompaction2/src/acompaction.cpp b/acompaction2/src/acompaction.cpp
index a6b397d575..7988e0e841 100644
--- a/acompaction2/src/acompaction.cpp
+++ b/acompaction2/src/acompaction.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aconversions2/src/aconversion.cpp b/aconversions2/src/aconversion.cpp
index ddf86ad296..ae63ccebd3 100644
--- a/aconversions2/src/aconversion.cpp
+++ b/aconversions2/src/aconversion.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 #include "ConversionHandler.h"
 
 int main ( int argc, char * argv[] ) {
diff --git a/aderivation2/src/aderivation.cpp b/aderivation2/src/aderivation.cpp
index b6dd82e440..658e249cdc 100644
--- a/aderivation2/src/aderivation.cpp
+++ b/aderivation2/src/aderivation.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/adeterminize2/src/adeterminize.cpp b/adeterminize2/src/adeterminize.cpp
index d03e680367..aa2be2e2b4 100644
--- a/adeterminize2/src/adeterminize.cpp
+++ b/adeterminize2/src/adeterminize.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * * argv ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aecho2/src/aecho.cpp b/aecho2/src/aecho.cpp
index 935b7a3e8e..2acb4b3520 100644
--- a/aecho2/src/aecho.cpp
+++ b/aecho2/src/aecho.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aepsilon2/src/aepsilon.cpp b/aepsilon2/src/aepsilon.cpp
index bafcd33ce9..6757f8c1b0 100644
--- a/aepsilon2/src/aepsilon.cpp
+++ b/aepsilon2/src/aepsilon.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/agenerate2/src/agenerate.cpp b/agenerate2/src/agenerate.cpp
index d0e8271b9c..633a890458 100644
--- a/agenerate2/src/agenerate.cpp
+++ b/agenerate2/src/agenerate.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aintegral2/src/aintegral.cpp b/aintegral2/src/aintegral.cpp
index fae81777ec..bda22e659f 100644
--- a/aintegral2/src/aintegral.cpp
+++ b/aintegral2/src/aintegral.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/alangop2/src/alangop.cpp b/alangop2/src/alangop.cpp
index a60085a6e4..ad6f226ae6 100644
--- a/alangop2/src/alangop.cpp
+++ b/alangop2/src/alangop.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char* argv[]) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/alib2cli/src/ast/params/FileParam.h b/alib2cli/src/ast/params/FileParam.h
index 4c50a5e387..4a83ee066c 100644
--- a/alib2cli/src/ast/params/FileParam.h
+++ b/alib2cli/src/ast/params/FileParam.h
@@ -16,7 +16,9 @@ public:
 	virtual std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > &, Environment & environment ) const override {
 		ext::deque < sax::Token > tokens = sax::FromXMLParserHelper::parseInput ( m_arg->eval ( environment ) );
 		std::string type = tokens [ 0 ].getData ( );
-		return abstraction::Registry::getXmlParserAbstraction ( type, tokens );
+		std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getXmlParserAbstraction ( type, tokens );
+		res->eval ( );
+		return res;
 	}
 };
 
diff --git a/alib2cli/src/ast/statements/FileStatement.cpp b/alib2cli/src/ast/statements/FileStatement.cpp
index 98a0ad940d..15920e32ee 100644
--- a/alib2cli/src/ast/statements/FileStatement.cpp
+++ b/alib2cli/src/ast/statements/FileStatement.cpp
@@ -18,7 +18,9 @@ std::shared_ptr < abstraction::OperationAbstraction > FileStatement::translateAn
 	if ( type == "" )
 		type = tokens [ 0 ].getData ( );
 
-	return abstraction::Registry::getXmlParserAbstraction ( type, tokens );
+	std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getXmlParserAbstraction ( type, std::move ( tokens ) );
+	res->eval ( );
+	return res;
 }
 
 } /* namespace cli */
diff --git a/alib2common/src/abstraction/CastRegistry.hpp b/alib2common/src/abstraction/CastRegistry.hpp
index b685188769..ab4b03720b 100644
--- a/alib2common/src/abstraction/CastRegistry.hpp
+++ b/alib2common/src/abstraction/CastRegistry.hpp
@@ -11,6 +11,7 @@
 #include <memory>
 #include <string>
 #include <set>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/DowncastRegistry.hpp b/alib2common/src/abstraction/DowncastRegistry.hpp
index 331f477e69..a073e5788a 100644
--- a/alib2common/src/abstraction/DowncastRegistry.hpp
+++ b/alib2common/src/abstraction/DowncastRegistry.hpp
@@ -10,6 +10,7 @@
 
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/ImmediateRegistry.hpp b/alib2common/src/abstraction/ImmediateRegistry.hpp
index 369995e001..a4e1d273fc 100644
--- a/alib2common/src/abstraction/ImmediateRegistry.hpp
+++ b/alib2common/src/abstraction/ImmediateRegistry.hpp
@@ -8,10 +8,9 @@
 #ifndef _IMMEDIATE_REGISTRY_HPP_
 #define _IMMEDIATE_REGISTRY_HPP_
 
-#include <factory/XmlDataFactory.hpp>
-
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
@@ -43,7 +42,7 @@ public:
 	template < class ResultType >
 	static void registerImmediate ( std::string result ) {
 		if ( ! getEntries ( ).insert ( std::make_pair ( result, std::unique_ptr < Entry > ( new EntryImpl < ResultType > ( ) ) ) ).second )
-			throw ::exception::CommonException ( "Entry " + result + " already registered." );
+			throw exception::CommonException ( "Entry " + result + " already registered." );
 	}
 
 	template < class ResultType >
diff --git a/alib2common/src/abstraction/NormalizeRegistry.hpp b/alib2common/src/abstraction/NormalizeRegistry.hpp
index a5791d6d00..fc5e768ff8 100644
--- a/alib2common/src/abstraction/NormalizeRegistry.hpp
+++ b/alib2common/src/abstraction/NormalizeRegistry.hpp
@@ -10,6 +10,7 @@
 
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/OperationAbstraction.hpp b/alib2common/src/abstraction/OperationAbstraction.hpp
index 258d42e38f..d37e9f12b2 100644
--- a/alib2common/src/abstraction/OperationAbstraction.hpp
+++ b/alib2common/src/abstraction/OperationAbstraction.hpp
@@ -14,7 +14,6 @@
 #include <functional>
 
 #include <exception/CommonException.h>
-#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
diff --git a/alib2common/src/abstraction/ValuePrinterRegistry.hpp b/alib2common/src/abstraction/ValuePrinterRegistry.hpp
index 8d797d1ec7..d3851708e7 100644
--- a/alib2common/src/abstraction/ValuePrinterRegistry.hpp
+++ b/alib2common/src/abstraction/ValuePrinterRegistry.hpp
@@ -10,6 +10,7 @@
 
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/XmlComposerAbstraction.hpp b/alib2common/src/abstraction/XmlComposerAbstraction.hpp
index da4003dbcc..d3cd659e2d 100644
--- a/alib2common/src/abstraction/XmlComposerAbstraction.hpp
+++ b/alib2common/src/abstraction/XmlComposerAbstraction.hpp
@@ -10,6 +10,7 @@
 
 #include <abstraction/UnaryOperationAbstraction.hpp>
 #include <tuple>
+#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
diff --git a/alib2common/src/abstraction/XmlComposerRegistry.hpp b/alib2common/src/abstraction/XmlComposerRegistry.hpp
index 7b85af772d..89b4ed56d5 100644
--- a/alib2common/src/abstraction/XmlComposerRegistry.hpp
+++ b/alib2common/src/abstraction/XmlComposerRegistry.hpp
@@ -11,6 +11,7 @@
 #include <memory>
 #include <string>
 #include <set>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/XmlFileWriterAbstraction.hpp b/alib2common/src/abstraction/XmlFileWriterAbstraction.hpp
index c4283495b8..07a4f47f9a 100644
--- a/alib2common/src/abstraction/XmlFileWriterAbstraction.hpp
+++ b/alib2common/src/abstraction/XmlFileWriterAbstraction.hpp
@@ -10,6 +10,7 @@
 
 #include <abstraction/UnaryOperationAbstraction.hpp>
 #include <tuple>
+#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
diff --git a/alib2common/src/abstraction/XmlFileWriterRegistry.hpp b/alib2common/src/abstraction/XmlFileWriterRegistry.hpp
index bca003992a..3bf2a05406 100644
--- a/alib2common/src/abstraction/XmlFileWriterRegistry.hpp
+++ b/alib2common/src/abstraction/XmlFileWriterRegistry.hpp
@@ -11,6 +11,7 @@
 #include <memory>
 #include <string>
 #include <set>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/XmlParserAbstraction.hpp b/alib2common/src/abstraction/XmlParserAbstraction.hpp
index 5011921ef8..90db4e5263 100644
--- a/alib2common/src/abstraction/XmlParserAbstraction.hpp
+++ b/alib2common/src/abstraction/XmlParserAbstraction.hpp
@@ -10,6 +10,8 @@
 
 #include <abstraction/NullaryOperationAbstraction.hpp>
 #include <tuple>
+#include <exception/CommonException.h>
+#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
@@ -31,6 +33,12 @@ public:
 	}
 };
 
+template < >
+inline bool XmlParserAbstraction < exception::CommonException >::run ( ) {
+	exception::CommonException ex = alib::XmlDataFactory::fromTokens ( std::move ( m_tokens ) );
+	throw ex;
+}
+
 } /* namespace abstraction */
 
 #endif /* _XML_PARSER_ABSTRACTION_HPP_ */
diff --git a/alib2common/src/abstraction/XmlParserRegistry.hpp b/alib2common/src/abstraction/XmlParserRegistry.hpp
index eef86abb62..cce9aaf60b 100644
--- a/alib2common/src/abstraction/XmlParserRegistry.hpp
+++ b/alib2common/src/abstraction/XmlParserRegistry.hpp
@@ -10,9 +10,11 @@
 
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
+#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
diff --git a/aminimize2/src/aminimize.cpp b/aminimize2/src/aminimize.cpp
index f9686bfce8..80994a095e 100644
--- a/aminimize2/src/aminimize.cpp
+++ b/aminimize2/src/aminimize.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/anormalize2/src/anormalize.cpp b/anormalize2/src/anormalize.cpp
index 2afa35add0..f340f745c2 100644
--- a/anormalize2/src/anormalize.cpp
+++ b/anormalize2/src/anormalize.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * * argv ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aql2/src/aql.cpp b/aql2/src/aql.cpp
index c5de390dc3..1b7403027f 100644
--- a/aql2/src/aql.cpp
+++ b/aql2/src/aql.cpp
@@ -34,6 +34,8 @@ std::istream& operator>> ( std::istream & in, std::pair < T, U > & value ) {
 
 #include "prompt/Prompt.h"
 
+#include <factory/XmlDataFactory.hpp>
+
 namespace TCLAP {
 
 template < class T, class U >
diff --git a/aql2/src/prompt/Prompt.cpp b/aql2/src/prompt/Prompt.cpp
index 144bdfc832..5a4507b9ba 100644
--- a/aql2/src/prompt/Prompt.cpp
+++ b/aql2/src/prompt/Prompt.cpp
@@ -17,6 +17,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 char * Prompt::stripwhite ( char * begin ) {
 	while ( isspace ( * begin ) )
 		++ begin;
diff --git a/aquery2/src/aquery.cpp b/aquery2/src/aquery.cpp
index 5dec9ad18a..ca1733ebfd 100644
--- a/aquery2/src/aquery.cpp
+++ b/aquery2/src/aquery.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/arand2/src/arand.cpp b/arand2/src/arand.cpp
index 039b02d443..810466a114 100644
--- a/arand2/src/arand.cpp
+++ b/arand2/src/arand.cpp
@@ -14,6 +14,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/arename2/src/arename.cpp b/arename2/src/arename.cpp
index 18384e979d..29da8c7f1d 100644
--- a/arename2/src/arename.cpp
+++ b/arename2/src/arename.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * * argv ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/areverse2/src/areverse.cpp b/areverse2/src/areverse.cpp
index d2f39fe7c5..9d3249e0ac 100644
--- a/areverse2/src/areverse.cpp
+++ b/areverse2/src/areverse.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/arun2/src/arun.cpp b/arun2/src/arun.cpp
index 2b2d7f24be..be4785f260 100644
--- a/arun2/src/arun.cpp
+++ b/arun2/src/arun.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char* argv[]) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/astringology2/src/astringology.cpp b/astringology2/src/astringology.cpp
index 7e9ff82c57..4a05c94f1c 100644
--- a/astringology2/src/astringology.cpp
+++ b/astringology2/src/astringology.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/atrim2/src/atrim.cpp b/atrim2/src/atrim.cpp
index 694eb4d140..29c65c1e20 100644
--- a/atrim2/src/atrim.cpp
+++ b/atrim2/src/atrim.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 std::string trimGrammar ( bool del_unreachable, bool del_unproductive ) {
 	if( del_unreachable && del_unproductive )
 		return "execute grammar::simplify::Trim $input > $output";
-- 
GitLab