* app.c (do_scrub_begin): In MRI mode, set lex of ' to

LEX_IS_STRINGQUOTE.
This commit is contained in:
Ian Lance Taylor 1995-08-21 18:19:21 +00:00
parent 075e616c28
commit 7172e2266f
1 changed files with 26 additions and 16 deletions

View File

@ -69,17 +69,20 @@ do_scrub_begin ()
lex['\t'] = LEX_IS_WHITESPACE; lex['\t'] = LEX_IS_WHITESPACE;
lex['\n'] = LEX_IS_NEWLINE; lex['\n'] = LEX_IS_NEWLINE;
lex[';'] = LEX_IS_LINE_SEPARATOR; lex[';'] = LEX_IS_LINE_SEPARATOR;
lex['"'] = LEX_IS_STRINGQUOTE;
#ifndef TC_HPPA
lex['\''] = LEX_IS_ONECHAR_QUOTE;
#endif
lex[':'] = LEX_IS_COLON; lex[':'] = LEX_IS_COLON;
if (! flag_mri)
{
lex['"'] = LEX_IS_STRINGQUOTE;
#ifndef TC_HPPA
lex['\''] = LEX_IS_ONECHAR_QUOTE;
#endif
#ifdef SINGLE_QUOTE_STRINGS #ifdef SINGLE_QUOTE_STRINGS
lex['\''] = LEX_IS_STRINGQUOTE; lex['\''] = LEX_IS_STRINGQUOTE;
#endif #endif
}
/* Note that these override the previous defaults, e.g. if ';' is a /* Note that these override the previous defaults, e.g. if ';' is a
comment char, then it isn't a line separator. */ comment char, then it isn't a line separator. */
@ -114,6 +117,16 @@ do_scrub_begin ()
{ {
lex['*'] = LEX_IS_TWOCHAR_COMMENT_2ND; lex['*'] = LEX_IS_TWOCHAR_COMMENT_2ND;
} }
if (flag_mri)
{
lex['\''] = LEX_IS_STRINGQUOTE;
lex[';'] = LEX_IS_COMMENT_START;
lex['*'] = LEX_IS_LINE_COMMENT_START;
/* The MRI documentation says '!' is LEX_IS_COMMENT_START, but
then it can't be used in an expression. */
lex['!'] = LEX_IS_LINE_COMMENT_START;
}
} /* do_scrub_begin() */ } /* do_scrub_begin() */
FILE *scrub_file; FILE *scrub_file;
@ -381,9 +394,7 @@ do_scrub_next_char (get, unget)
case 'n': case 'n':
case 'r': case 'r':
case 't': case 't':
#ifdef BACKSLASH_V
case 'v': case 'v':
#endif /* BACKSLASH_V */
case 'x': case 'x':
case 'X': case 'X':
case '0': case '0':
@ -468,15 +479,15 @@ recycle:
not_cpp_line = 1; not_cpp_line = 1;
goto recycle; goto recycle;
} }
#ifdef MRI
(*unget) (ch); /* Put back */
return ' '; /* Always return one space at start of line */
#endif
/* If we're in state 2 or 11, we've seen a non-white character /* If we're in state 2 or 11, we've seen a non-white character
followed by whitespace. If the next character is ':', this followed by whitespace. If the next character is ':', this
is whitespace after a label name which we *must* ignore. */ is whitespace after a label name which we normally must
if ((state == 2 || state == 11) && lex[ch] == LEX_IS_COLON) ignore. In MRI mode, though, spaces are not permitted
between the label and the colon. */
if ((state == 2 || state == 11)
&& lex[ch] == LEX_IS_COLON
&& ! flag_mri)
{ {
state = 1; state = 1;
return ch; return ch;
@ -559,7 +570,6 @@ recycle:
old_state = state; old_state = state;
state = 5; state = 5;
return ch; return ch;
#ifndef MRI
#ifndef IEEE_STYLE #ifndef IEEE_STYLE
case LEX_IS_ONECHAR_QUOTE: case LEX_IS_ONECHAR_QUOTE:
ch = GET (); ch = GET ();
@ -596,7 +606,6 @@ recycle:
state = -1; state = -1;
out_string = out_buf; out_string = out_buf;
return *out_string++; return *out_string++;
#endif
#endif #endif
case LEX_IS_COLON: case LEX_IS_COLON:
if (state == 9 || state == 10) if (state == 9 || state == 10)
@ -671,7 +680,8 @@ recycle:
/* We have a line comment character which is not at the start of /* We have a line comment character which is not at the start of
a line. If this is also a normal comment character, fall a line. If this is also a normal comment character, fall
through. Otherwise treat it as a default character. */ through. Otherwise treat it as a default character. */
if (strchr (comment_chars, ch) == NULL) if ((flag_mri && (ch == '!' || ch == '*'))
|| strchr (comment_chars, ch) == NULL)
goto de_fault; goto de_fault;
/* Fall through. */ /* Fall through. */
case LEX_IS_COMMENT_START: case LEX_IS_COMMENT_START: