-- open Lean def check (b : Bool) : IO Unit := unless b do throw $ IO.userError "check failed" def test1 : IO Unit := do let x := `x; let x := addMacroScope `main x 1; IO.println $ x; let v := extractMacroScopes x; let x := { v with name := `y }.review; IO.println $ x; let v := extractMacroScopes x; let x := { v with name := `x }.review; IO.println $ x; let x := addMacroScope `main x 2; IO.println $ x; let v := extractMacroScopes x; let x := { v with name := `y }.review; IO.println $ x; let v := extractMacroScopes x; let x := { v with name := `x }.review; IO.println $ x; let x := addMacroScope `main x 3; IO.println $ x; let x := addMacroScope `foo x 4; IO.println $ x; let x := addMacroScope `foo x 5; let v := extractMacroScopes x; check (v.ctx == `foo); IO.println $ x; let x := addMacroScope `bla.bla x 6; IO.println $ x; let v := extractMacroScopes x; check (v.ctx == `bla.bla); let x := addMacroScope `bla.bla x 7; IO.println $ x; let v := extractMacroScopes x; let x := { v with name := `y }.review; IO.println $ x; let x := { v with name := `z.w }.review; IO.println $ x; pure () #eval test1