+
+/* Returns true if T is a numeric token for an integer in the range of "long",
+ except that LONG_MIN is excluded. */
+bool
+token_is_integer (const struct token *t)
+{
+ return (token_is_number (t)
+ && t->number > LONG_MIN
+ && t->number <= LONG_MAX
+ && floor (t->number) == t->number);
+}
+
+/* Returns the "long int" value of T, which must satisfy token_is_integer(T). */
+long
+token_integer (const struct token *t)
+{
+ assert (token_is_integer (t));
+ return t->number;
+}