@@ -775,11 +775,28 @@ private Type resolveTargetTyped(AstNode n, TypePath path) {
775775}
776776
777777private module RecordFieldMatchingInput implements MatchingInputSig {
778- class Decl extends Struct {
779- // todo or variant
780- TypeParameter getTypeParameter ( int i ) {
778+ abstract class Decl extends AstNode {
779+ abstract TypeParameter getTypeParameter ( int i ) ;
780+
781+ abstract RecordField getField ( string name ) ;
782+ }
783+
784+ private class StructDecl extends Decl , Struct {
785+ override TypeParameter getTypeParameter ( int i ) {
781786 result .getTypeParam ( ) = this .getGenericParamList ( ) .getTypeParam ( i )
782787 }
788+
789+ override RecordField getField ( string name ) { result = this .getRecordField ( name ) }
790+ }
791+
792+ private class VariantDecl extends Decl , Variant {
793+ Enum getEnum ( ) { result .getVariantList ( ) .getAVariant ( ) = this }
794+
795+ override TypeParameter getTypeParameter ( int i ) {
796+ result .getTypeParam ( ) = this .getEnum ( ) .getGenericParamList ( ) .getTypeParam ( i )
797+ }
798+
799+ override RecordField getField ( string name ) { result = this .getRecordField ( name ) }
783800 }
784801
785802 class Access extends RecordExpr {
@@ -834,7 +851,7 @@ private module RecordFieldMatchingInput implements MatchingInputSig {
834851 }
835852
836853 predicate parameterType ( Decl decl , Pos pos , TypePath path , Type t ) {
837- exists ( TypeRepr_ tp | tp = decl .getRecordField ( pos ) .getTypeRepr ( ) | t = tp .resolveTypeAt ( path ) )
854+ exists ( TypeRepr_ tp | tp = decl .getField ( pos ) .getTypeRepr ( ) | t = tp .resolveTypeAt ( path ) )
838855 }
839856
840857 pragma [ nomagic]
0 commit comments