- add :ns meta to more vars (#966)

- add a couple more tests for Coercions
This commit is contained in:
Bob 2021-08-08 09:38:56 -04:00 committed by GitHub
parent 12c66351b3
commit 116d73f0b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 107 additions and 80 deletions

View file

@ -2,6 +2,7 @@
{:no-doc true} {:no-doc true}
(:require [clojure.core.async :as async] (:require [clojure.core.async :as async]
[clojure.core.async.impl.protocols :as protocols] [clojure.core.async.impl.protocols :as protocols]
[sci.impl.namespaces :refer [copy-var macrofy]]
[sci.impl.vars :as vars])) [sci.impl.vars :as vars]))
(def ^java.util.concurrent.Executor executor @#'async/thread-macro-executor) (def ^java.util.concurrent.Executor executor @#'async/thread-macro-executor)
@ -38,72 +39,78 @@
[_ _ bindings & body] [_ _ bindings & body]
(list 'clojure.core.async/thread (list* 'loop bindings body))) (list 'clojure.core.async/thread (list* 'loop bindings body)))
(def core-async-namespace (vars/->SciNamespace 'clojure.core.async nil))
(def async-namespace (def async-namespace
{'<!! async/<!! {:obj core-async-namespace
'>!! async/>!! '<!! (copy-var async/<!! core-async-namespace)
'admix async/admix '>!! (copy-var async/>!! core-async-namespace)
'alts! async/alts! 'admix (copy-var async/admix core-async-namespace)
'alts!! async/alts!! 'alts! (copy-var async/alts! core-async-namespace)
'alt!! (with-meta alt!! {:sci/macro true}) 'alts!! (copy-var async/alts!! core-async-namespace)
'buffer async/buffer 'alt!! (macrofy 'alt!! alt!! core-async-namespace)
'chan async/chan 'buffer (copy-var async/buffer core-async-namespace)
'close! async/close! 'chan (copy-var async/chan core-async-namespace)
'do-alt async/do-alt 'close! (copy-var async/close! core-async-namespace)
'do-alts async/do-alts 'do-alt (copy-var async/do-alt core-async-namespace)
'dropping-buffer async/dropping-buffer 'do-alts (copy-var async/do-alts core-async-namespace)
'filter< async/filter< 'dropping-buffer (copy-var async/dropping-buffer core-async-namespace)
'filter> async/filter> 'filter< (copy-var async/filter< core-async-namespace)
'into async/into 'filter> (copy-var async/filter> core-async-namespace)
'map async/map 'into (copy-var async/into core-async-namespace)
'map< async/map< 'map (copy-var async/map core-async-namespace)
'map> async/map> 'map< (copy-var async/map< core-async-namespace)
'mapcat< async/mapcat< 'map> (copy-var async/map> core-async-namespace)
'mapcat> async/mapcat> 'mapcat< (copy-var async/mapcat< core-async-namespace)
'merge async/merge 'mapcat> (copy-var async/mapcat> core-async-namespace)
'mix async/mix 'merge (copy-var async/merge core-async-namespace)
'mult async/mult 'mix (copy-var async/mix core-async-namespace)
'offer! async/offer! 'mult (copy-var async/mult core-async-namespace)
'onto-chan async/onto-chan 'offer! (copy-var async/offer! core-async-namespace)
'partition async/partition 'onto-chan (copy-var async/onto-chan core-async-namespace)
'partition-by async/partition-by 'partition (copy-var async/partition core-async-namespace)
'pipe async/pipe 'partition-by (copy-var async/partition-by core-async-namespace)
'pipeline async/pipeline 'pipe (copy-var async/pipe core-async-namespace)
'pipeline-async async/pipeline-async 'pipeline (copy-var async/pipeline core-async-namespace)
'pipeline-blocking async/pipeline-blocking 'pipeline-async (copy-var async/pipeline-async core-async-namespace)
'poll! async/poll! 'pipeline-blocking (copy-var async/pipeline-blocking core-async-namespace)
'promise-chan async/promise-chan 'poll! (copy-var async/poll! core-async-namespace)
'pub async/pub 'promise-chan (copy-var async/promise-chan core-async-namespace)
'put! async/put! 'pub (copy-var async/pub core-async-namespace)
'reduce async/reduce 'put! (copy-var async/put! core-async-namespace)
'remove< async/remove< 'reduce (copy-var async/reduce core-async-namespace)
'remove> async/remove> 'remove< (copy-var async/remove< core-async-namespace)
'sliding-buffer async/sliding-buffer 'remove> (copy-var async/remove> core-async-namespace)
'solo-mode async/solo-mode 'sliding-buffer (copy-var async/sliding-buffer core-async-namespace)
'split async/split 'solo-mode (copy-var async/solo-mode core-async-namespace)
'sub async/sub 'split (copy-var async/split core-async-namespace)
'take async/take 'sub (copy-var async/sub core-async-namespace)
'take! async/take! 'take (copy-var async/take core-async-namespace)
'tap async/tap 'take! (copy-var async/take! core-async-namespace)
'thread (with-meta thread {:sci/macro true}) 'tap (copy-var async/tap core-async-namespace)
'thread-call thread-call 'thread (macrofy 'thread thread core-async-namespace)
'timeout async/timeout 'thread-call (copy-var thread-call core-async-namespace)
'to-chan async/to-chan 'timeout (copy-var async/timeout core-async-namespace)
'toggle async/toggle 'to-chan (copy-var async/to-chan core-async-namespace)
'transduce async/transduce 'toggle (copy-var async/toggle core-async-namespace)
'unblocking-buffer? async/unblocking-buffer? 'transduce (copy-var async/transduce core-async-namespace)
'unique async/unique 'unblocking-buffer? (copy-var async/unblocking-buffer? core-async-namespace)
'unmix async/unmix 'unique (copy-var async/unique core-async-namespace)
'unmix-all async/unmix-all 'unmix (copy-var async/unmix core-async-namespace)
'unsub async/unsub 'unmix-all (copy-var async/unmix-all core-async-namespace)
'unsub-all async/unsub-all 'unsub (copy-var async/unsub core-async-namespace)
'untap async/untap 'unsub-all (copy-var async/unsub-all core-async-namespace)
'untap-all async/untap-all 'untap (copy-var async/untap core-async-namespace)
'untap-all (copy-var async/untap-all core-async-namespace)
;; polyfill ;; polyfill
'go (with-meta thread {:sci/macro true}) 'go (macrofy 'go thread core-async-namespace)
'<! async/<!! '<! (copy-var async/<!! core-async-namespace)
'>! async/>!! '>! (copy-var async/>!! core-async-namespace)
'alt! (with-meta alt!! {:sci/macro true}) 'alt! (macrofy 'alt! alt!! core-async-namespace)
'go-loop (with-meta go-loop {:sci/macro true})}) 'go-loop (macrofy 'go-loop go-loop core-async-namespace)})
(def async-protocols-ns (vars/->SciNamespace 'clojure.core.async.impl.protocols nil))
(def async-protocols-namespace (def async-protocols-namespace
{'ReadPort protocols/ReadPort}) {:obj async-protocols-ns
'ReadPort (copy-var protocols/ReadPort async-protocols-ns)})

View file

@ -7,7 +7,7 @@
[clojure.core :as c] [clojure.core :as c]
[clojure.string :as str] [clojure.string :as str]
[sci.core :as sci] [sci.core :as sci]
[sci.impl.namespaces :refer [copy-core-var]] [sci.impl.namespaces :refer [copy-core-var core-var macrofy]]
[sci.impl.vars :as vars :refer [clojure-core-ns]])) [sci.impl.vars :as vars :refer [clojure-core-ns]]))
(defn locking* [form bindings v f & args] (defn locking* [form bindings v f & args]
@ -162,20 +162,20 @@
'file-seq (copy-core-var file-seq) 'file-seq (copy-core-var file-seq)
'promise (copy-core-var promise) 'promise (copy-core-var promise)
'deliver (copy-core-var deliver) 'deliver (copy-core-var deliver)
'locking (with-meta locking* {:sci/macro true}) 'locking (macrofy 'locking locking*)
'shutdown-agents (copy-core-var shutdown-agents) 'shutdown-agents (copy-core-var shutdown-agents)
'slurp (copy-core-var slurp) 'slurp (copy-core-var slurp)
'spit (copy-core-var spit) 'spit (copy-core-var spit)
'time (with-meta time* {:sci/macro true}) 'time (macrofy 'time time*)
'Throwable->map (copy-core-var Throwable->map) 'Throwable->map (copy-core-var Throwable->map)
'tap> (copy-core-var tap>) 'tap> (copy-core-var tap>)
'add-tap (copy-core-var add-tap) 'add-tap (copy-core-var add-tap)
'remove-tap (copy-core-var remove-tap) 'remove-tap (copy-core-var remove-tap)
'*data-readers* data-readers '*data-readers* data-readers
'default-data-readers default-data-readers 'default-data-readers (copy-core-var default-data-readers)
'xml-seq (copy-core-var xml-seq) 'xml-seq (copy-core-var xml-seq)
'read+string (fn [& args] 'read+string (core-var 'read+string (fn [& args]
(apply read+string @common/ctx args)) (apply read+string @common/ctx args)))
'*command-line-args* command-line-args '*command-line-args* command-line-args
'*warn-on-reflection* warn-on-reflection '*warn-on-reflection* warn-on-reflection
'*math-context* math-context '*math-context* math-context

View file

@ -54,11 +54,11 @@
(def io-namespace (def io-namespace
{'Coercions (sci/new-var 'Coercions {:methods #{'as-file 'as-url} {'Coercions (sci/new-var 'Coercions {:methods #{'as-file 'as-url}
:ns io-ns}) :ns io-ns} {:ns io-ns})
'as-relative-path (copy-var as-relative-path io-ns) 'as-relative-path (copy-var as-relative-path io-ns)
'as-file as-file 'as-file (copy-var as-file io-ns)
'file (copy-var file io-ns) 'file (copy-var file io-ns)
'as-url as-url 'as-url (copy-var as-url io-ns)
'copy (copy-var io/copy io-ns) 'copy (copy-var io/copy io-ns)
'delete-file (copy-var io/delete-file io-ns) 'delete-file (copy-var io/delete-file io-ns)
'input-stream (copy-var io/input-stream io-ns) 'input-stream (copy-var io/input-stream io-ns)

View file

@ -320,6 +320,8 @@ Use bb run --help to show this help output.
(def input-var (sci/new-dynamic-var '*input*)) (def input-var (sci/new-dynamic-var '*input*))
(def clojure-main-ns (sci/create-ns 'clojure.main))
(def namespaces (def namespaces
(cond-> (cond->
{'user {'*input* (ctx-fn {'user {'*input* (ctx-fn
@ -335,11 +337,13 @@ Use bb run --help to show this help output.
'clojure.data data/data-namespace 'clojure.data data/data-namespace
'clojure.stacktrace stacktrace-namespace 'clojure.stacktrace stacktrace-namespace
'clojure.zip zip-namespace 'clojure.zip zip-namespace
'clojure.main {'demunge demunge 'clojure.main {:obj clojure-main-ns
'repl-requires clojure-main/repl-requires 'demunge (sci/copy-var demunge clojure-main-ns)
'repl (fn [& opts] 'repl-requires (sci/copy-var clojure-main/repl-requires clojure-main-ns)
(let [opts (apply hash-map opts)] 'repl (sci/new-var 'repl
(repl/start-repl! @common/ctx opts)))} (fn [& opts]
(let [opts (apply hash-map opts)]
(repl/start-repl! @common/ctx opts))) {:ns clojure-main-ns})}
'clojure.test t/clojure-test-namespace 'clojure.test t/clojure-test-namespace
'babashka.classpath classpath-namespace 'babashka.classpath classpath-namespace
'clojure.pprint pprint-namespace 'clojure.pprint pprint-namespace
@ -716,7 +720,7 @@ Use bb run --help to show this help output.
:namespaces (-> namespaces :namespaces (-> namespaces
(assoc 'clojure.core (assoc 'clojure.core
(assoc core-extras (assoc core-extras
'load-file load-file*))) 'load-file (sci-namespaces/core-var 'load-file load-file*))))
:env env :env env
:features #{:bb :clj} :features #{:bb :clj}
:classes classes/class-map :classes classes/class-map

View file

@ -23,3 +23,19 @@
(.exists (io/file path)) ;; true (.exists (io/file path)) ;; true
")))) "))))
(deftest string-as-file-test
(is (true? (bb "
(require '[clojure.java.io :as io])
(instance? java.io.File (io/as-file \".\"))
"))))
(deftest string-as-url-test
(is (true? (bb "
(require '[clojure.java.io :as io])
(let [url (io/as-url \"https://github.com/babashka/babashka\")]
(and (= \"https\" (.getProtocol url))
(= \"github.com\" (.getHost url))))
"))))