Dropped old Visual C++ compiler support.

This commit is contained in:
yhirose 2020-01-23 17:24:00 -05:00
parent 250096bd08
commit 64f205d949

View File

@ -1,7 +1,7 @@
// //
// peglib.h // peglib.h
// //
// Copyright (c) 2015-18 Yuji Hirose. All rights reserved. // Copyright (c) 2020 Yuji Hirose. All rights reserved.
// MIT License // MIT License
// //
@ -37,25 +37,17 @@
// guard for older versions of VC++ // guard for older versions of VC++
#ifdef _MSC_VER #ifdef _MSC_VER
// VS2013 has no constexpr #if (_MSC_VER < 1900)
#if (_MSC_VER == 1800) #error "Requires complete C+11 support"
#define PEGLIB_NO_CONSTEXPR_SUPPORT
#elif (_MSC_VER >= 1800)
// good to go
#else //(_MSC_VER < 1800)
#error "Requires C+11 support"
#endif #endif
#endif #endif
// define if the compiler doesn't support unicode characters reliably in the
// source code
//#define PEGLIB_NO_UNICODE_CHARS
namespace peg { namespace peg {
/*----------------------------------------------------------------------------- /*-----------------------------------------------------------------------------
* any * any
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#if PEGLIB_USE_STD_ANY #if PEGLIB_USE_STD_ANY
using any = std::any; using any = std::any;
@ -449,7 +441,6 @@ inline std::pair<size_t, size_t> line_info(const char* start, const char* cur) {
/* /*
* String tag * String tag
*/ */
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
inline constexpr unsigned int str2tag(const char* str, int h = 0) { inline constexpr unsigned int str2tag(const char* str, int h = 0) {
return (*str == '\0') ? h : str2tag(str + 1, (h * 33) ^ static_cast<unsigned char>(*str)); return (*str == '\0') ? h : str2tag(str + 1, (h * 33) ^ static_cast<unsigned char>(*str));
} }
@ -461,7 +452,6 @@ inline constexpr unsigned int operator "" _(const char* s, size_t) {
} }
} }
#endif
/* /*
* Semantic values * Semantic values
@ -483,9 +473,7 @@ struct SemanticValues : protected std::vector<any>
// Definition name // Definition name
const std::string& name() const { return name_; } const std::string& name() const { return name_; }
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
std::vector<unsigned int> tags; std::vector<unsigned int> tags;
#endif
// Line number and column at which the matched string is // Line number and column at which the matched string is
std::pair<size_t, size_t> line_info() const { std::pair<size_t, size_t> line_info() const {
@ -2581,11 +2569,7 @@ private:
seq(lit("\\u"), cls("0-9a-fA-F"), cls("0-9a-fA-F"), cls("0-9a-fA-F"), cls("0-9a-fA-F")), seq(lit("\\u"), cls("0-9a-fA-F"), cls("0-9a-fA-F"), cls("0-9a-fA-F"), cls("0-9a-fA-F")),
seq(npd(chr('\\')), dot())); seq(npd(chr('\\')), dot()));
#if defined(PEGLIB_NO_UNICODE_CHARS)
g["LEFTARROW"] <= seq(lit("<-"), g["Spacing"]);
#else
g["LEFTARROW"] <= seq(cho(lit("<-"), lit(u8"")), g["Spacing"]); g["LEFTARROW"] <= seq(cho(lit("<-"), lit(u8"")), g["Spacing"]);
#endif
~g["SLASH"] <= seq(chr('/'), g["Spacing"]); ~g["SLASH"] <= seq(chr('/'), g["Spacing"]);
g["AND"] <= seq(chr('&'), g["Spacing"]); g["AND"] <= seq(chr('&'), g["Spacing"]);
g["NOT"] <= seq(chr('!'), g["Spacing"]); g["NOT"] <= seq(chr('!'), g["Spacing"]);
@ -2988,10 +2972,8 @@ struct AstBase : public Annotation
, original_name(a_name) , original_name(a_name)
, original_choice_count(a_choice_count) , original_choice_count(a_choice_count)
, original_choice(a_choice) , original_choice(a_choice)
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
, tag(str2tag(a_name)) , tag(str2tag(a_name))
, original_tag(tag) , original_tag(tag)
#endif
, is_token(false) , is_token(false)
, nodes(a_nodes) , nodes(a_nodes)
{} {}
@ -3011,10 +2993,8 @@ struct AstBase : public Annotation
, original_name(a_name) , original_name(a_name)
, original_choice_count(a_choice_count) , original_choice_count(a_choice_count)
, original_choice(a_choice) , original_choice(a_choice)
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
, tag(str2tag(a_name)) , tag(str2tag(a_name))
, original_tag(tag) , original_tag(tag)
#endif
, is_token(true) , is_token(true)
, token(a_token) , token(a_token)
{} {}
@ -3033,10 +3013,8 @@ struct AstBase : public Annotation
, original_name(a_original_name) , original_name(a_original_name)
, original_choice_count(a_original_choice_count) , original_choice_count(a_original_choice_count)
, original_choice(a_original_choise) , original_choice(a_original_choise)
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
, tag(ast.tag) , tag(ast.tag)
, original_tag(str2tag(a_original_name)) , original_tag(str2tag(a_original_name))
#endif
, is_token(ast.is_token) , is_token(ast.is_token)
, token(ast.token) , token(ast.token)
, nodes(ast.nodes) , nodes(ast.nodes)
@ -3055,10 +3033,8 @@ struct AstBase : public Annotation
const std::string original_name; const std::string original_name;
const size_t original_choice_count; const size_t original_choice_count;
const size_t original_choice; const size_t original_choice;
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
const unsigned int tag; const unsigned int tag;
const unsigned int original_tag; const unsigned int original_tag;
#endif
const bool is_token; const bool is_token;
const std::string token; const std::string token;