[gfortran] patch for pr 15413
Paul Brook
paul@codesourcery.com
Sun May 16 14:49:00 GMT 2004
> You're correct. I didn't consider long numbers like above. Also I
> noticed that complex numbers suffer from the same problem, the "("
> gets printed without a preceeding blank. Please consider the patch
> below instead of my original patch. It is even simpler than the
> original one by virtue of unconditionally printing a blank before
> proceeding with the list i/o. This means that all numeric output is
> shifted one character to the right, also those that previously were
> compliant. But I wouldn't consider that a problem since the (draft
> 2003) standard only specifies that a "reasonable" value should be used
> for the field width. And there is no mention nor implication as far as
> I can tell that the width of the first field should be one less than
> for the other fields to compensate for the initial blank.
I've applied the patch with a couple of additions:
- The comment for write_logical no longer applies, so should be removed.
- Made the field width for integer types depend on the type kind.
> > Do you have a copyright assignment for GCC? If not we will need one
> > before we can accept any more patches from you.
>
> No, I thought that I'm so far well below the "legally significant"
> level.
You were, but it doesn't take long to reach 15 lines of code :)
> Is there anything else I have to do other than follow the instruction
> e.g. on http://gcc.gnu.org/ml/gcc/2003-06/msg02298.html (fill in the
> form and send it to assign@gnu.org, wait for papers to arrive by snail
> mail)?
You may need to a copyright assignment from your employer/university if they
have claims on the work you do.
Paul
2004-05-16 Janne Blomqvist <jblomqvi@cc.hut.fi>
Paul Brook <paul@codesourcery.com>
* io/write.c (write_logical): Don't print extra blank.
(write_integer): Base field width on kind.
(list_formatted_write): Output initial blank.
Index: write.c
===================================================================
RCS file: /var/cvsroot/gcc-cvs/gcc/libgfortran/io/write.c,v
retrieving revision 1.3
diff -u -p -r1.3 write.c
--- a/write.c 15 May 2004 18:35:39 -0000 1.3
+++ b/write.c 16 May 2004 14:04:30 -0000
@@ -875,12 +875,10 @@ write_char (char c)
/* write_logical()-- Write a list-directed logical value */
-/* Default logical output should be L2
- according to DEC fortran Manual. */
+
static void
write_logical (const char *source, int length)
{
- write_char (' ');
write_char (extract_int (source, length) ? 'T' : 'F');
}
@@ -893,10 +891,33 @@ write_integer (const char *source, int l
char *p;
const char *q;
int digits;
- int width = 12;
+ int width;
q = itoa (extract_int (source, length));
+ switch (length)
+ {
+ case 1:
+ width = 4;
+ break;
+
+ case 2:
+ width = 6;
+ break;
+
+ case 4:
+ width = 11;
+ break;
+
+ case 8:
+ width = 20;
+ break;
+
+ default:
+ width = 0;
+ break;
+ }
+
digits = strlen (q);
if(width < digits )
@@ -1039,6 +1060,7 @@ list_formatted_write (bt type, void *p,
{
g.first_item = 0;
char_flag = 0;
+ write_char (' ');
}
else
{
More information about the Gcc-patches
mailing list