File tree 2 files changed +10
-3
lines changed
2 files changed +10
-3
lines changed Original file line number Diff line number Diff line change 595
595
(gen-eval-node (aget #^objects &b index)))
596
596
(if (var? (resolve expr))
597
597
(let [^clojure.lang.Var resolved-expr (resolve expr)]
598
- (if (and (bound? resolved-expr) (not (.isDynamic resolved-expr)))
599
- (let [expr-val @resolved-expr] (gen-eval-node {::var resolved-expr} expr-val))
600
- (gen-eval-node {::unbound-var resolved-expr} @resolved-expr))) ; ; var was unbound at compile time so we need to deref in in runtime
598
+ (cond (.isMacro resolved-expr)
599
+ (throw (new RuntimeException (str " Can't take value of a macro: " resolved-expr)))
600
+ (and (bound? resolved-expr) (not (.isDynamic resolved-expr)))
601
+ (let [expr-val @resolved-expr] (gen-eval-node {::var resolved-expr} expr-val))
602
+ :else
603
+ (gen-eval-node {::unbound-var resolved-expr} @resolved-expr))) ; ; var was unbound at compile time so we need to deref in in runtime
601
604
(if-let [parent (some-> expr namespace symbol resolve)]
602
605
(if (class? parent)
603
606
(gen-eval-node (clojure.lang.Reflector/getStaticField ^Class parent (name expr)))
Original file line number Diff line number Diff line change 28
28
(evaluator '(let [~@(interleave varnames (range i))]
29
29
(+ ~@(take i varnames)))))))))))
30
30
31
+ (deftest test-eval-sym
32
+ (testing " taking value of macro"
33
+ (is (thrown? RuntimeException (evaluator '(do ->))))))
34
+
31
35
(deftest test-eval-try
32
36
(testing " try-catch maintains sybol usage across closure"
33
37
(is (= 2 (evaluator '(let [a 1 b 2 c 3 ]
You can’t perform that action at this time.
0 commit comments