Skip to content

Commit 2ba2510

Browse files
committed
feat: import forms
1 parent 1a898b1 commit 2ba2510

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/uclj/core.clj

+12-1
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,15 @@
350350
(gen-eval-node (do (doseq [x butlast-body] (evalme x &b))
351351
(evalme last-body &b))))))))
352352

353+
354+
;; resolve class by name. put it in namespace. return class object
355+
(defmethod seq->eval-node 'clojure.core/import* [_ _ [_ classname]]
356+
(assert (string? classname))
357+
(gen-eval-node
358+
(if-let [cls (symbol->class (symbol classname))]
359+
(doto cls (->> (.importClass *ns*))) ;; nincs hozzaadva :scream:
360+
(throw (new RuntimeException "Cannot import class.")))))
361+
353362
(defmethod seq->eval-node 'letfn* seq-eval-letfn [iden->idx recur-indices [_ bindings & bodies :as form]]
354363
(let [promises (for [[k f] (partition 2 bindings)
355364
:let [v (volatile! nil)]]
@@ -615,7 +624,9 @@
615624
(if (class? parent)
616625
(gen-eval-node (clojure.lang.Reflector/getStaticField ^Class parent (name expr)))
617626
(throw (ex-info (str "Cannot access symbol! " expr) {:symbol expr})))
618-
(throw (ex-info (str "Cannot resolve symbol! " expr) {:symbol expr}))))))
627+
(if (class? (resolve expr))
628+
(let [cls (resolve expr)] (gen-eval-node cls))
629+
(throw (ex-info (str "Cannot resolve symbol! " expr) {:symbol expr})))))))
619630

620631
(defn- coll->eval-node [fmap sym->iden expr]
621632
(let [elem-nodes (into [] (fmap (partial ->eval-node sym->iden nil)) expr)

test/clojure_core_test.clj

+4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
(ns clojure-core-test
2+
(:import clojure.lang.Var)
23
(:require [clojure.data.xml]
34
[clojure.test :refer :all]))
45

6+
(deftest test-imported
7+
(is (= Var clojure.lang.Var)))
8+
59
(deftest test-numbers
610
(clojure.test/is (= 2 (inc 1)))
711
(clojure.test/is (= 0 (dec 1))))

0 commit comments

Comments
 (0)