fn assign(
        &mut self,
        pattern: Spanned<Pattern<SharedSymbol>>,
        expression: Spanned<CST>,
    ) -> Result<SST, Syntax> {
        let sst_pattern = self.walk_pattern(pattern, false);
        let sst_expression = self.walk(expression)?;

        return Ok(SST::Base(Base::assign(sst_pattern, sst_expression)));
    }
Walks an assignment.
Delegates to `walk_pattern` for capturing.
Assignments can capture existing variables
passerine/src/compiler/hoist.rs