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