From 2dfcc9d781b2df3637fd96f1c5007703377b8109 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 13 Oct 2009 22:15:04 +0000 Subject: Move TEnv::buildSubst to unify.cpp. git-svn-id: http://svn.drobilla.net/resp/tuplr@212 ad02d1e2-f140-0410-9f75-f8b11f17cedd --- src/constrain.cpp | 33 --------------------------------- src/unify.cpp | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/constrain.cpp b/src/constrain.cpp index e751895..7106ec8 100644 --- a/src/constrain.cpp +++ b/src/constrain.cpp @@ -22,39 +22,6 @@ #include #include "tuplr.hpp" -/** Build a type substitution for calling a generic function type - * with a specific set of argument types - */ -Subst -TEnv::buildSubst(AType* genericT, const AType& argsT) -{ - Subst subst; - - // Build substitution to apply to generic type - const ATuple* genericProtT = genericT->at(1)->as(); - assert(argsT.size() == genericProtT->size()); - ATuple::const_iterator g = genericProtT->begin(); - AType::const_iterator a = argsT.begin(); - for (; a != argsT.end(); ++a, ++g) { - const AType* genericArgT = (*g)->to(); - AType* callArgT = (*a)->to(); - if (callArgT->kind == AType::EXPR) { - assert(genericArgT->kind == AType::EXPR); - assert(callArgT->size() == genericArgT->size()); - for (size_t i = 0; i < callArgT->size(); ++i) { - const AType* gT = genericArgT->at(i)->to(); - AType* aT = callArgT->at(i)->to(); - if (gT && aT) - subst.add(gT, aT); - } - } else { - subst.add(genericArgT, callArgT); - } - } - - return subst; -} - #define CONSTRAIN_LITERAL(CT, NAME) \ template<> void \ ALiteral::constrain(TEnv& tenv, Constraints& c) const { \ diff --git a/src/unify.cpp b/src/unify.cpp index 74e35fd..eebd75c 100644 --- a/src/unify.cpp +++ b/src/unify.cpp @@ -22,6 +22,40 @@ #include #include "tuplr.hpp" +/** Build a type substitution for calling a generic function type + * with a specific set of argument types + */ +Subst +TEnv::buildSubst(AType* genericT, const AType& argsT) +{ + Subst subst; + + // Build substitution to apply to generic type + const ATuple* genericProtT = genericT->at(1)->as(); + assert(argsT.size() == genericProtT->size()); + ATuple::const_iterator g = genericProtT->begin(); + AType::const_iterator a = argsT.begin(); + for (; a != argsT.end(); ++a, ++g) { + const AType* genericArgT = (*g)->to(); + AType* callArgT = (*a)->to(); + if (callArgT->kind == AType::EXPR) { + assert(genericArgT->kind == AType::EXPR); + assert(callArgT->size() == genericArgT->size()); + for (size_t i = 0; i < callArgT->size(); ++i) { + const AType* gT = genericArgT->at(i)->to(); + AType* aT = callArgT->at(i)->to(); + if (gT && aT) + subst.add(gT, aT); + } + } else { + subst.add(genericArgT, callArgT); + } + } + + return subst; +} + + void Constraints::constrain(TEnv& tenv, const AST* o, AType* t) { -- cgit v1.2.1