#ifndef LLVM_CLANG_AST_INTERP_BYTECODEEXPRGEN_H
#define LLVM_CLANG_AST_INTERP_BYTECODEEXPRGEN_H
#include "ByteCodeEmitter.h"
#include "EvalEmitter.h"
#include "Pointer.h"
#include "PrimType.h"
#include "Record.h"
#include "clang/AST/Decl.h"
#include "clang/AST/Expr.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/Basic/TargetInfo.h"
namespace clang {
class QualType;
namespace interp {
template <class Emitter> class LocalScope;
template <class Emitter> class DestructorScope;
template <class Emitter> class VariableScope;
template <class Emitter> class DeclScope;
template <class Emitter> class InitLinkScope;
template <class Emitter> class InitStackScope;
template <class Emitter> class OptionScope;
template <class Emitter> class ArrayIndexScope;
template <class Emitter> class SourceLocScope;
template <class Emitter> class LoopScope;
template <class Emitter> class LabelScope;
template <class Emitter> class SwitchScope;
template <class Emitter> class StmtExprScope;
template <class Emitter> class Compiler;
struct InitLink { … };
struct VarCreationState { … };
template <class Emitter>
class Compiler : public ConstStmtVisitor<Compiler<Emitter>, bool>,
public Emitter { … };
extern template class Compiler<ByteCodeEmitter>;
extern template class Compiler<EvalEmitter>;
template <class Emitter> class VariableScope { … };
template <class Emitter> class LocalScope : public VariableScope<Emitter> { … };
template <class Emitter> class BlockScope final : public LocalScope<Emitter> { … };
template <class Emitter> class ArrayIndexScope final { … };
template <class Emitter> class SourceLocScope final { … };
template <class Emitter> class InitLinkScope final { … };
template <class Emitter> class InitStackScope final { … };
}
}
#endif