-
Notifications
You must be signed in to change notification settings - Fork 790
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The `and/or` optimization removes the intermediate let, however the child expressions will still have the local in their environments, and more importantly anon fns in loops will have captured the local in the `:loop-lets` AST field. We add a pass that removes the local as well as loop-lets. Add compile and runtime tests based on cases from the ticket.
- Loading branch information
1 parent
8ef4bd2
commit 15f330f
Showing
4 changed files
with
130 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
;; Copyright (c) Rich Hickey. All rights reserved. | ||
;; The use and distribution terms for this software are covered by the | ||
;; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) | ||
;; which can be found in the file epl-v10.html at the root of this distribution. | ||
;; By using this software in any fashion, you are agreeing to be bound by | ||
;; the terms of this license. | ||
;; You must not remove this notice, or any other, from this software. | ||
|
||
(ns cljs.analyzer.passes) | ||
|
||
(defn apply-passes | ||
([ast passes] | ||
(apply-passes ast passes nil)) | ||
([ast passes opts] | ||
(reduce | ||
(fn [ast pass] | ||
(pass (:env ast) ast opts)) | ||
ast passes))) | ||
|
||
(defn walk | ||
([ast passes] | ||
(walk ast passes nil)) | ||
([ast passes opts] | ||
(reduce | ||
(fn [ast child-k] | ||
(assoc ast | ||
child-k | ||
(let [child (get ast child-k)] | ||
(if (vector? child) | ||
(into [] (map #(walk % passes opts)) child) | ||
(walk child passes))))) | ||
(some-> ast (apply-passes passes opts)) (:children ast)))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters