erlang: code:which/is_loaded/all_loaded introspection (+10 eval tests)

This commit is contained in:
2026-05-14 19:08:34 +00:00
parent cd45ebcc7a
commit 582baf5bfd
5 changed files with 93 additions and 6 deletions

View File

@@ -2032,6 +2032,42 @@
(er-module-version slot)))
(er-mk-atom "true"))))))))))))
(define er-bif-code-which
(fn (vs)
(let ((mod-arg (nth vs 0)))
(cond
(not (er-atom? mod-arg))
(raise (er-mk-error-marker (er-mk-atom "badarg")))
(dict-has? (er-modules-get) (get mod-arg :name))
(er-mk-atom "loaded")
:else (er-mk-atom "non_existing")))))
(define er-bif-code-is-loaded
(fn (vs)
(let ((mod-arg (nth vs 0)))
(cond
(not (er-atom? mod-arg))
(raise (er-mk-error-marker (er-mk-atom "badarg")))
(dict-has? (er-modules-get) (get mod-arg :name))
(er-mk-tuple (list (er-mk-atom "file") (er-mk-atom "loaded")))
:else (er-mk-atom "false")))))
(define er-bif-code-all-loaded
(fn (vs)
(let ((registry (er-modules-get))
(ks (keys (er-modules-get)))
(out (er-mk-nil)))
(for-each
(fn (i)
(let ((k (nth ks (- (- (len ks) 1) i))))
(set! out
(er-mk-cons
(er-mk-tuple
(list (er-mk-atom k) (er-mk-atom "loaded")))
out))))
(range 0 (len ks)))
out)))
(define er-apply-code-bif
(fn (name vs)
(cond
@@ -2041,6 +2077,12 @@
(er-bif-code-purge vs)
(and (= name "soft_purge") (= (len vs) 1))
(er-bif-code-soft-purge vs)
(and (= name "which") (= (len vs) 1))
(er-bif-code-which vs)
(and (= name "is_loaded") (= (len vs) 1))
(er-bif-code-is-loaded vs)
(and (= name "all_loaded") (= (len vs) 0))
(er-bif-code-all-loaded vs)
:else (error
(str "Erlang: undefined function 'code:" name "/" (len vs) "'")))))