Skip to content

Commit d425aae

Browse files
committed
use pass scheduler
1 parent bcb56f4 commit d425aae

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

src/main/clojure/clojure/tools/emitter/jvm.clj

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,15 @@
1010
(:refer-clojure :exclude [eval macroexpand-1 macroexpand load])
1111
(:require [clojure.tools.analyzer.jvm :as a]
1212
[clojure.tools.analyzer :refer [macroexpand-1 macroexpand]]
13+
[clojure.tools.analyzer.passes :refer [schedule]]
14+
[clojure.tools.analyzer.env :as env]
15+
[clojure.tools.analyzer.utils :refer [mmerge]]
1316
[clojure.tools.emitter.jvm.emit :as e]
1417
[clojure.tools.emitter.jvm.transform :as t]
18+
[clojure.tools.analyzer.passes.jvm
19+
[annotate-class-id :refer [annotate-class-id]]
20+
[annotate-internal-name :refer [annotate-internal-name]]
21+
[infer-tag :refer [ensure-tag]]]
1522
[clojure.tools.emitter.passes.jvm.collect-internal-methods :refer :all]
1623
[clojure.java.io :as io]
1724
[clojure.string :as s]
@@ -25,6 +32,15 @@
2532
([{:keys [class-name] :as class-ast} class-loader]
2633
(.defineClass ^DynamicClassLoader class-loader class-name (t/-compile class-ast) nil)))
2734

35+
(def run-passes
36+
(schedule (into a/default-passes
37+
#{#'collect-internal-methods
38+
39+
#'ensure-tag
40+
41+
#'annotate-class-id
42+
#'annotate-internal-name})))
43+
2844
(defn eval
2945
"(eval form)
3046
(eval form eval-options-map)
@@ -56,7 +72,7 @@
5672
([form {:keys [debug? emit-opts class-loader analyze-opts]
5773
:or {debug? false
5874
emit-opts {}
59-
analyze-opts {}
75+
analyze-opts a/default-passes-opts
6076
class-loader (clojure.lang.RT/makeClassLoader)}
6177
:as options}]
6278
{:pre [(instance? DynamicClassLoader class-loader)]}
@@ -70,11 +86,11 @@
7086
(doseq [expr statements]
7187
(eval expr options))
7288
(eval ret options))
73-
(let [cs (-> (a/analyze `(^:once fn* [] ~mform) (a/empty-env) analyze-opts)
74-
collect-internal-methods
75-
(e/emit-classes (merge {:debug? debug?} emit-opts)))
76-
classes (mapv #(compile-and-load % class-loader) cs)]
77-
((.newInstance ^Class (last classes))))))))
89+
(binding [a/run-passes run-passes]
90+
(let [cs (-> (a/analyze `(^:once fn* [] ~mform) (a/empty-env) analyze-opts)
91+
(e/emit-classes (merge {:debug? debug?} emit-opts)))
92+
classes (mapv #(compile-and-load % class-loader) cs)]
93+
((.newInstance ^Class (last classes)))))))))
7894

7995
(def root-directory @#'clojure.core/root-directory)
8096

src/main/clojure/clojure/tools/emitter/passes/jvm/collect_internal_methods.clj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111

1212
(def ^:dynamic ^:private *internal-methods*)
1313

14-
(defn collect-internal-methods [ast]
14+
(defn collect-internal-methods
15+
{:pass-info {:walk :none :depends #{} :compiler true}} ;; ensure it's run last
16+
[ast]
1517
(case (:op ast)
1618
:fn-method
1719
(binding [*internal-methods* (atom [])]

0 commit comments

Comments
 (0)