Currently, it's a list of expressions with two vector attributes, environment and sign, containing the corresponding element's environment and sign. The reason for this was to allow the environment to be set on all kinds of terms, including NULL.
It would probably be easier to work with if environment and sign were stored alongside the expression, perhaps with something like an rlang's quosures but with an additional sign attribute.