Skip to content

Commit 00d1f67

Browse files
authored
added TokenList::Stream class to wrap std::istream usage and implemented alternative C I/O version (#244)
1 parent 57853a3 commit 00d1f67

File tree

6 files changed

+317
-142
lines changed

6 files changed

+317
-142
lines changed

.clang-tidy

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
Checks: '*,-abseil-*,-altera-*,-android-*,-cert-*,-cppcoreguidelines-*,-fuchsia-*,-google-*,-hicpp-*,-linuxkernel-*,-llvm-*,-llvmlibc-*,-mpi-*,-objc-*,-openmp-*,-zircon-*,-misc-non-private-member-variables-in-classes,-modernize-avoid-c-arrays,-modernize-use-default-member-init,-modernize-use-using,-readability-braces-around-statements,-readability-function-size,-readability-implicit-bool-conversion,-readability-isolate-declaration,-readability-magic-numbers,-readability-simplify-boolean-expr,-readability-uppercase-literal-suffix,-modernize-use-auto,-modernize-use-trailing-return-type,-bugprone-branch-clone,-modernize-pass-by-value,-modernize-loop-convert,-modernize-use-emplace,-modernize-use-equals-default,-performance-noexcept-move-constructor,-modernize-use-equals-delete,-readability-identifier-length,-readability-function-cognitive-complexity,-modernize-return-braced-init-list,-misc-no-recursion,-bugprone-easily-swappable-parameters,-bugprone-narrowing-conversions,-concurrency-mt-unsafe,-modernize-loop-convert,-clang-analyzer-core.NullDereference,-performance-move-constructor-init,-performance-inefficient-string-concatenation,-performance-no-automatic-move'
2+
Checks: '*,-abseil-*,-altera-*,-android-*,-cert-*,-cppcoreguidelines-*,-fuchsia-*,-google-*,-hicpp-*,-linuxkernel-*,-llvm-*,-llvmlibc-*,-mpi-*,-objc-*,-openmp-*,-zircon-*,-misc-non-private-member-variables-in-classes,-modernize-avoid-c-arrays,-modernize-use-default-member-init,-modernize-use-using,-readability-braces-around-statements,-readability-function-size,-readability-implicit-bool-conversion,-readability-isolate-declaration,-readability-magic-numbers,-readability-simplify-boolean-expr,-readability-uppercase-literal-suffix,-modernize-use-auto,-modernize-use-trailing-return-type,-bugprone-branch-clone,-modernize-pass-by-value,-modernize-loop-convert,-modernize-use-emplace,-modernize-use-equals-default,-performance-noexcept-move-constructor,-modernize-use-equals-delete,-readability-identifier-length,-readability-function-cognitive-complexity,-modernize-return-braced-init-list,-misc-no-recursion,-bugprone-easily-swappable-parameters,-bugprone-narrowing-conversions,-concurrency-mt-unsafe,-modernize-loop-convert,-clang-analyzer-core.NullDereference,-performance-move-constructor-init,-performance-inefficient-string-concatenation,-performance-no-automatic-move,-modernize-use-override'
33
HeaderFilterRegex: '.*'
44
WarningsAsErrors: '*'
55
CheckOptions:

CMakeLists.txt

+3-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1010
# no need for c++98 compatibility
1111
add_compile_options(-Wno-c++98-compat-pedantic)
1212
# these are not really fixable
13-
add_compile_options(-Wno-exit-time-destructors -Wno-global-constructors)
13+
add_compile_options(-Wno-exit-time-destructors -Wno-global-constructors -Wno-weak-vtables)
1414
# we are not interested in these
1515
add_compile_options(-Wno-multichar -Wno-four-char-constants)
16+
# ignore C++11-specific warning
17+
add_compile_options(-Wno-suggest-override -Wno-suggest-destructor-override)
1618
# TODO: fix these?
1719
add_compile_options(-Wno-padded -Wno-sign-conversion -Wno-implicit-int-conversion -Wno-shorten-64-to-32 -Wno-shadow-field-in-constructor)
1820

main.cpp

+20-6
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@
2525
int main(int argc, char **argv)
2626
{
2727
bool error = false;
28+
const char *filename = nullptr;
29+
bool use_istream = false;
2830

2931
// Settings..
30-
const char *filename = nullptr;
3132
simplecpp::DUI dui;
3233
bool quiet = false;
3334
for (int i = 1; i < argc; i++) {
@@ -54,6 +55,10 @@ int main(int argc, char **argv)
5455
dui.includes.push_back(arg+9);
5556
found = true;
5657
}
58+
else if (std::strncmp(arg, "-is",3)==0) {
59+
use_istream = true;
60+
found = true;
61+
}
5762
break;
5863
case 's':
5964
if (std::strncmp(arg, "-std=",5)==0) {
@@ -87,20 +92,29 @@ int main(int argc, char **argv)
8792
std::cout << " -UNAME Undefine NAME." << std::endl;
8893
std::cout << " -std=STD Specify standard." << std::endl;
8994
std::cout << " -q Quiet mode (no output)." << std::endl;
95+
std::cout << " -is Use std::istream interface." << std::endl;
9096
std::exit(0);
9197
}
9298

9399
// Perform preprocessing
94100
simplecpp::OutputList outputList;
95101
std::vector<std::string> files;
96-
std::ifstream f(filename);
97-
simplecpp::TokenList rawtokens(f,files,filename,&outputList);
98-
rawtokens.removeComments();
99-
std::map<std::string, simplecpp::TokenList*> included = simplecpp::load(rawtokens, files, dui, &outputList);
102+
simplecpp::TokenList *rawtokens;
103+
if (use_istream) {
104+
std::ifstream f(filename);
105+
rawtokens = new simplecpp::TokenList(f, files,filename,&outputList);
106+
}
107+
else {
108+
rawtokens = new simplecpp::TokenList(filename,files,&outputList);
109+
}
110+
rawtokens->removeComments();
111+
std::map<std::string, simplecpp::TokenList*> included = simplecpp::load(*rawtokens, files, dui, &outputList);
100112
for (std::pair<std::string, simplecpp::TokenList *> i : included)
101113
i.second->removeComments();
102114
simplecpp::TokenList outputTokens(files);
103-
simplecpp::preprocess(outputTokens, rawtokens, files, included, dui, &outputList);
115+
simplecpp::preprocess(outputTokens, *rawtokens, files, included, dui, &outputList);
116+
delete rawtokens;
117+
rawtokens = nullptr;
104118

105119
// Output
106120
if (!quiet) {

0 commit comments

Comments
 (0)