about summary refs log blame commit diff stats
path: root/transect/compiler2
blob: 5c06cc4f7b6569e7d93f1cef52fa06718fa433f3 (plain) (tree)


























                                                                         
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