[flang-commits] [flang] 8305a92 - [flang] Treat tabs like spaces in formatted input.
peter klausler via flang-commits
flang-commits at lists.llvm.org
Fri Jul 17 17:20:11 PDT 2020
Author: peter klausler
Date: 2020-07-17T17:19:20-07:00
New Revision: 8305a92a4752aff8118b501407cfd158c653e67c
URL: https://github.com/llvm/llvm-project/commit/8305a92a4752aff8118b501407cfd158c653e67c
DIFF: https://github.com/llvm/llvm-project/commit/8305a92a4752aff8118b501407cfd158c653e67c.diff
LOG: [flang] Treat tabs like spaces in formatted input.
Reviewed By: sscalpone
Differential Revision: https://reviews.llvm.org/D84078
Added:
Modified:
flang/runtime/edit-input.cpp
flang/runtime/io-stmt.cpp
Removed:
################################################################################
diff --git a/flang/runtime/edit-input.cpp b/flang/runtime/edit-input.cpp
index 27e8122d9ae6..dd708c7bfb91 100644
--- a/flang/runtime/edit-input.cpp
+++ b/flang/runtime/edit-input.cpp
@@ -34,7 +34,7 @@ static bool EditBOZInput(IoStatementState &io, const DataEdit &edit, void *n,
common::UnsignedInt128 value{0};
for (; next; next = io.NextInField(remaining)) {
char32_t ch{*next};
- if (ch == ' ') {
+ if (ch == ' ' || ch == '\t') {
continue;
}
int digit{0};
@@ -101,7 +101,7 @@ bool EditIntegerInput(
common::UnsignedInt128 value;
for (; next; next = io.NextInField(remaining)) {
char32_t ch{*next};
- if (ch == ' ') {
+ if (ch == ' ' || ch == '\t') {
if (edit.modes.editingFlags & blankZero) {
ch = '0'; // BZ mode - treat blank as if it were zero
} else {
@@ -170,7 +170,7 @@ static int ScanRealInput(char *buffer, int bufferSize, IoStatementState &io,
} else if (*next == decimal || (*next >= '0' && *next <= '9')) {
for (; next; next = io.NextInField(remaining)) {
char32_t ch{*next};
- if (ch == ' ') {
+ if (ch == ' ' || ch == '\t') {
if (edit.modes.editingFlags & blankZero) {
ch = '0'; // BZ mode - treat blank as if it were zero
} else {
@@ -229,7 +229,7 @@ static int ScanRealInput(char *buffer, int bufferSize, IoStatementState &io,
return 0;
}
if (remaining) {
- while (next && *next == ' ') {
+ while (next && (*next == ' ' || *next == '\t')) {
next = io.NextInField(remaining);
}
if (next) {
@@ -386,6 +386,7 @@ static bool EditListDirectedDefaultCharacterInput(
next = io.NextInField(remaining)) {
switch (*next) {
case ' ':
+ case '\t':
case ',':
case ';':
case '/':
diff --git a/flang/runtime/io-stmt.cpp b/flang/runtime/io-stmt.cpp
index 70fb3f9350bc..8efda2d09a77 100644
--- a/flang/runtime/io-stmt.cpp
+++ b/flang/runtime/io-stmt.cpp
@@ -353,7 +353,7 @@ std::optional<char32_t> IoStatementState::SkipSpaces(
std::optional<int> &remaining) {
while (!remaining || *remaining > 0) {
if (auto ch{GetCurrentChar()}) {
- if (*ch != ' ') {
+ if (*ch != ' ' && *ch != '\t') {
return ch;
}
HandleRelativePosition(1);
@@ -373,6 +373,7 @@ std::optional<char32_t> IoStatementState::NextInField(
if (auto next{GetCurrentChar()}) {
switch (*next) {
case ' ':
+ case '\t':
case ',':
case ';':
case '/':
@@ -415,7 +416,7 @@ std::optional<char32_t> IoStatementState::NextInField(
std::optional<char32_t> IoStatementState::GetNextNonBlank() {
auto ch{GetCurrentChar()};
- while (ch.value_or(' ') == ' ') {
+ while (!ch || *ch == ' ' || *ch == '\t') {
if (ch) {
HandleRelativePosition(1);
} else if (!AdvanceRecord()) {
@@ -485,7 +486,8 @@ ListDirectedStatementState<Direction::Input>::GetNextDataEdit(
if (!imaginaryPart_) {
edit.repeat = std::min<int>(remaining_, maxRepeat);
auto ch{io.GetNextNonBlank()};
- if (!ch || *ch == ' ' || *ch == comma) { // "r*" repeated null
+ if (!ch || *ch == ' ' || *ch == '\t' || *ch == comma) {
+ // "r*" repeated null
edit.descriptor = DataEdit::ListDirectedNullValue;
}
}
@@ -554,7 +556,7 @@ ListDirectedStatementState<Direction::Input>::GetNextDataEdit(
edit.descriptor = DataEdit::ListDirectedNullValue;
return edit;
}
- if (!ch || *ch == ' ' || *ch == comma) { // "r*" null
+ if (!ch || *ch == ' ' || *ch == '\t' || *ch == comma) { // "r*" null
edit.descriptor = DataEdit::ListDirectedNullValue;
}
edit.repeat = std::min<int>(r, maxRepeat);
More information about the flang-commits
mailing list