erlang: spawn/1 + self/0 + is_pid (+13 tests)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled

This commit is contained in:
2026-04-24 19:50:09 +00:00
parent bc1a69925e
commit 266693a2f6
4 changed files with 133 additions and 4 deletions

View File

@@ -61,8 +61,23 @@
(let
((st (er-state-make (er-tokenize src))))
(let
((body (er-parse-body st)) (env (er-env-new)))
(er-eval-body body env)))))
((body (er-parse-body st)))
(er-sched-init!)
(let
((main (er-proc-new! (er-env-new))))
(er-sched-next-runnable!)
(er-sched-set-current! (get main :pid))
(er-proc-set! (get main :pid) :state "running")
(let
((result (er-eval-body body (get main :env))))
(er-proc-set! (get main :pid) :state "dead")
(er-proc-set!
(get main :pid)
:exit-reason
(er-mk-atom "normal"))
(er-sched-set-current! nil)
(er-sched-drain!)
result))))))
(define
er-eval-body
@@ -347,6 +362,7 @@
(fn (i) (er-equal? (nth ea i) (nth eb i)))
(range 0 (len ea)))))
(and (= (type-of a) "string") (= (type-of b) "string")) (= a b)
(and (er-pid? a) (er-pid? b)) (= (get a :id) (get b :id))
:else false)))
;; Exact equality: 1 =/= 1.0 in Erlang.
@@ -380,7 +396,8 @@
(er-nil? v) 3
(er-cons? v) 3
(= (type-of v) "string") 4
:else 5)))
(er-pid? v) 5
:else 6)))
(define
er-list-append
@@ -535,6 +552,9 @@
(= name "tuple_size") (er-bif-tuple-size vs)
(= name "atom_to_list") (er-bif-atom-to-list vs)
(= name "list_to_atom") (er-bif-list-to-atom vs)
(= name "is_pid") (er-bif-is-pid vs)
(= name "self") (er-bif-self vs)
(= name "spawn") (er-bif-spawn vs)
:else (error
(str "Erlang: undefined function '" name "/" (len vs) "'")))))
@@ -863,6 +883,7 @@
(er-cons? v) (str "[" (er-format-list-elems v) "]")
(er-tuple? v) (str "{" (er-format-tuple-elems (get v :elements)) "}")
(er-fun? v) "#Fun"
(er-pid? v) (str "<pid:" (get v :id) ">")
:else (str v))))
(define