X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Flexer%2Fmacro.h;h=23ae1d9a1869e4f618f62ce0a80874ae666dfa3c;hb=refs%2Fheads%2Fdev5;hp=8b0a7bb1adeec81fb707d72c70e2982cd918c944;hpb=1fbd8d1dcf607e05f04798c498786f5fda6796dc;p=pspp diff --git a/src/language/lexer/macro.h b/src/language/lexer/macro.h index 8b0a7bb1ad..23ae1d9a18 100644 --- a/src/language/lexer/macro.h +++ b/src/language/lexer/macro.h @@ -22,14 +22,42 @@ #include "libpspp/hmap.h" #include "libpspp/str.h" +#include "language/lexer/segment.h" #include "language/lexer/token.h" struct macro_expander; +struct macro_token + { + struct token token; + struct substring representation; + }; + +void macro_token_copy (struct macro_token *, const struct macro_token *); +void macro_token_uninit (struct macro_token *); + +struct macro_tokens + { + struct macro_token *mts; + size_t n; + size_t allocated; + }; + +void macro_tokens_copy (struct macro_tokens *, const struct macro_tokens *); +void macro_tokens_uninit (struct macro_tokens *); +struct macro_token *macro_tokens_add_uninit (struct macro_tokens *); +void macro_tokens_add (struct macro_tokens *, const struct macro_token *); + +void macro_tokens_from_string (struct macro_tokens *, const struct substring, + enum segmenter_mode); + +void macro_tokens_print (const struct macro_tokens *, FILE *); + struct macro_param { - char *name; /* NULL for a positional parameter. */ - struct tokens def; /* Default expansion. */ + bool positional; /* Is this a positional parameter? */ + char *name; /* "!1" or "!name". */ + struct macro_tokens def; /* Default expansion. */ bool expand_arg; /* Macro-expand the argument? */ enum @@ -56,7 +84,7 @@ struct macro struct macro_param *params; size_t n_params; - struct substring body; + struct macro_tokens body; }; void macro_destroy (struct macro *); @@ -85,8 +113,8 @@ int macro_expander_create (const struct macro_set *, struct macro_expander **); void macro_expander_destroy (struct macro_expander *); -int macro_expander_add (struct macro_expander *, const struct token *); +int macro_expander_add (struct macro_expander *, const struct macro_token *); -void macro_expander_get_expansion (struct macro_expander *, struct tokens *); +void macro_expander_get_expansion (struct macro_expander *, struct macro_tokens *); #endif /* macro.h */