/*****
* 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