예제 #1
0
파일: s2ir.c 프로젝트: Faianca/dmd
 void visit(DefaultStatement *s)
 {
     Blockx *blx = irs->blx;
     block *bcase = blx->curblock;
     block *bdefault = irs->getDefaultBlock();
     block_next(blx,BCgoto,bdefault);
     bcase->appendSucc(blx->curblock);
     if (blx->tryblock != irs->getSwitchBlock()->Btry)
         s->error("default cannot be in different try block level from switch");
     incUsage(irs, s->loc);
     if (s->statement)
         Statement_toIR(s->statement, irs);
 }
예제 #2
0
파일: s2ir.c 프로젝트: Faianca/dmd
 void visit(CaseStatement *s)
 {
     Blockx *blx = irs->blx;
     block *bcase = blx->curblock;
     Label *clabel = getLabel(irs, blx, s);
     block_next(blx, BCgoto, clabel->lblock);
     block *bsw = irs->getSwitchBlock();
     if (bsw->BC == BCswitch)
         bsw->appendSucc(clabel->lblock);   // second entry in pair
     bcase->appendSucc(clabel->lblock);
     if (blx->tryblock != bsw->Btry)
         s->error("case cannot be in different try block level from switch");
     incUsage(irs, s->loc);
     if (s->statement)
         Statement_toIR(s->statement, irs);
 }