Exemplo n.º 1
0
 void OP_SWITCH(out pBaseLangObject outObj, pBaseLangObject parent)
 {
     var obj = new Switch(parent); Case caseObj; outObj = obj; pBaseLangObject blo;
     Expect(72);
     Expect(10);
     EXPRESSION(out blo, obj);
     obj.expression = blo;
     Expect(11);
     Expect(14);
     while (la.kind == 73 || la.kind == 74 || la.kind == 75) {
         if (la.kind == 73) {
             Get();
             caseObj = new Case(obj, t.line, t.col); obj.addChild(caseObj);
             EXPRESSION(out blo, caseObj);
             caseObj.addChild(blo);
             Expect(59);
             while (la.kind == 73) {
                 Get();
                 EXPRESSION(out blo, caseObj);
                 caseObj.addChild(blo);
                 Expect(59);
             }
             caseObj.markEnd();
             while (StartOf(14)) {
                 CODEINSTRUCTION(out blo, caseObj);
                 caseObj.addChild(blo);
             }
             if (la.kind == 68) {
                 OP_BREAK(out blo, caseObj);
                 caseObj.addChild(blo);
                 TERMINATOR();
             } else if (la.kind == 70) {
                 OP_THROW(out blo, caseObj);
                 caseObj.addChild(blo);
                 TERMINATOR();
             } else if (la.kind == 71) {
                 OP_RETURN(out blo, caseObj);
                 caseObj.addChild(blo);
                 TERMINATOR();
             } else SynErr(111);
         } else {
             if (la.kind == 74) {
                 Get();
                 caseObj = new Case(obj, t.line, t.col); obj.addChild(caseObj);
                 Expect(59);
             } else {
                 Get();
                 caseObj = new Case(obj, t.line, t.col); obj.addChild(caseObj);
             }
             while (StartOf(14)) {
                 CODEINSTRUCTION(out blo, caseObj);
                 caseObj.addChild(blo);
             }
             if (la.kind == 68) {
                 OP_BREAK(out blo, caseObj);
                 caseObj.addChild(blo);
                 TERMINATOR();
             } else if (la.kind == 70) {
                 OP_THROW(out blo, caseObj);
                 caseObj.addChild(blo);
                 TERMINATOR();
             } else if (la.kind == 71) {
                 OP_RETURN(out blo, caseObj);
                 caseObj.addChild(blo);
                 TERMINATOR();
             } else SynErr(112);
         }
     }
     Expect(15);
 }