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