lexer: Factor some token inspectors out into new token functions.
[pspp] / src / language / lexer / token.c
index f6bc6a1d22166a8f7dfc118f400bcdbd5f8ac88d..ec64bbfb4a431cfcf0044cf0dd9a05b31755569f 100644 (file)
@@ -42,7 +42,7 @@ token_init (struct token *token)
 
 /* Frees the string that TOKEN contains. */
 void
-token_destroy (struct token *token)
+token_uninit (struct token *token)
 {
   if (token != NULL)
     ss_dealloc (&token->string);
@@ -143,6 +143,7 @@ token_to_string (const struct token *token)
 
     case T_ID:
     case T_MACRO_ID:
+    case T_MACRO_PUNCT:
       return ss_xstrdup (token->string);
 
     case T_STRING:
@@ -171,3 +172,19 @@ token_print (const struct token *token, FILE *stream)
              (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;
+}