diff --git a/compiler/noirc_frontend/src/elaborator/enums.rs b/compiler/noirc_frontend/src/elaborator/enums.rs index 42c7467453f..5153845a57c 100644 --- a/compiler/noirc_frontend/src/elaborator/enums.rs +++ b/compiler/noirc_frontend/src/elaborator/enums.rs @@ -66,7 +66,6 @@ impl Elaborator<'_> { self_type: &Type, ) { let name = &variant.name; - let name_string = name.to_string(); let location = Location::new(variant.name.span(), self.file); let global_id = self.interner.push_empty_global( @@ -79,16 +78,13 @@ impl Elaborator<'_> { false, ); - let kind = DefinitionKind::Global(global_id); - let definition_id = - self.interner.push_definition(name_string, false, false, kind, location); - let mut typ = self_type.clone(); if !datatype.borrow().generics.is_empty() { let typevars = vecmap(&datatype.borrow().generics, |generic| generic.type_var.clone()); typ = Type::Forall(typevars, Box::new(typ)); } + let definition_id = self.interner.get_global(global_id).definition_id; self.interner.push_definition_type(definition_id, typ.clone()); let no_parameters = Parameters(Vec::new()); diff --git a/compiler/noirc_frontend/src/hir/comptime/interpreter.rs b/compiler/noirc_frontend/src/hir/comptime/interpreter.rs index 6f0997d19d3..33f8e43863e 100644 --- a/compiler/noirc_frontend/src/hir/comptime/interpreter.rs +++ b/compiler/noirc_frontend/src/hir/comptime/interpreter.rs @@ -1294,7 +1294,7 @@ impl<'local, 'interner> Interpreter<'local, 'interner> { id: ExprId, ) -> IResult { let fields = try_vecmap(constructor.arguments, |arg| self.evaluate(arg))?; - let typ = self.elaborator.interner.id_type(id).follow_bindings(); + let typ = self.elaborator.interner.id_type(id).unwrap_forall().1.follow_bindings(); Ok(Value::Enum(constructor.variant_index, fields, typ)) } diff --git a/test_programs/compile_success_empty/enums/src/main.nr b/test_programs/compile_success_empty/enums/src/main.nr index b9bd3cb1f71..03a64d57dcf 100644 --- a/test_programs/compile_success_empty/enums/src/main.nr +++ b/test_programs/compile_success_empty/enums/src/main.nr @@ -3,7 +3,6 @@ fn main() { let _b: Foo = Foo::B(3); let _c = Foo::C(4); - // (#7172): Single variant enums must be called as functions currently let _d: fn() -> Foo<(i32, i32)> = Foo::D; let _d: Foo<(i32, i32)> = Foo::D(); let _e: Foo = Foo::E;