+2013-05-12 Daiki Ueno <ueno@gnu.org>
+
+ Fix end-of-string handling in JavaScript scanner.
+ * x-javascript.c (phase7_getuc): Remove unused BACKSLASH_COUNTER
+ argument; all callers changed.
+ Reported by Andreas Stricker in
+ <http://lists.gnu.org/archive/html/bug-gettext/2013-04/msg00051.html>.
+
2013-05-03 Daiki Ueno <ueno@gnu.org>
* user-email.sh.in (lowercase_sed): Don't use non-portable
\uNNNN */
static int
-phase7_getuc (int quote_char, unsigned int *backslash_counter)
+phase7_getuc (int quote_char)
{
int c;
if (c == UEOF)
return P7_EOF;
- if (c == quote_char && (*backslash_counter & 1) == 0)
- {
- return P7_STRING_END;
- }
+ if (c == quote_char)
+ return P7_STRING_END;
if (c == '\n')
{
}
if (c != '\\')
- {
- *backslash_counter = 0;
- return UNICODE (c);
- }
+ return UNICODE (c);
/* Dispatch according to the character following the backslash. */
c = phase2_getc ();
if (c == UEOF)
- {
- ++*backslash_counter;
- return UNICODE ('\\');
- }
+ return UNICODE ('\\');
switch (c)
{
case '\n':
continue;
case '\\':
- ++*backslash_counter;
return UNICODE (c);
case '\'': case '"':
- *backslash_counter = 0;
return UNICODE (c);
case 'b':
- *backslash_counter = 0;
return UNICODE ('\b');
case 'f':
- *backslash_counter = 0;
return UNICODE ('\f');
case 'n':
- *backslash_counter = 0;
return UNICODE ('\n');
case 'r':
- *backslash_counter = 0;
return UNICODE ('\r');
case 't':
- *backslash_counter = 0;
return UNICODE ('\t');
case 'v':
- *backslash_counter = 0;
return UNICODE ('\v');
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7':
else
phase2_ungetc (c);
}
- *backslash_counter = 0;
return UNICODE (n);
}
case 'x':
if (n2 >= 0)
{
int n = (n1 << 4) + n2;
- *backslash_counter = 0;
return UNICODE (n);
}
}
phase2_ungetc (c1);
phase2_ungetc (c);
- ++*backslash_counter;
return UNICODE ('\\');
}
case 'u':
while (--i >= 0)
phase2_ungetc (buf[i]);
phase2_ungetc (c);
- ++*backslash_counter;
return UNICODE ('\\');
}
buf[i] = c1;
}
- *backslash_counter = 0;
return UNICODE (n);
}
}
{
struct mixed_string_buffer literal;
int quote_char;
- unsigned int backslash_counter;
case '"': case '\'':
quote_char = c;
lexical_context = lc_string;
- backslash_counter = 0;
/* Start accumulating the string. */
init_mixed_string_buffer (&literal, lc_string);
for (;;)
{
- int uc = phase7_getuc (quote_char, &backslash_counter);
+ int uc = phase7_getuc (quote_char);
if (uc == P7_EOF || uc == P7_STRING_END)
break;