Le 30/07/2022 à 21:40, Harald Anlauf a écrit :
Hi Mikael,
Am 30.07.22 um 10:28 schrieb Mikael Morin:
Meh! We killed one check for gfc_current_form but the other one is still
there.
OK, match_kind_param calls two functions that also gobble space, so
there is work remaining here.
So please make match_small_literal_constant and gfc_match_name
space-gobbling wrappers around space-non-gobbling inner functions and
call those inner functions instead in match_kind_param.
well, here's the shortest solution I could come up with.
I added a new argument to 3 functions used in parsing that
controls the gobbling of whitespace. We use this to handle
whitespace for numerical literals, while the parsing of string
literals remains as in the previous version of the patch.
This version obviously ignores Thomas' request, as that would
require to treat gfc_match_char specially...
Regtested again. OK now?
PR fortran/92805
* match.cc (gfc_match_small_literal_int): Make gobbling of leading
whitespace optional.
(gfc_match_name): Likewise.
(gfc_match_char): Likewise.
* match.h (gfc_match_small_literal_int): Adjust prototype.
(gfc_match_name): Likewise.
(gfc_match_char): Likewise.
* primary.cc (match_kind_param): Match small literal int or name
without gobbling whitespace.
(get_kind): Do not skip over blanks in free-form mode.
I think the "in free-form mode" applied to the preceding patches but can
be dropped now.
(match_string_constant): Likewise.
diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc
index 1aa3053e70e..c0dc0e89361 100644
--- a/gcc/fortran/match.cc
+++ b/gcc/fortran/match.cc
@@ -457,7 +457,7 @@ gfc_match_eos (void)
will be set to the number of digits. */
Please add a note about GOBBLE_WS here, like you did for gfc_match_char.
match
-gfc_match_small_literal_int (int *value, int *cnt)
+gfc_match_small_literal_int (int *value, int *cnt, bool gobble_ws)
{
locus old_loc;
char c;
(...)
@@ -611,14 +612,15 @@ gfc_match_label (void)
than GFC_MAX_SYMBOL_LEN. */
Same here.
match
-gfc_match_name (char *buffer)
+gfc_match_name (char *buffer, bool gobble_ws)
{
locus old_loc;
int i;
char c;
(...)
@@ -1052,16 +1054,19 @@ cleanup:
}
-/* Tries to match the next non-whitespace character on the input.
- This subroutine does not return MATCH_ERROR. */
+/* Tries to match the next non-whitespace character on the input. This
+ subroutine does not return MATCH_ERROR. When gobble_ws is false, do not
+ skip over leading blanks.
+*/
There should be no line feed before end of comment.
OK with those changes.
thanks for your patience.
Mikael