@@ -954,9 +954,11 @@ parse_type(char_u **arg, garray_T *type_gap, int give_error)
954954
955955/*
956956 * Check if "type1" and "type2" are exactly the same.
957+ * "flags" can have ETYPE_ARG_UNKNOWN, which means that an unknown argument
958+ * type in "type1" is accepted.
957959 */
958960 int
959- equal_type (type_T * type1 , type_T * type2 )
961+ equal_type (type_T * type1 , type_T * type2 , int flags )
960962{
961963 int i ;
962964
@@ -981,17 +983,19 @@ equal_type(type_T *type1, type_T *type2)
981983 break ; // not composite is always OK
982984 case VAR_LIST :
983985 case VAR_DICT :
984- return equal_type (type1 -> tt_member , type2 -> tt_member );
986+ return equal_type (type1 -> tt_member , type2 -> tt_member , flags );
985987 case VAR_FUNC :
986988 case VAR_PARTIAL :
987- if (!equal_type (type1 -> tt_member , type2 -> tt_member )
989+ if (!equal_type (type1 -> tt_member , type2 -> tt_member , flags )
988990 || type1 -> tt_argcount != type2 -> tt_argcount )
989991 return FALSE;
990992 if (type1 -> tt_argcount < 0
991993 || type1 -> tt_args == NULL || type2 -> tt_args == NULL )
992994 return TRUE;
993995 for (i = 0 ; i < type1 -> tt_argcount ; ++ i )
994- if (!equal_type (type1 -> tt_args [i ], type2 -> tt_args [i ]))
996+ if ((flags & ETYPE_ARG_UNKNOWN ) == 0
997+ && !equal_type (type1 -> tt_args [i ], type2 -> tt_args [i ],
998+ flags ))
995999 return FALSE;
9961000 return TRUE;
9971001 }
@@ -1005,7 +1009,7 @@ equal_type(type_T *type1, type_T *type2)
10051009 void
10061010common_type (type_T * type1 , type_T * type2 , type_T * * dest , garray_T * type_gap )
10071011{
1008- if (equal_type (type1 , type2 ))
1012+ if (equal_type (type1 , type2 , 0 ))
10091013 {
10101014 * dest = type1 ;
10111015 return ;
0 commit comments