/****
* absyn.h
* Andy Hammerlindl 2002/07/14
*
* Defines the basic types of abstract syntax objects using forward
* class declarations.
*****/
#ifndef ABSYN_H
#define ABSYN_H
#include "common.h"
#include "symbolmaps.h"
#include "errormsg.h" // For position
// Forward declaration for markPos.
namespace trans {
class coenv;
}
namespace absyntax {
class absyn : public gc {
protected:
const position pos;
void markPos(trans::coenv& c);
public:
absyn(position pos)
: pos(pos) {}
virtual ~absyn();
position getPos() const
{
return pos;
}
virtual void prettyprint(ostream &out, Int indent) = 0;
virtual void createSymMap(AsymptoteLsp::SymbolContext* symContext) {}
private: // Non-copyable
void operator=(const absyn&);
absyn(const absyn&);
};
void prettyindent(ostream &out, Int indent);
void prettyname(ostream &out, string name, Int indent, position pos);
class name;
class astType;
class varinit;
class exp;
class runnable;
class stm;
class dec;
class block;
typedef block file;
// This is the abstract syntax tree of a file, assigned to when running
// yyparse.
extern file *root;
}
#endif