1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
/* $Id$
*
* Copyright (C) 2007-2009 FAUmachine Team <info@faumachine.org>.
* This program is free software. You can redistribute it and/or modify it
* under the terms of the GNU General Public License, either version 2 of
* the License, or (at your option) any later version. See COPYING.
*/
#include "frontend/reporting/AmbiguousTypes.hpp"
#include "frontend/ast/TypeDeclaration.hpp"
namespace ast {
AmbiguousTypes::AmbiguousTypes(
const AstNode &ambigousNode,
std::list<const TypeDeclaration*> possibleTypes,
std::string msg
) : CompileError(ambigousNode, msg)
{
for (std::list<const TypeDeclaration*>::const_iterator i =
possibleTypes.begin();
i != possibleTypes.end(); i++) {
if ((*i)->name == NULL) {
typeNames.push_back(make_pair(
std::string(""),
(*i)->location));
continue;
}
typeNames.push_back(make_pair(*(*i)->name, (*i)->location));
}
}
void
AmbiguousTypes::put(std::ostream &stream) const
{
stream << this->location << ": "
<< "ambigous types ("
<< this->message << ")"
<< std::endl;
stream << "\tPossible types are: " << std::endl;
for (std::list< std::pair<std::string, Location> >::const_iterator i =
this->typeNames.begin();
i != this->typeNames.end(); i++) {
stream << "\t\t" << (*i).first << " (defined at: "
<< (*i).second << ")" << std::endl;
}
}
}; /* namespace ast */
|