aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorBernhard Fischer <rep.nop@aon.at>2005-12-01 00:57:44 +0100
committerSteven G. Kargl <kargl@gcc.gnu.org>2005-11-30 23:57:44 +0000
commit16ab8e74dad98cca30b431ae68b3926fe897aab4 (patch)
tree2c79d3d03822356a4f0ab0c7c7b6c42b8f03862a /gcc/fortran
parent4b860192e48ff466dc4975c9212e61e621fdb103 (diff)
downloadgcc-16ab8e74dad98cca30b431ae68b3926fe897aab4.zip
gcc-16ab8e74dad98cca30b431ae68b3926fe897aab4.tar.gz
gcc-16ab8e74dad98cca30b431ae68b3926fe897aab4.tar.bz2
re PR fortran/21302 (Max line length in free form mode)
2005-11-30 Bernhard Fischer <rep.nop@aon.at> PR fortran/21302 * lang.opt: New options -ffree-line-length- and -ffree-line-length-none. * gfortran.h: Add free_line_length and add description of free_line_length and fixed_line_length. * options.c (gfc_init_options, gfc_handle_option): Initialize and set free_line_length and fixed_line_length. * scanner.c (load_line): Set free_line_length to 132 and fixed_line_length to 72 or user requested values. * scanner.c: Typo in comment. * invoke.texi: Document -ffree-line-length- and -ffree-line-length-none gfortran.dg/line_length_1.f: New test: gfortran.dg/line_length_2.f90: Ditto. From-SVN: r107745
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog15
-rw-r--r--gcc/fortran/gfortran.h15
-rw-r--r--gcc/fortran/invoke.texi15
-rw-r--r--gcc/fortran/lang.opt8
-rw-r--r--gcc/fortran/options.c31
-rw-r--r--gcc/fortran/scanner.c26
6 files changed, 92 insertions, 18 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a55a828..f787fb7 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,18 @@
+2005-11-30 Bernhard Fischer <rep.nop@aon.at>
+
+ PR fortran/21302
+ * lang.opt: New options -ffree-line-length- and -ffree-line-length-none.
+ * gfortran.h: Add free_line_length and add description of
+ free_line_length and fixed_line_length.
+ * options.c (gfc_init_options, gfc_handle_option): Initialize
+ and set free_line_length and fixed_line_length.
+ * scanner.c (load_line): Set free_line_length to 132 and
+ fixed_line_length to 72 or user requested values.
+ * scanner.c: Typo in comment.
+ * invoke.texi: Document -ffree-line-length- and
+ -ffree-line-length-none
+
+
2005-11-30 Paul Thomas <pault@gcc.gnu.org>
PR fortran/15809
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index dd740194..83de267 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1460,7 +1460,20 @@ typedef struct
{
char *module_dir;
gfc_source_form source_form;
- int fixed_line_length;
+ /* When fixed_line_length or free_line_length are 0, the whole line is used.
+
+ Default is -1, the maximum line length mandated by the respective source
+ form is used:
+ for FORM_FREE GFC_MAX_LINE (132)
+ else 72.
+
+ If fixed_line_length or free_line_length is not 0 nor -1 then the user has
+ requested a specific line-length.
+
+ If the user requests a fixed_line_length <7 then gfc_init_options()
+ emits a fatal error. */
+ int fixed_line_length; /* maximum line length in fixed-form. */
+ int free_line_length; /* maximum line length in free-form. */
int max_identifier_length;
int verbose;
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index d482b32..5816207d 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -119,6 +119,7 @@ by type. Explanations are in the following sections.
-fdollar-ok -fimplicit-none -fmax-identifier-length @gol
-std=@var{std} -fd-lines-as-code -fd-lines-as-comments @gol
-ffixed-line-length-@var{n} -ffixed-line-length-none @gol
+-ffree-line-length-@var{n} -ffree-line-length-none @gol
-fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 @gol
-fcray-pointer }
@@ -251,6 +252,20 @@ to them to fill out the line.
@option{-ffixed-line-length-0} means the same thing as
@option{-ffixed-line-length-none}.
+@cindex -ffree-line-length-@var{n} option
+@cindex options, -ffree-line-length-@var{n}
+@item -ffree-line-length-@var{n}
+@cindex source file format
+@cindex lines, length
+@cindex length of source lines
+@cindex free form
+@cindex limits, lengths of source lines
+Set column after which characters are ignored in typical free-form
+lines in the source file. For free-form, the default value is 132.
+@var{n} may be @samp{none}, meaning that the entire line is meaningful.
+@option{-ffree-line-length-0} means the same thing as
+@option{-ffree-line-length-none}.
+
@cindex -fmax-identifier-length=@var{n} option
@cindex option -fmax-identifier-length=@var{n}
@item -fmax-identifier-length=@var{n}
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 66f79db..95388e5 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -141,6 +141,14 @@ ffixed-line-length-
Fortran RejectNegative Joined UInteger
-ffixed-line-length-<n> Use n as character line width in fixed mode
+ffree-line-length-none
+Fortran RejectNegative
+Allow arbitrary character line width in free mode
+
+ffree-line-length-
+Fortran RejectNegative Joined UInteger
+-ffree-line-length-<n> Use n as character line width in free mode
+
fmax-identifier-length=
Fortran RejectNegative Joined UInteger
-fmax-identifier-length=<n> Maximum identifier length
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index a39876b..64fa8a2 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -46,7 +46,8 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED,
gfc_source_file = NULL;
gfc_option.module_dir = NULL;
gfc_option.source_form = FORM_UNKNOWN;
- gfc_option.fixed_line_length = 72;
+ gfc_option.fixed_line_length = -1;
+ gfc_option.free_line_length = -1;
gfc_option.max_identifier_length = GFC_MAX_SYMBOL_LEN;
gfc_option.verbose = 0;
@@ -423,10 +424,28 @@ gfc_handle_option (size_t scode, const char *arg, int value)
gfc_option.source_form = FORM_FIXED;
break;
+ case OPT_ffixed_line_length_none:
+ gfc_option.fixed_line_length = 0;
+ break;
+
+ case OPT_ffixed_line_length_:
+ if (value != 0 && value < 7)
+ gfc_fatal_error ("Fixed line length must be at least seven.");
+ gfc_option.fixed_line_length = value;
+ break;
+
case OPT_ffree_form:
gfc_option.source_form = FORM_FREE;
break;
+ case OPT_ffree_line_length_none:
+ gfc_option.free_line_length = 0;
+ break;
+
+ case OPT_ffree_line_length_:
+ gfc_option.free_line_length = value;
+ break;
+
case OPT_funderscoring:
gfc_option.flag_underscoring = value;
break;
@@ -459,16 +478,6 @@ gfc_handle_option (size_t scode, const char *arg, int value)
gfc_option.flag_repack_arrays = value;
break;
- case OPT_ffixed_line_length_none:
- gfc_option.fixed_line_length = 0;
- break;
-
- case OPT_ffixed_line_length_:
- if (value != 0 && value < 7)
- gfc_fatal_error ("Fixed line length must be at least seven.");
- gfc_option.fixed_line_length = value;
- break;
-
case OPT_fmax_identifier_length_:
if (value > GFC_MAX_SYMBOL_LEN)
gfc_fatal_error ("Maximum supported idenitifier length is %d",
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index 8835761..4b76f9c 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -694,7 +694,7 @@ gfc_gobble_whitespace (void)
In fixed mode, we expand a tab that occurs within the statement
label region to expand to spaces that leave the next character in
the source region.
- load_line returns wether the line was truncated. */
+ load_line returns whether the line was truncated. */
static int
load_line (FILE * input, char **pbuf, int *pbuflen)
@@ -703,11 +703,25 @@ load_line (FILE * input, char **pbuf, int *pbuflen)
int trunc_flag = 0;
char *buffer;
- /* Determine the maximum allowed line length. */
+ /* Determine the maximum allowed line length.
+ The default for free-form is GFC_MAX_LINE, for fixed-form or for
+ unknown form it is 72. Refer to the documentation in gfc_option_t. */
if (gfc_current_form == FORM_FREE)
- maxlen = GFC_MAX_LINE;
+ {
+ if (gfc_option.free_line_length == -1)
+ maxlen = GFC_MAX_LINE;
+ else
+ maxlen = gfc_option.free_line_length;
+ }
+ else if (gfc_current_form == FORM_FIXED)
+ {
+ if (gfc_option.fixed_line_length == -1)
+ maxlen = 72;
+ else
+ maxlen = gfc_option.fixed_line_length;
+ }
else
- maxlen = gfc_option.fixed_line_length;
+ maxlen = 72;
if (*pbuf == NULL)
{
@@ -778,7 +792,7 @@ load_line (FILE * input, char **pbuf, int *pbuflen)
}
}
else if (i >= maxlen)
- {
+ {
/* Truncate the rest of the line. */
for (;;)
{
@@ -1055,7 +1069,7 @@ load_file (const char *filename, bool initial)
line = NULL;
line_len = 0;
- for (;;)
+ for (;;)
{
int trunc = load_line (input, &line, &line_len);