[PATCH] D87653: [flang] Respect BZ mode in exponent parts, too
Peter Klausler via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 14 17:03:55 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rGb2cf572b5620: [flang] Respect BZ mode in exponent parts, too (authored by klausler).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D87653/new/
https://reviews.llvm.org/D87653
Files:
flang/runtime/edit-input.cpp
flang/unittests/Runtime/hello.cpp
Index: flang/unittests/Runtime/hello.cpp
===================================================================
--- flang/unittests/Runtime/hello.cpp
+++ flang/unittests/Runtime/hello.cpp
@@ -481,6 +481,7 @@
realInTest("(-1P,F18.0)", " 125", 0x4093880000000000); // 1250
realInTest("(1P,F18.0)", " 125", 0x4029000000000000); // 12.5
realInTest("(BZ,F18.0)", " 125 ", 0x4093880000000000); // 1250
+ realInTest("(BZ,F18.0)", " 125 . e +1 ", 0x42a6bcc41e900000); // 1.25e13
realInTest("(DC,F18.0)", " 12,5", 0x4029000000000000);
listInputTest();
Index: flang/runtime/edit-input.cpp
===================================================================
--- flang/runtime/edit-input.cpp
+++ flang/runtime/edit-input.cpp
@@ -180,10 +180,11 @@
first == 'E' || first == 'D' || first == 'Q') {
Put('.'); // input field is normalized to a fraction
auto start{got};
+ bool bzMode{(edit.modes.editingFlags & blankZero) != 0};
for (; next; next = io.NextInField(remaining)) {
char32_t ch{*next};
if (ch == ' ' || ch == '\t') {
- if (edit.modes.editingFlags & blankZero) {
+ if (bzMode) {
ch = '0'; // BZ mode - treat blank as if it were zero
} else {
continue;
@@ -206,19 +207,29 @@
if (next &&
(*next == 'e' || *next == 'E' || *next == 'd' || *next == 'D' ||
*next == 'q' || *next == 'Q')) {
+ // Optional exponent letter. Blanks are allowed between the
+ // optional exponent letter and the exponent value.
io.SkipSpaces(remaining);
next = io.NextInField(remaining);
}
- exponent = -edit.modes.scale; // default exponent is -kP
+ // The default exponent is -kP, but the scale factor doesn't affect
+ // an explicit exponent.
+ exponent = -edit.modes.scale;
if (next &&
- (*next == '-' || *next == '+' || (*next >= '0' && *next <= '9'))) {
+ (*next == '-' || *next == '+' || (*next >= '0' && *next <= '9') ||
+ (bzMode && (*next == ' ' || *next == '\t')))) {
bool negExpo{*next == '-'};
if (negExpo || *next == '+') {
next = io.NextInField(remaining);
}
- for (exponent = 0; next && (*next >= '0' && *next <= '9');
- next = io.NextInField(remaining)) {
- exponent = 10 * exponent + *next - '0';
+ for (exponent = 0; next; next = io.NextInField(remaining)) {
+ if (*next >= '0' && *next <= '9') {
+ exponent = 10 * exponent + *next - '0';
+ } else if (bzMode && (*next == ' ' || *next == '\t')) {
+ exponent = 10 * exponent;
+ } else {
+ break;
+ }
}
if (negExpo) {
exponent = -exponent;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D87653.291738.patch
Type: text/x-patch
Size: 2766 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200915/1c9e3450/attachment.bin>
More information about the llvm-commits
mailing list