...
- Target the Google Closure AST
- Advantages
- Keeps us out of the JS AST design business
- Existing code printer
- Includes facilities for Closure Compiler type system
- Perf? Can skip roundtrip to JS source and to disk
- Disadvantages
- Closure AST nodes are partially stateful
- Each Node has an explicit parent reference
- Cloning policy is necessary to reuse subtrees (wasn't an issue in my port so far, see below)
- Increases our dependence on Closure
- Closure AST evolves more quickly than the JS spec
- Recent changes: http://code.google.com/p/closure-compiler/source/list?path=/trunk/src/com/google/javascript/jscomp/parsing/IRFactory.java&start=2295
- Closure AST nodes are partially stateful
- Alternative: Intermediate JavaScript AST as Clojure data-structures
- GWT and Dart use a different AST that they translate
- See: http://code.google.com/p/google-web-toolkit/source/browse/trunk/dev/core/src/com/google/gwt/dev/js/ClosureJsAstTranslator.java?r=10778
- Closure Compiler Discussion: https://groups.google.com/forum/?fromgroups=#!topic/closure-compiler-discuss/OEwLWkw4Kug
- Advantages