sketch out more locals baking stuff, + notes for unit-arrangement pass

This commit is contained in:
Ryan Fleury
2026-04-20 09:57:31 -07:00
parent abb0199936
commit a1978d9fe9
5 changed files with 42 additions and 40 deletions
+13 -9
View File
@@ -25,15 +25,19 @@
// [ ] single-line viz for pointers w/ bad (unmapped) addresses
//
//- namespace/locations/variables RDI pass
// [ ] RDI_Local, RDI_GlobalVariable, RDI_ThreadVariable -> RDI_Variable
// [ ] RDI_Variable gets RDI_ContainerFlags, and a container_idx
// [ ] RDI_Namespace can be a container, same as types/procedures
// [ ] If procedure-contained, then index goes to scope now, not procedure
// [ ] Location sections -> split by location kind, fixed tables for simple locations, one catch-all table for bytecode.
// [ ] Location kind -> can be thread-local offset, or module virtual offset, to enclose globals/tlocals cases
// [ ] Referring to one location -> kind * index
// [ ] Referring to many locations, based on scope offsets -> kind = BlockList; BlockList encodes a first/opl pair into Block table, each Block has scope_off_first/opl, location_kind, location_idx - but a block's location kind CANNOT BE BlockList
// [ ] RDI_Variable has location_kind, location_idx
// [x] RDI_Local, RDI_GlobalVariable, RDI_ThreadVariable -> RDI_Variable
// [x] RDI_Variable gets RDI_ContainerFlags, and a container_idx
// [x] RDI_Namespace can be a container, same as types/procedures
// [x] If procedure-contained, then index goes to scope now, not procedure
// [x] Location sections -> split by location kind, fixed tables for simple locations, one catch-all table for bytecode.
// [x] Location kind -> can be thread-local offset, or module virtual offset, to enclose globals/tlocals cases
// [x] Referring to one location -> kind * index
// [x] Referring to many locations, based on scope offsets -> kind = BlockList; BlockList encodes a first/opl pair into Block table, each Block has scope_off_first/opl, location_kind, location_idx - but a block's location kind CANNOT BE BlockList
// [x] RDI_Variable has location_kind, location_idx
//
// [ ] we keep flat tables of symbols, *but*, "sort" by containing unit. unit -> [f, opl) of procedures, globals, threadvars, constants, etc.
// [ ] container can also be a unit, so you can also go from procedure/global/tvar -> unit
//
// [ ] symbols only store their *partly-qualified name*, e.g. `x` for A::B::C::x
// [ ] default name maps look up *partly-qualified names*
// [ ] to match a *fully qualified name*, there needs to be a second kind of different lookup - instead of string-matching, we need to match against the *fully qualified names*. the maps must be built by hashing the *fully qualified name*, but redirecting to the symbol with the *partially qualified name*. this is to allow fully-qualified lookups, but avoid storing fully-qualified names.