mirror of
https://github.com/louisrubet/rpn
synced 2025-02-07 08:45:48 +01:00
c++17 to c++20
This commit is contained in:
parent
3fb1201220
commit
f8f42889bf
2 changed files with 21 additions and 18 deletions
|
@ -80,10 +80,13 @@ ${PROJECT_SOURCE_DIR}/linenoise-ng/src/wcwidth.cpp)
|
||||||
set_source_files_properties(${RPN_SRC_FILES} COMPILE_FLAGS # some harder warnings
|
set_source_files_properties(${RPN_SRC_FILES} COMPILE_FLAGS # some harder warnings
|
||||||
"-Wall -Wextra -pedantic -Wno-missing-field-initializers")
|
"-Wall -Wextra -pedantic -Wno-missing-field-initializers")
|
||||||
|
|
||||||
|
set_source_files_properties(${LINENOISE_NG_SRC_FILES} COMPILE_FLAGS
|
||||||
|
"-fpermissive") # removing error on redeclaration of char8_t
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
message(STATUS "Compiler type GNU: ${CMAKE_CXX_COMPILER}")
|
message(STATUS "Compiler type GNU: ${CMAKE_CXX_COMPILER}")
|
||||||
# TODO still up to date?
|
# TODO still up to date?
|
||||||
set(BASE_COMPILER_OPTIONS "-std=c++17 -Wl,--no-as-needed")
|
set(BASE_COMPILER_OPTIONS "-std=c++20 -Wl,--no-as-needed")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -s")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -s")
|
||||||
|
|
34
src/lexer.cc
34
src/lexer.cc
|
@ -58,13 +58,13 @@ bool Lexer::ParseString(const string& entry, size_t idx, size_t& next_idx, vecto
|
||||||
for (size_t i = idx + 1; i < entry.size(); i++) {
|
for (size_t i = idx + 1; i < entry.size(); i++) {
|
||||||
if (entry[i] == '"') {
|
if (entry[i] == '"') {
|
||||||
if (entry[i] - 1 != '\\') {
|
if (entry[i] - 1 != '\\') {
|
||||||
elements.push_back({kString, .value = entry.substr(idx + 1, i - idx - 1)});
|
elements.push_back({.type = kString, .value = entry.substr(idx + 1, i - idx - 1)});
|
||||||
next_idx = i + 1;
|
next_idx = i + 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elements.push_back({kString, .value = entry.substr(idx + 1, entry.size() - idx - 1)});
|
elements.push_back({.type = kString, .value = entry.substr(idx + 1, entry.size() - idx - 1)});
|
||||||
next_idx = entry.size();
|
next_idx = entry.size();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -74,12 +74,12 @@ bool Lexer::ParseSymbol(const string& entry, size_t idx, size_t& next_idx, vecto
|
||||||
// here we are sure that entry[0] is at least '\''
|
// here we are sure that entry[0] is at least '\''
|
||||||
for (size_t i = idx + 1; i < entry.size(); i++) {
|
for (size_t i = idx + 1; i < entry.size(); i++) {
|
||||||
if (entry[i] == '\'') {
|
if (entry[i] == '\'') {
|
||||||
elements.push_back({kSymbol, .value = entry.substr(idx + 1, i - idx - 1), .auto_eval = false});
|
elements.push_back({.type = kSymbol, .value = entry.substr(idx + 1, i - idx - 1), .auto_eval = false});
|
||||||
next_idx = i + 1;
|
next_idx = i + 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elements.push_back({kSymbol, .value = entry.substr(idx + 1, entry.size() - idx - 1)});
|
elements.push_back({.type = kSymbol, .value = entry.substr(idx + 1, entry.size() - idx - 1)});
|
||||||
next_idx = entry.size();
|
next_idx = entry.size();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ bool Lexer::ParseProgram(const string& entry, size_t idx, size_t& next_idx, vect
|
||||||
if (countNested == 0) {
|
if (countNested == 0) {
|
||||||
string prg = entry.substr(idx + 2, i - idx - 2);
|
string prg = entry.substr(idx + 2, i - idx - 2);
|
||||||
Trim(prg);
|
Trim(prg);
|
||||||
elements.push_back({kProgram, .value = prg});
|
elements.push_back({.type = kProgram, .value = prg});
|
||||||
next_idx = i + 2;
|
next_idx = i + 2;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -106,7 +106,7 @@ bool Lexer::ParseProgram(const string& entry, size_t idx, size_t& next_idx, vect
|
||||||
}
|
}
|
||||||
string prg = entry.substr(idx + 2, entry.size() - idx - 2);
|
string prg = entry.substr(idx + 2, entry.size() - idx - 2);
|
||||||
Trim(prg);
|
Trim(prg);
|
||||||
elements.push_back({kProgram, .value = prg});
|
elements.push_back({.type = kProgram, .value = prg});
|
||||||
next_idx = entry.size();
|
next_idx = entry.size();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -186,8 +186,8 @@ bool Lexer::ParseNumber(const string& entry, size_t idx, size_t& next_idx, vecto
|
||||||
vector<SynElement>& elements) {
|
vector<SynElement>& elements) {
|
||||||
mpreal* r = nullptr;
|
mpreal* r = nullptr;
|
||||||
int base = 10;
|
int base = 10;
|
||||||
if (GetNumberAt(entry, idx, next_idx, base, &r)) {
|
if (GetNUmberAt(entry, idx, next_idx, base, &r)) {
|
||||||
elements.push_back({kNumber, .re = r, .re_base = base});
|
elements.push_back({.type = kNumber, .re = r, .re_base = base});
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
errors.push_back({entry.size(), "unterminated number"});
|
errors.push_back({entry.size(), "unterminated number"});
|
||||||
|
@ -201,33 +201,33 @@ bool Lexer::ParseComplex(const string& entry, size_t idx, size_t& next_idx, vect
|
||||||
mpreal* im = nullptr;
|
mpreal* im = nullptr;
|
||||||
int re_base, im_base = 10;
|
int re_base, im_base = 10;
|
||||||
if (idx + 1 == entry.size()) {
|
if (idx + 1 == entry.size()) {
|
||||||
elements.push_back({kSymbol, .value = entry.substr(idx, entry.size() - idx)});
|
elements.push_back({.type = kSymbol, .value = entry.substr(idx, entry.size() - idx)});
|
||||||
next_idx = entry.size();
|
next_idx = entry.size();
|
||||||
return true; // complex format error, return a symbol
|
return true; // complex format error, return a symbol
|
||||||
}
|
}
|
||||||
if (!GetNumberAt(entry, idx + 1, next_idx, re_base, &re, ',')) {
|
if (!GetNUmberAt(entry, idx + 1, next_idx, re_base, &re, ',')) {
|
||||||
elements.push_back({kSymbol, .value = entry.substr(idx, entry.size() - idx)});
|
elements.push_back({.type = kSymbol, .value = entry.substr(idx, entry.size() - idx)});
|
||||||
next_idx = entry.size();
|
next_idx = entry.size();
|
||||||
return true; // complex format error, return a symbol
|
return true; // complex format error, return a symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t i = next_idx;
|
size_t i = next_idx;
|
||||||
if (i >= entry.size()) {
|
if (i >= entry.size()) {
|
||||||
elements.push_back({kSymbol, .value = entry.substr(idx, entry.size() - idx)});
|
elements.push_back({.type = kSymbol, .value = entry.substr(idx, entry.size() - idx)});
|
||||||
next_idx = entry.size();
|
next_idx = entry.size();
|
||||||
if (re != nullptr) delete re;
|
if (re != nullptr) delete re;
|
||||||
if (im != nullptr) delete im;
|
if (im != nullptr) delete im;
|
||||||
return true; // complex format error, return a symbol
|
return true; // complex format error, return a symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GetNumberAt(entry, i, next_idx, im_base, &im, ')')) {
|
if (!GetNUmberAt(entry, i, next_idx, im_base, &im, ')')) {
|
||||||
elements.push_back({kSymbol, .value = entry.substr(idx, entry.size() - idx)});
|
elements.push_back({.type = kSymbol, .value = entry.substr(idx, entry.size() - idx)});
|
||||||
next_idx = entry.size();
|
next_idx = entry.size();
|
||||||
if (re != nullptr) delete re;
|
if (re != nullptr) delete re;
|
||||||
if (im != nullptr) delete im;
|
if (im != nullptr) delete im;
|
||||||
return true; // complex format error, return a symbol
|
return true; // complex format error, return a symbol
|
||||||
}
|
}
|
||||||
elements.push_back({kComplex, .re = re, .im = im, .re_base = re_base, .im_base = im_base});
|
elements.push_back({.type = kComplex, .re = re, .im = im, .re_base = re_base, .im_base = im_base});
|
||||||
next_idx++;
|
next_idx++;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,7 @@ bool Lexer::ParseReserved(const string& entry, size_t idx, size_t& next_idx, vec
|
||||||
|
|
||||||
auto resa = keywords.find(token);
|
auto resa = keywords.find(token);
|
||||||
if (resa != keywords.end()) {
|
if (resa != keywords.end()) {
|
||||||
elements.push_back({resa->second.type, .value = token, .fn = resa->second.fn});
|
elements.push_back({.type = resa->second.type, .value = token, .fn = resa->second.fn});
|
||||||
next_idx = token.size() + idx;
|
next_idx = token.size() + idx;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ bool Lexer::ParseUnknown(const string& entry, size_t idx, size_t& next_idx, vect
|
||||||
stringstream ss(entry.substr(idx));
|
stringstream ss(entry.substr(idx));
|
||||||
string token;
|
string token;
|
||||||
ss >> token;
|
ss >> token;
|
||||||
elements.push_back({kSymbol, .value = token, .auto_eval = true});
|
elements.push_back({.type = kSymbol, .value = token, .auto_eval = true});
|
||||||
next_idx = token.size() + idx;
|
next_idx = token.size() + idx;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue