00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef COMMA_CODEGEN_HANDLEREMITTER_HDR_GUARD
00010 #define COMMA_CODEGEN_HANDLEREMITTER_HDR_GUARD
00011
00012
00016
00017
00018 namespace llvm {
00019
00020 class BasicBlock;
00021
00022 }
00023
00024 namespace comma {
00025
00026 class CodeGenRoutine;
00027 class SRFrame;
00028 class StmtSequence;
00029
00030
00031
00032
00037 class HandlerEmitter {
00038
00039 public:
00040 HandlerEmitter(CodeGenRoutine &CGR);
00041
00049 void emitHandlers(StmtSequence *seq, llvm::BasicBlock *mergeBB = 0);
00050
00051 private:
00052 CodeGenRoutine &CGR;
00053 CodeGen &CG;
00054 CommaRT &RT;
00055
00057 SRFrame *frame();
00058
00062 llvm::Value *emitSelector(llvm::Value *exception, StmtSequence *sequence);
00063 };
00064
00065 }
00066
00067 #endif