src/share/classes/com/sun/tools/javac/jvm/Code.java

changeset 1339
0e5899f09dab
parent 1336
26d93df3905a
child 1374
c002fdee76fd
equal deleted inserted replaced
1338:ad2ca2a4ab5e 1339:0e5899f09dab
312 312
313 /** Emit a byte of code. 313 /** Emit a byte of code.
314 */ 314 */
315 private void emit1(int od) { 315 private void emit1(int od) {
316 if (!alive) return; 316 if (!alive) return;
317 if (cp == code.length) { 317 code = ArrayUtils.ensureCapacity(code, cp);
318 byte[] newcode = new byte[cp * 2];
319 System.arraycopy(code, 0, newcode, 0, cp);
320 code = newcode;
321 }
322 code[cp++] = (byte)od; 318 code[cp++] = (byte)od;
323 } 319 }
324 320
325 /** Emit two bytes of code. 321 /** Emit two bytes of code.
326 */ 322 */
1245 } 1241 }
1246 lastStackMapPC = pc; 1242 lastStackMapPC = pc;
1247 1243
1248 if (stackMapBuffer == null) { 1244 if (stackMapBuffer == null) {
1249 stackMapBuffer = new StackMapFrame[20]; 1245 stackMapBuffer = new StackMapFrame[20];
1250 } else if (stackMapBuffer.length == stackMapBufferSize) { 1246 } else {
1251 StackMapFrame[] newStackMapBuffer = 1247 stackMapBuffer = ArrayUtils.ensureCapacity(stackMapBuffer, stackMapBufferSize);
1252 new StackMapFrame[stackMapBufferSize << 1];
1253 System.arraycopy(stackMapBuffer, 0, newStackMapBuffer,
1254 0, stackMapBufferSize);
1255 stackMapBuffer = newStackMapBuffer;
1256 } 1248 }
1257 StackMapFrame frame = 1249 StackMapFrame frame =
1258 stackMapBuffer[stackMapBufferSize++] = new StackMapFrame(); 1250 stackMapBuffer[stackMapBufferSize++] = new StackMapFrame();
1259 frame.pc = pc; 1251 frame.pc = pc;
1260 1252
1318 } 1310 }
1319 } 1311 }
1320 1312
1321 if (stackMapTableBuffer == null) { 1313 if (stackMapTableBuffer == null) {
1322 stackMapTableBuffer = new StackMapTableFrame[20]; 1314 stackMapTableBuffer = new StackMapTableFrame[20];
1323 } else if (stackMapTableBuffer.length == stackMapBufferSize) { 1315 } else {
1324 StackMapTableFrame[] newStackMapTableBuffer = 1316 stackMapTableBuffer = ArrayUtils.ensureCapacity(
1325 new StackMapTableFrame[stackMapBufferSize << 1]; 1317 stackMapTableBuffer,
1326 System.arraycopy(stackMapTableBuffer, 0, newStackMapTableBuffer, 1318 stackMapBufferSize);
1327 0, stackMapBufferSize);
1328 stackMapTableBuffer = newStackMapTableBuffer;
1329 } 1319 }
1330 stackMapTableBuffer[stackMapBufferSize++] = 1320 stackMapTableBuffer[stackMapBufferSize++] =
1331 StackMapTableFrame.getInstance(frame, lastFrame.pc, lastFrame.locals, types); 1321 StackMapTableFrame.getInstance(frame, lastFrame.pc, lastFrame.locals, types);
1332 1322
1333 frameBeforeLast = lastFrame; 1323 frameBeforeLast = lastFrame;
1649 } 1639 }
1650 1640
1651 void lock(int register) { 1641 void lock(int register) {
1652 if (locks == null) { 1642 if (locks == null) {
1653 locks = new int[20]; 1643 locks = new int[20];
1654 } else if (locks.length == nlocks) { 1644 } else {
1655 int[] newLocks = new int[locks.length << 1]; 1645 locks = ArrayUtils.ensureCapacity(locks, nlocks);
1656 System.arraycopy(locks, 0, newLocks, 0, locks.length);
1657 locks = newLocks;
1658 } 1646 }
1659 locks[nlocks] = register; 1647 locks[nlocks] = register;
1660 nlocks++; 1648 nlocks++;
1661 } 1649 }
1662 1650
1678 t = syms.intType; 1666 t = syms.intType;
1679 break; 1667 break;
1680 default: 1668 default:
1681 break; 1669 break;
1682 } 1670 }
1683 if (stacksize+2 >= stack.length) { 1671 stack = ArrayUtils.ensureCapacity(stack, stacksize+2);
1684 Type[] newstack = new Type[2*stack.length];
1685 System.arraycopy(stack, 0, newstack, 0, stack.length);
1686 stack = newstack;
1687 }
1688 stack[stacksize++] = t; 1672 stack[stacksize++] = t;
1689 switch (width(t)) { 1673 switch (width(t)) {
1690 case 1: 1674 case 1:
1691 break; 1675 break;
1692 case 2: 1676 case 2:
1869 LocalVar[] lvar; 1853 LocalVar[] lvar;
1870 1854
1871 /** Add a new local variable. */ 1855 /** Add a new local variable. */
1872 private void addLocalVar(VarSymbol v) { 1856 private void addLocalVar(VarSymbol v) {
1873 int adr = v.adr; 1857 int adr = v.adr;
1874 if (adr+1 >= lvar.length) { 1858 lvar = ArrayUtils.ensureCapacity(lvar, adr+1);
1875 int newlength = lvar.length << 1;
1876 if (newlength <= adr) newlength = adr + 10;
1877 LocalVar[] new_lvar = new LocalVar[newlength];
1878 System.arraycopy(lvar, 0, new_lvar, 0, lvar.length);
1879 lvar = new_lvar;
1880 }
1881 Assert.checkNull(lvar[adr]); 1859 Assert.checkNull(lvar[adr]);
1882 if (pendingJumps != null) resolvePending(); 1860 if (pendingJumps != null) resolvePending();
1883 lvar[adr] = new LocalVar(v); 1861 lvar[adr] = new LocalVar(v);
1884 state.defined.excl(adr); 1862 state.defined.excl(adr);
1885 } 1863 }
1955 void putVar(LocalVar var) { 1933 void putVar(LocalVar var) {
1956 if (!varDebugInfo) return; 1934 if (!varDebugInfo) return;
1957 if ((var.sym.flags() & Flags.SYNTHETIC) != 0) return; 1935 if ((var.sym.flags() & Flags.SYNTHETIC) != 0) return;
1958 if (varBuffer == null) 1936 if (varBuffer == null)
1959 varBuffer = new LocalVar[20]; 1937 varBuffer = new LocalVar[20];
1960 else if (varBufferSize >= varBuffer.length) { 1938 else
1961 LocalVar[] newVarBuffer = new LocalVar[varBufferSize*2]; 1939 varBuffer = ArrayUtils.ensureCapacity(varBuffer, varBufferSize);
1962 System.arraycopy(varBuffer, 0, newVarBuffer, 0, varBuffer.length);
1963 varBuffer = newVarBuffer;
1964 }
1965 varBuffer[varBufferSize++] = var; 1940 varBuffer[varBufferSize++] = var;
1966 } 1941 }
1967 1942
1968 /** Previously live local variables, to be put into the variable table. */ 1943 /** Previously live local variables, to be put into the variable table. */
1969 LocalVar[] varBuffer; 1944 LocalVar[] varBuffer;

mercurial