diff --git a/crates/codegen/src/compile.rs b/crates/codegen/src/compile.rs index e3f1d18737..3fe1827769 100644 --- a/crates/codegen/src/compile.rs +++ b/crates/codegen/src/compile.rs @@ -9041,20 +9041,14 @@ impl Compiler { /// Emit LOAD_ATTR for attribute access (method=false). /// Encodes: (name_idx << 1) | 0 fn emit_load_attr(&mut self, name_idx: u32) { - let encoded = LoadAttr::builder() - .name_idx(name_idx) - .is_method(false) - .build(); + let encoded = LoadAttr::new(name_idx, false); self.emit_arg(encoded, |namei| Instruction::LoadAttr { namei }) } /// Emit LOAD_ATTR with method flag set (for method calls). /// Encodes: (name_idx << 1) | 1 fn emit_load_attr_method(&mut self, name_idx: u32) { - let encoded = LoadAttr::builder() - .name_idx(name_idx) - .is_method(true) - .build(); + let encoded = LoadAttr::new(name_idx, true); self.emit_arg(encoded, |namei| Instruction::LoadAttr { namei }) } @@ -9068,44 +9062,28 @@ impl Compiler { /// Emit LOAD_SUPER_ATTR for 2-arg super().attr access. /// Encodes: (name_idx << 2) | 0b10 (method=0, class=1) fn emit_load_super_attr(&mut self, name_idx: u32) { - let encoded = LoadSuperAttr::builder() - .name_idx(name_idx) - .is_load_method(false) - .has_class(true) - .build(); + let encoded = LoadSuperAttr::new(name_idx, false, true); self.emit_arg(encoded, |namei| Instruction::LoadSuperAttr { namei }) } /// Emit LOAD_SUPER_ATTR for 2-arg super().method() call. /// Encodes: (name_idx << 2) | 0b11 (method=1, class=1) fn emit_load_super_method(&mut self, name_idx: u32) { - let encoded = LoadSuperAttr::builder() - .name_idx(name_idx) - .is_load_method(true) - .has_class(true) - .build(); + let encoded = LoadSuperAttr::new(name_idx, true, true); self.emit_arg(encoded, |namei| Instruction::LoadSuperAttr { namei }) } /// Emit LOAD_SUPER_ATTR for 0-arg super().attr access. /// Encodes: (name_idx << 2) | 0b00 (method=0, class=0) fn emit_load_zero_super_attr(&mut self, name_idx: u32) { - let encoded = LoadSuperAttr::builder() - .name_idx(name_idx) - .is_load_method(false) - .has_class(false) - .build(); + let encoded = LoadSuperAttr::new(name_idx, false, false); self.emit_arg(encoded, |namei| Instruction::LoadSuperAttr { namei }) } /// Emit LOAD_SUPER_ATTR for 0-arg super().method() call. /// Encodes: (name_idx << 2) | 0b01 (method=1, class=0) fn emit_load_zero_super_method(&mut self, name_idx: u32) { - let encoded = LoadSuperAttr::builder() - .name_idx(name_idx) - .is_load_method(true) - .has_class(false) - .build(); + let encoded = LoadSuperAttr::new(name_idx, true, false); self.emit_arg(encoded, |namei| Instruction::LoadSuperAttr { namei }) } diff --git a/crates/compiler-core/src/bytecode/oparg.rs b/crates/compiler-core/src/bytecode/oparg.rs index 068229f10f..3c5f78d474 100644 --- a/crates/compiler-core/src/bytecode/oparg.rs +++ b/crates/compiler-core/src/bytecode/oparg.rs @@ -918,8 +918,8 @@ impl VarNums { impl LoadAttr { #[must_use] - pub fn builder() -> LoadAttrBuilder { - LoadAttrBuilder::default() + pub const fn new(name_idx: u32, is_method: bool) -> Self { + Self::from_u32((name_idx << 1) | (is_method as u32)) } #[must_use] @@ -933,36 +933,10 @@ impl LoadAttr { } } -#[derive(Clone, Copy, Default)] -pub struct LoadAttrBuilder { - name_idx: u32, - is_method: bool, -} - -impl LoadAttrBuilder { - #[must_use] - pub const fn build(self) -> LoadAttr { - let value = (self.name_idx << 1) | (self.is_method as u32); - LoadAttr::from_u32(value) - } - - #[must_use] - pub const fn name_idx(mut self, value: u32) -> Self { - self.name_idx = value; - self - } - - #[must_use] - pub const fn is_method(mut self, value: bool) -> Self { - self.is_method = value; - self - } -} - impl LoadSuperAttr { #[must_use] - pub fn builder() -> LoadSuperAttrBuilder { - LoadSuperAttrBuilder::default() + pub const fn new(name_idx: u32, is_load_method: bool, has_class: bool) -> Self { + Self::from_u32((name_idx << 2) | (is_load_method as u32) | ((has_class as u32) << 1)) } #[must_use] @@ -980,43 +954,3 @@ impl LoadSuperAttr { (self.0 & 2) == 2 } } - -#[derive(Clone, Copy, Default)] -pub struct LoadSuperAttrBuilder { - name_idx: u32, - is_load_method: bool, - has_class: bool, -} - -impl LoadSuperAttrBuilder { - #[must_use] - pub const fn build(self) -> LoadSuperAttr { - let value = - (self.name_idx << 2) | ((self.has_class as u32) << 1) | (self.is_load_method as u32); - LoadSuperAttr::from_u32(value) - } - - #[must_use] - pub const fn name_idx(mut self, value: u32) -> Self { - self.name_idx = value; - self - } - - #[must_use] - pub const fn is_load_method(mut self, value: bool) -> Self { - self.is_load_method = value; - self - } - - #[must_use] - pub const fn has_class(mut self, value: bool) -> Self { - self.has_class = value; - self - } -} - -impl From for LoadSuperAttr { - fn from(builder: LoadSuperAttrBuilder) -> Self { - builder.build() - } -}