From 056d0db43e564e73405106e45c664bebd89fbaa6 Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Sat, 22 Jun 2024 23:40:56 -0700 Subject: [PATCH] [naga] Use `HandleVec` in `Typeifier`. Change `naga::front::Typifier::resolutions` to be a `HandleVec`, not a plain `Vec`. --- naga/src/arena.rs | 1 + naga/src/front/mod.rs | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/naga/src/arena.rs b/naga/src/arena.rs index 7ca8ca9455..27c858f562 100644 --- a/naga/src/arena.rs +++ b/naga/src/arena.rs @@ -798,6 +798,7 @@ where /// /// [`insert`]: HandleVec::insert /// [`HashMap::insert`]: std::collections::HashMap::insert +#[derive(Debug)] pub(crate) struct HandleVec { inner: Vec, as_keys: PhantomData, diff --git a/naga/src/front/mod.rs b/naga/src/front/mod.rs index 5e96103774..3f602f3dd0 100644 --- a/naga/src/front/mod.rs +++ b/naga/src/front/mod.rs @@ -15,7 +15,7 @@ pub mod spv; pub mod wgsl; use crate::{ - arena::{Arena, Handle, UniqueArena}, + arena::{Arena, Handle, HandleVec, UniqueArena}, proc::{ResolveContext, ResolveError, TypeResolution}, FastHashMap, }; @@ -52,13 +52,13 @@ use std::ops; /// [`LocalVariable`]: crate::LocalVariable #[derive(Debug, Default)] pub struct Typifier { - resolutions: Vec, + resolutions: HandleVec, } impl Typifier { pub const fn new() -> Self { Typifier { - resolutions: Vec::new(), + resolutions: HandleVec::new(), } } @@ -71,7 +71,7 @@ impl Typifier { expr_handle: Handle, types: &'a UniqueArena, ) -> &'a crate::TypeInner { - self.resolutions[expr_handle.index()].inner_with(types) + self.resolutions[expr_handle].inner_with(types) } /// Add an expression's type to an `Arena`. @@ -111,9 +111,9 @@ impl Typifier { if self.resolutions.len() <= expr_handle.index() { for (eh, expr) in expressions.iter().skip(self.resolutions.len()) { //Note: the closure can't `Err` by construction - let resolution = ctx.resolve(expr, |h| Ok(&self.resolutions[h.index()]))?; + let resolution = ctx.resolve(expr, |h| Ok(&self.resolutions[h]))?; log::debug!("Resolving {:?} = {:?} : {:?}", eh, expr, resolution); - self.resolutions.push(resolution); + self.resolutions.insert(eh, resolution); } } Ok(()) @@ -137,8 +137,8 @@ impl Typifier { } else { let expr = &expressions[expr_handle]; //Note: the closure can't `Err` by construction - let resolution = ctx.resolve(expr, |h| Ok(&self.resolutions[h.index()]))?; - self.resolutions[expr_handle.index()] = resolution; + let resolution = ctx.resolve(expr, |h| Ok(&self.resolutions[h]))?; + self.resolutions[expr_handle] = resolution; Ok(()) } } @@ -147,7 +147,7 @@ impl Typifier { impl ops::Index> for Typifier { type Output = TypeResolution; fn index(&self, handle: Handle) -> &Self::Output { - &self.resolutions[handle.index()] + &self.resolutions[handle] } }