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
|
/*****
* 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);
}
}
|