aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/match.c
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2007-06-08 04:49:23 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2007-06-08 04:49:23 +0000
commita88a266ccad495e5bb45d510076eea36fe3feaa1 (patch)
tree6229751b4eb48bff54ae9a9b30558a48f65b4177 /gcc/fortran/match.c
parent294e1a5bf10e457c966278bba233d6cea29e3e04 (diff)
downloadgcc-a88a266ccad495e5bb45d510076eea36fe3feaa1.zip
gcc-a88a266ccad495e5bb45d510076eea36fe3feaa1.tar.gz
gcc-a88a266ccad495e5bb45d510076eea36fe3feaa1.tar.bz2
re PR fortran/32223 (Backslash handling inconsistent)
2007-06-07 Steven G. Kargl <kargl@gcc.gnu.org> Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/32223 * match.c (gfc_match_special_char): New function. Match special char. Add handling '\0'. * match.h: Add prototype. * io.c (next_char): Use it. * primary.c (next_string_char): Ditto. Co-Authored-By: Jerry DeLisle <jvdelisle@gcc.gnu.org> From-SVN: r125557
Diffstat (limited to 'gcc/fortran/match.c')
-rw-r--r--gcc/fortran/match.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 0f99a52..e544d6d 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -64,6 +64,56 @@ mstring intrinsic_operators[] = {
/******************** Generic matching subroutines ************************/
+/* See if the next character is a special character that has
+ escaped by a \ via the -fbackslash option. */
+
+match
+gfc_match_special_char (int *c)
+{
+
+ match m;
+
+ m = MATCH_YES;
+
+ switch (gfc_next_char_literal (1))
+ {
+ case 'a':
+ *c = '\a';
+ break;
+ case 'b':
+ *c = '\b';
+ break;
+ case 't':
+ *c = '\t';
+ break;
+ case 'f':
+ *c = '\f';
+ break;
+ case 'n':
+ *c = '\n';
+ break;
+ case 'r':
+ *c = '\r';
+ break;
+ case 'v':
+ *c = '\v';
+ break;
+ case '\\':
+ *c = '\\';
+ break;
+ case '0':
+ *c = '\0';
+ break;
+ default:
+ /* Unknown backslash codes are simply not expanded. */
+ m = MATCH_NO;
+ break;
+ }
+
+ return m;
+}
+
+
/* In free form, match at least one space. Always matches in fixed
form. */