#include "ByteCodeEmitter.h"
#include "Context.h"
#include "FixedPoint.h"
#include "Floating.h"
#include "IntegralAP.h"
#include "Opcode.h"
#include "Program.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/Attr.h"
#include "clang/AST/DeclCXX.h"
#include "clang/Basic/Builtins.h"
#include <type_traits>
usingnamespaceclang;
usingnamespaceclang::interp;
Function *ByteCodeEmitter::compileFunc(const FunctionDecl *FuncDecl) { … }
Function *ByteCodeEmitter::compileObjCBlock(const BlockExpr *BE) { … }
Scope::Local ByteCodeEmitter::createLocal(Descriptor *D) { … }
void ByteCodeEmitter::emitLabel(LabelTy Label) { … }
int32_t ByteCodeEmitter::getOffset(LabelTy Label) { … }
template <typename T>
static void emit(Program &P, std::vector<std::byte> &Code, const T &Val,
bool &Success) { … }
template <typename T>
static void emitSerialized(std::vector<std::byte> &Code, const T &Val,
bool &Success) { … }
template <>
void emit(Program &P, std::vector<std::byte> &Code, const Floating &Val,
bool &Success) { … }
template <>
void emit(Program &P, std::vector<std::byte> &Code,
const IntegralAP<false> &Val, bool &Success) { … }
template <>
void emit(Program &P, std::vector<std::byte> &Code, const IntegralAP<true> &Val,
bool &Success) { … }
template <typename... Tys>
bool ByteCodeEmitter::emitOp(Opcode Op, const Tys &...Args,
const SourceInfo &SI) { … }
bool ByteCodeEmitter::jumpTrue(const LabelTy &Label) { … }
bool ByteCodeEmitter::jumpFalse(const LabelTy &Label) { … }
bool ByteCodeEmitter::jump(const LabelTy &Label) { … }
bool ByteCodeEmitter::fallthrough(const LabelTy &Label) { … }
#define GET_LINK_IMPL
#include "Opcodes.inc"
#undef GET_LINK_IMPL