File: coenv.cc

package info (click to toggle)
texlive-bin 2012.20120628-4
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 240,500 kB
  • sloc: ansic: 890,229; cpp: 469,960; perl: 73,550; sh: 47,106; makefile: 16,643; python: 8,657; lisp: 6,684; xml: 3,926; lex: 3,791; java: 3,569; pascal: 3,569; yacc: 2,460; exp: 2,031; ruby: 1,415; objc: 1,362; tcl: 631; sed: 522; asm: 435; csh: 46; awk: 30
file content (47 lines) | stat: -rw-r--r-- 1,126 bytes parent folder | download | duplicates (12)
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);
}

}