mirror of
https://github.com/yhirose/cpp-peglib.git
synced 2024-12-22 11:55:30 +00:00
Dropped old Visual C++ compiler support.
This commit is contained in:
parent
250096bd08
commit
64f205d949
32
peglib.h
32
peglib.h
@ -1,7 +1,7 @@
|
||||
//
|
||||
// peglib.h
|
||||
//
|
||||
// Copyright (c) 2015-18 Yuji Hirose. All rights reserved.
|
||||
// Copyright (c) 2020 Yuji Hirose. All rights reserved.
|
||||
// MIT License
|
||||
//
|
||||
|
||||
@ -37,25 +37,17 @@
|
||||
|
||||
// guard for older versions of VC++
|
||||
#ifdef _MSC_VER
|
||||
// VS2013 has no constexpr
|
||||
#if (_MSC_VER == 1800)
|
||||
#define PEGLIB_NO_CONSTEXPR_SUPPORT
|
||||
#elif (_MSC_VER >= 1800)
|
||||
// good to go
|
||||
#else //(_MSC_VER < 1800)
|
||||
#error "Requires C+11 support"
|
||||
#if (_MSC_VER < 1900)
|
||||
#error "Requires complete C+11 support"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// define if the compiler doesn't support unicode characters reliably in the
|
||||
// source code
|
||||
//#define PEGLIB_NO_UNICODE_CHARS
|
||||
|
||||
namespace peg {
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
* any
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#if PEGLIB_USE_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
|
||||
*/
|
||||
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
|
||||
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));
|
||||
}
|
||||
@ -461,7 +452,6 @@ inline constexpr unsigned int operator "" _(const char* s, size_t) {
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Semantic values
|
||||
@ -483,9 +473,7 @@ struct SemanticValues : protected std::vector<any>
|
||||
// Definition name
|
||||
const std::string& name() const { return name_; }
|
||||
|
||||
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
|
||||
std::vector<unsigned int> tags;
|
||||
#endif
|
||||
|
||||
// Line number and column at which the matched string is
|
||||
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(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"]);
|
||||
#endif
|
||||
~g["SLASH"] <= seq(chr('/'), g["Spacing"]);
|
||||
g["AND"] <= seq(chr('&'), g["Spacing"]);
|
||||
g["NOT"] <= seq(chr('!'), g["Spacing"]);
|
||||
@ -2988,10 +2972,8 @@ struct AstBase : public Annotation
|
||||
, original_name(a_name)
|
||||
, original_choice_count(a_choice_count)
|
||||
, original_choice(a_choice)
|
||||
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
|
||||
, tag(str2tag(a_name))
|
||||
, original_tag(tag)
|
||||
#endif
|
||||
, is_token(false)
|
||||
, nodes(a_nodes)
|
||||
{}
|
||||
@ -3011,10 +2993,8 @@ struct AstBase : public Annotation
|
||||
, original_name(a_name)
|
||||
, original_choice_count(a_choice_count)
|
||||
, original_choice(a_choice)
|
||||
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
|
||||
, tag(str2tag(a_name))
|
||||
, original_tag(tag)
|
||||
#endif
|
||||
, is_token(true)
|
||||
, token(a_token)
|
||||
{}
|
||||
@ -3033,10 +3013,8 @@ struct AstBase : public Annotation
|
||||
, original_name(a_original_name)
|
||||
, original_choice_count(a_original_choice_count)
|
||||
, original_choice(a_original_choise)
|
||||
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
|
||||
, tag(ast.tag)
|
||||
, original_tag(str2tag(a_original_name))
|
||||
#endif
|
||||
, is_token(ast.is_token)
|
||||
, token(ast.token)
|
||||
, nodes(ast.nodes)
|
||||
@ -3055,10 +3033,8 @@ struct AstBase : public Annotation
|
||||
const std::string original_name;
|
||||
const size_t original_choice_count;
|
||||
const size_t original_choice;
|
||||
#ifndef PEGLIB_NO_CONSTEXPR_SUPPORT
|
||||
const unsigned int tag;
|
||||
const unsigned int original_tag;
|
||||
#endif
|
||||
|
||||
const bool is_token;
|
||||
const std::string token;
|
||||
|
Loading…
Reference in New Issue
Block a user