Push a local variable type (lambda/forall binding, no let-value).
(&mut self, ty: KExpr<M>)
| 446 | |
| 447 | /// Push a local variable type (lambda/forall binding, no let-value). |
| 448 | /// The type is interned first: ctx suffix hashing keys on uids, so a |
| 449 | /// canonical frame is what lets equal suffixes share cache entries. |
| 450 | pub fn push_local(&mut self, ty: KExpr<M>) { |
| 451 | let ty = self.env.intern.intern_expr(ty); |
| 452 | let mut h = blake3::Hasher::new(); |
| 453 | h.update(b"ctx.local"); |
| 454 | h.update(&ty.addr().to_le_bytes()); |
| 455 | h.update(self.ctx_id.as_bytes()); |
| 456 | self.ctx_id_stack.push(self.ctx_id); |
| 457 | self.ctx_id = h.finalize(); |
| 458 | self.ctx.push(ty); |
| 459 | self.let_vals.push(None); |
| 460 | } |