Lines Matching refs:general
1919 static bool update_sub_base(Substitution &sub, const TupleKindPtr &general, in update_sub_base() argument
1922 auto name = general->name; in update_sub_base()
1944 static bool update_sub(Substitution &sub, const TupleKindPtr &general, in update_sub() argument
1947 if (general->left() && !specific->left()) in update_sub()
1949 if (general->left()) in update_sub()
1950 return update_sub(sub, general->left(), specific->left()) && in update_sub()
1951 update_sub(sub, general->right(), specific->right()); in update_sub()
1952 if (general == Anonymous && specific != Anonymous) in update_sub()
1954 if (general == Leaf && specific->left()) in update_sub()
1957 return update_sub_base(sub, general, specific); in update_sub()
1969 static std::pair<bool, Substitution> specializer(const Kind &general, in specializer() argument
1974 if (general.size() != specific.size()) in specializer()
1977 for (size_t i = 0; i < general.size(); ++i) { in specializer()
1978 auto general_tuple = general[i]; in specializer()
1980 if (!update_sub(specializer, general[i], specific[i])) in specializer()
2249 static std::pair<bool, Kind> unify(const Kind &general, const Kind &specific) in unify() argument
2251 if (specializer(specific, general).first) { in unify()
2252 return { true, general }; in unify()
2256 auto unifier = compute_unifier(general, renamed); in unify()
2261 return { true, general.apply(unifier) }; in unify()