4 ms·
A naive AST traversal might also interpret some bit of fancy macro DSL as being “regular” code and have a spurious match. Any reliable whole-program source tran
by thelopa 5y ago
A naive AST traversal might also interpret some bit of fancy macro DSL as being “regular” code and have a spurious match. Any reliable whole-program source transformation in CL needs to leverage compiler-specific extensions (code walker, environment, etc.).
- dasyatidprime 5y agoI was assuming that at minimum the forms would be fully macroexpanded first (though macrolet is its own problem there). I also have the sense this might be easier in some Scheme dialects, but I don't know any of them well enough to say (thus that's part of my question).
- foldr 5y agoIIRC it's difficult to walk macroexpanded code in Common Lisp because you have to deal with lots of implementation-specific special forms. (Edit) This article has some good info: https://zenodo.org/record/3254669#.YL3-WzYzb2w https://zenodo.org/record/3254669#.YL3-WzYzb2w
- thelopa 5y agoExactly! If you walk the expanded form you have implementation-specific junk to deal with. Also, it may not be possible to map a form post-expansion to a source location. If you walk the pre-expansion form you’re going to get bad results. There’s no winning here unless you have help from the implementation.
- TeMPOraL 5y agoCL being CL, it's important to remember that macroexpansion itself can do anything a real program can. Including writing files, opening network connections, etc.