Most basic macros work.
[pspp] / src / language / lexer / macro.h
index e829f8acee2fd771a4f00b0ae50982c999dfeea6..8b0a7bb1adeec81fb707d72c70e2982cd918c944 100644 (file)
@@ -24,6 +24,8 @@
 #include "libpspp/str.h"
 #include "language/lexer/token.h"
 
+struct macro_expander;
+
 struct macro_param
   {
     char *name;                 /* NULL for a positional parameter. */
@@ -64,11 +66,23 @@ struct macro_set
     struct hmap macros;
   };
 
+struct macro_set *macro_set_create (void);
+void macro_set_destroy (struct macro_set *);
 const struct macro *macro_set_find (const struct macro_set *,
                                     const char *);
-
-struct macro_expander *macro_expander_create (const struct macro_set *,
-                                              const struct token *);
+void macro_set_add (struct macro_set *, struct macro *);
+
+static inline bool
+macro_set_is_empty (const struct macro_set *set)
+{
+  return hmap_is_empty (&set->macros);
+}
+\f
+/* Macro expansion. */
+
+int macro_expander_create (const struct macro_set *,
+                           const struct token *,
+                           struct macro_expander **);
 void macro_expander_destroy (struct macro_expander *);
 
 int macro_expander_add (struct macro_expander *, const struct token *);