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); }
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); }