(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))