compile/item* and compile/attr*
Syntax: (item* OBJ KEY ...), (attr* OBJ NAME ...)
Behaviour: Left-nested item and attr chains: (item* d "a" "b")
is (item (item d "a") "b"), and (attr* os path sep) is
(attr (attr os path) sep). Each step is a plain lookup that raises
when a key or attribute is missing. For a chained lookup with a default
or a presence test, the runtime functions
getitem* and hasitem*
and getattr* and hasattr*
take the path at run time.
Examples:
>>> (item* #{"a": #{"b": 2}} "a" "b")
2
>>> (import os)
>>> (attr* os path sep)
"/"
The suffix spellings d["a"]["b"] and os.path.sep read to the same
chains.