mirror of
https://github.com/luau-lang/luau.git
synced 2025-05-04 10:33:46 +01:00
31 lines
882 B
Agda
31 lines
882 B
Agda
module Luau.Heap where
|
||
|
||
open import FFI.Data.Maybe using (Maybe; just)
|
||
open import FFI.Data.Vector using (Vector; length; snoc)
|
||
open import Luau.Addr using (Addr)
|
||
open import Luau.Var using (Var)
|
||
open import Luau.Syntax using (Block; Expr; nil; addr; function⟨_⟩_end)
|
||
|
||
data HeapValue : Set where
|
||
function⟨_⟩_end : Var → Block → HeapValue
|
||
|
||
Heap = Vector HeapValue
|
||
|
||
data _≡_⊕_↦_ : Heap → Heap → Addr → HeapValue → Set where
|
||
|
||
defn : ∀ {H val} →
|
||
|
||
-----------------------------------
|
||
(snoc H val) ≡ H ⊕ (length H) ↦ val
|
||
|
||
lookup : Heap → Addr → Maybe HeapValue
|
||
lookup = FFI.Data.Vector.lookup
|
||
|
||
emp : Heap
|
||
emp = FFI.Data.Vector.empty
|
||
|
||
data AllocResult (H : Heap) (V : HeapValue) : Set where
|
||
ok : ∀ a H′ → (H′ ≡ H ⊕ a ↦ V) → AllocResult H V
|
||
|
||
alloc : ∀ H V → AllocResult H V
|
||
alloc H V = ok (length H) (snoc H V) defn
|