@@ -635,7 +635,6 @@ const artic::Type* Path::infer(TypeChecker& checker, Ptr<Expr>* arg) {
635
635
? checker.type_table .mod_type (*start_decl->as <ModDecl>())
636
636
: checker.infer (*start_decl);
637
637
is_value = elems.size () == 1 && start_decl->is_value ();
638
- is_ctor = start_decl->isa <CtorDecl>();
639
638
640
639
// Inspect every element of the path
641
640
for (size_t i = 0 , n = elems.size (); i < n; ++i) {
@@ -693,11 +692,10 @@ const artic::Type* Path::infer(TypeChecker& checker, Ptr<Expr>* arg) {
693
692
if (type_app)
694
693
type = checker.type_table .type_app (type->as <StructType>(), type_app->type_args );
695
694
is_value = false ;
696
- is_ctor = true ;
697
695
} else {
698
696
auto member = member_type (type_app, enum_type, *index );
699
697
type = is_unit_type (member) ? type : checker.type_table .fn_type (member, type);
700
- is_value = is_ctor = true ;
698
+ is_value = true ;
701
699
}
702
700
} else if (auto mod_type = type->isa <ModType>()) {
703
701
auto index = mod_type->find_member (elems[i + 1 ].id .name );
@@ -711,7 +709,6 @@ const artic::Type* Path::infer(TypeChecker& checker, Ptr<Expr>* arg) {
711
709
? checker.type_table .mod_type (*member.as <ModDecl>())
712
710
: checker.infer (mod_type->member (*index ));
713
711
is_value = member.is_value ();
714
- is_ctor = member.isa <CtorDecl>();
715
712
} else
716
713
return checker.type_expected (elem.loc , type, " module or enum" );
717
714
}
@@ -723,6 +720,8 @@ const artic::Type* Path::infer(TypeChecker& checker, Ptr<Expr>* arg) {
723
720
const artic::Type* Path::infer (artic::TypeChecker& checker, bool value_expected, Ptr <artic::ast::Expr>* arg) {
724
721
infer (checker, arg);
725
722
723
+ auto is_ctor = decl->isa <CtorDecl>();
724
+
726
725
// Treat tuple-like structure constructors as functions
727
726
if (auto [type_app, struct_type] = match_app<StructType>(type);
728
727
is_ctor && value_expected && struct_type && struct_type->is_tuple_like ()) {
0 commit comments