2222
2323namespace PackageFactory \ComponentEngine \TypeSystem \Resolver \Match ;
2424
25- use PackageFactory \ComponentEngine \Parser \Ast \AccessNode ;
2625use PackageFactory \ComponentEngine \Parser \Ast \BooleanLiteralNode ;
2726use PackageFactory \ComponentEngine \Parser \Ast \MatchNode ;
28- use PackageFactory \ComponentEngine \TypeSystem \Resolver \Access \AccessTypeResolver ;
2927use PackageFactory \ComponentEngine \TypeSystem \Resolver \Expression \ExpressionTypeResolver ;
3028use PackageFactory \ComponentEngine \TypeSystem \ScopeInterface ;
3129use PackageFactory \ComponentEngine \TypeSystem \Type \BooleanType \BooleanType ;
3230use PackageFactory \ComponentEngine \TypeSystem \Type \EnumType \EnumMemberType ;
33- use PackageFactory \ComponentEngine \TypeSystem \Type \EnumType \EnumStaticType ;
3431use PackageFactory \ComponentEngine \TypeSystem \Type \EnumType \EnumType ;
3532use PackageFactory \ComponentEngine \TypeSystem \Type \UnionType \UnionType ;
3633use PackageFactory \ComponentEngine \TypeSystem \TypeInterface ;
@@ -97,8 +94,6 @@ private function resolveTypeOfEnumMatch(MatchNode $matchNode, EnumType $subjectE
9794 );
9895 $ types = [];
9996
100- $ accessTypeResolver = new AccessTypeResolver (scope: $ this ->scope );
101-
10297 $ defaultArmPresent = false ;
10398 $ referencedEnumMembers = [];
10499
@@ -110,14 +105,9 @@ private function resolveTypeOfEnumMatch(MatchNode $matchNode, EnumType $subjectE
110105 $ defaultArmPresent = true ;
111106 } else {
112107 foreach ($ matchArmNode ->left ->items as $ expressionNode ) {
113- $ accessNode = $ expressionNode ->root ;
114- if (!$ accessNode instanceof AccessNode
115- || !($ enumMemberType = $ accessTypeResolver ->resolveTypeOf ($ accessNode )) instanceof EnumMemberType) {
116- throw new \Error ('@TODO Error: To be matched enum value should be referenced like: `Enum.B` ' );
117- }
118-
119- if (!$ enumMemberType ->enumType instanceof EnumStaticType) {
120- throw new \Exception ('@TODO Error: To be matched enum must be referenced static ' );
108+ $ enumMemberType = $ expressionTypeResolver ->resolveTypeOf ($ expressionNode );
109+ if (!$ enumMemberType instanceof EnumMemberType) {
110+ throw new \Error ('@TODO Error: Cannot match enum with type of ' . $ enumMemberType ::class);
121111 }
122112
123113 if (!$ enumMemberType ->enumType ->is ($ subjectEnumType )) {
0 commit comments