summaryrefslogtreecommitdiff
path: root/graphics/asymptote/coenv.h
blob: b8d751570e928ed6f5d0820f0b79a73f91282223 (plain)
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
/*****
 * coenv.h
 * 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().
 *****/

#ifndef COENV_H
#define COENV_H

#include "env.h"
#include "coder.h"

namespace trans {

class coenv {
public:
  coder &c;
  env &e;

  coenv(coder &c, env &e)
    : c(c), e(e) {}

  // This is used when an expression of type source needs to be an
  // expression of type target.
  // If it is allowed, the casting instructions (if any) will be added.
  // Otherwise, an appropriate error message will be printed.
  bool implicitCast(position pos, ty *target, ty *source);
  bool explicitCast(position pos, ty *target, ty *source);

  void add(protoenv &source, varEntry *qualifier) {
    e.add(source, qualifier, c);
  }
};

} // namespace trans

#endif