DEFINE: Properly support redefining a macro.
[pspp] / src / language / lexer / segment.h
index 1c209c5acb395dfe630035a4e34f4650215491dc..199e390f7e4f1279d877c9e01935534d405a2289 100644 (file)
@@ -78,6 +78,10 @@ enum segmenter_mode
     SEG_TYPE(DO_REPEAT_COMMAND)                 \
     SEG_TYPE(INLINE_DATA)                       \
                                                 \
+    SEG_TYPE(MACRO_ID)                          \
+    SEG_TYPE(MACRO_NAME)                        \
+    SEG_TYPE(MACRO_BODY)                        \
+                                                \
     SEG_TYPE(START_DOCUMENT)                    \
     SEG_TYPE(DOCUMENT)                          \
                                                 \
@@ -88,7 +92,6 @@ enum segmenter_mode
                                                 \
     SEG_TYPE(EXPECTED_QUOTE)                    \
     SEG_TYPE(EXPECTED_EXPONENT)                 \
-    SEG_TYPE(UNEXPECTED_DOT)                    \
     SEG_TYPE(UNEXPECTED_CHAR)
 
 /* Types of segments. */
@@ -111,14 +114,15 @@ struct segmenter
   {
     unsigned char state;
     unsigned char substate;
+    unsigned char nest;
     unsigned char mode;
   };
 
-void segmenter_init (struct segmenter *, enum segmenter_mode);
+struct segmenter segmenter_init (enum segmenter_mode, bool is_snippet);
 
 enum segmenter_mode segmenter_get_mode (const struct segmenter *);
 
-int segmenter_push (struct segmenter *, const char *input, size_t n,
+int segmenter_push (struct segmenter *, const char *input, size_t n, bool eof,
                     enum segment_type *);
 
 enum prompt_style segmenter_get_prompt (const struct segmenter *);