pub fn lower(sexp: &Sexp, names: &mut Vec<SmolStr>) -> Result<Exp, String>Expand description
Lower a read s-expression to an Exp, resolving names against
names — the compile-time stack of binders in scope, which mirrors
the runtime environment slot-for-slot. Innermost binding wins
(rposition), so shadowing works; an unresolved name is an error at
lowering time, not runtime.
names is borrowed mutably because binders push onto it during
their body’s lowering; it is restored before returning. Callers
evaluating closed top-level forms pass a fresh Vec.