HyphaeVM Garbage Collection
All checks were successful
per-push tests / build (push) Successful in 36s
per-push tests / test-utility (push) Successful in 36s
per-push tests / test-frontend (push) Successful in 37s
per-push tests / test-backend (push) Successful in 31s
per-push tests / timed-decomposer-parse (push) Successful in 34s
All checks were successful
per-push tests / build (push) Successful in 36s
per-push tests / test-utility (push) Successful in 36s
per-push tests / test-frontend (push) Successful in 37s
per-push tests / test-backend (push) Successful in 31s
per-push tests / timed-decomposer-parse (push) Successful in 34s
This commit removes the dependency upon Mycelium::sexpr::Datum from Hyphae
and instead adds a heap.rs module including three types:
- Gc: This is essentially a Box<Rc<T>> but passed around as a *const Rc<T>.
not only does this allow the wrapped T to be passed around in a format
that fits completely within a single physical register, this also
applies a greedy reference counting garbage collection to each and
every object allocated in the VM.
- Datum: This is a simplified enum for type polymorphism. Similar to the
original Mycelium::sexpr::Datum.
- Cons: This is a very standard Cons cell type.
Additionally, two new instructions are added:
- DUPL: a deep copy instruction
- CONST: an instruction to create number datum from embedded constants
- NTOI: casts a number to its inexact form
- NTOE: casts a number to its exact form
Fixes: #35 and #36
Signed-off-by: Ava Affine <ava@sunnypup.io>
This commit is contained in:
parent
8d2d0ebf0c
commit
cf626b2bfc
7 changed files with 324 additions and 295 deletions
|
|
@ -53,7 +53,13 @@ description = "delete current stack frame"
|
|||
name = "load"
|
||||
args = ["src", "dest"]
|
||||
output = ""
|
||||
description = "copies src into dest"
|
||||
description = "shallow copies src into dest"
|
||||
|
||||
[[instructions]]
|
||||
name = "dupl"
|
||||
args = ["src", "dest"]
|
||||
output = ""
|
||||
description = "deep copies src into dest"
|
||||
|
||||
[[instructions]]
|
||||
name = "clear"
|
||||
|
|
@ -247,6 +253,12 @@ args = ["src"]
|
|||
output = ""
|
||||
description = "mutates a number datum into its inexact form"
|
||||
|
||||
[[instructions]]
|
||||
name = "const"
|
||||
args = ["dst", "data"]
|
||||
output = ""
|
||||
description = "sets dst location to constant integer data"
|
||||
|
||||
[[instructions]]
|
||||
name = "mkvec"
|
||||
args = []
|
||||
|
|
@ -300,4 +312,3 @@ name = "cdr"
|
|||
args = ["list"]
|
||||
output = "returns last element in cons cell"
|
||||
description = "takes an AST and returns last element in top level cons cell"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue