diff --git a/contributors.txt b/contributors.txt index 39af403dc..368c00d28 100644 --- a/contributors.txt +++ b/contributors.txt @@ -269,6 +269,7 @@ YYYY/MM/DD, github id, Full name, email 2020/06/02, cohomology, Kilian Kilger, kkilger AT gmail.com 2020/06/04, IohannRabeson, Iohann Rabeson, iotaka6@gmail.com 2020/06/04, sigmasoldi3r, Pablo Blanco, pablobc.1995@gmail.com +2020/06/15, mattpaletta, Matthew Paletta, mattpaletta@gmail.com 2020/07/01, sha-N, Shan M Mathews, admin@bluestarqatar.com 2020/08/22, stevenjohnstone, Steven Johnstone, steven.james.johnstone@gmail.com 2020/09/06, ArthurSonzogni, Sonzogni Arthur, arthursonzogni@gmail.com @@ -286,7 +287,10 @@ YYYY/MM/DD, github id, Full name, email 2020/12/03, electrum, David Phillips, david@acz.org 2021/01/25, l215884529, Qiheng Liu, 13607681+l215884529@users.noreply.github.com 2021/02/02, tsotnikov, Taras Sotnikov, taras.sotnikov@gmail.com +2021/02/10, jirislaby, Jiri Slaby, jirislaby@gmail.com 2021/02/21, namasikanam, Xingyu Xie, namasikanam@gmail.com 2021/02/27, khmarbaise, Karl Heinz Marbaise, github@soebes.com 2021/03/02, hackeris 2021/03/03, xTachyon, Damian Andrei, xTachyon@users.noreply.github.com +2021/04/07, b1f6c1c4, Jinzheng Tu, b1f6c1c4@gmail.com +2021/04/24, bigerl, Alexander Bigerl, alexander [äät] bigerl [pkt] eu diff --git a/dsjdjsfjk.js b/dsjdjsfjk.js new file mode 100644 index 000000000..a48ab5441 --- /dev/null +++ b/dsjdjsfjk.js @@ -0,0 +1,5 @@ + +dsdfewrfff +function d(){ + dsflsfks;lfksldf +} \ No newline at end of file diff --git a/runtime/Cpp/cmake/ExternalAntlr4Cpp.cmake b/runtime/Cpp/cmake/ExternalAntlr4Cpp.cmake index 4d037cf50..18adff3bb 100644 --- a/runtime/Cpp/cmake/ExternalAntlr4Cpp.cmake +++ b/runtime/Cpp/cmake/ExternalAntlr4Cpp.cmake @@ -112,7 +112,7 @@ else() EXCLUDE_FROM_ALL 1) endif() -# Seperate build step as rarely people want both +# Separate build step as rarely people want both set(ANTLR4_BUILD_DIR ${ANTLR4_ROOT}) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14.0") # CMake 3.14 builds in above's SOURCE_SUBDIR when BUILD_IN_SOURCE is true diff --git a/runtime/Cpp/runtime/CMakeLists.txt b/runtime/Cpp/runtime/CMakeLists.txt index a8503bb61..c10a4bf31 100644 --- a/runtime/Cpp/runtime/CMakeLists.txt +++ b/runtime/Cpp/runtime/CMakeLists.txt @@ -1,19 +1,3 @@ - -include(${CMAKE_ROOT}/Modules/ExternalProject.cmake) - -set(THIRDPARTY_DIR ${CMAKE_BINARY_DIR}/runtime/thirdparty) -set(UTFCPP_DIR ${THIRDPARTY_DIR}/utfcpp) -ExternalProject_Add( - utfcpp - GIT_REPOSITORY "git://github.com/nemtrif/utfcpp" - GIT_TAG "v3.1.1" - SOURCE_DIR ${UTFCPP_DIR} - UPDATE_DISCONNECTED 1 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${UTFCPP_DIR}/install -Dgtest_force_shared_crt=ON - TEST_AFTER_INSTALL 1 - STEP_TARGETS build) - - include_directories( ${PROJECT_SOURCE_DIR}/runtime/src ${PROJECT_SOURCE_DIR}/runtime/src/atn @@ -23,8 +7,6 @@ include_directories( ${PROJECT_SOURCE_DIR}/runtime/src/tree ${PROJECT_SOURCE_DIR}/runtime/src/tree/pattern ${PROJECT_SOURCE_DIR}/runtime/src/tree/xpath - ${UTFCPP_DIR}/install/include/utf8cpp - ${UTFCPP_DIR}/install/include/utf8cpp/utf8 ) @@ -50,8 +32,48 @@ add_custom_target(make_lib_output_dir ALL COMMAND ${CMAKE_COMMAND} -E make_directory ${LIB_OUTPUT_DIR} ) -add_dependencies(antlr4_shared make_lib_output_dir utfcpp) -add_dependencies(antlr4_static make_lib_output_dir utfcpp) +add_dependencies(antlr4_shared make_lib_output_dir) +add_dependencies(antlr4_static make_lib_output_dir) + +find_package(utf8cpp QUIET) + +set(INSTALL_utf8cpp FALSE) + +if (utf8cpp_FOUND) + target_link_libraries(antlr4_shared utf8cpp) + target_link_libraries(antlr4_static utf8cpp) +else() + + # older utf8cpp doesn't define the package above + find_path(utf8cpp_HEADER utf8.h + PATH_SUFFIXES utf8cpp + ) + + if (utf8cpp_HEADER) + include_directories(${utf8cpp_HEADER}) + else() + include(${CMAKE_ROOT}/Modules/ExternalProject.cmake) + set(THIRDPARTY_DIR ${CMAKE_BINARY_DIR}/runtime/thirdparty) + set(UTFCPP_DIR ${THIRDPARTY_DIR}/utfcpp) + ExternalProject_Add( + utf8cpp + GIT_REPOSITORY "git://github.com/nemtrif/utfcpp" + GIT_TAG "v3.1.1" + SOURCE_DIR ${UTFCPP_DIR} + UPDATE_DISCONNECTED 1 + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${UTFCPP_DIR}/install -DUTF8_TESTS=off -DUTF8_SAMPLES=off + STEP_TARGETS build) + + include_directories( + ${UTFCPP_DIR}/install/include/utf8cpp + ${UTFCPP_DIR}/install/include/utf8cpp/utf8 + ) + + add_dependencies(antlr4_shared utf8cpp) + add_dependencies(antlr4_static utf8cpp) + set(INSTALL_utf8cpp TRUE) + endif() +endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") target_link_libraries(antlr4_shared ${UUID_LIBRARIES}) @@ -131,13 +153,15 @@ install(DIRECTORY "${PROJECT_SOURCE_DIR}/runtime/src/" FILES_MATCHING PATTERN "*.h" ) -install(FILES "${UTFCPP_DIR}/source/utf8.h" - DESTINATION "include/antlr4-runtime") -install(DIRECTORY "${UTFCPP_DIR}/source/utf8" - DESTINATION "include/antlr4-runtime" - COMPONENT dev - FILES_MATCHING PATTERN "*.h" - ) +if (INSTALL_utf8cpp) + install(FILES "${UTFCPP_DIR}/source/utf8.h" + DESTINATION "include/antlr4-runtime") + install(DIRECTORY "${UTFCPP_DIR}/source/utf8" + DESTINATION "include/antlr4-runtime" + COMPONENT dev + FILES_MATCHING PATTERN "*.h" + ) +endif() diff --git a/runtime/Cpp/runtime/src/antlr4-common.h b/runtime/Cpp/runtime/src/antlr4-common.h index 47312978a..020c6a560 100644 --- a/runtime/Cpp/runtime/src/antlr4-common.h +++ b/runtime/Cpp/runtime/src/antlr4-common.h @@ -34,7 +34,6 @@ #include #include #include -#include #ifndef USE_UTF8_INSTEAD_OF_CODECVT #include diff --git a/runtime/Cpp/runtime/src/support/Any.h b/runtime/Cpp/runtime/src/support/Any.h index 468db9894..e80bedeb2 100644 --- a/runtime/Cpp/runtime/src/support/Any.h +++ b/runtime/Cpp/runtime/src/support/Any.h @@ -65,16 +65,26 @@ struct ANTLR4CPP_PUBLIC Any return derived->value; } - template + template::value || std::is_copy_assignable::value>::value> operator U() { return as>(); } - template + template::value && !std::is_copy_assignable::value) && (std::is_move_constructible::value || std::is_move_assignable::value)>::value> + operator U() { + return std::move(as>()); + } + + template::value || std::is_copy_assignable::value>::value> operator const U() const { return as>(); } + template::value && !std::is_copy_assignable::value) && (std::is_move_constructible::value || std::is_move_assignable::value)>::value> + operator const U() const { + return std::move(as>()); + } + Any& operator = (const Any& a) { if (_ptr == a._ptr) return *this; @@ -99,7 +109,7 @@ struct ANTLR4CPP_PUBLIC Any virtual ~Any(); - virtual bool equals(Any other) const { + virtual bool equals(const Any& other) const { return _ptr == other._ptr; } diff --git a/runtime/Cpp/runtime/src/support/CPPUtils.cpp b/runtime/Cpp/runtime/src/support/CPPUtils.cpp index 86a3751a2..496f6c932 100755 --- a/runtime/Cpp/runtime/src/support/CPPUtils.cpp +++ b/runtime/Cpp/runtime/src/support/CPPUtils.cpp @@ -202,12 +202,6 @@ namespace antlrcpp { return result; } - //----------------- FinallyAction ------------------------------------------------------------------------------------ - - FinalAction finally(std::function f) { - return FinalAction(f); - } - //----------------- SingleWriteMultipleRead -------------------------------------------------------------------------- void SingleWriteMultipleReadLock::readLock() { diff --git a/runtime/Cpp/runtime/src/support/CPPUtils.h b/runtime/Cpp/runtime/src/support/CPPUtils.h index fc83503cf..5f2ad609f 100644 --- a/runtime/Cpp/runtime/src/support/CPPUtils.h +++ b/runtime/Cpp/runtime/src/support/CPPUtils.h @@ -19,8 +19,9 @@ namespace antlrcpp { std::string indent(const std::string &s, const std::string &indentation, bool includingFirst = true); // Using RAII + a lambda to implement a "finally" replacement. + template struct FinalAction { - FinalAction(std::function f) : _cleanUp { f } {} + FinalAction(OnEnd f) : _cleanUp { std::move(f) } {} FinalAction(FinalAction &&other) : _cleanUp(std::move(other._cleanUp)), _enabled(other._enabled) { other._enabled = false; // Don't trigger the lambda after ownership has moved. @@ -29,11 +30,14 @@ namespace antlrcpp { void disable() { _enabled = false; } private: - std::function _cleanUp; + OnEnd _cleanUp; bool _enabled {true}; }; - ANTLR4CPP_PUBLIC FinalAction finally(std::function f); + template + FinalAction finally(OnEnd f) { + return FinalAction(std::move(f)); + } // Convenience functions to avoid lengthy dynamic_cast() != nullptr checks in many places. template