public Object visitBoolOp(BoolOp node) throws Exception {
   boolopType type = node.getInternalOp();
   String aVar, elseStart, end;
   switch (type) {
     case And: // a && b  <->  (a._booland(b)) if a else False
       aVar = getUnique("a$");
       elseStart = getUnique("ifElse");
       end = getUnique("ifEnd");
       visit(node.getInternalValues().get(0));
       addLine("POP " + aVar);
       addLine("PUSH " + aVar);
       addLine("JUMPIFFALSE " + elseStart); // if a
       addLine("PUSH " + aVar);
       visit(node.getInternalValues().get(1));
       addLine("BOOLAND");
       addLine("JUMP " + end);
       addLine("LABEL " + elseStart);
       addLine("PUSH False");
       addLine("LABEL " + end);
       break;
     case Or: // a || b  <->  (a._boolor(b)) if !a else True
       aVar = getUnique("a$");
       elseStart = getUnique("ifElse");
       end = getUnique("ifEnd");
       visit(node.getInternalValues().get(0));
       addLine("POP " + aVar);
       addLine("PUSH " + aVar);
       addLine("NOT");
       addLine("JUMPIFFALSE " + elseStart); // if !a
       addLine("PUSH " + aVar);
       visit(node.getInternalValues().get(1));
       addLine("BOOLOR");
       addLine("JUMP " + end);
       addLine("LABEL " + elseStart);
       addLine("PUSH True");
       addLine("LABEL " + end);
       break;
     case UNDEFINED:
       break;
   }
   return null;
 }