/* Frees the string that TOKEN contains. */
void
-token_destroy (struct token *token)
+token_uninit (struct token *token)
{
if (token != NULL)
ss_dealloc (&token->string);
case T_ID:
case T_MACRO_ID:
+ case T_MACRO_PUNCT:
return ss_xstrdup (token->string);
case T_STRING:
(int) token->string.length, token->string.string);
putc ('\n', stream);
}
+
+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);
+}
+
+long
+token_integer (const struct token *t)
+{
+ assert (token_is_integer (t));
+ return t->number;
+}