diff --git a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/BaseCppTest.java b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/BaseCppTest.java index e6a4526c2a..4b13b7ce43 100644 --- a/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/BaseCppTest.java +++ b/runtime-testsuite/test/org/antlr/v4/test/runtime/cpp/BaseCppTest.java @@ -394,7 +394,8 @@ protected void writeParserTestFile(String parserName, String lexerName, + "\n" + "\n" + "int main(int argc, const char* argv[]) {\n" - + " ANTLRFileStream input(argv[1]);\n" + + " ANTLRFileStream input;\n" + + " input.loadFromFile(argv[1]);\n" + " lexer(&input);\n" + " CommonTokenStream tokens(&lexer);\n" + "" @@ -436,7 +437,8 @@ protected void writeLexerTestFile(String lexerName, boolean showDFA) { + "using namespace antlr4;\n" + "\n" + "int main(int argc, const char* argv[]) {\n" - + " ANTLRFileStream input(argv[1]);\n" + + " ANTLRFileStream input;\n" + + " input.loadFromFile(argv[1]);\n" + " lexer(&input);\n" + " CommonTokenStream tokens(&lexer);\n" + " tokens.fill();\n" diff --git a/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj b/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj index 277186ce0d..17ab198483 100644 --- a/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +++ b/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -2226,7 +2226,7 @@ 37D727A21867AF1E007B6D10 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1030; + LastUpgradeCheck = 1240; ORGANIZATIONNAME = ANTLR; TargetAttributes = { 270C67EF1CDB4F1E00116E17 = { @@ -2238,7 +2238,7 @@ }; }; buildConfigurationList = 37D727A51867AF1E007B6D10 /* Build configuration list for PBXProject "antlrcpp" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -2751,8 +2751,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = "antlrcpp-ios/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "org.antlr.v4.runtime.antlrcpp-ios"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2782,8 +2786,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = "antlrcpp-ios/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "org.antlr.v4.runtime.antlrcpp-ios"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2841,8 +2849,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_ASSIGN_ENUM = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; @@ -2857,6 +2864,7 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; @@ -2889,8 +2897,12 @@ GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "src/ thirdparty/utfcpp/source/ thirdparty/utfcpp/source/utf8/"; - MACOSX_DEPLOYMENT_TARGET = 10.9; + HEADER_SEARCH_PATHS = ( + src/, + thirdparty/utfcpp/source/, + thirdparty/utfcpp/source/utf8/, + ); + MACOSX_DEPLOYMENT_TARGET = 11.1; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; @@ -2901,8 +2913,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_ASSIGN_ENUM = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; @@ -2917,6 +2928,7 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; @@ -2945,8 +2957,12 @@ GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "src/ thirdparty/utfcpp/source/ thirdparty/utfcpp/source/utf8/"; - MACOSX_DEPLOYMENT_TARGET = 10.9; + HEADER_SEARCH_PATHS = ( + src/, + thirdparty/utfcpp/source/, + thirdparty/utfcpp/source/utf8/, + ); + MACOSX_DEPLOYMENT_TARGET = 11.1; SDKROOT = macosx; }; name = Release; diff --git a/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme b/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme index dc8e3432a7..701bbf3838 100644 --- a/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme +++ b/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme @@ -1,6 +1,6 @@ - - - - - - - - + #include "Exceptions.h" #include "misc/Interval.h" #include "IntStream.h" @@ -17,44 +19,41 @@ using namespace antlrcpp; using misc::Interval; +ANTLRInputStream::ANTLRInputStream() { + InitializeInstanceFields(); +} + #if __cplusplus >= 201703L -ANTLRInputStream::ANTLRInputStream(std::string_view input) { -#else -ANTLRInputStream::ANTLRInputStream(const std::string &input) { +ANTLRInputStream::ANTLRInputStream(const std::string_view &input): ANTLRInputStream() { + load(input.data(), input.length()); +} #endif - InitializeInstanceFields(); - load(input); + +ANTLRInputStream::ANTLRInputStream(const std::string &input): ANTLRInputStream() { + load(input.data(), input.size()); } -ANTLRInputStream::ANTLRInputStream(const char data_[], size_t numberOfActualCharsInArray) - : ANTLRInputStream(std::string(data_, numberOfActualCharsInArray)) { +ANTLRInputStream::ANTLRInputStream(const char *data, size_t length) { + load(data, length); } -ANTLRInputStream::ANTLRInputStream(std::istream &stream) { - InitializeInstanceFields(); +ANTLRInputStream::ANTLRInputStream(std::istream &stream): ANTLRInputStream() { load(stream); } -#if __cplusplus >= 201703L -void ANTLRInputStream::load(std::string_view input) { - // Remove the UTF-8 BOM if present. - constexpr std::string_view bom = "\xef\xbb\xbf"; - if (input.compare(0, 3, bom) == 0) - input.remove_prefix(3); - _data = antlrcpp::utf8_to_utf32(input.data(), input.data() + input.size()); - p = 0; -} -#else void ANTLRInputStream::load(const std::string &input) { + load(input.data(), input.size()); +} + +void ANTLRInputStream::load(const char *data, size_t length) { // Remove the UTF-8 BOM if present. - const char bom[4] = "\xef\xbb\xbf"; - if (input.compare(0, 3, bom, 3) == 0) - _data = antlrcpp::utf8_to_utf32(input.data() + 3, input.data() + input.size()); + const char *bom = "\xef\xbb\xbf"; + if (length >= 3 && strncmp(data, bom, 3) == 0) + _data = antlrcpp::utf8_to_utf32(data + 3, data + length); else - _data = antlrcpp::utf8_to_utf32(input.data(), input.data() + input.size()); + _data = antlrcpp::utf8_to_utf32(data, data + length); p = 0; } -#endif void ANTLRInputStream::load(std::istream &stream) { if (!stream.good() || stream.eof()) // No fail, bad or EOF. @@ -63,7 +62,7 @@ void ANTLRInputStream::load(std::istream &stream) { _data.clear(); std::string s((std::istreambuf_iterator(stream)), std::istreambuf_iterator()); - load(s); + load(s.data(), s.length()); } void ANTLRInputStream::reset() { diff --git a/runtime/Cpp/runtime/src/ANTLRInputStream.h b/runtime/Cpp/runtime/src/ANTLRInputStream.h index 7b575df2e9..fdf857e3e3 100755 --- a/runtime/Cpp/runtime/src/ANTLRInputStream.h +++ b/runtime/Cpp/runtime/src/ANTLRInputStream.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. * Use of this file is governed by the BSD 3-clause license that * can be found in the LICENSE.txt file in the project root. */ @@ -25,19 +25,18 @@ namespace antlr4 { /// What is name or source of this char stream? std::string name; + ANTLRInputStream(); + #if __cplusplus >= 201703L - ANTLRInputStream(std::string_view input = ""); -#else - ANTLRInputStream(const std::string &input = ""); + ANTLRInputStream(const std::string_view &input); #endif - ANTLRInputStream(const char data_[], size_t numberOfActualCharsInArray); + + ANTLRInputStream(const std::string &input); + ANTLRInputStream(const char *data, size_t length); ANTLRInputStream(std::istream &stream); -#if __cplusplus >= 201703L - virtual void load(std::string_view input); -#else virtual void load(const std::string &input); -#endif + virtual void load(const char *data, size_t length); virtual void load(std::istream &stream); /// Reset the stream so that it's in the same state it was diff --git a/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp b/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp index 025c9c9377..01c83c15e6 100755 --- a/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +++ b/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp @@ -1348,7 +1348,9 @@ Parser* ParserATNSimulator::getParser() { return parser; } -#pragma warning (disable:4996) // 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. +#ifdef _MSC_VER +#pragma warning (disable:4996) // 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. +#endif bool ParserATNSimulator::getLrLoopSetting() { char *var = std::getenv("TURN_OFF_LR_LOOP_ENTRY_BRANCH_OPT"); @@ -1358,7 +1360,9 @@ bool ParserATNSimulator::getLrLoopSetting() { return value == "true" || value == "1"; } +#ifdef _MSC_VER #pragma warning (default:4996) +#endif void ParserATNSimulator::InitializeInstanceFields() { _mode = PredictionMode::LL;