|
436 | 436 | (sci-create-ns ctx ns-sym)) |
437 | 437 | (sci.impl.utils/set-namespace! (store/get-ctx) ns-sym {})) |
438 | 438 |
|
439 | | -(defn sci-the-ns [ctx x] |
| 439 | +(defn sci-the-ns* [ctx x] |
440 | 440 | (if (instance? #?(:clj sci.lang.Namespace |
441 | 441 | :cljs sci.lang/Namespace) x) x |
442 | 442 | (or (sci-find-ns* ctx x) |
443 | 443 | (throw (new #?(:clj Exception :cljs js/Error) |
444 | 444 | (str "No namespace: " x " found")))))) |
445 | 445 |
|
| 446 | +(defn sci-the-ns [x] |
| 447 | + (let [ctx (store/get-ctx)] |
| 448 | + (sci-the-ns* ctx x))) |
| 449 | + |
446 | 450 | (defn sci-ns-name* [ctx ns] |
447 | | - (let [^sci.lang.Namespace ns (sci-the-ns ctx ns)] |
| 451 | + (let [^sci.lang.Namespace ns (sci-the-ns* ctx ns)] |
448 | 452 | (types/getName ns))) |
449 | 453 |
|
450 | 454 | (defn sci-ns-name [ns] |
|
568 | 572 | ;; in this case the var will become unbound |
569 | 573 | ([ns var-sym] |
570 | 574 | (let [ctx (store/get-ctx) |
571 | | - ns (sci-the-ns ctx ns) |
| 575 | + ns (sci-the-ns* ctx ns) |
572 | 576 | ns-name (types/getName ns) |
573 | 577 | env (:env ctx)] |
574 | 578 | (or (get-in @env [:namespaces ns-name var-sym]) |
|
579 | 583 | new-var)))) |
580 | 584 | ([ns var-sym val] |
581 | 585 | (let [ctx (store/get-ctx) |
582 | | - ns (sci-the-ns ctx ns) |
| 586 | + ns (sci-the-ns* ctx ns) |
583 | 587 | ns-name (types/getName ns) |
584 | 588 | env (:env ctx)] |
585 | 589 | (or (when-let [v (get-in @env [:namespaces ns-name var-sym])] |
|
601 | 605 |
|
602 | 606 | ;;;; Require + resolve |
603 | 607 |
|
604 | | -(defn require [sci-ctx & args] |
| 608 | +(defn require* [sci-ctx & args] |
605 | 609 | (apply @sci.impl.utils/eval-require-state sci-ctx args)) |
606 | 610 |
|
| 611 | +(defn require [& args] |
| 612 | + (apply require* (store/get-ctx) args)) |
| 613 | + |
607 | 614 | (defn use [sci-ctx & args] |
608 | 615 | (apply @sci.impl.utils/eval-use-state sci-ctx args)) |
609 | 616 |
|
|
626 | 633 | (defn sci-ns-resolve |
627 | 634 | ([ns sym] |
628 | 635 | (let [ctx (store/get-ctx)] |
629 | | - (sci.impl.vars/with-bindings {sci.impl.utils/current-ns (sci-the-ns ctx ns)} |
| 636 | + (sci.impl.vars/with-bindings {sci.impl.utils/current-ns (sci-the-ns* ctx ns)} |
630 | 637 | (sci-resolve* ctx sym)))) |
631 | 638 | ([ns env sym] |
632 | 639 | (let [ctx (store/get-ctx)] |
633 | | - (sci.impl.vars/with-bindings {sci.impl.utils/current-ns (sci-the-ns ctx ns)} |
| 640 | + (sci.impl.vars/with-bindings {sci.impl.utils/current-ns (sci-the-ns* ctx ns)} |
634 | 641 | (sci-resolve* ctx env sym))))) |
635 | 642 |
|
636 | 643 | (defn sci-requiring-resolve |
637 | | - ([sci-ctx sym] |
638 | | - (if (qualified-symbol? sym) |
639 | | - (or (sci-resolve* sci-ctx sym) |
640 | | - (let [namespace (-> sym namespace symbol)] |
641 | | - (require sci-ctx namespace) |
642 | | - (sci-resolve* sci-ctx sym))) |
643 | | - (throw (new #?(:clj IllegalArgumentException |
644 | | - :cljs js/Error) |
645 | | - (str "Not a qualified symbol: " sym)))))) |
| 644 | + [sym] |
| 645 | + (let [sci-ctx (store/get-ctx)] |
| 646 | + (if (qualified-symbol? sym) |
| 647 | + (or (sci-resolve* sci-ctx sym) |
| 648 | + (let [namespace (-> sym namespace symbol)] |
| 649 | + (require* sci-ctx namespace) |
| 650 | + (sci-resolve* sci-ctx sym))) |
| 651 | + (throw (new #?(:clj IllegalArgumentException |
| 652 | + :cljs js/Error) |
| 653 | + (str "Not a qualified symbol: " sym)))))) |
646 | 654 |
|
647 | 655 | (defn sci-find-var [sym] |
648 | 656 | (if (qualified-symbol? sym) |
|
1560 | 1568 | 'rem (copy-core-var rem) |
1561 | 1569 | 'remove (copy-core-var remove) |
1562 | 1570 | 'remove-ns (copy-var sci-remove-ns clojure-core-ns {:name 'remove-ns}) |
1563 | | - 'require (copy-var require clojure-core-ns {:ctx true :copy-meta-from 'clojure.core/require}) |
| 1571 | + 'require (copy-var require clojure-core-ns {:copy-meta-from 'clojure.core/require}) |
1564 | 1572 | 'reset-meta! (copy-core-var reset-meta!) |
1565 | 1573 | 'rest (copy-core-var rest) |
1566 | 1574 | 'repeatedly (copy-core-var repeatedly) |
|
1584 | 1592 | 'rseq (copy-core-var rseq) |
1585 | 1593 | 'random-sample (copy-core-var random-sample) |
1586 | 1594 | 'repeat (copy-core-var repeat) |
1587 | | - 'requiring-resolve (copy-var sci-requiring-resolve clojure-core-ns {:ctx true :name 'requiring-resolve}) |
| 1595 | + 'requiring-resolve (copy-var sci-requiring-resolve clojure-core-ns {:name 'requiring-resolve}) |
1588 | 1596 | 'run! (copy-core-var run!) |
1589 | 1597 | 'set? (copy-core-var set?) |
1590 | 1598 | 'sequential? (copy-core-var sequential?) |
|
1639 | 1647 | 'take-last (copy-core-var take-last) |
1640 | 1648 | 'take-nth (copy-core-var take-nth) |
1641 | 1649 | 'take-while (copy-core-var take-while) |
1642 | | - 'the-ns (copy-var sci-the-ns clojure-core-ns {:name 'the-ns :ctx true}) |
| 1650 | + 'the-ns (copy-var sci-the-ns clojure-core-ns {:name 'the-ns}) |
1643 | 1651 | 'trampoline (copy-core-var trampoline) |
1644 | 1652 | 'transduce (copy-core-var transduce) |
1645 | 1653 | 'transient (copy-core-var transient) |
|
1745 | 1753 | (defn dir-fn |
1746 | 1754 | [ctx ns] |
1747 | 1755 | (let [current-ns (sci.impl.utils/current-ns-name) |
1748 | | - the-ns (sci-the-ns ctx |
| 1756 | + the-ns (sci-the-ns* ctx |
1749 | 1757 | (get (sci-ns-aliases* ctx current-ns) ns ns))] |
1750 | 1758 | (sort (map first (sci-ns-publics* ctx the-ns))))) |
1751 | 1759 |
|
|
0 commit comments