boolean inJSROnReturn;
  private short[] processJSR(int JSRBBNum, int JSRSubStartIndex, short brBBNum, short nextBBNum,                              byte[][] bbMaps, int currBBStkTop, byte currBBMap[], int currBBStkEmpty,                              int blockStkTop[], VM_PendingRETInfo bbPendingRETs[],                              VM_PendingRETInfo currPendingRET, VM_JSRSubroutineInfo[] JSRSubs,                              short[] workStk) {    boolean inJSROnReturn;    short newworkStk[] = workStk;    // If the destination block doesn't already have a map, then use this map to build    // the stack portion of the reference map and add the block to the work stack.     // The locals maps should be started with all zeros.     if (bbMaps[brBBNum] == null) {      bbMaps[brBBNum] = new byte[currBBMap.length];      for (int i=currBBStkEmpty+1; i<= currBBStkTop; i++)        bbMaps[brBBNum][i] = currBBMap[i];      blockStkTop[brBBNum] = currBBStkTop;      newworkStk = addToWorkStk(brBBNum, workStk);      bbPendingRETs[brBBNum] = new VM_PendingRETInfo(JSRSubStartIndex,JSRBBNum,                                                     currBBStkTop, nextBBNum);      JSRSubs[JSRSubNext++] = new VM_JSRSubroutineInfo(JSRSubStartIndex, currBBMap,                                                       currBBStkEmpty);    } else {      // If the JSR subroutine block already has a map, then locate the ending map      // and use that to determine the map of the next block. No need to reprocess      // the JSR subroutine      int matchingJSRStart;      for (matchingJSRStart = 0; matchingJSRStart < JSRSubNext; matchingJSRStart++) {        if (JSRSubs[matchingJSRStart].subroutineByteCodeStart == JSRSubStartIndex) {          JSRSubs[matchingJSRStart].newStartMaps(currBBMap);          break;        }      }      boolean JSRisinJSRSub = (currPendingRET != null);      newworkStk = computeJSRNextMaps(nextBBNum, currBBMap.length, matchingJSRStart,                                       JSRisinJSRSub, bbMaps, blockStkTop, JSRSubs,                                       currBBStkEmpty, workStk);      if (JSRisinJSRSub && bbPendingRETs[nextBBNum] == null)         bbPendingRETs[nextBBNum] = new VM_PendingRETInfo(currPendingRET);    }    return newworkStk;  }