28 lines
636 B
Plaintext
28 lines
636 B
Plaintext
to dereference a heap allocation
|
|
copy handle to stack
|
|
perform lookup to stack
|
|
|
|
lookup x in *(ESP+4) of type (handle T)
|
|
|
|
reg <- copy *(ESP+5) : (address T stack)
|
|
payload alloc id <- copy *reg
|
|
address alloc id <- copy *(ESP+4)
|
|
compare payload alloc id, address alloc id
|
|
jump if not equal to print stack trace and panic
|
|
address <- add reg, 1
|
|
|
|
types:
|
|
|
|
address T reg
|
|
address T stack
|
|
address T heap
|
|
address T global
|
|
|
|
copy down this spectrum is not permitted, but up is.
|
|
|
|
addresses aren't allowed in types, globals and on the heap. Only handles.
|
|
addresses are only for temporary manipulations.
|
|
|
|
|
|
*(address T) <- copy T
|