Revert "Add full support for line continuation in the preprocessor"
Warning in the Linux/Mac builders:
In file included from ../../third_party/angle/src/tests/preprocessor_tests/input_test.cpp:7:
In file included from ../../third_party/angle/src/tests/preprocessor_tests/PreprocessorTest.h:7:
../../testing/gtest/include/gtest/gtest.h:1392:16: error: comparison of integers of different signs: 'const int' and 'const unsigned long' [-Werror,-Wsign-compare]
if (expected == actual) {
~~~~~~~~ ^ ~~~~~~
../../testing/gtest/include/gtest/gtest.h:1422:12: note: in instantiation of function template specialization 'testing::internal::CmpHelperEQ<int, unsigned long>' requested here
return CmpHelperEQ(expected_expression, actual_expression, expected,
^
../../third_party/angle/src/tests/preprocessor_tests/input_test.cpp:171:5: note: in instantiation of function template specialization 'testing::internal::EqHelper<false>::Compare<int, unsigned long>' requested here
EXPECT_EQ(3, input.read(buf, maxSize, &lineNo));
^
BUG=angleproject:1125
This reverts commit c1157d1963170c7411eb6c32e2b2fbce02c5a170.
Change-Id: Ic6fa286d190b006cccc5154d86e21ecc03175763
Reviewed-on: https://chromium-review.googlesource.com/294080
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/preprocessor/Input.cpp b/src/compiler/preprocessor/Input.cpp
index 5541d46..f9910a6 100644
--- a/src/compiler/preprocessor/Input.cpp
+++ b/src/compiler/preprocessor/Input.cpp
@@ -29,75 +29,13 @@
}
}
-const char *Input::skipChar()
-{
- // This function should only be called when there is a character to skip.
- assert(mReadLoc.cIndex < mLength[mReadLoc.sIndex]);
- ++mReadLoc.cIndex;
- if (mReadLoc.cIndex == mLength[mReadLoc.sIndex])
- {
- ++mReadLoc.sIndex;
- mReadLoc.cIndex = 0;
- }
- if (mReadLoc.sIndex >= mCount)
- {
- return nullptr;
- }
- return mString[mReadLoc.sIndex] + mReadLoc.cIndex;
-}
-
-size_t Input::read(char *buf, size_t maxSize, int *lineNo)
+size_t Input::read(char *buf, size_t maxSize)
{
size_t nRead = 0;
- // The previous call to read might have stopped copying the string when encountering a line
- // continuation. Check for this possibility first.
- if (mReadLoc.sIndex < mCount && maxSize > 0)
- {
- const char *c = mString[mReadLoc.sIndex] + mReadLoc.cIndex;
- if ((*c) == '\\')
- {
- c = skipChar();
- if (c != nullptr && (*c) == '\n')
- {
- // Line continuation of backslash + newline.
- skipChar();
- ++(*lineNo);
- }
- else if (c != nullptr && (*c) == '\r')
- {
- // Line continuation. Could be backslash + '\r\n' or just backslash + '\r'.
- c = skipChar();
- if (c != nullptr && (*c) == '\n')
- {
- skipChar();
- }
- ++(*lineNo);
- }
- else
- {
- // Not line continuation, so write the skipped backslash to buf.
- *buf = '\\';
- ++nRead;
- }
- }
- }
-
- size_t maxRead = maxSize;
- while ((nRead < maxRead) && (mReadLoc.sIndex < mCount))
+ while ((nRead < maxSize) && (mReadLoc.sIndex < mCount))
{
size_t size = mLength[mReadLoc.sIndex] - mReadLoc.cIndex;
size = std::min(size, maxSize);
- for (size_t i = 0; i < size; ++i)
- {
- // Stop if a possible line continuation is encountered.
- // It will be processed on the next call on input, which skips it
- // and increments line number if necessary.
- if (*(mString[mReadLoc.sIndex] + mReadLoc.cIndex + i) == '\\')
- {
- size = i;
- maxRead = nRead + size; // Stop reading right before the backslash.
- }
- }
std::memcpy(buf + nRead, mString[mReadLoc.sIndex] + mReadLoc.cIndex, size);
nRead += size;
mReadLoc.cIndex += size;