+2003-12-14 Bruno Haible <bruno@clisp.org>
+
+ * x-c.c (SIZEOF): New macro.
+ (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+ (phase2_ungetc): Likewise.
+ (phase3_ungetc): Likewise.
+ (phase5_unget): Likewise.
+ (phase6_unget): Likewise.
+ * x-java.c (SIZEOF): New macro.
+ (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+ (phase2_ungetc): Likewise.
+ (phase3_ungetc): Likewise.
+ (phase5_unget): Likewise.
+ (phase6_unget): Likewise.
+ * x-php.c (SIZEOF): New macro.
+ (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+ (phase2_ungetc): Likewise.
+ (phase3_ungetc): Likewise.
+ * x-python.c (SIZEOF): New macro.
+ (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+ (phase5_unget): Likewise.
+ * x-sh.c (SIZEOF): New macro.
+ (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+ (phase2_ungetc): Likewise.
+ * x-smalltalk.c (SIZEOF): New macro.
+ (phase2_unget): Verify that the pushback buffer's size is sufficient.
+ * x-tcl.c (SIZEOF): New macro.
+ (phase1_ungetc): Verify that the pushback buffer's size is sufficient.
+ (phase2_ungetc): Likewise.
+ * x-ycp.c (SIZEOF): New macro.
+ (phase2_unget): Verify that the pushback buffer's size is sufficient.
+
2003-12-14 Bruno Haible <bruno@clisp.org>
* x-c.c (phase1_pushback): Reduce size to 2.
#define _(s) gettext(s)
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
/* The ANSI C standard defines several phases of translation:
/* FALLTHROUGH */
default:
+ if (phase1_pushback_length == SIZEOF (phase1_pushback))
+ abort ();
phase1_pushback[phase1_pushback_length++] = c;
break;
}
phase2_ungetc (int c)
{
if (c != EOF)
- phase2_pushback[phase2_pushback_length++] = c;
+ {
+ if (phase2_pushback_length == SIZEOF (phase2_pushback))
+ abort ();
+ phase2_pushback[phase2_pushback_length++] = c;
+ }
}
phase3_ungetc (int c)
{
if (c != EOF)
- phase3_pushback[phase3_pushback_length++] = c;
+ {
+ if (phase3_pushback_length == SIZEOF (phase3_pushback))
+ abort ();
+ phase3_pushback[phase3_pushback_length++] = c;
+ }
}
phase5_unget (token_ty *tp)
{
if (tp->type != token_type_eof)
- phase5_pushback[phase5_pushback_length++] = *tp;
+ {
+ if (phase5_pushback_length == SIZEOF (phase5_pushback))
+ abort ();
+ phase5_pushback[phase5_pushback_length++] = *tp;
+ }
}
phase6_unget (token_ty *tp)
{
if (tp->type != token_type_eof)
- phase6_pushback[phase6_pushback_length++] = *tp;
+ {
+ if (phase6_pushback_length == SIZEOF (phase6_pushback))
+ abort ();
+ phase6_pushback[phase6_pushback_length++] = *tp;
+ }
}
#define _(s) gettext(s)
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
/* The Java syntax is defined in the
Java Language Specification, Second Edition,
&& phase1_pushback[phase1_pushback_length - 1] >= MULTIPLE_U (0))
phase1_pushback[phase1_pushback_length - 1]++;
else
- phase1_pushback[phase1_pushback_length++] = MULTIPLE_U (1);
+ {
+ if (phase1_pushback_length == SIZEOF (phase1_pushback))
+ abort ();
+ phase1_pushback[phase1_pushback_length++] = MULTIPLE_U (1);
+ }
}
else
- phase1_pushback[phase1_pushback_length++] = c;
+ {
+ if (phase1_pushback_length == SIZEOF (phase1_pushback))
+ abort ();
+ phase1_pushback[phase1_pushback_length++] = c;
+ }
}
}
phase2_ungetc (int c)
{
if (c != P2_EOF)
- phase2_pushback[phase2_pushback_length++] = c;
+ {
+ if (phase2_pushback_length == SIZEOF (phase2_pushback))
+ abort ();
+ phase2_pushback[phase2_pushback_length++] = c;
+ }
}
{
if (c == '\n')
--line_number;
+ if (phase3_pushback_length == SIZEOF (phase3_pushback))
+ abort ();
phase3_pushback[phase3_pushback_length++] = c;
}
}
phase5_unget (token_ty *tp)
{
if (tp->type != token_type_eof)
- phase5_pushback[phase5_pushback_length++] = *tp;
+ {
+ if (phase5_pushback_length == SIZEOF (phase5_pushback))
+ abort ();
+ phase5_pushback[phase5_pushback_length++] = *tp;
+ }
}
phase6_unget (token_ty *tp)
{
if (tp->type != token_type_eof)
- phase6_pushback[phase6_pushback_length++] = *tp;
+ {
+ if (phase6_pushback_length == SIZEOF (phase6_pushback))
+ abort ();
+ phase6_pushback[phase6_pushback_length++] = *tp;
+ }
}
#define _(s) gettext(s)
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
/* The PHP syntax is defined in phpdoc/manual/langref.html.
See also php-4.1.0/Zend/zend_language_scanner.l. */
if (c == '\n')
--line_number;
+ if (phase1_pushback_length == SIZEOF (phase1_pushback))
+ abort ();
phase1_pushback[phase1_pushback_length++] = c;
}
}
phase2_ungetc (int c)
{
if (c != EOF)
- phase2_pushback[phase2_pushback_length++] = c;
+ {
+ if (phase2_pushback_length == SIZEOF (phase2_pushback))
+ abort ();
+ phase2_pushback[phase2_pushback_length++] = c;
+ }
}
#endif
phase3_ungetc (int c)
{
if (c != EOF)
- phase3_pushback[phase3_pushback_length++] = c;
+ {
+ if (phase3_pushback_length == SIZEOF (phase3_pushback))
+ abort ();
+ phase3_pushback[phase3_pushback_length++] = c;
+ }
}
#endif
#include "gettext.h"
#define _(s) gettext(s)
+
#define max(a,b) ((a) > (b) ? (a) : (b))
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
/* The Python syntax is defined in the Python Reference Manual
/usr/share/doc/packages/python/html/ref/index.html.
if (c == '\n')
--line_number;
+ if (phase1_pushback_length == SIZEOF (phase1_pushback))
+ abort ();
phase1_pushback[phase1_pushback_length++] = c;
}
}
phase5_unget (token_ty *tp)
{
if (tp->type != token_type_eof)
- phase5_pushback[phase5_pushback_length++] = *tp;
+ {
+ if (phase5_pushback_length == SIZEOF (phase5_pushback))
+ abort ();
+ phase5_pushback[phase5_pushback_length++] = *tp;
+ }
}
#define _(s) gettext(s)
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
+
/* The sh syntax is defined in POSIX:2001, see
http://www.opengroup.org/onlinepubs/007904975/utilities/xcu_chap02.html
Summary of sh syntax:
/* FALLTHROUGH */
default:
+ if (phase1_pushback_length == SIZEOF (phase1_pushback))
+ abort ();
phase1_pushback[phase1_pushback_length++] = c;
break;
}
/* FALLTHROUGH */
default:
+ if (phase2_pushback_length == SIZEOF (phase2_pushback))
+ abort ();
phase2_pushback[phase2_pushback_length++] = c;
break;
}
#define _(s) gettext(s)
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
+
/* The relevant parts of the Smalltalk syntax are:
stringliteral ::= string | stringconst | symconst
phase2_unget (token_ty *tp)
{
if (tp->type != token_type_eof)
- phase2_pushback[phase2_pushback_length++] = *tp;
+ {
+ if (phase2_pushback_length == SIZEOF (phase2_pushback))
+ abort ();
+ phase2_pushback[phase2_pushback_length++] = *tp;
+ }
}
#define _(s) gettext(s)
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
/* The Tcl syntax is defined in the Tcl.n manual page.
Summary of Tcl syntax:
/* FALLTHROUGH */
default:
+ if (phase1_pushback_length == SIZEOF (phase1_pushback))
+ abort ();
phase1_pushback[phase1_pushback_length++] = c;
break;
}
++brace_depth;
break;
}
+ if (phase2_pushback_length == SIZEOF (phase2_pushback))
+ abort ();
phase2_pushback[phase2_pushback_length++] = c;
}
}
#define _(s) gettext(s)
+#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
+
/* The YCP syntax is defined in libycp/doc/syntax.html.
See also libycp/src/scanner.ll. */
phase2_ungetc (int c)
{
if (c != EOF)
- phase2_pushback[phase2_pushback_length++] = c;
+ {
+ if (phase2_pushback_length == SIZEOF (phase2_pushback))
+ abort ();
+ phase2_pushback[phase2_pushback_length++] = c;
+ }
}