[cfe-dev] Writing C++ refactoring tools in Common Lisp

Christian Schafmeister chris.schaf at verizon.net
Tue Jan 7 08:16:03 PST 2014


Hey folks,


I’ve written a new Common Lisp environment/compiler over the past two years.  
It uses LLVM as the back-end (by exposing the LLVM C++ library to Common Lisp) and interoperates with C++ in that it has a template library like boost::python for exposing arbitrary C++ classes/functions to Common Lisp.  

I want to do some automated refactoring to improve my C++ code so I’m exposing the Clang ASTMatcher and Refactoring libraries.

I also think it would be really cool to write refactoring tools in a dynamic language like Lisp - without all the exhausting boilerplate required by the C++ approach.

So I’m exposing the Clang AST library to this Common Lisp environment with the goal of writing a general tool for writing C++ refactoring tools in Common Lisp.

My goal is to mimic C++ ASTMatchers like:

recordDecl(hasDescendant(
    ifStmt(hasTrueExpression(
        expr(hasDescendant(
            ifStmt()))))))

Using S-expressions: (record-decl (has-descendent (if-stmt (has-true-expression (expr (has-descendant( if-stmt)))))))    

And the source-to-source translation code will be small lambda functions that use the resulting MatchResults.

That way I don’t have to write a lot of documentation :-).

Currently I’m looking at calling the ASTMatcher/Dynamic/VariantValue interface to build ASTMatchers from S-expressions - does that sound like a good idea - or is there a better approach I should be exploring?


Best,

.Chris.

Christian Schafmeister
Associate Professor
Chemistry Department
Temple University
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140107/5ff1866c/attachment.html>


More information about the cfe-dev mailing list