diff options
author | Karl Berry <karl@freefriends.org> | 2009-05-16 00:19:13 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-05-16 00:19:13 +0000 |
commit | bab45528d65eaafe68a705dbb2a57075c7b7cbd8 (patch) | |
tree | 10b4ae2b5195c8dede153ab89359ec00f55f325f /Build/source/utils/asymptote/coenv.cc | |
parent | 8643d90372e9c31e0f461c15c596b60a545bd7d3 (diff) |
asymptote 1.72 sources (not integrated into build yet)
git-svn-id: svn://tug.org/texlive/trunk@13110 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/coenv.cc')
-rw-r--r-- | Build/source/utils/asymptote/coenv.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/coenv.cc b/Build/source/utils/asymptote/coenv.cc new file mode 100644 index 00000000000..e281b666962 --- /dev/null +++ b/Build/source/utils/asymptote/coenv.cc @@ -0,0 +1,47 @@ +/***** + * 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); +} + +} |