X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/abdf50aad1a95f1df8d11c54ff1623077eb84193..31194ea55102b83b087232e7af8e1a47399eec02:/NOTES diff --git a/NOTES b/NOTES index c22622c..c22de92 100644 --- a/NOTES +++ b/NOTES @@ -1,37 +1,22 @@ -* Stuff from the ABI spec +* Things to think about -** Notation + + Reorganize output protocol so that metaclasses can override the + layout. Split ~hook-output~ into a pair of generic functions: one + for walking the tree, which should continue to be + ~progn~-combination, and one for producing output, which subclasses + can override. - * sizeof(O) :: size of an object O - * align(O) :: alignment of the object O - * offset(C) :: offset of the component C within O - * dsize(O) :: data size of the object O (without tail padding) - * nvsize(O) :: the /non-virtual/ size of the object O (i.e., - without virtual bases) - * nvalign(O) :: the non-virtual alignment of the object O + + Investigate a `robust-ABI' layout using pointers rather than simple + inclusion. Each class's islots and vtmsgs will be found by + following a pointer rather than just magically knowing the offsets. + If you allocate objects dynamically, using ~CLASS->cls.initsz~ + rather than ~sizeof(CLASS__ilayout)~ then this isolates you from + added slots and messages at all superclasses. I expect this to + require a separate root class, but it /might/ be possible to + mix-and-match. -** Other concepts - * POD for the purpose of layout :: - - -* Order of stuff in output files - -** Header - - * Multiple inclusion and C++ guards - * Forward declarations of structs and typedef names. - * User code - * Structure definitions - * Macros - * Function declarations for methods - -** Implementation - - * User code - * Method and table definitions - -* COMMENT +* COMMENT Emacs cruft # Local variables: # mode: org