Start writing documentation.
[pspp] / src / language / lexer / lexer.c
index f577c598b89c9bf5a0ce939e94476feef5cfd417..817a07baf555f9a3bf479c7640c969439b0394f2 100644 (file)
@@ -216,6 +216,7 @@ lex_push_token__ (struct lex_source *src)
 
   token = &src->tokens[deque_push_front (&src->deque)];
   token->token = (struct token) { .type = T_STOP };
+  token->from_macro = false;
   return token;
 }
 
@@ -972,6 +973,12 @@ lex_next_representation (const struct lexer *lexer, int n0, int n1)
   return lex_source_get_syntax__ (lex_source__ (lexer), n0, n1);
 }
 
+bool
+lex_next_is_from_macro (const struct lexer *lexer, int n)
+{
+  return lex_next__ (lexer, n)->from_macro;
+}
+
 static bool
 lex_tokens_match (const struct token *actual, const struct token *expected)
 {
@@ -1751,12 +1758,7 @@ lex_source_get (const struct lex_source *src_)
 static void
 lex_source_push_endcmd__ (struct lex_source *src)
 {
-  struct lex_token *token = lex_push_token__ (src);
-  token->token.type = T_ENDCMD;
-  token->token_pos = 0;
-  token->token_len = 0;
-  token->line_pos = 0;
-  token->first_line = 0;
+  *lex_push_token__ (src) = (struct lex_token) { .token = { .type = T_ENDCMD } };
 }
 
 static struct lex_source *