aboutsummaryrefslogtreecommitdiff
path: root/module/c/cpp-environment
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-07-10 23:36:56 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2022-07-10 23:36:56 +0200
commitf7b18cc72dd5b2ca90b6670dbe81c3ef3204d6d9 (patch)
treedcc40399f08285a9a308079098e735fb5bf192bd /module/c/cpp-environment
parentAdd of-type? to (hnh util type). (diff)
downloadcalp-f7b18cc72dd5b2ca90b6670dbe81c3ef3204d6d9.tar.gz
calp-f7b18cc72dd5b2ca90b6670dbe81c3ef3204d6d9.tar.xz
Resolve recursive macros.
Diffstat (limited to 'module/c/cpp-environment')
-rw-r--r--module/c/cpp-environment/function-like-macro.scm15
-rw-r--r--module/c/cpp-environment/object-like-macro.scm13
2 files changed, 20 insertions, 8 deletions
diff --git a/module/c/cpp-environment/function-like-macro.scm b/module/c/cpp-environment/function-like-macro.scm
index 26512439..a4b58487 100644
--- a/module/c/cpp-environment/function-like-macro.scm
+++ b/module/c/cpp-environment/function-like-macro.scm
@@ -1,6 +1,8 @@
(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
@@ -8,11 +10,16 @@
body
variadic?))
-(define-type (function-like-macro)
+(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?))
- ;; TODO import these
- (body type: list? ; (list-of (or whitespace-token? preprocessing-token?))
- )
+ (body type: (list-of lexeme?))
(variadic? type: boolean?
default: #f))
diff --git a/module/c/cpp-environment/object-like-macro.scm b/module/c/cpp-environment/object-like-macro.scm
index 5d4c8810..90a3ad23 100644
--- a/module/c/cpp-environment/object-like-macro.scm
+++ b/module/c/cpp-environment/object-like-macro.scm
@@ -1,13 +1,18 @@
(define-module (c cpp-environment object-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 (object-like-macro
object-like-macro?
identifier
body))
-(define-type (object-like-macro)
+(define-type (object-like-macro
+ printer: (lambda (r p)
+ (format p "#<#define ~a ~a>"
+ (identifier r)
+ (unlex (body r)))))
(identifier type: string?)
- ;; TODO import these
- (body type: list? ; (list-of (or whitespace-token? preprocessing-token?))
- ))
+ (body type: (list-of lexeme?)))