lua: require/package via package.preload +5 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
This commit is contained in:
@@ -1315,3 +1315,28 @@
|
||||
(dict-set! os "rename" lua-os-rename)
|
||||
(dict-set! os "tmpname" lua-os-tmpname)
|
||||
(dict-set! os "execute" lua-os-execute)
|
||||
|
||||
;; ── package / require ─────────────────────────────────────────
|
||||
(define package {})
|
||||
(define __package-loaded {})
|
||||
(define __package-preload {})
|
||||
|
||||
(dict-set! package "loaded" __package-loaded)
|
||||
(dict-set! package "preload" __package-preload)
|
||||
(dict-set! package "path" "?;?.lua")
|
||||
|
||||
(define
|
||||
lua-require
|
||||
(fn (name)
|
||||
(cond
|
||||
((has-key? __package-loaded name) (get __package-loaded name))
|
||||
((has-key? __package-preload name)
|
||||
(let ((loader (get __package-preload name)))
|
||||
(let ((m (lua-call loader name)))
|
||||
(let ((result (if (= m nil) true m)))
|
||||
(begin
|
||||
(dict-set! __package-loaded name result)
|
||||
result)))))
|
||||
(else (error (str "lua: module '" name "' not found"))))))
|
||||
|
||||
(define require lua-require)
|
||||
|
||||
Reference in New Issue
Block a user