diff --git a/CMakeLists.txt b/CMakeLists.txt index 30e4eb7..5d5b689 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,4 @@ cmake_minimum_required(VERSION 2.8) -add_definitions("-std=c++1y") # Check if a supported compiler is used and add c++14 flag: if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") @@ -7,7 +6,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") message(FATAL_ERROR "Need at least gcc 4.9 to compile.") endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") +elseif(MSVC) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19) message(FATAL_ERROR "Visual Studio 2015 or newer is required.") endif() @@ -53,14 +52,25 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" ) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(warning_options -Wall -Wpedantic -Wextra) -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - set(warning_options /WX /W4 /wd4503 /wd4512) +elseif(MSVC) + set(warning_options /W4 /wd4503 /wd4512) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(add_link_deps pthread) +endif() + +if(MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8") endif() enable_testing() -add_subdirectory(lint) add_subdirectory(test) add_subdirectory(example) + +if(NOT MSVC) +add_subdirectory(lint) add_subdirectory(language/pl0) add_subdirectory(language/culebra) +endif() \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..b63b49e --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,16 @@ +clone_depth: 5 + +environment: + matrix: + - CMAKE_GENERATOR: "Visual Studio 14 2015" + CONFIGURATION: Release + - CMAKE_GENERATOR: "Visual Studio 14 2015 Win64" + CONFIGURATION: Release + +build_script: + - mkdir build && cd build + - cmake .. -Wno-dev -G"%CMAKE_GENERATOR%" + - cmake --build . --config %CONFIGURATION% + +test_script: + - ctest -C %CONFIGURATION% -V diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 46b3621..84aff73 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,12 +1,17 @@ cmake_minimum_required(VERSION 2.8) include_directories(..) -add_compile_options(${cxx11_options} ${warning_options}) + +if(MSVC) + add_compile_options(${cxx11_options} /W3) +else() + add_compile_options(${cxx11_options}) +endif() add_executable(calc calc.cc) -target_link_libraries(calc pthread) +target_link_libraries(calc ${add_link_deps}) add_executable(calc2 calc2.cc) -target_link_libraries(calc2 pthread) +target_link_libraries(calc2 ${add_link_deps}) add_executable(calc3 calc3.cc) -target_link_libraries(calc3 pthread) +target_link_libraries(calc3 ${add_link_deps}) diff --git a/language/culebra/CMakeLists.txt b/language/culebra/CMakeLists.txt index 2a19fbf..fc25488 100644 --- a/language/culebra/CMakeLists.txt +++ b/language/culebra/CMakeLists.txt @@ -1,4 +1,11 @@ cmake_minimum_required(VERSION 2.8) include_directories(../..) +if(MSVC) + add_compile_options(${cxx11_options} /W3) + add_definitions(-DUNICODE) +else() + add_compile_options(${cxx11_options}) +endif() + add_executable(culebra main.cc) diff --git a/language/pl0/CMakeLists.txt b/language/pl0/CMakeLists.txt index 0465843..91597ea 100644 --- a/language/pl0/CMakeLists.txt +++ b/language/pl0/CMakeLists.txt @@ -1,4 +1,10 @@ cmake_minimum_required(VERSION 2.8) include_directories(../..) +if(MSVC) + add_compile_options(${cxx11_options} /W0) +else() + add_compile_options(${cxx11_options}) +endif() + add_executable(pl0 pl0.cc) diff --git a/lint/CMakeLists.txt b/lint/CMakeLists.txt index d4e20ca..02bdca9 100644 --- a/lint/CMakeLists.txt +++ b/lint/CMakeLists.txt @@ -1,4 +1,10 @@ cmake_minimum_required(VERSION 2.8) include_directories(..) +if(MSVC) + add_compile_options(${cxx11_options} /W3) +else() + add_compile_options(${cxx11_options}) +endif() + add_executable(peglint peglint.cc server.cc) diff --git a/peglib.h b/peglib.h index 056323f..17c1d99 100644 --- a/peglib.h +++ b/peglib.h @@ -5,8 +5,8 @@ // MIT License // -#ifndef _CPPPEGLIB_PEGLIB_H_ -#define _CPPPEGLIB_PEGLIB_H_ +#ifndef CPPPEGLIB_PEGLIB_H +#define CPPPEGLIB_PEGLIB_H #include #include @@ -1104,6 +1104,8 @@ struct Ope::Visitor struct AssignIDToDefinition : public Ope::Visitor { + using Ope::Visitor::visit; + void visit(Sequence& ope) override { for (auto op: ope.opes_) { op->accept(*this); @@ -1133,6 +1135,8 @@ struct IsToken : public Ope::Visitor { IsToken() : has_token_boundary(false), has_rule(false) {} + using Ope::Visitor::visit; + void visit(Sequence& ope) override { for (auto op: ope.opes_) { op->accept(*this); @@ -1352,7 +1356,7 @@ private: inline size_t LiteralString::parse(const char* s, size_t n, SemanticValues& sv, Context& c, any& dt) const { c.trace("LiteralString", s, n, sv, dt); - auto i = 0u; + size_t i = 0; for (; i < lit_.size(); i++) { if (i >= n || s[i] != lit_[i]) { c.set_error_pos(s); @@ -1661,6 +1665,8 @@ private: DetectLeftRecursion(const std::string& name) : s_(nullptr), name_(name), done_(false) {} + using Ope::Visitor::visit; + void visit(Sequence& ope) override { for (auto op: ope.opes_) { op->accept(*this); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9d57012..3911957 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,6 +3,6 @@ include_directories(..) add_compile_options(${cxx11_options} ${warning_options}) add_executable(test-main test.cc) -target_link_libraries(test-main pthread) +target_link_libraries(test-main ${add_link_deps}) add_test(TestMain test-main)