There is a quite a lot of redundancy in code, function and generator objects.
Intra-object redundancy
- Code objects have four fields ,
co_nlocalsplus, co_nplaincellvars, co_nlocals, co_nfreevars. Any of these fields can be computed from the other three.
- Code objects have a qualified name and a name. The name is always the suffix of the qualified name. Changing this to qualifying prefix and name would save space and allow sharing.
- The defaults and keyword defaults for a function are separate and the keyword defaults are a dict. They could be combined into a single array.
- Generator objects have a
gi_code field, which is redundant, as the frame contains a reference to the code object.
Inter-object redundancy
- Functions and generators have qualified name and name fields, which are almost always the same as the underlying code object. These should be lazily initialized
Linked PRs
There is a quite a lot of redundancy in code, function and generator objects.
Intra-object redundancy
co_nlocalsplus,co_nplaincellvars,co_nlocals,co_nfreevars. Any of these fields can be computed from the other three.gi_codefield, which is redundant, as the frame contains a reference to the code object.Inter-object redundancy
Linked PRs
co_nplaincellvarsfield from code objects. #100721gi_codefield from generator object. #100749