diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2022-07-10 23:36:56 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2022-07-10 23:36:56 +0200 |
commit | f7b18cc72dd5b2ca90b6670dbe81c3ef3204d6d9 (patch) | |
tree | dcc40399f08285a9a308079098e735fb5bf192bd /module/c/cpp-environment.scm | |
parent | Add of-type? to (hnh util type). (diff) | |
download | calp-f7b18cc72dd5b2ca90b6670dbe81c3ef3204d6d9.tar.gz calp-f7b18cc72dd5b2ca90b6670dbe81c3ef3204d6d9.tar.xz |
Resolve recursive macros.
Diffstat (limited to '')
-rw-r--r-- | module/c/cpp-environment.scm | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/module/c/cpp-environment.scm b/module/c/cpp-environment.scm index fa69e1fc..2ad60b56 100644 --- a/module/c/cpp-environment.scm +++ b/module/c/cpp-environment.scm @@ -53,15 +53,17 @@ (identifier x)) -(define (macro-body macro) - (define body-proc - (cond ((obj:object-like-macro? macro) obj:body) - ((fun:function-like-macro? macro) fun:body) - ((int:internal-macro? macro) int:body) - (else (scm-error 'wrong-type-arg "macro-body" - "Not a macro: ~s" - (list macro) #f)))) - (body-proc macro)) +(define (macro-body-proc macro) + (cond ((obj:object-like-macro? macro) obj:body) + ((fun:function-like-macro? macro) fun:body) + ((int:internal-macro? macro) int:body) + (else (scm-error 'wrong-type-arg "macro-body" + "Not a macro: ~s" + (list macro) #f)))) + +(define macro-body + (case-lambda ((macro) ((macro-body-proc macro) macro)) + ((macro value) ((macro-body-proc macro) macro value)))) (define macro-identifier-list fun:identifier-list) (define macro-variadic? fun:variadic?) |