erlang: spawn/1 + self/0 + is_pid (+13 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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user