diff options
Diffstat (limited to 'module/c/cpp-environment/function-like-macro.scm')
-rw-r--r-- | module/c/cpp-environment/function-like-macro.scm | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/module/c/cpp-environment/function-like-macro.scm b/module/c/cpp-environment/function-like-macro.scm new file mode 100644 index 00000000..59b47c9c --- /dev/null +++ b/module/c/cpp-environment/function-like-macro.scm @@ -0,0 +1,25 @@ +(define-module (c cpp-environment function-like-macro) + :use-module (hnh util object) + :use-module (hnh util type) + :use-module ((c lex2) :select (lexeme?)) + :use-module ((c unlex) :select (unlex)) + :export (function-like-macro + function-like-macro? + identifier + identifier-list + body + variadic?)) + +(define-type (function-like-macro + printer: (lambda (r p) + (format p "#<#define ~a~a ~a>" + (identifier r) + (append (identifier-list r) + (if (variadic? r) + '("...") '())) + (unlex (body r))))) + (identifier type: string?) + (identifier-list type: (list-of string?)) + (body type: (list-of lexeme?)) + (variadic? type: boolean? + default: #f)) |