/***** * coenv.cc * Andy Hammerlindl 2004/11/18 * * Bundles the env and coder classes needed in translating the abstract syntax * tree. It also also implements some functions that involve both the env and * coder, such as implicitCast(). *****/ #include "coenv.h" namespace trans { // Prints out error messages for the cast methods. static inline void castError(position pos, ty *target, ty *source) { em.error(pos); em << "cannot convert \'" << *source << "\' to \'" << *target << "\'"; } static inline bool accessCast(position pos, ty *target, ty *source, access *a, coder& c) { if (a) { a->encode(CALL, pos, c); return true; } else { castError(pos, target, source); return false; } } bool coenv::implicitCast(position pos, ty *target, ty *source) { return accessCast(pos, target, source, e.lookupCast(target, source, symbol::castsym), c); } bool coenv::explicitCast(position pos, ty *target, ty *source) { return accessCast(pos, target, source, e.lookupCast(target, source, symbol::ecastsym), c); } }