History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java (1415 of 18352 files). Show all

Unified · Split

1415 files
  1. java/Javalist +444 −0
  2. java/NOTICE +39 −0
  3. java/TimelineControllerImpl.class +0 −0
  4. java/appl/j2d/arg.m +50 −0
  5. java/appl/j2d/asm.b +319 −0
  6. java/appl/j2d/bb.b +326 −0
  7. java/appl/j2d/datarloc.b +186 −0
  8. java/appl/j2d/desc.b +104 −0
  9. java/appl/j2d/dis.b +284 −0
  10. java/appl/j2d/entry.b +35 −0
  11. java/appl/j2d/finally.b +112 −0
  12. java/appl/j2d/frame.b +475 −0
  13. java/appl/j2d/j2d.b +42 −0
  14. java/appl/j2d/java.m +343 −0
  15. java/appl/j2d/javadas.b +585 −0
  16. java/appl/j2d/javaisa.m +219 −0
  17. java/appl/j2d/javatbl.b +233 −0
  18. java/appl/j2d/links.b +141 −0
  19. java/appl/j2d/loader.b +691 −0
  20. java/appl/j2d/ltreloc.b +367 −0
  21. java/appl/j2d/main.b +179 −0
  22. java/appl/j2d/mdata.b +461 −0
  23. java/appl/j2d/mkfile +49 −0
  24. java/appl/j2d/module.b +18 −0
  25. java/appl/j2d/patch.b +114 −0
  26. java/appl/j2d/reloc.m +78 −0
  27. java/appl/j2d/rtreloc.b +389 −0
  28. java/appl/j2d/sbl.b +43 −0
  29. java/appl/j2d/simjvm.b +1329 −0
  30. java/appl/j2d/unify.b +98 −0
  31. java/appl/j2d/util.b +432 −0
  32. java/appl/j2d/xlate.b +2996 −0
  33. java/appl/java/cast.base +53 −0
  34. java/appl/java/cast.s +53 −0
  35. java/appl/java/castproto.b +144 −0
  36. java/appl/java/classloader.b +3452 −0
  37. java/appl/java/dump.b +216 −0
  38. java/appl/java/javaassist.base +148 −0
  39. java/appl/java/javaassist.s +148 −0
  40. java/appl/java/javaassistproto.b +261 −0
  41. java/appl/java/javanative.b +32 −0
  42. java/appl/java/javatrace.b +66 −0
  43. java/appl/java/jinfo.b +25 −0
  44. java/appl/java/jni.b +1735 −0
  45. java/appl/java/jvm.b +142 −0
  46. java/appl/java/low.base +140 −0
  47. java/appl/java/low.s +140 −0
  48. java/appl/java/lowproto.b +65 −0
  49. java/appl/java/mkfile +45 −0
  50. java/appl/java/sign.sed +38 −0
  51. java/appl/java/sign.sh +6 −0
  52. java/appl/mkfile +7 −0
  53. java/mkfile +8 −0
  54. java/module/cast.m +80 −0
  55. java/module/classloader.m +420 −0
  56. java/module/jni.m +690 −0
  57. java/pkg/NOTICE +1 −0
  58. java/pkg/awt/awt_Color.b +338 −0
  59. java/pkg/awt/awt_Color.m +13 −0
  60. java/pkg/awt/awt_Frame.b +250 −0
  61. java/pkg/awt/awt_Frame.m +46 −0
  62. java/pkg/awt/awt_Graphics.b +209 −0
  63. java/pkg/awt/awt_Graphics.m +43 −0
  64. java/pkg/awt/awt_Image.m +36 −0
  65. java/pkg/awt/iDrawingSurfaceInfo.java +117 −0
  66. java/pkg/awt/iDrawingSurfaceInfo_L.b +56 −0
  67. java/pkg/awt/iDrawingSurfaceInfo_L.m +21 −0
  68. java/pkg/awt/iFontMetrics.java +266 −0
  69. java/pkg/awt/iFontMetrics_L.b +123 −0
  70. java/pkg/awt/iFontMetrics_L.m +27 −0
  71. java/pkg/awt/iFontPeer.java +276 −0
  72. java/pkg/awt/iFontPeer_L.b +115 −0
  73. java/pkg/awt/iFontPeer_L.m +20 −0
  74. java/pkg/awt/iFramePeer.java +527 −0
  75. java/pkg/awt/iFramePeer_L.b +588 −0
  76. java/pkg/awt/iFramePeer_L.m +36 −0
  77. java/pkg/awt/iGraphics.java +606 −0
  78. java/pkg/awt/iGraphics_L.b +245 −0
  79. java/pkg/awt/iGraphics_L.m +50 −0
  80. java/pkg/awt/iImage.java +51 −0
  81. java/pkg/awt/iImageConsumer.java +0 −0
  82. java/pkg/awt/iImageRepresentation.java +91 −0
  83. java/pkg/awt/iImageRepresentation_L.b +152 −0
  84. java/pkg/awt/iImageRepresentation_L.m +36 −0
  85. java/pkg/awt/iImage_L.b +180 −0
  86. java/pkg/awt/iImage_L.m +26 −0
  87. java/pkg/awt/iMenuBarPeer.java +906 −0
  88. java/pkg/awt/iOffScreenImage.java +33 −0
  89. java/pkg/awt/iPopupMenuPeer.java +652 −0
  90. java/pkg/awt/iToolkit.java +303 −0
  91. java/pkg/awt/iToolkit_L.b +85 −0
  92. java/pkg/awt/iToolkit_L.m +19 −0
  93. java/pkg/awt/iWindowPeer.java +411 −0
  94. java/pkg/awt/iWindowPeer_L.b +377 −0
  95. java/pkg/awt/iWindowPeer_L.m +36 −0
  96. java/pkg/awt/mkfile +126 −0
  97. java/pkg/com/mkfile +7 −0
  98. java/pkg/com/oracle/mkfile +6 −0
  99. java/pkg/com/oracle/net/Sdp.java +201 −0
  100. java/pkg/com/oracle/net/mkfile +8 −0
  101. java/pkg/com/sun/accessibility/internal/mkfile +6 −0
  102. java/pkg/com/sun/accessibility/internal/resources/accessibility.properties +146 −0
  103. java/pkg/com/sun/accessibility/internal/resources/accessibility_de.properties +146 −0
  104. java/pkg/com/sun/accessibility/internal/resources/accessibility_en.properties +142 −0
  105. java/pkg/com/sun/accessibility/internal/resources/accessibility_es.properties +146 −0
  106. java/pkg/com/sun/accessibility/internal/resources/accessibility_fr.properties +146 −0
  107. java/pkg/com/sun/accessibility/internal/resources/accessibility_it.properties +146 −0
  108. java/pkg/com/sun/accessibility/internal/resources/accessibility_ja.properties +146 −0
  109. java/pkg/com/sun/accessibility/internal/resources/accessibility_ko.properties +146 −0
  110. java/pkg/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties +146 −0
  111. java/pkg/com/sun/accessibility/internal/resources/accessibility_sv.properties +146 −0
  112. java/pkg/com/sun/accessibility/internal/resources/accessibility_zh_CN.properties +146 −0
  113. java/pkg/com/sun/accessibility/internal/resources/accessibility_zh_TW.properties +146 −0
  114. java/pkg/com/sun/accessibility/internal/resources/mkfile +2 −0
  115. java/pkg/com/sun/accessibility/mkfile +6 −0
  116. java/pkg/com/sun/awt/AWTUtilities$1.class +0 −0
  117. java/pkg/com/sun/awt/AWTUtilities$Translucency.class +0 −0
  118. java/pkg/com/sun/awt/AWTUtilities.class +0 −0
  119. java/pkg/com/sun/awt/AWTUtilities.java +462 −0
  120. java/pkg/com/sun/awt/SecurityWarning.java +169 −0
  121. java/pkg/com/sun/awt/mkfile +9 −0
  122. java/pkg/com/sun/beans/TypeResolver.class +0 −0
  123. java/pkg/com/sun/beans/TypeResolver.java +410 −0
  124. java/pkg/com/sun/beans/WeakCache.class +0 −0
  125. java/pkg/com/sun/beans/WeakCache.java +91 −0
  126. java/pkg/com/sun/beans/WildcardTypeImpl.class +0 −0
  127. java/pkg/com/sun/beans/WildcardTypeImpl.java +161 −0
  128. java/pkg/com/sun/beans/decoder/AccessorElementHandler.class +0 −0
  129. java/pkg/com/sun/beans/decoder/AccessorElementHandler.java +105 −0
  130. java/pkg/com/sun/beans/decoder/ArrayElementHandler.class +0 −0
  131. java/pkg/com/sun/beans/decoder/ArrayElementHandler.java +133 −0
  132. java/pkg/com/sun/beans/decoder/BooleanElementHandler.class +0 −0
  133. java/pkg/com/sun/beans/decoder/BooleanElementHandler.java +69 −0
  134. java/pkg/com/sun/beans/decoder/ByteElementHandler.class +0 −0
  135. java/pkg/com/sun/beans/decoder/ByteElementHandler.java +63 −0
  136. java/pkg/com/sun/beans/decoder/CharElementHandler.class +0 −0
  137. java/pkg/com/sun/beans/decoder/CharElementHandler.java +92 −0
  138. java/pkg/com/sun/beans/decoder/ClassElementHandler.class +0 −0
  139. java/pkg/com/sun/beans/decoder/ClassElementHandler.java +62 −0
  140. java/pkg/com/sun/beans/decoder/DocumentHandler.class +0 −0
  141. java/pkg/com/sun/beans/decoder/DocumentHandler.java +389 −0
  142. java/pkg/com/sun/beans/decoder/DoubleElementHandler.class +0 −0
  143. java/pkg/com/sun/beans/decoder/DoubleElementHandler.java +63 −0
  144. java/pkg/com/sun/beans/decoder/ElementHandler.class +0 −0
  145. java/pkg/com/sun/beans/decoder/ElementHandler.java +224 −0
  146. java/pkg/com/sun/beans/decoder/FalseElementHandler.class +0 −0
  147. java/pkg/com/sun/beans/decoder/FalseElementHandler.java +56 −0
  148. java/pkg/com/sun/beans/decoder/FieldElementHandler.class +0 −0
  149. java/pkg/com/sun/beans/decoder/FieldElementHandler.java +189 −0
  150. java/pkg/com/sun/beans/decoder/FloatElementHandler.class +0 −0
  151. java/pkg/com/sun/beans/decoder/FloatElementHandler.java +63 −0
  152. java/pkg/com/sun/beans/decoder/IntElementHandler.class +0 −0
  153. java/pkg/com/sun/beans/decoder/IntElementHandler.java +63 −0
  154. java/pkg/com/sun/beans/decoder/JavaElementHandler.class +0 −0
  155. java/pkg/com/sun/beans/decoder/JavaElementHandler.java +151 −0
  156. java/pkg/com/sun/beans/decoder/LongElementHandler.class +0 −0
  157. java/pkg/com/sun/beans/decoder/LongElementHandler.java +63 −0
  158. java/pkg/com/sun/beans/decoder/MethodElementHandler.class +0 −0
  159. java/pkg/com/sun/beans/decoder/MethodElementHandler.java +109 −0
  160. java/pkg/com/sun/beans/decoder/NewElementHandler.class +0 −0
  161. java/pkg/com/sun/beans/decoder/NewElementHandler.java +205 −0
  162. java/pkg/com/sun/beans/decoder/NullElementHandler.class +0 −0
  163. java/pkg/com/sun/beans/decoder/NullElementHandler.java +76 −0
  164. java/pkg/com/sun/beans/decoder/ObjectElementHandler.class +0 −0
  165. java/pkg/com/sun/beans/decoder/ObjectElementHandler.java +168 −0
  166. java/pkg/com/sun/beans/decoder/PropertyElementHandler.class +0 −0
  167. java/pkg/com/sun/beans/decoder/PropertyElementHandler.java +287 −0
  168. java/pkg/com/sun/beans/decoder/ShortElementHandler.class +0 −0
  169. java/pkg/com/sun/beans/decoder/ShortElementHandler.java +63 −0
  170. java/pkg/com/sun/beans/decoder/StringElementHandler.class +0 −0
  171. java/pkg/com/sun/beans/decoder/StringElementHandler.java +116 −0
  172. java/pkg/com/sun/beans/decoder/TrueElementHandler.class +0 −0
  173. java/pkg/com/sun/beans/decoder/TrueElementHandler.java +56 −0
  174. java/pkg/com/sun/beans/decoder/ValueObject.class +0 −0
  175. java/pkg/com/sun/beans/decoder/ValueObject.java +50 −0
  176. java/pkg/com/sun/beans/decoder/ValueObjectImpl.class +0 −0
  177. java/pkg/com/sun/beans/decoder/ValueObjectImpl.java +88 −0
  178. java/pkg/com/sun/beans/decoder/VarElementHandler.class +0 −0
  179. java/pkg/com/sun/beans/decoder/VarElementHandler.java +82 −0
  180. java/pkg/com/sun/beans/decoder/VoidElementHandler.class +0 −0
  181. java/pkg/com/sun/beans/decoder/VoidElementHandler.java +68 −0
  182. java/pkg/com/sun/beans/decoder/mkfile +34 −0
  183. java/pkg/com/sun/beans/finder/AbstractFinder.class +0 −0
  184. java/pkg/com/sun/beans/finder/AbstractFinder.java +213 −0
  185. java/pkg/com/sun/beans/finder/BeanInfoFinder.class +0 −0
  186. java/pkg/com/sun/beans/finder/BeanInfoFinder.java +98 −0
  187. java/pkg/com/sun/beans/finder/ClassFinder.class +0 −0
  188. java/pkg/com/sun/beans/finder/ClassFinder.java +176 −0
  189. java/pkg/com/sun/beans/finder/ConstructorFinder.class +0 −0
  190. java/pkg/com/sun/beans/finder/ConstructorFinder.java +127 −0
  191. java/pkg/com/sun/beans/finder/FieldFinder.class +0 −0
  192. java/pkg/com/sun/beans/finder/FieldFinder.java +106 −0
  193. java/pkg/com/sun/beans/finder/InstanceFinder.class +0 −0
  194. java/pkg/com/sun/beans/finder/InstanceFinder.java +109 −0
  195. java/pkg/com/sun/beans/finder/MethodFinder.class +0 −0
  196. java/pkg/com/sun/beans/finder/MethodFinder.java +231 −0
  197. java/pkg/com/sun/beans/finder/PersistenceDelegateFinder.class +0 −0
  198. java/pkg/com/sun/beans/finder/PersistenceDelegateFinder.java +68 −0
  199. java/pkg/com/sun/beans/finder/PrimitiveTypeMap.class +0 −0
  200. java/pkg/com/sun/beans/finder/PrimitiveTypeMap.java +70 −0
  201. java/pkg/com/sun/beans/finder/PrimitiveWrapperMap.class +0 −0
  202. java/pkg/com/sun/beans/finder/PrimitiveWrapperMap.java +86 −0
  203. java/pkg/com/sun/beans/finder/PropertyEditorFinder.class +0 −0
  204. java/pkg/com/sun/beans/finder/PropertyEditorFinder.java +87 −0
  205. java/pkg/com/sun/beans/finder/Signature.class +0 −0
  206. java/pkg/com/sun/beans/finder/Signature.java +169 −0
  207. java/pkg/com/sun/beans/finder/mkfile +19 −0
  208. java/pkg/com/sun/beans/mkfile +15 −0
  209. java/pkg/com/sun/crypto/mkfile +6 −0
  210. java/pkg/com/sun/crypto/provider/AESCipher.java +427 −0
  211. java/pkg/com/sun/crypto/provider/AESConstants.java +46 −0
  212. java/pkg/com/sun/crypto/provider/AESCrypt.java +659 −0
  213. java/pkg/com/sun/crypto/provider/AESKeyGenerator.java +117 −0
  214. java/pkg/com/sun/crypto/provider/AESParameters.java +87 −0
  215. java/pkg/com/sun/crypto/provider/AESWrapCipher.java +483 −0
  216. java/pkg/com/sun/crypto/provider/ARCFOURCipher.java +263 −0
  217. java/pkg/com/sun/crypto/provider/BlockCipherParamsCore.java +127 −0
  218. java/pkg/com/sun/crypto/provider/BlowfishCipher.java +428 −0
  219. java/pkg/com/sun/crypto/provider/BlowfishConstants.java +41 −0
  220. java/pkg/com/sun/crypto/provider/BlowfishCrypt.java +558 −0
  221. java/pkg/com/sun/crypto/provider/BlowfishKeyGenerator.java +115 −0
  222. java/pkg/com/sun/crypto/provider/BlowfishParameters.java +88 −0
  223. java/pkg/com/sun/crypto/provider/CipherBlockChaining.java +212 −0
  224. java/pkg/com/sun/crypto/provider/CipherCore.java +943 −0
  225. java/pkg/com/sun/crypto/provider/CipherFeedback.java +272 −0
  226. java/pkg/com/sun/crypto/provider/CipherTextStealing.java +215 −0
  227. java/pkg/com/sun/crypto/provider/CipherWithWrappingSpi.java +261 −0
  228. java/pkg/com/sun/crypto/provider/ConstructKeys.java +191 −0
  229. java/pkg/com/sun/crypto/provider/CounterMode.java +210 −0
  230. java/pkg/com/sun/crypto/provider/DESCipher.java +428 −0
  231. java/pkg/com/sun/crypto/provider/DESConstants.java +39 −0
  232. java/pkg/com/sun/crypto/provider/DESCrypt.java +1145 −0
  233. java/pkg/com/sun/crypto/provider/DESKey.java +161 −0
  234. java/pkg/com/sun/crypto/provider/DESKeyFactory.java +164 −0
  235. java/pkg/com/sun/crypto/provider/DESKeyGenerator.java +147 −0
  236. java/pkg/com/sun/crypto/provider/DESParameters.java +88 −0
  237. java/pkg/com/sun/crypto/provider/DESedeCipher.java +426 −0
  238. java/pkg/com/sun/crypto/provider/DESedeCrypt.java +168 −0
  239. java/pkg/com/sun/crypto/provider/DESedeKey.java +162 −0
  240. java/pkg/com/sun/crypto/provider/DESedeKeyFactory.java +161 −0
  241. java/pkg/com/sun/crypto/provider/DESedeKeyGenerator.java +145 −0
  242. java/pkg/com/sun/crypto/provider/DESedeParameters.java +87 −0
  243. java/pkg/com/sun/crypto/provider/DESedeWrapCipher.java +567 −0
  244. java/pkg/com/sun/crypto/provider/DHKeyAgreement.java +412 −0
  245. java/pkg/com/sun/crypto/provider/DHKeyFactory.java +236 −0
  246. java/pkg/com/sun/crypto/provider/DHKeyPairGenerator.java +186 −0
  247. java/pkg/com/sun/crypto/provider/DHParameterGenerator.java +171 −0
  248. java/pkg/com/sun/crypto/provider/DHParameters.java +144 −0
  249. java/pkg/com/sun/crypto/provider/DHPrivateKey.java +352 −0
  250. java/pkg/com/sun/crypto/provider/DHPublicKey.java +331 −0
  251. java/pkg/com/sun/crypto/provider/ElectronicCodeBook.java +160 −0
  252. java/pkg/com/sun/crypto/provider/EncryptedPrivateKeyInfo.java +130 −0
  253. java/pkg/com/sun/crypto/provider/FeedbackCipher.java +199 −0
  254. java/pkg/com/sun/crypto/provider/HmacCore.java +348 −0
  255. java/pkg/com/sun/crypto/provider/HmacMD5.java +133 −0
  256. java/pkg/com/sun/crypto/provider/HmacMD5KeyGenerator.java +109 −0
  257. java/pkg/com/sun/crypto/provider/HmacPKCS12PBESHA1.java +203 −0
  258. java/pkg/com/sun/crypto/provider/HmacSHA1.java +133 −0
  259. java/pkg/com/sun/crypto/provider/HmacSHA1KeyGenerator.java +109 −0
  260. java/pkg/com/sun/crypto/provider/ISO10126Padding.java +123 −0
  261. java/pkg/com/sun/crypto/provider/JceKeyStore.java +903 −0
  262. java/pkg/com/sun/crypto/provider/KeyGeneratorCore.java +221 −0
  263. java/pkg/com/sun/crypto/provider/KeyProtector.java +410 −0
  264. java/pkg/com/sun/crypto/provider/OAEPParameters.java +259 −0
  265. java/pkg/com/sun/crypto/provider/OutputFeedback.java +229 −0
  266. java/pkg/com/sun/crypto/provider/PBECipherCore.java +541 −0
  267. java/pkg/com/sun/crypto/provider/PBEKey.java +154 −0
  268. java/pkg/com/sun/crypto/provider/PBEKeyFactory.java +203 −0
  269. java/pkg/com/sun/crypto/provider/PBEParameters.java +143 −0
  270. java/pkg/com/sun/crypto/provider/PBEWithMD5AndDESCipher.java +429 −0
  271. java/pkg/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java +435 −0
  272. java/pkg/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java +154 −0
  273. java/pkg/com/sun/crypto/provider/PBKDF2KeyImpl.java +282 −0
  274. java/pkg/com/sun/crypto/provider/PCBC.java +198 −0
  275. java/pkg/com/sun/crypto/provider/PKCS12PBECipherCore.java +521 −0
  276. java/pkg/com/sun/crypto/provider/PKCS5Padding.java +128 −0
  277. java/pkg/com/sun/crypto/provider/Padding.java +84 −0
  278. java/pkg/com/sun/crypto/provider/PrivateKeyInfo.java +90 −0
  279. java/pkg/com/sun/crypto/provider/RC2Cipher.java +151 −0
  280. java/pkg/com/sun/crypto/provider/RC2Crypt.java +320 −0
  281. java/pkg/com/sun/crypto/provider/RC2Parameters.java +229 −0
  282. java/pkg/com/sun/crypto/provider/RSACipher.java +444 −0
  283. java/pkg/com/sun/crypto/provider/SslMacCore.java +264 −0
  284. java/pkg/com/sun/crypto/provider/SunJCE.java +456 −0
  285. java/pkg/com/sun/crypto/provider/SymmetricCipher.java +102 −0
  286. java/pkg/com/sun/crypto/provider/TlsKeyMaterialGenerator.java +277 −0
  287. java/pkg/com/sun/crypto/provider/TlsMasterSecretGenerator.java +175 −0
  288. java/pkg/com/sun/crypto/provider/TlsPrfGenerator.java +368 −0
  289. java/pkg/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java +85 −0
  290. java/pkg/com/sun/crypto/provider/ai.java +64 −0
  291. java/pkg/com/sun/crypto/provider/mkfile +88 −0
  292. java/pkg/com/sun/demo/jvmti/hprof/Tracker.java +102 −0
  293. java/pkg/com/sun/demo/jvmti/hprof/mkfile +8 −0
  294. java/pkg/com/sun/demo/jvmti/mkfile +6 −0
  295. java/pkg/com/sun/demo/mkfile +6 −0
  296. java/pkg/com/sun/imageio/mkfile +8 −0
  297. java/pkg/com/sun/imageio/plugins/bmp/BMPConstants.class +0 −0
  298. java/pkg/com/sun/imageio/plugins/bmp/BMPConstants.java +53 −0
  299. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$1.class +0 −0
  300. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$2.class +0 −0
  301. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$3.class +0 −0
  302. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$4.class +0 −0
  303. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$5.class +0 −0
  304. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$EmbeddedProgressAdapter.class +0 −0
  305. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader.class +0 −0
  306. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader.java +1821 −0
  307. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.class +0 −0
  308. java/pkg/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.java +94 −0
  309. java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter$1.class +0 −0
  310. java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter$2.class +0 −0
  311. java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter$IIOWriteProgressAdapter.class +0 −0
  312. java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter.class +0 −0
  313. java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter.java +1532 −0
  314. java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.class +0 −0
  315. java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.java +106 −0
  316. java/pkg/com/sun/imageio/plugins/bmp/BMPMetadata.class +0 −0
  317. java/pkg/com/sun/imageio/plugins/bmp/BMPMetadata.java +307 −0
  318. java/pkg/com/sun/imageio/plugins/bmp/BMPMetadataFormat.java +208 −0
  319. java/pkg/com/sun/imageio/plugins/bmp/BMPMetadataFormatResources.java +69 −0
  320. java/pkg/com/sun/imageio/plugins/bmp/mkfile +15 −0
  321. java/pkg/com/sun/imageio/plugins/common/BitFile.class +0 −0
  322. java/pkg/com/sun/imageio/plugins/common/BitFile.java +123 −0
  323. java/pkg/com/sun/imageio/plugins/common/BogusColorSpace.class +0 −0
  324. java/pkg/com/sun/imageio/plugins/common/BogusColorSpace.java +136 −0
  325. java/pkg/com/sun/imageio/plugins/common/I18N.class +0 −0
  326. java/pkg/com/sun/imageio/plugins/common/I18N.java +33 −0
  327. java/pkg/com/sun/imageio/plugins/common/I18NImpl.class +0 −0
  328. java/pkg/com/sun/imageio/plugins/common/I18NImpl.java +62 −0
  329. java/pkg/com/sun/imageio/plugins/common/ImageUtil.class +0 −0
  330. java/pkg/com/sun/imageio/plugins/common/ImageUtil.java +1167 −0
  331. java/pkg/com/sun/imageio/plugins/common/InputStreamAdapter.class +0 −0
  332. java/pkg/com/sun/imageio/plugins/common/InputStreamAdapter.java +49 −0
  333. java/pkg/com/sun/imageio/plugins/common/LZWCompressor.class +0 −0
  334. java/pkg/com/sun/imageio/plugins/common/LZWCompressor.java +146 −0
  335. java/pkg/com/sun/imageio/plugins/common/LZWStringTable.class +0 −0
  336. java/pkg/com/sun/imageio/plugins/common/LZWStringTable.java +218 −0
  337. java/pkg/com/sun/imageio/plugins/common/PaletteBuilder$ColorNode.class +0 −0
  338. java/pkg/com/sun/imageio/plugins/common/PaletteBuilder.class +0 −0
  339. java/pkg/com/sun/imageio/plugins/common/PaletteBuilder.java +486 −0
  340. java/pkg/com/sun/imageio/plugins/common/ReaderUtil.class +0 −0
  341. java/pkg/com/sun/imageio/plugins/common/ReaderUtil.java +216 −0
  342. java/pkg/com/sun/imageio/plugins/common/StandardMetadataFormat.class +0 −0
  343. java/pkg/com/sun/imageio/plugins/common/StandardMetadataFormat.java +499 −0
  344. java/pkg/com/sun/imageio/plugins/common/StandardMetadataFormatResources.java +210 −0
  345. java/pkg/com/sun/imageio/plugins/common/SubImageInputStream.class +0 −0
  346. java/pkg/com/sun/imageio/plugins/common/SubImageInputStream.java +79 −0
  347. java/pkg/com/sun/imageio/plugins/common/iio-plugin.properties +47 −0
  348. java/pkg/com/sun/imageio/plugins/common/mkfile +20 −0
  349. java/pkg/com/sun/imageio/plugins/gif/GIFImageMetadata.class +0 −0
  350. java/pkg/com/sun/imageio/plugins/gif/GIFImageMetadata.java +446 −0
  351. java/pkg/com/sun/imageio/plugins/gif/GIFImageMetadataFormat.java +171 −0
  352. java/pkg/com/sun/imageio/plugins/gif/GIFImageMetadataFormatResources.java +104 −0
  353. java/pkg/com/sun/imageio/plugins/gif/GIFImageReader.class +0 −0
  354. java/pkg/com/sun/imageio/plugins/gif/GIFImageReader.java +1028 −0
  355. java/pkg/com/sun/imageio/plugins/gif/GIFImageReaderSpi.class +0 −0
  356. java/pkg/com/sun/imageio/plugins/gif/GIFImageReaderSpi.java +99 −0
  357. java/pkg/com/sun/imageio/plugins/gif/GIFImageWriteParam.class +0 −0
  358. java/pkg/com/sun/imageio/plugins/gif/GIFImageWriter.class +0 −0
  359. java/pkg/com/sun/imageio/plugins/gif/GIFImageWriter.java +1317 −0
  360. java/pkg/com/sun/imageio/plugins/gif/GIFImageWriterSpi.class +0 −0
  361. java/pkg/com/sun/imageio/plugins/gif/GIFImageWriterSpi.java +104 −0
  362. java/pkg/com/sun/imageio/plugins/gif/GIFMetadata.class +0 −0
  363. java/pkg/com/sun/imageio/plugins/gif/GIFMetadata.java +317 −0
  364. java/pkg/com/sun/imageio/plugins/gif/GIFStreamMetadata.class +0 −0
  365. java/pkg/com/sun/imageio/plugins/gif/GIFStreamMetadata.java +320 −0
  366. java/pkg/com/sun/imageio/plugins/gif/GIFStreamMetadataFormat.java +106 −0
  367. java/pkg/com/sun/imageio/plugins/gif/GIFStreamMetadataFormatResources.java +71 −0
  368. java/pkg/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.class +0 −0
  369. java/pkg/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java +402 −0
  370. java/pkg/com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.class +0 −0
  371. java/pkg/com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.java +267 −0
  372. java/pkg/com/sun/imageio/plugins/gif/mkfile +20 −0
  373. java/pkg/com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.class +0 −0
  374. java/pkg/com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.java +136 −0
  375. java/pkg/com/sun/imageio/plugins/jpeg/COMMarkerSegment.class +0 −0
  376. java/pkg/com/sun/imageio/plugins/jpeg/COMMarkerSegment.java +133 −0
  377. java/pkg/com/sun/imageio/plugins/jpeg/DHTMarkerSegment$Htable.class +0 −0
  378. java/pkg/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.class +0 −0
  379. java/pkg/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java +260 −0
  380. java/pkg/com/sun/imageio/plugins/jpeg/DQTMarkerSegment$Qtable.class +0 −0
  381. java/pkg/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.class +0 −0
  382. java/pkg/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java +309 −0
  383. java/pkg/com/sun/imageio/plugins/jpeg/DRIMarkerSegment.class +0 −0
  384. java/pkg/com/sun/imageio/plugins/jpeg/DRIMarkerSegment.java +83 −0
  385. java/pkg/com/sun/imageio/plugins/jpeg/ImageTypeIterator.class +0 −0
  386. java/pkg/com/sun/imageio/plugins/jpeg/ImageTypeProducer.class +0 −0
  387. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$1.class +0 −0
  388. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$ICCMarkerSegment.class +0 −0
  389. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$IllegalThumbException.class +0 −0
  390. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFExtensionMarkerSegment.class +0 −0
  391. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumb.class +0 −0
  392. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbJPEG$ThumbnailReadListener.class +0 −0
  393. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbJPEG.class +0 −0
  394. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbPalette.class +0 −0
  395. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbRGB.class +0 −0
  396. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbUncompressed.class +0 −0
  397. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.class +0 −0
  398. java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java +1564 −0
  399. java/pkg/com/sun/imageio/plugins/jpeg/JPEG$JCS.class +0 −0
  400. java/pkg/com/sun/imageio/plugins/jpeg/JPEG.class +0 −0
  401. java/pkg/com/sun/imageio/plugins/jpeg/JPEG.java +371 −0
  402. java/pkg/com/sun/imageio/plugins/jpeg/JPEGBuffer.class +0 −0
  403. java/pkg/com/sun/imageio/plugins/jpeg/JPEGBuffer.java +254 −0
  404. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.java +366 −0
  405. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormatResources.java +143 −0
  406. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReader$1.class +0 −0
  407. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReader$JPEGReaderDisposerRecord.class +0 −0
  408. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReader.class +0 −0
  409. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReader.java +1675 −0
  410. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReaderResources.java +46 −0
  411. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.class +0 −0
  412. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java +88 −0
  413. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriter$JPEGWriterDisposerRecord.class +0 −0
  414. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriter.class +0 −0
  415. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java +1809 −0
  416. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriterResources.java +82 −0
  417. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.class +0 −0
  418. java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java +98 −0
  419. java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadata.class +0 −0
  420. java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadata.java +2416 −0
  421. java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.java +157 −0
  422. java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadataFormatResources.java +61 −0
  423. java/pkg/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormat.java +47 −0
  424. java/pkg/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormatResources.java +46 −0
  425. java/pkg/com/sun/imageio/plugins/jpeg/MarkerSegment.class +0 −0
  426. java/pkg/com/sun/imageio/plugins/jpeg/MarkerSegment.java +224 −0
  427. java/pkg/com/sun/imageio/plugins/jpeg/SOFMarkerSegment$ComponentSpec.class +0 −0
  428. java/pkg/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.class +0 −0
  429. java/pkg/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java +284 −0
  430. java/pkg/com/sun/imageio/plugins/jpeg/SOSMarkerSegment$ScanComponentSpec.class +0 −0
  431. java/pkg/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.class +0 −0
  432. java/pkg/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java +241 −0
  433. java/pkg/com/sun/imageio/plugins/jpeg/mkfile +31 −0
  434. java/pkg/com/sun/imageio/plugins/mkfile +11 −0
  435. java/pkg/com/sun/imageio/plugins/png/CRC.class +0 −0
  436. java/pkg/com/sun/imageio/plugins/png/ChunkStream.class +0 −0
  437. java/pkg/com/sun/imageio/plugins/png/IDATOutputStream.class +0 −0
  438. java/pkg/com/sun/imageio/plugins/png/PNGImageDataEnumeration.class +0 −0
  439. java/pkg/com/sun/imageio/plugins/png/PNGImageReader.class +0 −0
  440. java/pkg/com/sun/imageio/plugins/png/PNGImageReader.java +1592 −0
  441. java/pkg/com/sun/imageio/plugins/png/PNGImageReaderSpi.class +0 −0
  442. java/pkg/com/sun/imageio/plugins/png/PNGImageReaderSpi.java +103 −0
  443. java/pkg/com/sun/imageio/plugins/png/PNGImageWriteParam.class +0 −0
  444. java/pkg/com/sun/imageio/plugins/png/PNGImageWriter.class +0 −0
  445. java/pkg/com/sun/imageio/plugins/png/PNGImageWriter.java +1171 −0
  446. java/pkg/com/sun/imageio/plugins/png/PNGImageWriterSpi.class +0 −0
  447. java/pkg/com/sun/imageio/plugins/png/PNGImageWriterSpi.java +126 −0
  448. java/pkg/com/sun/imageio/plugins/png/PNGMetadata.class +0 −0
  449. java/pkg/com/sun/imageio/plugins/png/PNGMetadata.java +2046 −0
  450. java/pkg/com/sun/imageio/plugins/png/PNGMetadataFormat.java +500 −0
  451. java/pkg/com/sun/imageio/plugins/png/PNGMetadataFormatResources.java +219 −0
  452. java/pkg/com/sun/imageio/plugins/png/RowFilter.class +0 −0
  453. java/pkg/com/sun/imageio/plugins/png/RowFilter.java +192 −0
  454. java/pkg/com/sun/imageio/plugins/png/mkfile +15 −0
  455. java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageReader.class +0 −0
  456. java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageReader.java +322 −0
  457. java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.class +0 −0
  458. java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.java +130 −0
  459. java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageWriter.class +0 −0
  460. java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageWriter.java +315 −0
  461. java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.class +0 −0
  462. java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.java +93 −0
  463. java/pkg/com/sun/imageio/plugins/wbmp/WBMPMetadata.class +0 −0
  464. java/pkg/com/sun/imageio/plugins/wbmp/WBMPMetadata.java +134 −0
  465. java/pkg/com/sun/imageio/plugins/wbmp/WBMPMetadataFormat.java +70 −0
  466. java/pkg/com/sun/imageio/plugins/wbmp/mkfile +13 −0
  467. java/pkg/com/sun/imageio/spi/FileImageInputStreamSpi.class +0 −0
  468. java/pkg/com/sun/imageio/spi/FileImageInputStreamSpi.java +63 −0
  469. java/pkg/com/sun/imageio/spi/FileImageOutputStreamSpi.class +0 −0
  470. java/pkg/com/sun/imageio/spi/FileImageOutputStreamSpi.java +64 −0
  471. java/pkg/com/sun/imageio/spi/InputStreamImageInputStreamSpi.class +0 −0
  472. java/pkg/com/sun/imageio/spi/InputStreamImageInputStreamSpi.java +77 −0
  473. java/pkg/com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.class +0 −0
  474. java/pkg/com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.java +76 −0
  475. java/pkg/com/sun/imageio/spi/RAFImageInputStreamSpi.class +0 −0
  476. java/pkg/com/sun/imageio/spi/RAFImageInputStreamSpi.java +65 −0
  477. java/pkg/com/sun/imageio/spi/RAFImageOutputStreamSpi.class +0 −0
  478. java/pkg/com/sun/imageio/spi/RAFImageOutputStreamSpi.java +66 −0
  479. java/pkg/com/sun/imageio/spi/mkfile +13 −0
  480. java/pkg/com/sun/imageio/stream/CloseableDisposerRecord.class +0 −0
  481. java/pkg/com/sun/imageio/stream/CloseableDisposerRecord.java +54 −0
  482. java/pkg/com/sun/imageio/stream/StreamCloser$1.class +0 −0
  483. java/pkg/com/sun/imageio/stream/StreamCloser$2.class +0 −0
  484. java/pkg/com/sun/imageio/stream/StreamCloser$CloseAction.class +0 −0
  485. java/pkg/com/sun/imageio/stream/StreamCloser.class +0 −0
  486. java/pkg/com/sun/imageio/stream/StreamCloser.java +134 −0
  487. java/pkg/com/sun/imageio/stream/StreamFinalizer.class +0 −0
  488. java/pkg/com/sun/imageio/stream/StreamFinalizer.java +72 −0
  489. java/pkg/com/sun/imageio/stream/mkfile +10 −0
  490. java/pkg/com/sun/jarsigner/ContentSigner.java +70 −0
  491. java/pkg/com/sun/jarsigner/ContentSignerParameters.java +97 −0
  492. java/pkg/com/sun/jarsigner/mkfile +9 −0
  493. java/pkg/com/sun/jarsigner/package.html +38 −0
  494. java/pkg/com/sun/java/browser/dom/DOMAccessException.java +89 −0
  495. java/pkg/com/sun/java/browser/dom/DOMAccessor.java +40 −0
  496. java/pkg/com/sun/java/browser/dom/DOMAction.java +42 −0
  497. java/pkg/com/sun/java/browser/dom/DOMService.java +103 −0
  498. java/pkg/com/sun/java/browser/dom/DOMServiceProvider.java +60 −0
  499. java/pkg/com/sun/java/browser/dom/DOMUnsupportedException.java +89 −0
  500. java/pkg/com/sun/java/browser/dom/mkfile +13 −0
  501. java/pkg/com/sun/java/browser/mkfile +7 −0
  502. java/pkg/com/sun/java/browser/net/ProxyInfo.java +36 −0
  503. java/pkg/com/sun/java/browser/net/ProxyService.java +61 −0
  504. java/pkg/com/sun/java/browser/net/ProxyServiceProvider.java +36 −0
  505. java/pkg/com/sun/java/browser/net/mkfile +10 −0
  506. java/pkg/com/sun/java/mkfile +8 −0
  507. java/pkg/com/sun/java/swing/Painter.java +33 −0
  508. java/pkg/com/sun/java/swing/SwingUtilities3$EventQueueDelegateFromMap.class +0 −0
  509. java/pkg/com/sun/java/swing/SwingUtilities3.class +0 −0
  510. java/pkg/com/sun/java/swing/SwingUtilities3.java +220 −0
  511. java/pkg/com/sun/java/swing/mkfile +13 −0
  512. java/pkg/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java +1303 −0
  513. java/pkg/com/sun/java/swing/plaf/gtk/GTKColorType.java +167 −0
  514. java/pkg/com/sun/java/swing/plaf/gtk/GTKConstants.java +118 −0
  515. java/pkg/com/sun/java/swing/plaf/gtk/GTKEngine.java +635 −0
  516. java/pkg/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java +1398 −0
  517. java/pkg/com/sun/java/swing/plaf/gtk/GTKGraphicsUtils.java +144 −0
  518. java/pkg/com/sun/java/swing/plaf/gtk/GTKIconFactory.java +351 −0
  519. java/pkg/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java +1739 −0
  520. java/pkg/com/sun/java/swing/plaf/gtk/GTKPainter.java +1497 −0
  521. java/pkg/com/sun/java/swing/plaf/gtk/GTKRegion.java +42 −0
  522. java/pkg/com/sun/java/swing/plaf/gtk/GTKStyle.java +1141 −0
  523. java/pkg/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java +182 −0
  524. java/pkg/com/sun/java/swing/plaf/gtk/Metacity.java +2155 −0
  525. java/pkg/com/sun/java/swing/plaf/gtk/PangoFonts.java +233 −0
  526. java/pkg/com/sun/java/swing/plaf/gtk/XColors.java +831 −0
  527. java/pkg/com/sun/java/swing/plaf/gtk/icons/Directory.gif +0 −0
  528. java/pkg/com/sun/java/swing/plaf/gtk/icons/File.gif +0 −0
  529. java/pkg/com/sun/java/swing/plaf/gtk/icons/image-delayed.png +0 −0
  530. java/pkg/com/sun/java/swing/plaf/gtk/icons/image-failed.png +0 −0
  531. java/pkg/com/sun/java/swing/plaf/gtk/icons/mkfile +2 −0
  532. java/pkg/com/sun/java/swing/plaf/gtk/mkfile +27 −0
  533. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk.properties +83 −0
  534. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_de.properties +88 −0
  535. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_es.properties +88 −0
  536. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_fr.properties +88 −0
  537. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_it.properties +88 −0
  538. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_ja.properties +84 −0
  539. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_ko.properties +84 −0
  540. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties +88 −0
  541. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_sv.properties +88 −0
  542. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_zh_CN.properties +84 −0
  543. java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_zh_TW.properties +84 −0
  544. java/pkg/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/metacity-theme-1.xml +178 −0
  545. java/pkg/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/mkfile +2 −0
  546. java/pkg/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/mkfile +6 −0
  547. java/pkg/com/sun/java/swing/plaf/gtk/resources/metacity/mkfile +6 −0
  548. java/pkg/com/sun/java/swing/plaf/gtk/resources/mkfile +6 −0
  549. java/pkg/com/sun/java/swing/plaf/mkfile +9 −0
  550. java/pkg/com/sun/java/swing/plaf/motif/MotifBorders.java +734 −0
  551. java/pkg/com/sun/java/swing/plaf/motif/MotifButtonListener.java +49 −0
  552. java/pkg/com/sun/java/swing/plaf/motif/MotifButtonUI.java +150 −0
  553. java/pkg/com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI.java +107 −0
  554. java/pkg/com/sun/java/swing/plaf/motif/MotifCheckBoxUI.java +90 −0
  555. java/pkg/com/sun/java/swing/plaf/motif/MotifComboBoxUI.java +361 −0
  556. java/pkg/com/sun/java/swing/plaf/motif/MotifDesktopIconUI.java +365 −0
  557. java/pkg/com/sun/java/swing/plaf/motif/MotifDesktopPaneUI.java +267 −0
  558. java/pkg/com/sun/java/swing/plaf/motif/MotifEditorPaneUI.java +68 −0
  559. java/pkg/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java +846 −0
  560. java/pkg/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java +476 −0
  561. java/pkg/com/sun/java/swing/plaf/motif/MotifIconFactory.java +460 −0
  562. java/pkg/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java +374 −0
  563. java/pkg/com/sun/java/swing/plaf/motif/MotifInternalFrameUI.java +223 −0
  564. java/pkg/com/sun/java/swing/plaf/motif/MotifLabelUI.java +61 −0
  565. java/pkg/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java +1283 −0
  566. java/pkg/com/sun/java/swing/plaf/motif/MotifMenuBarUI.java +69 −0
  567. java/pkg/com/sun/java/swing/plaf/motif/MotifMenuItemUI.java +109 −0
  568. java/pkg/com/sun/java/swing/plaf/motif/MotifMenuMouseListener.java +48 −0
  569. java/pkg/com/sun/java/swing/plaf/motif/MotifMenuMouseMotionListener.java +43 −0
  570. java/pkg/com/sun/java/swing/plaf/motif/MotifMenuUI.java +151 −0
  571. java/pkg/com/sun/java/swing/plaf/motif/MotifOptionPaneUI.java +114 −0
  572. java/pkg/com/sun/java/swing/plaf/motif/MotifPasswordFieldUI.java +68 −0
  573. java/pkg/com/sun/java/swing/plaf/motif/MotifPopupMenuSeparatorUI.java +66 −0
  574. java/pkg/com/sun/java/swing/plaf/motif/MotifPopupMenuUI.java +114 −0
  575. java/pkg/com/sun/java/swing/plaf/motif/MotifProgressBarUI.java +58 −0
  576. java/pkg/com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI.java +113 −0
  577. java/pkg/com/sun/java/swing/plaf/motif/MotifRadioButtonUI.java +104 −0
  578. java/pkg/com/sun/java/swing/plaf/motif/MotifScrollBarButton.java +211 −0
  579. java/pkg/com/sun/java/swing/plaf/motif/MotifScrollBarUI.java +108 −0
  580. java/pkg/com/sun/java/swing/plaf/motif/MotifScrollPaneUI.java +143 −0
  581. java/pkg/com/sun/java/swing/plaf/motif/MotifSeparatorUI.java +59 −0
  582. java/pkg/com/sun/java/swing/plaf/motif/MotifSliderUI.java +159 −0
  583. java/pkg/com/sun/java/swing/plaf/motif/MotifSplitPaneDivider.java +295 −0
  584. java/pkg/com/sun/java/swing/plaf/motif/MotifSplitPaneUI.java +66 −0
  585. java/pkg/com/sun/java/swing/plaf/motif/MotifTabbedPaneUI.java +306 −0
  586. java/pkg/com/sun/java/swing/plaf/motif/MotifTextAreaUI.java +70 −0
  587. java/pkg/com/sun/java/swing/plaf/motif/MotifTextFieldUI.java +68 −0
  588. java/pkg/com/sun/java/swing/plaf/motif/MotifTextPaneUI.java +68 −0
  589. java/pkg/com/sun/java/swing/plaf/motif/MotifTextUI.java +175 −0
  590. java/pkg/com/sun/java/swing/plaf/motif/MotifToggleButtonUI.java +125 −0
  591. java/pkg/com/sun/java/swing/plaf/motif/MotifTreeCellRenderer.java +113 −0
  592. java/pkg/com/sun/java/swing/plaf/motif/MotifTreeUI.java +166 −0
  593. java/pkg/com/sun/java/swing/plaf/motif/icons/DesktopIcon.gif +0 −0
  594. java/pkg/com/sun/java/swing/plaf/motif/icons/Error.gif +0 −0
  595. java/pkg/com/sun/java/swing/plaf/motif/icons/Inform.gif +0 −0
  596. java/pkg/com/sun/java/swing/plaf/motif/icons/Question.gif +0 −0
  597. java/pkg/com/sun/java/swing/plaf/motif/icons/TreeClosed.gif +0 −0
  598. java/pkg/com/sun/java/swing/plaf/motif/icons/TreeOpen.gif +0 −0
  599. java/pkg/com/sun/java/swing/plaf/motif/icons/Warn.gif +0 −0
  600. java/pkg/com/sun/java/swing/plaf/motif/icons/image-delayed.png +0 −0
  601. java/pkg/com/sun/java/swing/plaf/motif/icons/image-failed.png +0 −0
  602. java/pkg/com/sun/java/swing/plaf/motif/icons/mkfile +2 −0
  603. java/pkg/com/sun/java/swing/plaf/motif/mkfile +55 −0
  604. java/pkg/com/sun/java/swing/plaf/motif/resources/mkfile +2 −0
  605. java/pkg/com/sun/java/swing/plaf/motif/resources/motif.properties +40 −0
  606. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_de.properties +40 −0
  607. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_es.properties +40 −0
  608. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_fr.properties +40 −0
  609. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_it.properties +40 −0
  610. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_ja.properties +40 −0
  611. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_ko.properties +40 −0
  612. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties +40 −0
  613. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_sv.properties +40 −0
  614. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties +40 −0
  615. java/pkg/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties +40 −0
  616. java/pkg/com/sun/java/swing/plaf/nimbus/AbstractRegionPainter.java +33 −0
  617. java/pkg/com/sun/java/swing/plaf/nimbus/NimbusLookAndFeel.java +33 −0
  618. java/pkg/com/sun/java/swing/plaf/nimbus/mkfile +9 −0
  619. java/pkg/com/sun/java/swing/plaf/windows/AnimationController$1.class +0 −0
  620. java/pkg/com/sun/java/swing/plaf/windows/AnimationController$AnimationState.class +0 −0
  621. java/pkg/com/sun/java/swing/plaf/windows/AnimationController$PartUIClientPropertyKey.class +0 −0
  622. java/pkg/com/sun/java/swing/plaf/windows/AnimationController.class +0 −0
  623. java/pkg/com/sun/java/swing/plaf/windows/AnimationController.java +428 −0
  624. java/pkg/com/sun/java/swing/plaf/windows/DesktopProperty$1.class +0 −0
  625. java/pkg/com/sun/java/swing/plaf/windows/DesktopProperty$WeakPCL.class +0 −0
  626. java/pkg/com/sun/java/swing/plaf/windows/DesktopProperty.class +0 −0
  627. java/pkg/com/sun/java/swing/plaf/windows/DesktopProperty.java +285 −0
  628. java/pkg/com/sun/java/swing/plaf/windows/TMSchema$Control.class +0 −0
  629. java/pkg/com/sun/java/swing/plaf/windows/TMSchema$Part.class +0 −0
  630. java/pkg/com/sun/java/swing/plaf/windows/TMSchema$Prop.class +0 −0
  631. java/pkg/com/sun/java/swing/plaf/windows/TMSchema$State.class +0 −0
  632. java/pkg/com/sun/java/swing/plaf/windows/TMSchema$TypeEnum.class +0 −0
  633. java/pkg/com/sun/java/swing/plaf/windows/TMSchema.class +0 −0
  634. java/pkg/com/sun/java/swing/plaf/windows/TMSchema.java +565 −0
  635. java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$ComplementDashedBorder.class +0 −0
  636. java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$DashedBorder.class +0 −0
  637. java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$InternalFrameLineBorder.class +0 −0
  638. java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$ProgressBarBorder.class +0 −0
  639. java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$ToolBarBorder.class +0 −0
  640. java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders.class +0 −0
  641. java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders.java +336 −0
  642. java/pkg/com/sun/java/swing/plaf/windows/WindowsButtonListener.java +54 −0
  643. java/pkg/com/sun/java/swing/plaf/windows/WindowsButtonUI$1.class +0 −0
  644. java/pkg/com/sun/java/swing/plaf/windows/WindowsButtonUI.class +0 −0
  645. java/pkg/com/sun/java/swing/plaf/windows/WindowsButtonUI.java +320 −0
  646. java/pkg/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI$1.class +0 −0
  647. java/pkg/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.class +0 −0
  648. java/pkg/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.java +104 −0
  649. java/pkg/com/sun/java/swing/plaf/windows/WindowsCheckBoxUI.java +95 −0
  650. java/pkg/com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.class +0 −0
  651. java/pkg/com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.java +44 −0
  652. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$1.class +0 −0
  653. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$2.class +0 −0
  654. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$3.class +0 −0
  655. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboBoxEditor.class +0 −0
  656. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboBoxRenderer.class +0 −0
  657. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboPopup$InvocationKeyHandler.class +0 −0
  658. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboPopup.class +0 −0
  659. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$XPComboBoxButton.class +0 −0
  660. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.class +0 −0
  661. java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java +565 −0
  662. java/pkg/com/sun/java/swing/plaf/windows/WindowsDesktopIconUI.java +98 −0
  663. java/pkg/com/sun/java/swing/plaf/windows/WindowsDesktopManager.java +103 −0
  664. java/pkg/com/sun/java/swing/plaf/windows/WindowsDesktopPaneUI.java +71 −0
  665. java/pkg/com/sun/java/swing/plaf/windows/WindowsEditorPaneUI.java +68 −0
  666. java/pkg/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java +1309 −0
  667. java/pkg/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.class +0 −0
  668. java/pkg/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java +211 −0
  669. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$1.class +0 −0
  670. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$CheckBoxIcon.class +0 −0
  671. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$CheckBoxMenuItemIcon.class +0 −0
  672. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$FrameButtonIcon.class +0 −0
  673. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuArrowIcon.class +0 −0
  674. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemArrowIcon.class +0 −0
  675. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemCheckIcon.class +0 −0
  676. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonIcon.class +0 −0
  677. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonMenuItemIcon.class +0 −0
  678. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$ResizeIcon.class +0 −0
  679. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory$VistaMenuItemCheckIcon.class +0 −0
  680. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory.class +0 −0
  681. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory.class +0 −0
  682. java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory.java +903 −0
  683. java/pkg/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java +559 −0
  684. java/pkg/com/sun/java/swing/plaf/windows/WindowsInternalFrameUI.java +134 −0
  685. java/pkg/com/sun/java/swing/plaf/windows/WindowsLabelUI.java +112 −0
  686. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$1.class +0 −0
  687. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$2.class +0 −0
  688. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon$1.class +0 −0
  689. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon.class +0 −0
  690. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$AudioAction.class +0 −0
  691. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$FontDesktopProperty.class +0 −0
  692. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$LazyWindowsIcon.class +0 −0
  693. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$RGBGrayFilter.class +0 −0
  694. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$SkinIcon.class +0 −0
  695. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$TriggerDesktopProperty.class +0 −0
  696. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsFontProperty.class +0 −0
  697. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsFontSizeProperty.class +0 −0
  698. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsLayoutStyle.class +0 −0
  699. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPBorderValue.class +0 −0
  700. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue$XPColorValueKey.class +0 −0
  701. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue.class +0 −0
  702. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPDLUValue.class +0 −0
  703. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPValue.class +0 −0
  704. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.class +0 −0
  705. java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java +2620 −0
  706. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI$1.class +0 −0
  707. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI$2.class +0 −0
  708. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI$TakeFocus.class +0 −0
  709. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.class +0 −0
  710. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java +186 −0
  711. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUI$1.class +0 −0
  712. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.class +0 −0
  713. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java +177 −0
  714. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor.class +0 −0
  715. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor.java +46 −0
  716. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuUI$1.class +0 −0
  717. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuUI$WindowsMouseInputHandler.class +0 −0
  718. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuUI.class +0 −0
  719. java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuUI.java +295 −0
  720. java/pkg/com/sun/java/swing/plaf/windows/WindowsOptionPaneUI.java +47 −0
  721. java/pkg/com/sun/java/swing/plaf/windows/WindowsPasswordFieldUI.java +69 −0
  722. java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java +94 −0
  723. java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI$MnemonicListener.class +0 −0
  724. java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.class +0 −0
  725. java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java +224 −0
  726. java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupWindow.java +95 −0
  727. java/pkg/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java +400 −0
  728. java/pkg/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI$1.class +0 −0
  729. java/pkg/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.class +0 −0
  730. java/pkg/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.java +103 −0
  731. java/pkg/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java +130 −0
  732. java/pkg/com/sun/java/swing/plaf/windows/WindowsRootPaneUI$AltProcessor.class +0 −0
  733. java/pkg/com/sun/java/swing/plaf/windows/WindowsRootPaneUI.class +0 −0
  734. java/pkg/com/sun/java/swing/plaf/windows/WindowsRootPaneUI.java +184 −0
  735. java/pkg/com/sun/java/swing/plaf/windows/WindowsScrollBarUI.java +479 −0
  736. java/pkg/com/sun/java/swing/plaf/windows/WindowsScrollPaneUI.java +44 −0
  737. java/pkg/com/sun/java/swing/plaf/windows/WindowsSeparatorUI.java +35 −0
  738. java/pkg/com/sun/java/swing/plaf/windows/WindowsSliderUI.java +234 −0
  739. java/pkg/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java +103 −0
  740. java/pkg/com/sun/java/swing/plaf/windows/WindowsSplitPaneDivider.java +72 −0
  741. java/pkg/com/sun/java/swing/plaf/windows/WindowsSplitPaneUI.java +67 −0
  742. java/pkg/com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.java +227 −0
  743. java/pkg/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java +245 −0
  744. java/pkg/com/sun/java/swing/plaf/windows/WindowsTextAreaUI.java +68 −0
  745. java/pkg/com/sun/java/swing/plaf/windows/WindowsTextFieldUI.java +175 −0
  746. java/pkg/com/sun/java/swing/plaf/windows/WindowsTextPaneUI.java +67 −0
  747. java/pkg/com/sun/java/swing/plaf/windows/WindowsTextUI.java +236 −0
  748. java/pkg/com/sun/java/swing/plaf/windows/WindowsToggleButtonUI.java +181 −0
  749. java/pkg/com/sun/java/swing/plaf/windows/WindowsToolBarSeparatorUI.java +124 −0
  750. java/pkg/com/sun/java/swing/plaf/windows/WindowsToolBarUI.java +99 −0
  751. java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI$CollapsedIcon.class +0 −0
  752. java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI$ExpandedIcon.class +0 −0
  753. java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI$WindowsTreeCellRenderer.class +0 −0
  754. java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI.class +0 −0
  755. java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI.java +234 −0
  756. java/pkg/com/sun/java/swing/plaf/windows/XPStyle$GlyphButton.class +0 −0
  757. java/pkg/com/sun/java/swing/plaf/windows/XPStyle$Skin.class +0 −0
  758. java/pkg/com/sun/java/swing/plaf/windows/XPStyle$SkinPainter.class +0 −0
  759. java/pkg/com/sun/java/swing/plaf/windows/XPStyle$XPEmptyBorder.class +0 −0
  760. java/pkg/com/sun/java/swing/plaf/windows/XPStyle$XPFillBorder.class +0 −0
  761. java/pkg/com/sun/java/swing/plaf/windows/XPStyle$XPImageBorder.class +0 −0
  762. java/pkg/com/sun/java/swing/plaf/windows/XPStyle$XPStatefulFillBorder.class +0 −0
  763. java/pkg/com/sun/java/swing/plaf/windows/XPStyle.class +0 −0
  764. java/pkg/com/sun/java/swing/plaf/windows/XPStyle.java +751 −0
  765. java/pkg/com/sun/java/swing/plaf/windows/icons/Computer.gif +0 −0
  766. java/pkg/com/sun/java/swing/plaf/windows/icons/DetailsView.gif +0 −0
  767. java/pkg/com/sun/java/swing/plaf/windows/icons/Directory.gif +0 −0
  768. java/pkg/com/sun/java/swing/plaf/windows/icons/Error.gif +0 −0
  769. java/pkg/com/sun/java/swing/plaf/windows/icons/File.gif +0 −0
  770. java/pkg/com/sun/java/swing/plaf/windows/icons/FloppyDrive.gif +0 −0
  771. java/pkg/com/sun/java/swing/plaf/windows/icons/HardDrive.gif +0 −0
  772. java/pkg/com/sun/java/swing/plaf/windows/icons/HomeFolder.gif +0 −0
  773. java/pkg/com/sun/java/swing/plaf/windows/icons/Inform.gif +0 −0
  774. java/pkg/com/sun/java/swing/plaf/windows/icons/JavaCup32.png +0 −0
  775. java/pkg/com/sun/java/swing/plaf/windows/icons/ListView.gif +0 −0
  776. java/pkg/com/sun/java/swing/plaf/windows/icons/NewFolder.gif +0 −0
  777. java/pkg/com/sun/java/swing/plaf/windows/icons/Question.gif +0 −0
  778. java/pkg/com/sun/java/swing/plaf/windows/icons/TreeClosed.gif +0 −0
  779. java/pkg/com/sun/java/swing/plaf/windows/icons/TreeLeaf.gif +0 −0
  780. java/pkg/com/sun/java/swing/plaf/windows/icons/TreeOpen.gif +0 −0
  781. java/pkg/com/sun/java/swing/plaf/windows/icons/UpFolder.gif +0 −0
  782. java/pkg/com/sun/java/swing/plaf/windows/icons/Warn.gif +0 −0
  783. java/pkg/com/sun/java/swing/plaf/windows/icons/image-delayed.png +0 −0
  784. java/pkg/com/sun/java/swing/plaf/windows/icons/image-failed.png +0 −0
  785. java/pkg/com/sun/java/swing/plaf/windows/icons/mkfile +2 −0
  786. java/pkg/com/sun/java/swing/plaf/windows/mkfile +64 −0
  787. java/pkg/com/sun/java/swing/plaf/windows/resources/mkfile +2 −0
  788. java/pkg/com/sun/java/swing/plaf/windows/resources/windows.properties +47 −0
  789. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_de.properties +47 −0
  790. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_es.properties +47 −0
  791. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_fr.properties +47 −0
  792. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_it.properties +47 −0
  793. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_ja.properties +47 −0
  794. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_ko.properties +47 −0
  795. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties +47 −0
  796. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_sv.properties +47 −0
  797. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties +47 −0
  798. java/pkg/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties +47 −0
  799. java/pkg/com/sun/java/util/jar/mkfile +6 −0
  800. java/pkg/com/sun/java/util/jar/pack/AdaptiveCoding.class +0 −0
  801. java/pkg/com/sun/java/util/jar/pack/AdaptiveCoding.java +298 −0
  802. java/pkg/com/sun/java/util/jar/pack/Attribute$1.class +0 −0
  803. java/pkg/com/sun/java/util/jar/pack/Attribute$FormatException.class +0 −0
  804. java/pkg/com/sun/java/util/jar/pack/Attribute$Holder.class +0 −0
  805. java/pkg/com/sun/java/util/jar/pack/Attribute$Layout$Element.class +0 −0
  806. java/pkg/com/sun/java/util/jar/pack/Attribute$Layout.class +0 −0
  807. java/pkg/com/sun/java/util/jar/pack/Attribute$ValueStream.class +0 −0
  808. java/pkg/com/sun/java/util/jar/pack/Attribute.class +0 −0
  809. java/pkg/com/sun/java/util/jar/pack/Attribute.java +1622 −0
  810. java/pkg/com/sun/java/util/jar/pack/BandStructure$Band.class +0 −0
  811. java/pkg/com/sun/java/util/jar/pack/BandStructure$ByteBand$1.class +0 −0
  812. java/pkg/com/sun/java/util/jar/pack/BandStructure$ByteBand.class +0 −0
  813. java/pkg/com/sun/java/util/jar/pack/BandStructure$ByteCounter.class +0 −0
  814. java/pkg/com/sun/java/util/jar/pack/BandStructure$CPRefBand.class +0 −0
  815. java/pkg/com/sun/java/util/jar/pack/BandStructure$IntBand.class +0 −0
  816. java/pkg/com/sun/java/util/jar/pack/BandStructure$MultiBand.class +0 −0
  817. java/pkg/com/sun/java/util/jar/pack/BandStructure$ValueBand.class +0 −0
  818. java/pkg/com/sun/java/util/jar/pack/BandStructure.class +0 −0
  819. java/pkg/com/sun/java/util/jar/pack/BandStructure.java +2682 −0
  820. java/pkg/com/sun/java/util/jar/pack/ClassReader$1.class +0 −0
  821. java/pkg/com/sun/java/util/jar/pack/ClassReader$ClassFormatException.class +0 −0
  822. java/pkg/com/sun/java/util/jar/pack/ClassReader.class +0 −0
  823. java/pkg/com/sun/java/util/jar/pack/ClassReader.java +494 −0
  824. java/pkg/com/sun/java/util/jar/pack/ClassWriter.class +0 −0
  825. java/pkg/com/sun/java/util/jar/pack/ClassWriter.java +257 −0
  826. java/pkg/com/sun/java/util/jar/pack/Code.class +0 −0
  827. java/pkg/com/sun/java/util/jar/pack/Code.java +399 −0
  828. java/pkg/com/sun/java/util/jar/pack/Coding.class +0 −0
  829. java/pkg/com/sun/java/util/jar/pack/Coding.java +907 −0
  830. java/pkg/com/sun/java/util/jar/pack/CodingChooser$Choice.class +0 −0
  831. java/pkg/com/sun/java/util/jar/pack/CodingChooser$Sizer.class +0 −0
  832. java/pkg/com/sun/java/util/jar/pack/CodingChooser.class +0 −0
  833. java/pkg/com/sun/java/util/jar/pack/CodingChooser.java +1489 −0
  834. java/pkg/com/sun/java/util/jar/pack/CodingMethod.class +0 −0
  835. java/pkg/com/sun/java/util/jar/pack/CodingMethod.java +43 −0
  836. java/pkg/com/sun/java/util/jar/pack/ConstantPool$ClassEntry.class +0 −0
  837. java/pkg/com/sun/java/util/jar/pack/ConstantPool$DescriptorEntry.class +0 −0
  838. java/pkg/com/sun/java/util/jar/pack/ConstantPool$Entry.class +0 −0
  839. java/pkg/com/sun/java/util/jar/pack/ConstantPool$Index.class +0 −0
  840. java/pkg/com/sun/java/util/jar/pack/ConstantPool$IndexGroup.class +0 −0
  841. java/pkg/com/sun/java/util/jar/pack/ConstantPool$LiteralEntry.class +0 −0
  842. java/pkg/com/sun/java/util/jar/pack/ConstantPool$MemberEntry.class +0 −0
  843. java/pkg/com/sun/java/util/jar/pack/ConstantPool$NumberEntry.class +0 −0
  844. java/pkg/com/sun/java/util/jar/pack/ConstantPool$SignatureEntry.class +0 −0
  845. java/pkg/com/sun/java/util/jar/pack/ConstantPool$StringEntry.class +0 −0
  846. java/pkg/com/sun/java/util/jar/pack/ConstantPool$Utf8Entry.class +0 −0
  847. java/pkg/com/sun/java/util/jar/pack/ConstantPool.class +0 −0
  848. java/pkg/com/sun/java/util/jar/pack/ConstantPool.java +1218 −0
  849. java/pkg/com/sun/java/util/jar/pack/Constants.class +0 −0
  850. java/pkg/com/sun/java/util/jar/pack/Constants.java +436 −0
  851. java/pkg/com/sun/java/util/jar/pack/Driver.java +725 −0
  852. java/pkg/com/sun/java/util/jar/pack/DriverResource.java +131 −0
  853. java/pkg/com/sun/java/util/jar/pack/FixedList.class +0 −0
  854. java/pkg/com/sun/java/util/jar/pack/FixedList.java +174 −0
  855. java/pkg/com/sun/java/util/jar/pack/Fixups$1.class +0 −0
  856. java/pkg/com/sun/java/util/jar/pack/Fixups$Fixup.class +0 −0
  857. java/pkg/com/sun/java/util/jar/pack/Fixups$Itr.class +0 −0
  858. java/pkg/com/sun/java/util/jar/pack/Fixups.class +0 −0
  859. java/pkg/com/sun/java/util/jar/pack/Fixups.java +546 −0
  860. java/pkg/com/sun/java/util/jar/pack/Histogram$1.class +0 −0
  861. java/pkg/com/sun/java/util/jar/pack/Histogram$BitMetric.class +0 −0
  862. java/pkg/com/sun/java/util/jar/pack/Histogram.class +0 −0
  863. java/pkg/com/sun/java/util/jar/pack/Histogram.java +818 −0
  864. java/pkg/com/sun/java/util/jar/pack/Instruction$FormatException.class +0 −0
  865. java/pkg/com/sun/java/util/jar/pack/Instruction$LookupSwitch.class +0 −0
  866. java/pkg/com/sun/java/util/jar/pack/Instruction$Switch.class +0 −0
  867. java/pkg/com/sun/java/util/jar/pack/Instruction$TableSwitch.class +0 −0
  868. java/pkg/com/sun/java/util/jar/pack/Instruction.class +0 −0
  869. java/pkg/com/sun/java/util/jar/pack/Instruction.java +664 −0
  870. java/pkg/com/sun/java/util/jar/pack/NativeUnpack.class +0 −0
  871. java/pkg/com/sun/java/util/jar/pack/NativeUnpack.java +322 −0
  872. java/pkg/com/sun/java/util/jar/pack/Package$1.class +0 −0
  873. java/pkg/com/sun/java/util/jar/pack/Package$Class$Field.class +0 −0
  874. java/pkg/com/sun/java/util/jar/pack/Package$Class$Member.class +0 −0
  875. java/pkg/com/sun/java/util/jar/pack/Package$Class$Method.class +0 −0
  876. java/pkg/com/sun/java/util/jar/pack/Package$Class.class +0 −0
  877. java/pkg/com/sun/java/util/jar/pack/Package$File.class +0 −0
  878. java/pkg/com/sun/java/util/jar/pack/Package$InnerClass.class +0 −0
  879. java/pkg/com/sun/java/util/jar/pack/Package.class +0 −0
  880. java/pkg/com/sun/java/util/jar/pack/Package.java +1322 −0
  881. java/pkg/com/sun/java/util/jar/pack/PackageReader$1.class +0 −0
  882. java/pkg/com/sun/java/util/jar/pack/PackageReader$2.class +0 −0
  883. java/pkg/com/sun/java/util/jar/pack/PackageReader$LimitedBuffer$1.class +0 −0
  884. java/pkg/com/sun/java/util/jar/pack/PackageReader$LimitedBuffer.class +0 −0
  885. java/pkg/com/sun/java/util/jar/pack/PackageReader.class +0 −0
  886. java/pkg/com/sun/java/util/jar/pack/PackageReader.java +2204 −0
  887. java/pkg/com/sun/java/util/jar/pack/PackageWriter$1.class +0 −0
  888. java/pkg/com/sun/java/util/jar/pack/PackageWriter$2.class +0 −0
  889. java/pkg/com/sun/java/util/jar/pack/PackageWriter$3.class +0 −0
  890. java/pkg/com/sun/java/util/jar/pack/PackageWriter.class +0 −0
  891. java/pkg/com/sun/java/util/jar/pack/PackageWriter.java +1619 −0
  892. java/pkg/com/sun/java/util/jar/pack/PackerImpl$1.class +0 −0
  893. java/pkg/com/sun/java/util/jar/pack/PackerImpl$DoPack$InFile.class +0 −0
  894. java/pkg/com/sun/java/util/jar/pack/PackerImpl$DoPack.class +0 −0
  895. java/pkg/com/sun/java/util/jar/pack/PackerImpl.class +0 −0
  896. java/pkg/com/sun/java/util/jar/pack/PackerImpl.java +642 −0
  897. java/pkg/com/sun/java/util/jar/pack/PopulationCoding.class +0 −0
  898. java/pkg/com/sun/java/util/jar/pack/PopulationCoding.java +500 −0
  899. java/pkg/com/sun/java/util/jar/pack/PropMap.class +0 −0
  900. java/pkg/com/sun/java/util/jar/pack/PropMap.java +338 −0
  901. java/pkg/com/sun/java/util/jar/pack/TLGlobals.class +0 −0
  902. java/pkg/com/sun/java/util/jar/pack/TLGlobals.java +97 −0
  903. java/pkg/com/sun/java/util/jar/pack/UnpackerImpl$1.class +0 −0
  904. java/pkg/com/sun/java/util/jar/pack/UnpackerImpl$DoUnpack.class +0 −0
  905. java/pkg/com/sun/java/util/jar/pack/UnpackerImpl.class +0 −0
  906. java/pkg/com/sun/java/util/jar/pack/UnpackerImpl.java +281 −0
  907. java/pkg/com/sun/java/util/jar/pack/Utils$NonCloser.class +0 −0
  908. java/pkg/com/sun/java/util/jar/pack/Utils$Pack200Logger.class +0 −0
  909. java/pkg/com/sun/java/util/jar/pack/Utils.class +0 −0
  910. java/pkg/com/sun/java/util/jar/pack/Utils.java +344 −0
  911. java/pkg/com/sun/java/util/jar/pack/intrinsic.properties +46 −0
  912. java/pkg/com/sun/java/util/jar/pack/mkfile +34 −0
  913. java/pkg/com/sun/java/util/jar/pack/package.html +104 −0
  914. java/pkg/com/sun/java/util/mkfile +6 −0
  915. java/pkg/com/sun/jdi/AbsentInformationException.java +45 −0
  916. java/pkg/com/sun/jdi/Accessible.java +107 −0
  917. java/pkg/com/sun/jdi/ArrayReference.java +209 −0
  918. java/pkg/com/sun/jdi/ArrayType.java +96 −0
  919. java/pkg/com/sun/jdi/BooleanType.java +39 −0
  920. java/pkg/com/sun/jdi/BooleanValue.java +61 −0
  921. java/pkg/com/sun/jdi/Bootstrap.java +56 −0
  922. java/pkg/com/sun/jdi/ByteType.java +40 −0
  923. java/pkg/com/sun/jdi/ByteValue.java +60 −0
  924. java/pkg/com/sun/jdi/CharType.java +40 −0
  925. java/pkg/com/sun/jdi/CharValue.java +61 −0
  926. java/pkg/com/sun/jdi/ClassLoaderReference.java +93 −0
  927. java/pkg/com/sun/jdi/ClassNotLoadedException.java +87 −0
  928. java/pkg/com/sun/jdi/ClassNotPreparedException.java +45 −0
  929. java/pkg/com/sun/jdi/ClassObjectReference.java +48 −0
  930. java/pkg/com/sun/jdi/ClassType.java +372 −0
  931. java/pkg/com/sun/jdi/DoubleType.java +40 −0
  932. java/pkg/com/sun/jdi/DoubleValue.java +61 −0
  933. java/pkg/com/sun/jdi/Field.java +135 −0
  934. java/pkg/com/sun/jdi/FloatType.java +40 −0
  935. java/pkg/com/sun/jdi/FloatValue.java +61 −0
  936. java/pkg/com/sun/jdi/IncompatibleThreadStateException.java +46 −0
  937. java/pkg/com/sun/jdi/InconsistentDebugInfoException.java +45 −0
  938. java/pkg/com/sun/jdi/IntegerType.java +40 −0
  939. java/pkg/com/sun/jdi/IntegerValue.java +61 −0
  940. java/pkg/com/sun/jdi/InterfaceType.java +81 −0
  941. java/pkg/com/sun/jdi/InternalException.java +61 −0
  942. java/pkg/com/sun/jdi/InvalidCodeIndexException.java +46 −0
  943. java/pkg/com/sun/jdi/InvalidLineNumberException.java +46 −0
  944. java/pkg/com/sun/jdi/InvalidStackFrameException.java +43 −0
  945. java/pkg/com/sun/jdi/InvalidTypeException.java +46 −0
  946. java/pkg/com/sun/jdi/InvocationException.java +49 −0
  947. java/pkg/com/sun/jdi/JDIPermission.java +113 −0
  948. java/pkg/com/sun/jdi/LocalVariable.java +153 −0
  949. java/pkg/com/sun/jdi/Locatable.java +49 −0
  950. java/pkg/com/sun/jdi/Location.java +261 −0
  951. java/pkg/com/sun/jdi/LongType.java +40 −0
  952. java/pkg/com/sun/jdi/LongValue.java +61 −0
  953. java/pkg/com/sun/jdi/Method.java +429 −0
  954. java/pkg/com/sun/jdi/Mirror.java +76 −0
  955. java/pkg/com/sun/jdi/MonitorInfo.java +73 −0
  956. java/pkg/com/sun/jdi/NativeMethodException.java +44 −0
  957. java/pkg/com/sun/jdi/ObjectCollectedException.java +43 −0
  958. java/pkg/com/sun/jdi/ObjectReference.java +444 −0
  959. java/pkg/com/sun/jdi/PathSearchingVirtualMachine.java +61 −0
  960. java/pkg/com/sun/jdi/PrimitiveType.java +41 −0
  961. java/pkg/com/sun/jdi/PrimitiveValue.java +123 −0
  962. java/pkg/com/sun/jdi/ReferenceType.java +830 −0
  963. java/pkg/com/sun/jdi/ShortType.java +39 −0
  964. java/pkg/com/sun/jdi/ShortValue.java +61 −0
  965. java/pkg/com/sun/jdi/StackFrame.java +239 −0
  966. java/pkg/com/sun/jdi/StringReference.java +48 −0
  967. java/pkg/com/sun/jdi/ThreadGroupReference.java +101 −0
  968. java/pkg/com/sun/jdi/ThreadReference.java +473 −0
  969. java/pkg/com/sun/jdi/Type.java +149 −0
  970. java/pkg/com/sun/jdi/TypeComponent.java +129 −0
  971. java/pkg/com/sun/jdi/VMCannotBeModifiedException.java +43 −0
  972. java/pkg/com/sun/jdi/VMDisconnectedException.java +44 −0
  973. java/pkg/com/sun/jdi/VMMismatchException.java +44 −0
  974. java/pkg/com/sun/jdi/VMOutOfMemoryException.java +43 −0
  975. java/pkg/com/sun/jdi/Value.java +181 −0
  976. java/pkg/com/sun/jdi/VirtualMachine.java +863 −0
  977. java/pkg/com/sun/jdi/VirtualMachineManager.java +430 −0
  978. java/pkg/com/sun/jdi/VoidType.java +39 −0
  979. java/pkg/com/sun/jdi/VoidValue.java +51 −0
  980. java/pkg/com/sun/jdi/connect/AttachingConnector.java +69 −0
  981. java/pkg/com/sun/jdi/connect/Connector.java +285 −0
  982. java/pkg/com/sun/jdi/connect/IllegalConnectorArgumentsException.java +79 −0
  983. java/pkg/com/sun/jdi/connect/LaunchingConnector.java +74 −0
  984. java/pkg/com/sun/jdi/connect/ListeningConnector.java +117 −0
  985. java/pkg/com/sun/jdi/connect/Transport.java +52 −0
  986. java/pkg/com/sun/jdi/connect/TransportTimeoutException.java +77 −0
  987. java/pkg/com/sun/jdi/connect/VMStartException.java +55 −0
  988. java/pkg/com/sun/jdi/connect/mkfile +19 −0
  989. java/pkg/com/sun/jdi/connect/package.html +43 −0
  990. java/pkg/com/sun/jdi/connect/spi/ClosedConnectionException.java +67 −0
  991. java/pkg/com/sun/jdi/connect/spi/Connection.java +200 −0
  992. java/pkg/com/sun/jdi/connect/spi/TransportService.java +377 −0
  993. java/pkg/com/sun/jdi/connect/spi/mkfile +10 −0
  994. java/pkg/com/sun/jdi/connect/spi/package.html +35 −0
  995. java/pkg/com/sun/jdi/doc-files/mkfile +2 −0
  996. java/pkg/com/sun/jdi/doc-files/signature.html +39 −0
  997. java/pkg/com/sun/jdi/event/AccessWatchpointEvent.java +41 −0
  998. java/pkg/com/sun/jdi/event/BreakpointEvent.java +52 −0
  999. java/pkg/com/sun/jdi/event/ClassPrepareEvent.java +73 −0
  1000. java/pkg/com/sun/jdi/event/ClassUnloadEvent.java +52 −0
  1001. java/pkg/com/sun/jdi/event/Event.java +54 −0
  1002. java/pkg/com/sun/jdi/event/EventIterator.java +49 −0
  1003. java/pkg/com/sun/jdi/event/EventQueue.java +88 −0
  1004. java/pkg/com/sun/jdi/event/EventSet.java +171 −0
  1005. java/pkg/com/sun/jdi/event/ExceptionEvent.java +94 −0
  1006. java/pkg/com/sun/jdi/event/LocatableEvent.java +48 −0
  1007. java/pkg/com/sun/jdi/event/MethodEntryEvent.java +54 −0
  1008. java/pkg/com/sun/jdi/event/MethodExitEvent.java +73 −0
  1009. java/pkg/com/sun/jdi/event/ModificationWatchpointEvent.java +48 −0
  1010. java/pkg/com/sun/jdi/event/MonitorContendedEnterEvent.java +60 −0
  1011. java/pkg/com/sun/jdi/event/MonitorContendedEnteredEvent.java +60 −0
  1012. java/pkg/com/sun/jdi/event/MonitorWaitEvent.java +65 −0
  1013. java/pkg/com/sun/jdi/event/MonitorWaitedEvent.java +67 −0
  1014. java/pkg/com/sun/jdi/event/StepEvent.java +51 −0
  1015. java/pkg/com/sun/jdi/event/ThreadDeathEvent.java +56 −0
  1016. java/pkg/com/sun/jdi/event/ThreadStartEvent.java +63 −0
  1017. java/pkg/com/sun/jdi/event/VMDeathEvent.java +72 −0
  1018. java/pkg/com/sun/jdi/event/VMDisconnectEvent.java +56 −0
  1019. java/pkg/com/sun/jdi/event/VMStartEvent.java +54 −0
  1020. java/pkg/com/sun/jdi/event/WatchpointEvent.java +67 −0
  1021. java/pkg/com/sun/jdi/event/mkfile +31 −0
  1022. java/pkg/com/sun/jdi/event/package.html +49 −0
  1023. java/pkg/com/sun/jdi/mkfile +79 −0
  1024. java/pkg/com/sun/jdi/package.html +50 −0
  1025. java/pkg/com/sun/jdi/request/AccessWatchpointRequest.java +60 −0
  1026. java/pkg/com/sun/jdi/request/BreakpointRequest.java +87 −0
  1027. java/pkg/com/sun/jdi/request/ClassPrepareRequest.java +124 −0
  1028. java/pkg/com/sun/jdi/request/ClassUnloadRequest.java +76 −0
  1029. java/pkg/com/sun/jdi/request/DuplicateRequestException.java +45 −0
  1030. java/pkg/com/sun/jdi/request/EventRequest.java +210 −0
  1031. java/pkg/com/sun/jdi/request/EventRequestManager.java +544 −0
  1032. java/pkg/com/sun/jdi/request/ExceptionRequest.java +155 −0
  1033. java/pkg/com/sun/jdi/request/InvalidRequestStateException.java +48 −0
  1034. java/pkg/com/sun/jdi/request/MethodEntryRequest.java +116 −0
  1035. java/pkg/com/sun/jdi/request/MethodExitRequest.java +119 −0
  1036. java/pkg/com/sun/jdi/request/ModificationWatchpointRequest.java +59 −0
  1037. java/pkg/com/sun/jdi/request/MonitorContendedEnterRequest.java +116 −0
  1038. java/pkg/com/sun/jdi/request/MonitorContendedEnteredRequest.java +116 −0
  1039. java/pkg/com/sun/jdi/request/MonitorWaitRequest.java +115 −0
  1040. java/pkg/com/sun/jdi/request/MonitorWaitedRequest.java +115 −0
  1041. java/pkg/com/sun/jdi/request/StepRequest.java +135 −0
  1042. java/pkg/com/sun/jdi/request/ThreadDeathRequest.java +58 −0
  1043. java/pkg/com/sun/jdi/request/ThreadStartRequest.java +58 −0
  1044. java/pkg/com/sun/jdi/request/VMDeathRequest.java +61 −0
  1045. java/pkg/com/sun/jdi/request/WatchpointRequest.java +120 −0
  1046. java/pkg/com/sun/jdi/request/mkfile +28 −0
  1047. java/pkg/com/sun/jdi/request/package.html +48 −0
  1048. java/pkg/com/sun/jmx/defaults/JmxProperties.class +0 −0
  1049. java/pkg/com/sun/jmx/defaults/JmxProperties.java +232 −0
  1050. java/pkg/com/sun/jmx/defaults/ServiceName.class +0 −0
  1051. java/pkg/com/sun/jmx/defaults/ServiceName.java +97 −0
  1052. java/pkg/com/sun/jmx/defaults/mkfile +9 −0
  1053. java/pkg/com/sun/jmx/defaults/package.html +33 −0
  1054. java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$1.class +0 −0
  1055. java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$2.class +0 −0
  1056. java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ListenerWrapper.class +0 −0
  1057. java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ResourceContext$1.class +0 −0
  1058. java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ResourceContext.class +0 −0
  1059. java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.class +0 −0
  1060. java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java +2064 −0
  1061. java/pkg/com/sun/jmx/interceptor/MBeanServerInterceptor.class +0 −0
  1062. java/pkg/com/sun/jmx/interceptor/MBeanServerInterceptor.java +130 −0
  1063. java/pkg/com/sun/jmx/interceptor/mkfile +9 −0
  1064. java/pkg/com/sun/jmx/interceptor/package.html +36 −0
  1065. java/pkg/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport$LoaderEntry.class +0 −0
  1066. java/pkg/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.class +0 −0
  1067. java/pkg/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java +304 −0
  1068. java/pkg/com/sun/jmx/mbeanserver/ConvertingMethod.class +0 −0
  1069. java/pkg/com/sun/jmx/mbeanserver/ConvertingMethod.java +228 −0
  1070. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$1.class +0 −0
  1071. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$ArrayMapping.class +0 −0
  1072. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CollectionMapping.class +0 −0
  1073. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilder.class +0 −0
  1074. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderCheckGetters.class +0 −0
  1075. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaConstructor$Constr.class +0 −0
  1076. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaConstructor.class +0 −0
  1077. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaFrom.class +0 −0
  1078. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaProxy.class +0 −0
  1079. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaSetters.class +0 −0
  1080. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeMapping.class +0 −0
  1081. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$EnumMapping.class +0 −0
  1082. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$IdentityMapping.class +0 −0
  1083. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$MXBeanRefMapping.class +0 −0
  1084. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$Mappings.class +0 −0
  1085. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$NonNullMXBeanMapping.class +0 −0
  1086. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$TabularMapping.class +0 −0
  1087. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.class +0 −0
  1088. java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.java +1492 −0
  1089. java/pkg/com/sun/jmx/mbeanserver/DescriptorCache.class +0 −0
  1090. java/pkg/com/sun/jmx/mbeanserver/DescriptorCache.java +67 −0
  1091. java/pkg/com/sun/jmx/mbeanserver/DynamicMBean2.class +0 −0
  1092. java/pkg/com/sun/jmx/mbeanserver/DynamicMBean2.java +77 −0
  1093. java/pkg/com/sun/jmx/mbeanserver/GetPropertyAction.class +0 −0
  1094. java/pkg/com/sun/jmx/mbeanserver/GetPropertyAction.java +46 −0
  1095. java/pkg/com/sun/jmx/mbeanserver/Introspector$BeansHelper.class +0 −0
  1096. java/pkg/com/sun/jmx/mbeanserver/Introspector$SimpleIntrospector.class +0 −0
  1097. java/pkg/com/sun/jmx/mbeanserver/Introspector.class +0 −0
  1098. java/pkg/com/sun/jmx/mbeanserver/Introspector.java +778 −0
  1099. java/pkg/com/sun/jmx/mbeanserver/JmxMBeanServer$1.class +0 −0
  1100. java/pkg/com/sun/jmx/mbeanserver/JmxMBeanServer.class +0 −0
  1101. java/pkg/com/sun/jmx/mbeanserver/JmxMBeanServer.java +1497 −0
  1102. java/pkg/com/sun/jmx/mbeanserver/JmxMBeanServerBuilder.java +114 −0
  1103. java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer$1.class +0 −0
  1104. java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer$AttrMethods.class +0 −0
  1105. java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer$MBeanVisitor.class +0 −0
  1106. java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer$MethodOrder.class +0 −0
  1107. java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer.class +0 −0
  1108. java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer.java +270 −0
  1109. java/pkg/com/sun/jmx/mbeanserver/MBeanInstantiator.class +0 −0
  1110. java/pkg/com/sun/jmx/mbeanserver/MBeanInstantiator.java +718 −0
  1111. java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector$1.class +0 −0
  1112. java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector$MBeanInfoMaker.class +0 −0
  1113. java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector$MBeanInfoMap.class +0 −0
  1114. java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector$PerInterfaceMap.class +0 −0
  1115. java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector.class +0 −0
  1116. java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector.java +469 −0
  1117. java/pkg/com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.class +0 −0
  1118. java/pkg/com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.java +321 −0
  1119. java/pkg/com/sun/jmx/mbeanserver/MBeanSupport.class +0 −0
  1120. java/pkg/com/sun/jmx/mbeanserver/MBeanSupport.java +274 −0
  1121. java/pkg/com/sun/jmx/mbeanserver/MXBeanIntrospector.class +0 −0
  1122. java/pkg/com/sun/jmx/mbeanserver/MXBeanIntrospector.java +365 −0
  1123. java/pkg/com/sun/jmx/mbeanserver/MXBeanLookup.class +0 −0
  1124. java/pkg/com/sun/jmx/mbeanserver/MXBeanLookup.java +188 −0
  1125. java/pkg/com/sun/jmx/mbeanserver/MXBeanMapping.class +0 −0
  1126. java/pkg/com/sun/jmx/mbeanserver/MXBeanMapping.java +210 −0
  1127. java/pkg/com/sun/jmx/mbeanserver/MXBeanMappingFactory.class +0 −0
  1128. java/pkg/com/sun/jmx/mbeanserver/MXBeanMappingFactory.java +124 −0
  1129. java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$1.class +0 −0
  1130. java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$GetHandler.class +0 −0
  1131. java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$Handler.class +0 −0
  1132. java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$InvokeHandler.class +0 −0
  1133. java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$SetHandler.class +0 −0
  1134. java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$Visitor.class +0 −0
  1135. java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy.class +0 −0
  1136. java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy.java +175 −0
  1137. java/pkg/com/sun/jmx/mbeanserver/MXBeanSupport.class +0 −0
  1138. java/pkg/com/sun/jmx/mbeanserver/MXBeanSupport.java +178 −0
  1139. java/pkg/com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.class +0 −0
  1140. java/pkg/com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.java +70 −0
  1141. java/pkg/com/sun/jmx/mbeanserver/NamedObject.class +0 −0
  1142. java/pkg/com/sun/jmx/mbeanserver/NamedObject.java +122 −0
  1143. java/pkg/com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.class +0 −0
  1144. java/pkg/com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.java +68 −0
  1145. java/pkg/com/sun/jmx/mbeanserver/PerInterface$1.class +0 −0
  1146. java/pkg/com/sun/jmx/mbeanserver/PerInterface$InitMaps.class +0 −0
  1147. java/pkg/com/sun/jmx/mbeanserver/PerInterface$MethodAndSig.class +0 −0
  1148. java/pkg/com/sun/jmx/mbeanserver/PerInterface.class +0 −0
  1149. java/pkg/com/sun/jmx/mbeanserver/PerInterface.java +280 −0
  1150. java/pkg/com/sun/jmx/mbeanserver/Repository$ObjectNamePattern.class +0 −0
  1151. java/pkg/com/sun/jmx/mbeanserver/Repository$RegistrationContext.class +0 −0
  1152. java/pkg/com/sun/jmx/mbeanserver/Repository.class +0 −0
  1153. java/pkg/com/sun/jmx/mbeanserver/Repository.java +678 −0
  1154. java/pkg/com/sun/jmx/mbeanserver/SecureClassLoaderRepository.class +0 −0
  1155. java/pkg/com/sun/jmx/mbeanserver/SecureClassLoaderRepository.java +64 −0
  1156. java/pkg/com/sun/jmx/mbeanserver/StandardMBeanIntrospector.class +0 −0
  1157. java/pkg/com/sun/jmx/mbeanserver/StandardMBeanIntrospector.java +192 −0
  1158. java/pkg/com/sun/jmx/mbeanserver/StandardMBeanSupport.class +0 −0
  1159. java/pkg/com/sun/jmx/mbeanserver/StandardMBeanSupport.java +95 −0
  1160. java/pkg/com/sun/jmx/mbeanserver/SunJmxMBeanServer.class +0 −0
  1161. java/pkg/com/sun/jmx/mbeanserver/SunJmxMBeanServer.java +90 −0
  1162. java/pkg/com/sun/jmx/mbeanserver/Util.class +0 −0
  1163. java/pkg/com/sun/jmx/mbeanserver/Util.java +241 −0
  1164. java/pkg/com/sun/jmx/mbeanserver/WeakIdentityHashMap$IdentityWeakReference.class +0 −0
  1165. java/pkg/com/sun/jmx/mbeanserver/WeakIdentityHashMap.class +0 −0
  1166. java/pkg/com/sun/jmx/mbeanserver/WeakIdentityHashMap.java +137 −0
  1167. java/pkg/com/sun/jmx/mbeanserver/mkfile +38 −0
  1168. java/pkg/com/sun/jmx/mbeanserver/package.html +33 −0
  1169. java/pkg/com/sun/jmx/mkfile +10 −0
  1170. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$1.class +0 −0
  1171. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$2.class +0 −0
  1172. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$3.class +0 −0
  1173. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$4.class +0 −0
  1174. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$5.class +0 −0
  1175. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$BroadcasterQuery.class +0 −0
  1176. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$BufferListener.class +0 −0
  1177. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$NamedNotification.class +0 −0
  1178. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$ShareBuffer.class +0 −0
  1179. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer.class +0 −0
  1180. java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java +838 −0
  1181. java/pkg/com/sun/jmx/remote/internal/ArrayQueue.class +0 −0
  1182. java/pkg/com/sun/jmx/remote/internal/ArrayQueue.java +102 −0
  1183. java/pkg/com/sun/jmx/remote/internal/ClientCommunicatorAdmin$1.class +0 −0
  1184. java/pkg/com/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker.class +0 −0
  1185. java/pkg/com/sun/jmx/remote/internal/ClientCommunicatorAdmin.class +0 −0
  1186. java/pkg/com/sun/jmx/remote/internal/ClientCommunicatorAdmin.java +252 −0
  1187. java/pkg/com/sun/jmx/remote/internal/ClientListenerInfo.class +0 −0
  1188. java/pkg/com/sun/jmx/remote/internal/ClientListenerInfo.java +106 −0
  1189. java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$1.class +0 −0
  1190. java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$LinearExecutor$1.class +0 −0
  1191. java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$LinearExecutor.class +0 −0
  1192. java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$NotifFetcher$1.class +0 −0
  1193. java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$NotifFetcher.class +0 −0
  1194. java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder.class +0 −0
  1195. java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder.java +910 −0
  1196. java/pkg/com/sun/jmx/remote/internal/IIOPHelper$1.class +0 −0
  1197. java/pkg/com/sun/jmx/remote/internal/IIOPHelper.class +0 −0
  1198. java/pkg/com/sun/jmx/remote/internal/IIOPHelper.java +188 −0
  1199. java/pkg/com/sun/jmx/remote/internal/IIOPProxy.class +0 −0
  1200. java/pkg/com/sun/jmx/remote/internal/IIOPProxy.java +110 −0
  1201. java/pkg/com/sun/jmx/remote/internal/NotificationBuffer.class +0 −0
  1202. java/pkg/com/sun/jmx/remote/internal/NotificationBuffer.java +72 −0
  1203. java/pkg/com/sun/jmx/remote/internal/NotificationBufferFilter.class +0 −0
  1204. java/pkg/com/sun/jmx/remote/internal/NotificationBufferFilter.java +40 −0
  1205. java/pkg/com/sun/jmx/remote/internal/ProxyRef.class +0 −0
  1206. java/pkg/com/sun/jmx/remote/internal/ProxyRef.java +103 −0
  1207. java/pkg/com/sun/jmx/remote/internal/RMIExporter.class +0 −0
  1208. java/pkg/com/sun/jmx/remote/internal/RMIExporter.java +59 −0
  1209. java/pkg/com/sun/jmx/remote/internal/ServerCommunicatorAdmin$1.class +0 −0
  1210. java/pkg/com/sun/jmx/remote/internal/ServerCommunicatorAdmin$Timeout.class +0 −0
  1211. java/pkg/com/sun/jmx/remote/internal/ServerCommunicatorAdmin.class +0 −0
  1212. java/pkg/com/sun/jmx/remote/internal/ServerCommunicatorAdmin.java +232 −0
  1213. java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder$1.class +0 −0
  1214. java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder$2.class +0 −0
  1215. java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder$3.class +0 −0
  1216. java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder$IdAndFilter.class +0 −0
  1217. java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder.class +0 −0
  1218. java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder.java +494 −0
  1219. java/pkg/com/sun/jmx/remote/internal/Unmarshal.java +34 −0
  1220. java/pkg/com/sun/jmx/remote/internal/mkfile +21 −0
  1221. java/pkg/com/sun/jmx/remote/internal/package.html +37 −0
  1222. java/pkg/com/sun/jmx/remote/mkfile +9 −0
  1223. java/pkg/com/sun/jmx/remote/protocol/iiop/ClientProvider.java +48 −0
  1224. java/pkg/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java +119 −0
  1225. java/pkg/com/sun/jmx/remote/protocol/iiop/ProxyInputStream.java +241 −0
  1226. java/pkg/com/sun/jmx/remote/protocol/iiop/ServerProvider.java +51 −0
  1227. java/pkg/com/sun/jmx/remote/protocol/iiop/mkfile +11 −0
  1228. java/pkg/com/sun/jmx/remote/protocol/mkfile +7 −0
  1229. java/pkg/com/sun/jmx/remote/protocol/rmi/ClientProvider.java +48 −0
  1230. java/pkg/com/sun/jmx/remote/protocol/rmi/ServerProvider.java +51 −0
  1231. java/pkg/com/sun/jmx/remote/protocol/rmi/mkfile +9 −0
  1232. java/pkg/com/sun/jmx/remote/security/FileLoginModule.class +0 −0
  1233. java/pkg/com/sun/jmx/remote/security/FileLoginModule.java +570 −0
  1234. java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator$1.class +0 −0
  1235. java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator$2.class +0 −0
  1236. java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator$FileLoginConfig.class +0 −0
  1237. java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator$JMXCallbackHandler.class +0 −0
  1238. java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator.class +0 −0
  1239. java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator.java +346 −0
  1240. java/pkg/com/sun/jmx/remote/security/JMXSubjectDomainCombiner.class +0 −0
  1241. java/pkg/com/sun/jmx/remote/security/JMXSubjectDomainCombiner.java +106 −0
  1242. java/pkg/com/sun/jmx/remote/security/MBeanServerAccessController.class +0 −0
  1243. java/pkg/com/sun/jmx/remote/security/MBeanServerAccessController.java +665 −0
  1244. java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$1.class +0 −0
  1245. java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$2.class +0 −0
  1246. java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$Access.class +0 −0
  1247. java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$AccessType.class +0 −0
  1248. java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$Parser.class +0 −0
  1249. java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController.class +0 −0
  1250. java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController.java +544 −0
  1251. java/pkg/com/sun/jmx/remote/security/NotificationAccessController.class +0 −0
  1252. java/pkg/com/sun/jmx/remote/security/NotificationAccessController.java +110 −0
  1253. java/pkg/com/sun/jmx/remote/security/SubjectDelegator$1.class +0 −0
  1254. java/pkg/com/sun/jmx/remote/security/SubjectDelegator.class +0 −0
  1255. java/pkg/com/sun/jmx/remote/security/SubjectDelegator.java +148 −0
  1256. java/pkg/com/sun/jmx/remote/security/mkfile +14 −0
  1257. java/pkg/com/sun/jmx/remote/util/CacheMap.class +0 −0
  1258. java/pkg/com/sun/jmx/remote/util/CacheMap.java +121 −0
  1259. java/pkg/com/sun/jmx/remote/util/ClassLoaderWithRepository.class +0 −0
  1260. java/pkg/com/sun/jmx/remote/util/ClassLoaderWithRepository.java +55 −0
  1261. java/pkg/com/sun/jmx/remote/util/ClassLogger.class +0 −0
  1262. java/pkg/com/sun/jmx/remote/util/ClassLogger.java +246 −0
  1263. java/pkg/com/sun/jmx/remote/util/EnvHelp$1.class +0 −0
  1264. java/pkg/com/sun/jmx/remote/util/EnvHelp$SinkOutputStream.class +0 −0
  1265. java/pkg/com/sun/jmx/remote/util/EnvHelp.class +0 −0
  1266. java/pkg/com/sun/jmx/remote/util/EnvHelp.java +808 −0
  1267. java/pkg/com/sun/jmx/remote/util/OrderClassLoaders.class +0 −0
  1268. java/pkg/com/sun/jmx/remote/util/OrderClassLoaders.java +48 −0
  1269. java/pkg/com/sun/jmx/remote/util/mkfile +12 −0
  1270. java/pkg/com/sun/jmx/snmp/BerDecoder.java +757 −0
  1271. java/pkg/com/sun/jmx/snmp/BerEncoder.java +477 −0
  1272. java/pkg/com/sun/jmx/snmp/BerException.java +63 −0
  1273. java/pkg/com/sun/jmx/snmp/EnumRowStatus.java +308 −0
  1274. java/pkg/com/sun/jmx/snmp/Enumerated.java +219 −0
  1275. java/pkg/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.README +23 −0
  1276. java/pkg/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.java +402 −0
  1277. java/pkg/com/sun/jmx/snmp/IPAcl/AclEntryImpl.java +263 −0
  1278. java/pkg/com/sun/jmx/snmp/IPAcl/AclImpl.java +287 −0
  1279. java/pkg/com/sun/jmx/snmp/IPAcl/GroupImpl.java +142 −0
  1280. java/pkg/com/sun/jmx/snmp/IPAcl/Host.java +181 −0
  1281. java/pkg/com/sun/jmx/snmp/IPAcl/JDMAccess.java +64 −0
  1282. java/pkg/com/sun/jmx/snmp/IPAcl/JDMAclBlock.java +61 −0
  1283. java/pkg/com/sun/jmx/snmp/IPAcl/JDMAclItem.java +58 −0
  1284. java/pkg/com/sun/jmx/snmp/IPAcl/JDMCommunities.java +53 −0
  1285. java/pkg/com/sun/jmx/snmp/IPAcl/JDMCommunity.java +53 −0
  1286. java/pkg/com/sun/jmx/snmp/IPAcl/JDMEnterprise.java +49 −0
  1287. java/pkg/com/sun/jmx/snmp/IPAcl/JDMHost.java +51 −0
  1288. java/pkg/com/sun/jmx/snmp/IPAcl/JDMHostInform.java +48 −0
  1289. java/pkg/com/sun/jmx/snmp/IPAcl/JDMHostName.java +62 −0
  1290. java/pkg/com/sun/jmx/snmp/IPAcl/JDMHostTrap.java +49 −0
  1291. java/pkg/com/sun/jmx/snmp/IPAcl/JDMInformBlock.java +60 −0
  1292. java/pkg/com/sun/jmx/snmp/IPAcl/JDMInformCommunity.java +51 −0
  1293. java/pkg/com/sun/jmx/snmp/IPAcl/JDMInformInterestedHost.java +46 −0
  1294. java/pkg/com/sun/jmx/snmp/IPAcl/JDMInformItem.java +51 −0
  1295. java/pkg/com/sun/jmx/snmp/IPAcl/JDMIpAddress.java +63 −0
  1296. java/pkg/com/sun/jmx/snmp/IPAcl/JDMIpMask.java +63 −0
  1297. java/pkg/com/sun/jmx/snmp/IPAcl/JDMIpV6Address.java +41 −0
  1298. java/pkg/com/sun/jmx/snmp/IPAcl/JDMManagers.java +47 −0
  1299. java/pkg/com/sun/jmx/snmp/IPAcl/JDMNetMask.java +58 −0
  1300. java/pkg/com/sun/jmx/snmp/IPAcl/JDMNetMaskV6.java +46 −0
  1301. java/pkg/com/sun/jmx/snmp/IPAcl/JDMSecurityDefs.java +47 −0
  1302. java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapBlock.java +61 −0
  1303. java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapCommunity.java +52 −0
  1304. java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapInterestedHost.java +47 −0
  1305. java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapItem.java +53 −0
  1306. java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapNum.java +50 −0
  1307. java/pkg/com/sun/jmx/snmp/IPAcl/JJTParserState.java +149 −0
  1308. java/pkg/com/sun/jmx/snmp/IPAcl/NetMaskImpl.java +266 −0
  1309. java/pkg/com/sun/jmx/snmp/IPAcl/Node.java +60 −0
  1310. java/pkg/com/sun/jmx/snmp/IPAcl/OwnerImpl.java +137 −0
  1311. java/pkg/com/sun/jmx/snmp/IPAcl/ParseError.java +38 −0
  1312. java/pkg/com/sun/jmx/snmp/IPAcl/ParseException.java +217 −0
  1313. java/pkg/com/sun/jmx/snmp/IPAcl/Parser.java +1285 −0
  1314. java/pkg/com/sun/jmx/snmp/IPAcl/Parser.jj +948 −0
  1315. java/pkg/com/sun/jmx/snmp/IPAcl/Parser.jjt +380 −0
  1316. java/pkg/com/sun/jmx/snmp/IPAcl/ParserConstants.java +111 −0
  1317. java/pkg/com/sun/jmx/snmp/IPAcl/ParserTokenManager.java +1514 −0
  1318. java/pkg/com/sun/jmx/snmp/IPAcl/ParserTreeConstants.java +88 −0
  1319. java/pkg/com/sun/jmx/snmp/IPAcl/PermissionImpl.java +89 −0
  1320. java/pkg/com/sun/jmx/snmp/IPAcl/PrincipalImpl.java +148 −0
  1321. java/pkg/com/sun/jmx/snmp/IPAcl/README.update +29 −0
  1322. java/pkg/com/sun/jmx/snmp/IPAcl/SimpleNode.java +155 −0
  1323. java/pkg/com/sun/jmx/snmp/IPAcl/SnmpAcl.java +486 −0
  1324. java/pkg/com/sun/jmx/snmp/IPAcl/Token.java +107 −0
  1325. java/pkg/com/sun/jmx/snmp/IPAcl/TokenMgrError.java +160 −0
  1326. java/pkg/com/sun/jmx/snmp/IPAcl/mkfile +54 −0
  1327. java/pkg/com/sun/jmx/snmp/IPAcl/package.html +34 −0
  1328. java/pkg/com/sun/jmx/snmp/InetAddressAcl.java +128 −0
  1329. java/pkg/com/sun/jmx/snmp/ServiceName.java +170 −0
  1330. java/pkg/com/sun/jmx/snmp/SnmpAckPdu.java +39 −0
  1331. java/pkg/com/sun/jmx/snmp/SnmpBadSecurityLevelException.java +38 −0
  1332. java/pkg/com/sun/jmx/snmp/SnmpCounter.java +99 −0
  1333. java/pkg/com/sun/jmx/snmp/SnmpCounter64.java +214 −0
  1334. java/pkg/com/sun/jmx/snmp/SnmpEngine.java +70 −0
  1335. java/pkg/com/sun/jmx/snmp/SnmpEngineFactory.java +58 −0
  1336. java/pkg/com/sun/jmx/snmp/SnmpEngineId.java +489 −0
  1337. java/pkg/com/sun/jmx/snmp/SnmpEngineParameters.java +117 −0
  1338. java/pkg/com/sun/jmx/snmp/SnmpGauge.java +99 −0
  1339. java/pkg/com/sun/jmx/snmp/SnmpInt.java +282 −0
  1340. java/pkg/com/sun/jmx/snmp/SnmpIpAddress.java +217 −0
  1341. java/pkg/com/sun/jmx/snmp/SnmpMessage.java +362 −0
  1342. java/pkg/com/sun/jmx/snmp/SnmpMsg.java +476 −0
  1343. java/pkg/com/sun/jmx/snmp/SnmpNull.java +183 −0
  1344. java/pkg/com/sun/jmx/snmp/SnmpOpaque.java +100 −0
  1345. java/pkg/com/sun/jmx/snmp/SnmpParams.java +76 −0
  1346. java/pkg/com/sun/jmx/snmp/SnmpPdu.java +124 −0
  1347. java/pkg/com/sun/jmx/snmp/SnmpPduBulk.java +119 −0
  1348. java/pkg/com/sun/jmx/snmp/SnmpPduBulkType.java +58 −0
  1349. java/pkg/com/sun/jmx/snmp/SnmpPduFactory.java +94 −0
  1350. java/pkg/com/sun/jmx/snmp/SnmpPduFactoryBER.java +131 −0
  1351. java/pkg/com/sun/jmx/snmp/SnmpPduRequest.java +109 −0
  1352. java/pkg/com/sun/jmx/snmp/SnmpPduRequestType.java +60 −0
  1353. java/pkg/com/sun/jmx/snmp/SnmpPduTrap.java +93 −0
  1354. java/pkg/com/sun/jmx/snmp/SnmpScopedPduBulk.java +110 −0
  1355. java/pkg/com/sun/jmx/snmp/SnmpScopedPduPacket.java +104 −0
  1356. java/pkg/com/sun/jmx/snmp/SnmpScopedPduRequest.java +95 −0
  1357. java/pkg/com/sun/jmx/snmp/SnmpSecurityException.java +67 −0
  1358. java/pkg/com/sun/jmx/snmp/SnmpSecurityParameters.java +54 −0
  1359. java/pkg/com/sun/jmx/snmp/SnmpStatusException.java +146 −0
  1360. java/pkg/com/sun/jmx/snmp/SnmpString.java +278 −0
  1361. java/pkg/com/sun/jmx/snmp/SnmpStringFixed.java +193 −0
  1362. java/pkg/com/sun/jmx/snmp/SnmpTooBigException.java +82 −0
  1363. java/pkg/com/sun/jmx/snmp/SnmpUnknownAccContrModelException.java +47 −0
  1364. java/pkg/com/sun/jmx/snmp/SnmpUnknownModelException.java +42 −0
  1365. java/pkg/com/sun/jmx/snmp/SnmpUnknownModelLcdException.java +42 −0
  1366. java/pkg/com/sun/jmx/snmp/SnmpUnknownMsgProcModelException.java +45 −0
  1367. java/pkg/com/sun/jmx/snmp/SnmpUnknownSecModelException.java +45 −0
  1368. java/pkg/com/sun/jmx/snmp/SnmpUnknownSubSystemException.java +42 −0
  1369. java/pkg/com/sun/jmx/snmp/SnmpUnsignedInt.java +125 −0
  1370. java/pkg/com/sun/jmx/snmp/SnmpUsmKeyHandler.java +98 −0
  1371. java/pkg/com/sun/jmx/snmp/SnmpV3Message.java +511 −0
  1372. java/pkg/com/sun/jmx/snmp/SnmpValue.java +96 −0
  1373. java/pkg/com/sun/jmx/snmp/ThreadContext.java +326 −0
  1374. java/pkg/com/sun/jmx/snmp/UserAcl.java +97 −0
  1375. java/pkg/com/sun/jmx/snmp/agent/SnmpEntryOid.java +51 −0
  1376. java/pkg/com/sun/jmx/snmp/agent/SnmpErrorHandlerAgent.java +206 −0
  1377. java/pkg/com/sun/jmx/snmp/agent/SnmpGenericMetaServer.java +132 −0
  1378. java/pkg/com/sun/jmx/snmp/agent/SnmpGenericObjectServer.java +573 −0
  1379. java/pkg/com/sun/jmx/snmp/agent/SnmpIndex.java +190 −0
  1380. java/pkg/com/sun/jmx/snmp/agent/SnmpMib.java +1026 −0
  1381. java/pkg/com/sun/jmx/snmp/agent/SnmpMibAgent.java +757 −0
  1382. java/pkg/com/sun/jmx/snmp/agent/SnmpMibAgentMBean.java +316 −0
  1383. java/pkg/com/sun/jmx/snmp/agent/SnmpMibEntry.java +194 −0
  1384. java/pkg/com/sun/jmx/snmp/agent/SnmpMibGroup.java +519 −0
  1385. java/pkg/com/sun/jmx/snmp/agent/SnmpMibHandler.java +155 −0
  1386. java/pkg/com/sun/jmx/snmp/agent/SnmpMibNode.java +414 −0
  1387. java/pkg/com/sun/jmx/snmp/agent/SnmpMibOid.java +561 −0
  1388. java/pkg/com/sun/jmx/snmp/agent/SnmpMibRequest.java +175 −0
  1389. java/pkg/com/sun/jmx/snmp/agent/SnmpMibRequestImpl.java +242 −0
  1390. java/pkg/com/sun/jmx/snmp/agent/SnmpMibSubRequest.java +209 −0
  1391. java/pkg/com/sun/jmx/snmp/agent/SnmpMibTable.java +2570 −0
  1392. java/pkg/com/sun/jmx/snmp/agent/SnmpRequestTree.java +1071 −0
  1393. java/pkg/com/sun/jmx/snmp/agent/SnmpStandardMetaServer.java +119 −0
  1394. java/pkg/com/sun/jmx/snmp/agent/SnmpStandardObjectServer.java +264 −0
  1395. java/pkg/com/sun/jmx/snmp/agent/SnmpTableCallbackHandler.java +76 −0
  1396. java/pkg/com/sun/jmx/snmp/agent/SnmpTableEntryFactory.java +91 −0
  1397. java/pkg/com/sun/jmx/snmp/agent/SnmpTableEntryNotification.java +141 −0
  1398. java/pkg/com/sun/jmx/snmp/agent/SnmpTableSupport.java +571 −0
  1399. java/pkg/com/sun/jmx/snmp/agent/SnmpUserDataFactory.java +124 −0
  1400. java/pkg/com/sun/jmx/snmp/agent/mkfile +32 −0
  1401. java/pkg/com/sun/jmx/snmp/agent/package.html +34 −0
  1402. java/pkg/com/sun/jmx/snmp/daemon/ClientHandler.java +133 −0
  1403. java/pkg/com/sun/jmx/snmp/daemon/CommunicationException.java +77 −0
  1404. java/pkg/com/sun/jmx/snmp/daemon/CommunicatorServer.java +1375 −0
  1405. java/pkg/com/sun/jmx/snmp/daemon/CommunicatorServerMBean.java +171 −0
  1406. java/pkg/com/sun/jmx/snmp/daemon/SnmpAdaptorServer.java +2659 −0
  1407. java/pkg/com/sun/jmx/snmp/daemon/SnmpAdaptorServerMBean.java +700 −0
  1408. java/pkg/com/sun/jmx/snmp/daemon/SnmpInformHandler.java +80 −0
  1409. java/pkg/com/sun/jmx/snmp/daemon/SnmpMibTree.java +269 −0
  1410. java/pkg/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java +1152 −0
  1411. java/pkg/com/sun/jmx/snmp/daemon/SnmpSubBulkRequestHandler.java +345 −0
  1412. java/pkg/com/sun/jmx/snmp/daemon/SnmpSubNextRequestHandler.java +272 −0
  1413. java/pkg/com/sun/jmx/snmp/daemon/SnmpSubRequestHandler.java +630 −0
  1414. java/pkg/com/sun/jmx/snmp/daemon/mkfile +19 −0
  1415. java/pkg/com/sun/jmx/snmp/daemon/package.html +34 −0
java/Javalist+444−0
@@ -0,0 +1,444 @@
1./pkg/inferno/awt/iImageConsumer.java
2./pkg/java/applet/Applet.java
3./pkg/java/applet/AppletContext.java
4./pkg/java/applet/AppletStub.java
5./pkg/java/applet/AudioClip.java
6./pkg/java/awt/AWTError.java
7./pkg/java/awt/AWTEvent.java
8./pkg/java/awt/AWTEventMulticaster.java
9./pkg/java/awt/AWTException.java
10./pkg/java/awt/Adjustable.java
11./pkg/java/awt/BorderLayout.java
12./pkg/java/awt/Button.java
13./pkg/java/awt/Canvas.java
14./pkg/java/awt/CardLayout.java
15./pkg/java/awt/Checkbox.java
16./pkg/java/awt/CheckboxGroup.java
17./pkg/java/awt/CheckboxMenuItem.java
18./pkg/java/awt/Choice.java
19./pkg/java/awt/Color.java
20./pkg/java/awt/Component.java
21./pkg/java/awt/Container.java
22./pkg/java/awt/Cursor.java
23./pkg/java/awt/Dialog.java
24./pkg/java/awt/Dimension.java
25./pkg/java/awt/Event.java
26./pkg/java/awt/EventDispatchThread.java
27./pkg/java/awt/EventQueue.java
28./pkg/java/awt/FileDialog.java
29./pkg/java/awt/FlowLayout.java
30./pkg/java/awt/Font.java
31./pkg/java/awt/FontMetrics.java
32./pkg/java/awt/Frame.java
33./pkg/java/awt/Graphics.java
34./pkg/java/awt/GridBagConstraints.java
35./pkg/java/awt/GridBagLayout.java
36./pkg/java/awt/GridLayout.java
37./pkg/java/awt/IllegalComponentStateEx..a
38./pkg/java/awt/Image.java
39./pkg/java/awt/Insets.java
40./pkg/java/awt/ItemSelectable.java
41./pkg/java/awt/Label.java
42./pkg/java/awt/LayoutManager.java
43./pkg/java/awt/LayoutManager2.java
44./pkg/java/awt/List.java
45./pkg/java/awt/MediaTracker.java
46./pkg/java/awt/Menu.java
47./pkg/java/awt/MenuBar.java
48./pkg/java/awt/MenuComponent.java
49./pkg/java/awt/MenuContainer.java
50./pkg/java/awt/MenuItem.java
51./pkg/java/awt/MenuShortcut.java
52./pkg/java/awt/Panel.java
53./pkg/java/awt/Point.java
54./pkg/java/awt/Polygon.java
55./pkg/java/awt/PopupMenu.java
56./pkg/java/awt/PrintGraphics.java
57./pkg/java/awt/PrintJob.java
58./pkg/java/awt/Rectangle.java
59./pkg/java/awt/ScrollPane.java
60./pkg/java/awt/Scrollbar.java
61./pkg/java/awt/Shape.java
62./pkg/java/awt/SystemColor.java
63./pkg/java/awt/TextArea.java
64./pkg/java/awt/TextComponent.java
65./pkg/java/awt/TextField.java
66./pkg/java/awt/Toolkit.java
67./pkg/java/awt/Window.java
68./pkg/java/awt/datatransfer/Clipboard.java
69./pkg/java/awt/datatransfer/ClipboardOwner.java
70./pkg/java/awt/datatransfer/DataFlavor.java
71./pkg/java/awt/datatransfer/StringSelection.java
72./pkg/java/awt/datatransfer/Transferable.java
73./pkg/java/awt/datatransfer/UnsupportedFlavorExcept..a
74./pkg/java/awt/event/ActionEvent.java
75./pkg/java/awt/event/ActionListener.java
76./pkg/java/awt/event/AdjustmentEvent.java
77./pkg/java/awt/event/AdjustmentListener.java
78./pkg/java/awt/event/ComponentAdapter.java
79./pkg/java/awt/event/ComponentEvent.java
80./pkg/java/awt/event/ComponentListener.java
81./pkg/java/awt/event/ContainerAdapter.java
82./pkg/java/awt/event/ContainerEvent.java
83./pkg/java/awt/event/ContainerListener.java
84./pkg/java/awt/event/FocusAdapter.java
85./pkg/java/awt/event/FocusEvent.java
86./pkg/java/awt/event/FocusListener.java
87./pkg/java/awt/event/InputEvent.java
88./pkg/java/awt/event/ItemEvent.java
89./pkg/java/awt/event/ItemListener.java
90./pkg/java/awt/event/KeyAdapter.java
91./pkg/java/awt/event/KeyEvent.java
92./pkg/java/awt/event/KeyListener.java
93./pkg/java/awt/event/MouseAdapter.java
94./pkg/java/awt/event/MouseEvent.java
95./pkg/java/awt/event/MouseListener.java
96./pkg/java/awt/event/MouseMotionAdapter.java
97./pkg/java/awt/event/MouseMotionListener.java
98./pkg/java/awt/event/PaintEvent.java
99./pkg/java/awt/event/TextEvent.java
100./pkg/java/awt/event/TextListener.java
101./pkg/java/awt/event/WindowAdapter.java
102./pkg/java/awt/event/WindowEvent.java
103./pkg/java/awt/event/WindowListener.java
104./pkg/java/awt/image/AreaAveragingScaleFilte..a
105./pkg/java/awt/image/ColorModel.java
106./pkg/java/awt/image/CropImageFilter.java
107./pkg/java/awt/image/DirectColorModel.java
108./pkg/java/awt/image/FilteredImageSource.java
109./pkg/java/awt/image/ImageConsumer.java
110./pkg/java/awt/image/ImageFilter.java
111./pkg/java/awt/image/ImageObserver.java
112./pkg/java/awt/image/ImageProducer.java
113./pkg/java/awt/image/IndexColorModel.java
114./pkg/java/awt/image/MemoryImageSource.java
115./pkg/java/awt/image/PixelGrabber.java
116./pkg/java/awt/image/RGBImageFilter.java
117./pkg/java/awt/image/ReplicateScaleFilter.java
118./pkg/java/awt/peer/ActiveEvent.java
119./pkg/java/awt/peer/ButtonPeer.java
120./pkg/java/awt/peer/CanvasPeer.java
121./pkg/java/awt/peer/CheckboxMenuItemPeer.java
122./pkg/java/awt/peer/CheckboxPeer.java
123./pkg/java/awt/peer/ChoicePeer.java
124./pkg/java/awt/peer/ComponentPeer.java
125./pkg/java/awt/peer/ContainerPeer.java
126./pkg/java/awt/peer/DialogPeer.java
127./pkg/java/awt/peer/FileDialogPeer.java
128./pkg/java/awt/peer/FontPeer.java
129./pkg/java/awt/peer/FramePeer.java
130./pkg/java/awt/peer/LabelPeer.java
131./pkg/java/awt/peer/LightweightPeer.java
132./pkg/java/awt/peer/ListPeer.java
133./pkg/java/awt/peer/MenuBarPeer.java
134./pkg/java/awt/peer/MenuComponentPeer.java
135./pkg/java/awt/peer/MenuItemPeer.java
136./pkg/java/awt/peer/MenuPeer.java
137./pkg/java/awt/peer/PanelPeer.java
138./pkg/java/awt/peer/PopupMenuPeer.java
139./pkg/java/awt/peer/ScrollPanePeer.java
140./pkg/java/awt/peer/ScrollbarPeer.java
141./pkg/java/awt/peer/TextAreaPeer.java
142./pkg/java/awt/peer/TextComponentPeer.java
143./pkg/java/awt/peer/TextFieldPeer.java
144./pkg/java/awt/peer/WindowPeer.java
145./pkg/java/beans/BeanDescriptor.java
146./pkg/java/beans/BeanInfo.java
147./pkg/java/beans/Beans.java
148./pkg/java/beans/Customizer.java
149./pkg/java/beans/EventSetDescriptor.java
150./pkg/java/beans/FeatureDescriptor.java
151./pkg/java/beans/IndexedPropertyDescript..a
152./pkg/java/beans/IntrospectionException.java
153./pkg/java/beans/Introspector.java
154./pkg/java/beans/MethodDescriptor.java
155./pkg/java/beans/ParameterDescriptor.java
156./pkg/java/beans/PropertyChangeEvent.java
157./pkg/java/beans/PropertyChangeListener.java
158./pkg/java/beans/PropertyChangeSupport.java
159./pkg/java/beans/PropertyDescriptor.java
160./pkg/java/beans/PropertyEditor.java
161./pkg/java/beans/PropertyEditorManager.java
162./pkg/java/beans/PropertyEditorSupport.java
163./pkg/java/beans/PropertyVetoException.java
164./pkg/java/beans/SimpleBeanInfo.java
165./pkg/java/beans/VetoableChangeListener.java
166./pkg/java/beans/VetoableChangeSupport.java
167./pkg/java/beans/Visibility.java
168./pkg/java/io/BufferedInputStream.java
169./pkg/java/io/BufferedOutputStream.java
170./pkg/java/io/BufferedReader.java
171./pkg/java/io/BufferedWriter.java
172./pkg/java/io/ByteArrayInputStream.java
173./pkg/java/io/ByteArrayOutputStream.java
174./pkg/java/io/CharArrayReader.java
175./pkg/java/io/CharArrayWriter.java
176./pkg/java/io/CharConversionException..a
177./pkg/java/io/DataInput.java
178./pkg/java/io/DataInputStream.java
179./pkg/java/io/DataOutput.java
180./pkg/java/io/DataOutputStream.java
181./pkg/java/io/EOFException.java
182./pkg/java/io/Externalizable.java
183./pkg/java/io/File.java
184./pkg/java/io/FileDescriptor.java
185./pkg/java/io/FileInputStream.java
186./pkg/java/io/FileNotFoundException.java
187./pkg/java/io/FileOutputStream.java
188./pkg/java/io/FileReader.java
189./pkg/java/io/FileWriter.java
190./pkg/java/io/FilenameFilter.java
191./pkg/java/io/FilterInputStream.java
192./pkg/java/io/FilterOutputStream.java
193./pkg/java/io/FilterReader.java
194./pkg/java/io/FilterWriter.java
195./pkg/java/io/IOException.java
196./pkg/java/io/InputStream.java
197./pkg/java/io/InputStreamReader.java
198./pkg/java/io/InterruptedIOException.java
199./pkg/java/io/InvalidClassException.java
200./pkg/java/io/InvalidObjectException.java
201./pkg/java/io/LineNumberInputStream.java
202./pkg/java/io/LineNumberReader.java
203./pkg/java/io/NotActiveException.java
204./pkg/java/io/NotSerializableExceptio..a
205./pkg/java/io/ObjectInput.java
206./pkg/java/io/ObjectInputStream.java
207./pkg/java/io/ObjectInputValidation.java
208./pkg/java/io/ObjectOutput.java
209./pkg/java/io/ObjectOutputStream.java
210./pkg/java/io/ObjectStreamClass.java
211./pkg/java/io/ObjectStreamConstants.java
212./pkg/java/io/ObjectStreamException.java
213./pkg/java/io/ObjectStreamField.java
214./pkg/java/io/OptionalDataException.java
215./pkg/java/io/OutputStream.java
216./pkg/java/io/OutputStreamWriter.java
217./pkg/java/io/PipedInputStream.java
218./pkg/java/io/PipedOutputStream.java
219./pkg/java/io/PipedReader.java
220./pkg/java/io/PipedWriter.java
221./pkg/java/io/PrintStream.java
222./pkg/java/io/PrintWriter.java
223./pkg/java/io/PushbackInputStream.java
224./pkg/java/io/PushbackReader.java
225./pkg/java/io/RandomAccessFile.java
226./pkg/java/io/Reader.java
227./pkg/java/io/SequenceInputStream.java
228./pkg/java/io/Serializable.java
229./pkg/java/io/StreamCorruptedExceptio..a
230./pkg/java/io/StreamTokenizer.java
231./pkg/java/io/StringBufferInputStream..a
232./pkg/java/io/StringReader.java
233./pkg/java/io/StringWriter.java
234./pkg/java/io/SyncFailedException.java
235./pkg/java/io/UTFDataFormatException.java
236./pkg/java/io/UnsupportedEncodingExce..a
237./pkg/java/io/WriteAbortedException.java
238./pkg/java/io/Writer.java
239./pkg/java/lang/AbstractMethodError.java
240./pkg/java/lang/ArithmeticException.java
241./pkg/java/lang/ArrayIndexOutOfBoundsEx..a
242./pkg/java/lang/ArrayStoreException.java
243./pkg/java/lang/Boolean.java
244./pkg/java/lang/Byte.java
245./pkg/java/lang/Character.java
246./pkg/java/lang/Class.java
247./pkg/java/lang/ClassCastException.java
248./pkg/java/lang/ClassCircularityError.java
249./pkg/java/lang/ClassFormatError.java
250./pkg/java/lang/ClassLoader.java
251./pkg/java/lang/ClassNotFoundException.java
252./pkg/java/lang/CloneNotSupportedExcept..a
253./pkg/java/lang/Cloneable.java
254./pkg/java/lang/Compiler.java
255./pkg/java/lang/Double.java
256./pkg/java/lang/Error.java
257./pkg/java/lang/Exception.java
258./pkg/java/lang/Float.java
259./pkg/java/lang/IllegalAccessError.java
260./pkg/java/lang/IllegalAccessException.java
261./pkg/java/lang/IllegalArgumentExceptio..a
262./pkg/java/lang/IllegalMonitorStateExce..a
263./pkg/java/lang/IllegalStateException.java
264./pkg/java/lang/IllegalThreadStateExcep..a
265./pkg/java/lang/IncompatibleClassChange..a
266./pkg/java/lang/IndexOutOfBoundsExcepti..a
267./pkg/java/lang/InfernoProcess.java
268./pkg/java/lang/InstantiationError.java
269./pkg/java/lang/InstantiationException.java
270./pkg/java/lang/Integer.java
271./pkg/java/lang/InternalError.java
272./pkg/java/lang/InterruptedException.java
273./pkg/java/lang/LinkageError.java
274./pkg/java/lang/Long.java
275./pkg/java/lang/Math.java
276./pkg/java/lang/NegativeArraySizeExcept..a
277./pkg/java/lang/NoClassDefFoundError.java
278./pkg/java/lang/NoSuchFieldError.java
279./pkg/java/lang/NoSuchFieldException.java
280./pkg/java/lang/NoSuchMethodError.java
281./pkg/java/lang/NoSuchMethodException.java
282./pkg/java/lang/NullPointerException.java
283./pkg/java/lang/Number.java
284./pkg/java/lang/NumberFormatException.java
285./pkg/java/lang/Object.java
286./pkg/java/lang/OutOfMemoryError.java
287./pkg/java/lang/Process.java
288./pkg/java/lang/Runnable.java
289./pkg/java/lang/Runtime.java
290./pkg/java/lang/RuntimeException.java
291./pkg/java/lang/SecurityException.java
292./pkg/java/lang/SecurityManager.java
293./pkg/java/lang/Short.java
294./pkg/java/lang/StackOverflowError.java
295./pkg/java/lang/String.java
296./pkg/java/lang/StringBuffer.java
297./pkg/java/lang/StringIndexOutOfBoundsE..a
298./pkg/java/lang/System.java
299./pkg/java/lang/Thread.java
300./pkg/java/lang/ThreadDeath.java
301./pkg/java/lang/ThreadGroup.java
302./pkg/java/lang/Throwable.java
303./pkg/java/lang/UnknownError.java
304./pkg/java/lang/UnsatisfiedLinkError.java
305./pkg/java/lang/VerifyError.java
306./pkg/java/lang/VirtualMachineError.java
307./pkg/java/lang/Void.java
308./pkg/java/lang/reflect/Array.java
309./pkg/java/lang/reflect/Constructor.java
310./pkg/java/lang/reflect/Field.java
311./pkg/java/lang/reflect/InvocationTargetExcepti..a
312./pkg/java/lang/reflect/Member.java
313./pkg/java/lang/reflect/Method.java
314./pkg/java/lang/reflect/Modifier.java
315./pkg/java/net/BindException.java
316./pkg/java/net/ConnectException.java
317./pkg/java/net/ContentHandler.java
318./pkg/java/net/ContentHandlerFactory.java
319./pkg/java/net/DatagramPacket.java
320./pkg/java/net/DatagramSocket.java
321./pkg/java/net/DatagramSocketImpl.java
322./pkg/java/net/FileNameMap.java
323./pkg/java/net/HttpURLConnection.java
324./pkg/java/net/InetAddress.java
325./pkg/java/net/MalformedURLException.java
326./pkg/java/net/MulticastSocket.java
327./pkg/java/net/NoRouteToHostException.java
328./pkg/java/net/PlainDatagramSocketImpl..a
329./pkg/java/net/PlainSocketImpl.java
330./pkg/java/net/ProtocolException.java
331./pkg/java/net/ServerSocket.java
332./pkg/java/net/Socket.java
333./pkg/java/net/SocketException.java
334./pkg/java/net/SocketImpl.java
335./pkg/java/net/SocketImplFactory.java
336./pkg/java/net/SocketInputStream.java
337./pkg/java/net/SocketOptions.java
338./pkg/java/net/SocketOutputStream.java
339./pkg/java/net/URL.java
340./pkg/java/net/URLConnection.java
341./pkg/java/net/URLEncoder.java
342./pkg/java/net/URLStreamHandler.java
343./pkg/java/net/URLStreamHandlerFactory..a
344./pkg/java/net/UnknownHostException.java
345./pkg/java/net/UnknownServiceException..a
346./pkg/java/security/DigestException.java
347./pkg/java/security/DigestOutputStream.java
348./pkg/java/security/MessageDigest.java
349./pkg/java/security/NoSuchAlgorithmExceptio..a
350./pkg/java/security/NoSuchProviderException..a
351./pkg/java/security/Provider.java
352./pkg/java/security/Security.java
353./pkg/java/util/BitSet.java
354./pkg/java/util/Date.java
355./pkg/java/util/Dictionary.java
356./pkg/java/util/EmptyStackException.java
357./pkg/java/util/Enumeration.java
358./pkg/java/util/EventListener.java
359./pkg/java/util/EventObject.java
360./pkg/java/util/Hashtable.java
361./pkg/java/util/NoSuchElementException.java
362./pkg/java/util/Observable.java
363./pkg/java/util/Observer.java
364./pkg/java/util/Properties.java
365./pkg/java/util/Random.java
366./pkg/java/util/Stack.java
367./pkg/java/util/StringTokenizer.java
368./pkg/java/util/Vector.java
369./pkg/java/util/zip/CRC32.java
370./pkg/java/util/zip/CheckedInputStream.java
371./pkg/java/util/zip/CheckedOutputStream.java
372./pkg/java/util/zip/Checksum.java
373./pkg/java/util/zip/DataFormatException.java
374./pkg/java/util/zip/GZIPInputStream.java
375./pkg/java/util/zip/Inflater.java
376./pkg/java/util/zip/InflaterInputStream.java
377./pkg/java/util/zip/ZipConstants.java
378./pkg/java/util/zip/ZipEntry.java
379./pkg/java/util/zip/ZipException.java
380./pkg/java/util/zip/ZipInputStream.java
381./pkg/sun/awt/AWTFinalizeable.java
382./pkg/sun/awt/AWTFinalizer.java
383./pkg/sun/awt/DrawingSurface.java
384./pkg/sun/awt/DrawingSurfaceInfo.java
385./pkg/sun/awt/PhysicalDrawingSurface.java
386./pkg/sun/awt/image/ByteArrayImageSource.java
387./pkg/sun/awt/image/FileImageSource.java
388./pkg/sun/awt/image/GifImageDecoder.java
389./pkg/sun/awt/image/Image.java
390./pkg/sun/awt/image/ImageConsumerQueue.java
391./pkg/sun/awt/image/ImageDecoder.java
392./pkg/sun/awt/image/ImageFetchable.java
393./pkg/sun/awt/image/ImageFetcher.java
394./pkg/sun/awt/image/ImageFormatException.java
395./pkg/sun/awt/image/ImageRepresentation.java
396./pkg/sun/awt/image/ImageWatched.java
397./pkg/sun/awt/image/InputStreamImageSource.java
398./pkg/sun/awt/image/OffScreenImageSource.java
399./pkg/sun/awt/image/PixelStore.java
400./pkg/sun/awt/image/PixelStore32.java
401./pkg/sun/awt/image/PixelStore8.java
402./pkg/sun/awt/image/URLImageSource.java
403./pkg/sun/awt/image/XbmImageDecoder.java
404./pkg/sun/io/ByteToCharConverter.java
405./pkg/sun/io/CharToByteConverter.java
406./pkg/sun/io/ConversionBufferFullExc..a
407./pkg/sun/io/MalformedInputException..a
408./pkg/sun/io/UnknownCharacterExcepti..a
409./pkg/sun/misc/REException.java
410./pkg/sun/misc/Ref.java
411./pkg/sun/misc/Regexp.java
412./pkg/sun/misc/RegexpPool.java
413./pkg/sun/misc/RegexpTarget.java
414./pkg/sun/net/NetworkClient.java
415./pkg/sun/net/ProgressData.java
416./pkg/sun/net/ProgressEntry.java
417./pkg/sun/net/TransferProtocolClient.java
418./pkg/sun/net/URLCanonicalizer.java
419./pkg/sun/net/www/ApplicationLaunchExcept..a
420./pkg/sun/net/www/HeaderParser.java
421./pkg/sun/net/www/MessageHeader.java
422./pkg/sun/net/www/MeteredStream.java
423./pkg/sun/net/www/MimeLauncher.java
424./pkg/sun/net/www/URLConnection.java
425./pkg/sun/net/www/http/HttpClient.java
426./pkg/sun/net/www/http/KeepAliveCache.java
427./pkg/sun/net/www/http/KeepAliveStream.java
428./pkg/sun/net/www/protocol/http/AuthenticationInfo.java
429./pkg/sun/net/www/protocol/http/Handler.java
430./pkg/sun/net/www/protocol/http/HttpAuthenticator.java
431./pkg/sun/net/www/protocol/http/HttpURLConnection.java
432./pkg/sun/security/provider/SHA.java
433./pkg/sun/security/provider/Sun.java
434./pkg/sunw/awt/ActionInputPreferred.java
435./pkg/sunw/awt/DoubleBuffering.java
436./pkg/sunw/awt/KeyboardInputPreferred.java
437./pkg/sunw/awt/NoInputPreferred.java
438./pkg/sunw/awt/PositionalInputPreferre..a
439./pkg/sunw/lang/UnsupportedOperationExc..a
440./pkg/sunw/util/DefaultTimer.java
441./pkg/sunw/util/PTimer.java
442./pkg/sunw/util/PTimerSpec.java
443./pkg/sunw/util/PTimerWentOffEvent.java
444./pkg/sunw/util/PTimerWentOffListener.java
java/NOTICE+39−0
@@ -0,0 +1,39 @@
1Java is a registered trademark of Sun Microsystems Inc. in the USA and other countries.
2
3This software includes:
4
5 1. empty source files corresponding to Java source files that were marked as proprietary to Sun Microsystems Inc.
6 The original source file names were kept to allow the source to be replaced by equivalent source that
7 is no longer secret.
8 The full list of files that were cleared can be found in the file Javalist.
9
10 2. Java, C and Limbo source files for which rights to reproduce and relicence were acquired by
11 Vita Nuova Holdings Limited at 1 March 2000, under the Inferno licence agreement.
12
13The files are made available on the following terms:
14
15This copyright NOTICE applies to all files in this directory and
16subdirectories, unless another copyright notice appears in a given
17file or subdirectory. If you take substantial code from this software to use in
18other programs, you must somehow include with it an appropriate
19copyright notice that includes the copyright notice and the other
20notices below. It is fine (and often tidier) to do that in a separate
21file such as NOTICE, LICENCE or COPYING.
22
23Copyright © 1996-1999 Lucent Technologies Inc.
24Portions Copyright © 1999-2000 Vita Nuova Limited
25Portions Copyright © 2000-2007 Vita Nuova Holdings Limited
26
27This program is free software; you can redistribute it and/or modify
28it under the terms of the GNU General Public License as published by
29the Free Software Foundation; either version 2 of the License, or
30(at your option) any later version.
31
32This program is distributed in the hope that it will be useful,
33but WITHOUT ANY WARRANTY; without even the implied warranty of
34MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35GNU General Public License for more details.
36
37You should have received a copy of the GNU General Public License
38along with this program; if not, write to the Free Software
39Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
java/TimelineControllerImpl.class+0−0

Binary file not shown.

java/appl/j2d/arg.m+50−0
@@ -0,0 +1,50 @@
1Arg: adt
2{
3 argv: list of string;
4 c: int;
5 opts: string;
6
7 init: fn(argv: list of string): ref Arg;
8 opt: fn(arg: self ref Arg): int;
9 arg: fn(arg: self ref Arg): string;
10};
11
12Arg.init(argv: list of string): ref Arg
13{
14 if(argv != nil)
15 argv = tl argv;
16 return ref Arg(argv, 0, nil);
17}
18
19Arg.opt(arg: self ref Arg): int
20{
21 if(arg.opts != ""){
22 arg.c = arg.opts[0];
23 arg.opts = arg.opts[1:];
24 return arg.c;
25 }
26 if(arg.argv == nil)
27 return arg.c = 0;
28 arg.opts = hd arg.argv;
29 if(len arg.opts < 2 || arg.opts[0] != '-')
30 return arg.c = 0;
31 arg.argv = tl arg.argv;
32 if(arg.opts == "--")
33 return arg.c = 0;
34 arg.c = arg.opts[1];
35 arg.opts = arg.opts[2:];
36 return arg.c;
37}
38
39Arg.arg(arg: self ref Arg): string
40{
41 s := arg.opts;
42 arg.opts = "";
43 if(s != "")
44 return s;
45 if(arg.argv == nil)
46 return "";
47 s = hd arg.argv;
48 arg.argv = tl arg.argv;
49 return s;
50}
java/appl/j2d/asm.b+319−0
@@ -0,0 +1,319 @@
1#
2# Dis opcode mnemonics. Keep in sync with interp/tab.h!
3#
4
5#MAXDIS: con INEWAZ+1;
6
7instname := array [MAXDIS] of {
8 "nop",
9 "alt",
10 "nbalt",
11 "goto",
12 "call",
13 "frame",
14 "spawn",
15 "runt",
16 "load",
17 "mcall",
18 "mspawn",
19 "mframe",
20 "ret",
21 "jmp",
22 "case",
23 "exit",
24 "new",
25 "newa",
26 "newcb",
27 "newcw",
28 "newcf",
29 "newcp",
30 "newcm",
31 "newcmp",
32 "send",
33 "recv",
34 "consb",
35 "consw",
36 "consp",
37 "consf",
38 "consm",
39 "consmp",
40 "headb",
41 "headw",
42 "headp",
43 "headf",
44 "headm",
45 "headmp",
46 "tail",
47 "lea",
48 "indx",
49 "movp",
50 "movm",
51 "movmp",
52 "movb",
53 "movw",
54 "movf",
55 "cvtbw",
56 "cvtwb",
57 "cvtfw",
58 "cvtwf",
59 "cvtca",
60 "cvtac",
61 "cvtwc",
62 "cvtcw",
63 "cvtfc",
64 "cvtcf",
65 "addb",
66 "addw",
67 "addf",
68 "subb",
69 "subw",
70 "subf",
71 "mulb",
72 "mulw",
73 "mulf",
74 "divb",
75 "divw",
76 "divf",
77 "modw",
78 "modb",
79 "andb",
80 "andw",
81 "orb",
82 "orw",
83 "xorb",
84 "xorw",
85 "shlb",
86 "shlw",
87 "shrb",
88 "shrw",
89 "insc",
90 "indc",
91 "addc",
92 "lenc",
93 "lena",
94 "lenl",
95 "beqb",
96 "bneb",
97 "bltb",
98 "bleb",
99 "bgtb",
100 "bgeb",
101 "beqw",
102 "bnew",
103 "bltw",
104 "blew",
105 "bgtw",
106 "bgew",
107 "beqf",
108 "bnef",
109 "bltf",
110 "blef",
111 "bgtf",
112 "bgef",
113 "beqc",
114 "bnec",
115 "bltc",
116 "blec",
117 "bgtc",
118 "bgec",
119 "slicea",
120 "slicela",
121 "slicec",
122 "indw",
123 "indf",
124 "indb",
125 "negf",
126 "movl",
127 "addl",
128 "subl",
129 "divl",
130 "modl",
131 "mull",
132 "andl",
133 "orl",
134 "xorl",
135 "shll",
136 "shrl",
137 "bnel",
138 "bltl",
139 "blel",
140 "bgtl",
141 "bgel",
142 "beql",
143 "cvtlf",
144 "cvtfl",
145 "cvtlw",
146 "cvtwl",
147 "cvtlc",
148 "cvtcl",
149 "headl",
150 "consl",
151 "newcl",
152 "casec",
153 "indl",
154 "movpc",
155 "tcmp",
156 "mnewz",
157 "cvtrf",
158 "cvtfr",
159 "cvtws",
160 "cvtsw",
161 "lsrw",
162 "lsrl",
163 "eclr",
164 "newz",
165 "newaz",
166 "raise",
167};
168
169#
170# %A format conversion.
171#
172
173addrconv(a: ref Addr): string
174{
175 s := "";
176 case int a.mode {
177 int Aimm =>
178 s = "$" + string a.ival;
179 int Afp =>
180 s = string a.offset + "(fp)";
181 int Amp =>
182 s = string a.offset + "(mp)";
183 int Afpind =>
184 s = string a.offset + "(" + string a.ival + "(fp))";
185 int Ampind =>
186 s = string a.offset + "(" + string a.ival + "(mp))";
187 }
188 return s;
189}
190
191#
192# %I format conversion.
193#
194
195instconv(in: ref Inst): string
196{
197 op := "";
198 if(in.op < byte MAXDIS)
199 op = instname[int in.op];
200 else
201 op = "??";
202 s := "\t" + op + "\t";
203 comma := "";
204 if(in.s.mode != Anone) {
205 s += addrconv(in.s);
206 comma = ",";
207 }
208 if(in.m.mode != Anone) {
209 s += comma;
210 s += addrconv(in.m);
211 comma = ",";
212 }
213 if(in.d.mode != Anone)
214 s += comma;
215 s += addrconv(in.d);
216 return s;
217}
218
219ehtable(c: ref Code)
220{
221 i: int;
222 s: string;
223 h: ref Handler;
224
225 if(c.nex == 0)
226 return;
227 bout.puts("#\tException Table\n");
228 for(i = 0; i < c.nex; i++) {
229 h = c.ex[i];
230 if(h.catch_type == 0)
231 s = "*";
232 else
233 s = CLASSNAME(h.catch_type);
234 bout.puts("#\t" + string h.start_pc + " " + string h.end_pc
235 + " " + string h.handler_pc + " " + s + "\n");
236 }
237}
238
239putinst(i: ref Inst)
240{
241 while(i != nil) {
242 if(i.pc % 10 == 0)
243 bout.puts("#" + string i.pc + "\n");
244 bout.puts(instconv(i) + "\n");
245 i = i.next;
246 }
247}
248
249clinitclone: ref Inst; # generated <clinit>, <clone> methods
250
251#
252# Emit assembly instructions for a method.
253#
254
255asminst()
256{
257 i: ref Inst;
258 j: ref Jinst;
259 n, jix: int;
260 c: ref Code;
261
262 if(verbose == 0) {
263 putinst(ihead);
264 return;
265 }
266
267 # -v option
268
269 for(n = 0; n < class.methods_count; n++) {
270 bout.puts("#Method: " + pcode[n].name + pcode[n].sig + "\n");
271 if(pcode[n].code == nil)
272 continue;
273 ehtable(pcode[n].code);
274 c = pcode[n].code;
275 jix = 0;
276 while(jix < c.code_length) {
277 j = c.j[jix];
278 bout.puts("#J" + string j.pc + "\t" + jinstconv(j) + "\n");
279 for(i = j.dis; i != nil && i.j == j; i = i.next) {
280 if(i.pc % 10 == 0)
281 bout.puts("#" + string i.pc + "\n");
282 bout.puts(instconv(i) + "\n");
283 }
284 jix += j.size;
285 }
286 }
287
288 if(clinitclone != nil) {
289 bout.puts("#Method: <clinit|clone>()V\n");
290 putinst(clinitclone);
291 }
292}
293
294sblinst(bsym: ref Bufio->Iobuf)
295{
296 i: ref Inst;
297 n, curline, lastline, lastchar, blockid: int;
298
299 if(itail != nil)
300 n = itail.pc + 1;
301 else
302 n = 0;
303 bsym.puts(string n + "\n");
304 curline = 1;
305 lastline = -1;
306 lastchar = 6;
307 blockid = -1;
308 for(i = ihead; i != nil; i = i.next) {
309 if(i.j != nil)
310 curline = i.j.line;
311 if(curline != lastline) {
312 lastline = curline;
313 lastchar = 6;
314 blockid++;
315 bsym.puts(string curline + ".");
316 }
317 bsym.puts("1," + string lastchar++ + " " + string blockid + "\n");
318 }
319}
java/appl/j2d/bb.b+326−0
@@ -0,0 +1,326 @@
1roots: array of ref BB; # root basic blocks
2nr: int; # number of root basic blocks
3maxr: int; # maximum number of roots
4
5setflags(pc: int, flags: byte)
6{
7 j: ref Jinst;
8
9 j = code.j[pc];
10 if(j.bb == nil) {
11 j.bb = ref BB(j, nil, 0, nil, byte 0, byte BB_PRESIM, 0, nil, 0, nil);
12 # record root basic blocks
13 if(int (flags & (BB_ENTRY | BB_FINALLY | BB_HANDLER))) {
14 if(nr >= maxr) {
15 oldmaxr := maxr;
16 maxr += ALLOCINCR;
17 newroots := array [maxr] of ref BB;
18 for(i := 0; i < oldmaxr; i++)
19 newroots[i] = roots[i];
20 roots = newroots;
21 }
22 roots[nr] = j.bb;
23 nr += 1;
24 }
25 }
26 j.bb.flags |= flags;
27}
28
29#
30# Verify that the target of a jump is valid.
31#
32
33verifyjump(j: ref Jinst, offset: int)
34{
35 dst: int;
36
37 dst = j.pc + offset;
38 if(dst < 0 || dst >= code.code_length || code.j[dst] == nil)
39 verifyerror(j);
40}
41
42#
43# Mark the instructions of a method that are basic block leaders.
44#
45
46markldrs()
47{
48 j: ref Jinst;
49 jpi: ref Jinst.Pi;
50 jpt1: ref Jinst.Pt1;
51 jpt2: ref Jinst.Pt2;
52 jpw: ref Jinst.Pw;
53 i: int;
54 pc, pcnext: int;
55
56 # first instruction is a leader
57 setflags(0, BB_LDR | BB_ENTRY);
58
59 # exception handler entry points are leaders
60 for(i = 0; i < code.nex; i++)
61 setflags(code.ex[i].handler_pc, BB_LDR | BB_HANDLER);
62
63 pc = 0;
64 while(pc < code.code_length) {
65 j = code.j[pc];
66 pcnext = pc+j.size;
67 pick jp := j {
68 Pi =>
69 jpi = jp;
70 Pt1 =>
71 jpt1 = jp;
72 Pt2 =>
73 jpt2 = jp;
74 Pw =>
75 jpw = jp;
76 }
77 case int j.op {
78 Jwide =>
79 if(int jpw.w.op == Jret && pcnext < code.code_length)
80 setflags(pcnext, BB_LDR);
81 Jret or
82 Jireturn or
83 Jlreturn or
84 Jfreturn or
85 Jdreturn or
86 Jareturn or
87 Jreturn or
88 Jathrow =>
89 if(pcnext < code.code_length)
90 setflags(pcnext, BB_LDR);
91 Jifeq or
92 Jifne or
93 Jiflt or
94 Jifge or
95 Jifgt or
96 Jifle or
97 Jif_icmpeq or
98 Jif_icmpne or
99 Jif_icmplt or
100 Jif_icmpge or
101 Jif_icmpgt or
102 Jif_icmple or
103 Jif_acmpeq or
104 Jif_acmpne or
105 Jifnull or
106 Jifnonnull =>
107 verifyjump(j, jpi.i);
108 setflags(pc+jpi.i, BB_LDR);
109 setflags(pcnext, BB_LDR);
110 Jgoto or
111 Jgoto_w =>
112 verifyjump(j, jpi.i);
113 setflags(pc+jpi.i, BB_LDR);
114 if(pcnext < code.code_length)
115 setflags(pcnext, BB_LDR);
116 Jjsr or
117 Jjsr_w =>
118 # target of jsr is leader, jsr successor isn't
119 verifyjump(j, jpi.i);
120 setflags(pc+jpi.i, BB_LDR | BB_FINALLY);
121 finallyentry(pc+jpi.i);
122 Jtableswitch =>
123 for(i = 0; i < jpt1.t1.hb - jpt1.t1.lb + 1; i++) {
124 verifyjump(j, jpt1.t1.tbl[i]);
125 setflags(pc+jpt1.t1.tbl[i], BB_LDR);
126 }
127 verifyjump(j, jpt1.t1.dflt);
128 setflags(pc+jpt1.t1.dflt, BB_LDR);
129 if(pcnext < code.code_length)
130 setflags(pcnext, BB_LDR);
131 Jlookupswitch =>
132 for(i = 0; i < jpt2.t2.np; i++) {
133 verifyjump(j, jpt2.t2.tbl[2*i+1]);
134 setflags(pc+jpt2.t2.tbl[2*i+1], BB_LDR);
135 }
136 verifyjump(j, jpt2.t2.dflt);
137 setflags(pc+jpt2.t2.dflt, BB_LDR);
138 if(pcnext < code.code_length)
139 setflags(pcnext, BB_LDR);
140 }
141 pc = pcnext;
142 }
143}
144
145#
146# Link basic block bb to its successors.
147#
148
149linksucc(bb: ref BB)
150{
151 i: int;
152 pc: int;
153 je: ref Jinst;
154 jpi: ref Jinst.Pi;
155 jpt1: ref Jinst.Pt1;
156 jpt2: ref Jinst.Pt2;
157 jpw: ref Jinst.Pw;
158
159 bb.nsucc = 0;
160 bb.succ = nil;
161 je = bb.je;
162 pc = je.pc;
163
164 pick jp := je {
165 Pi =>
166 jpi = jp;
167 Pt1 =>
168 jpt1 = jp;
169 Pt2 =>
170 jpt2 = jp;
171 Pw =>
172 jpw = jp;
173 }
174
175 case int je.op {
176 Jwide =>
177 if(int jpw.w.op != Jret && pc+je.size < code.code_length) {
178 bb.nsucc = 1;
179 bb.succ = array [1] of ref BB;
180 bb.succ[0] = code.j[pc+je.size].bb;
181 }
182 * =>
183 if(pc+je.size < code.code_length) {
184 bb.nsucc = 1;
185 bb.succ = array [1] of ref BB;
186 bb.succ[0] = code.j[pc+je.size].bb;
187 }
188 Jret or
189 Jireturn or
190 Jlreturn or
191 Jfreturn or
192 Jdreturn or
193 Jareturn or
194 Jreturn or
195 Jathrow =>
196 ;
197 Jifeq or
198 Jifne or
199 Jiflt or
200 Jifge or
201 Jifgt or
202 Jifle or
203 Jif_icmpeq or
204 Jif_icmpne or
205 Jif_icmplt or
206 Jif_icmpge or
207 Jif_icmpgt or
208 Jif_icmple or
209 Jif_acmpeq or
210 Jif_acmpne or
211 Jifnull or
212 Jifnonnull =>
213 bb.nsucc = 2;
214 bb.succ = array [2] of ref BB;
215 bb.succ[0] = code.j[pc+jpi.i].bb; # branch target
216 bb.succ[1] = code.j[pc+je.size].bb; # fall through
217 Jgoto or
218 Jgoto_w =>
219 bb.nsucc = 1;
220 bb.succ = array [1] of ref BB;
221 bb.succ[0] = code.j[pc+jpi.i].bb;
222 Jtableswitch =>
223 bb.nsucc = jpt1.t1.hb - jpt1.t1.lb + 2;
224 bb.succ = array [bb.nsucc] of ref BB;
225 for(i = 0; i < bb.nsucc-1; i++)
226 bb.succ[i] = code.j[pc+jpt1.t1.tbl[i]].bb;
227 bb.succ[i] = code.j[pc+jpt1.t1.dflt].bb;
228 Jlookupswitch =>
229 bb.nsucc = jpt2.t2.np + 1;
230 bb.succ = array [bb.nsucc] of ref BB;
231 for(i = 0; i < bb.nsucc-1; i++)
232 bb.succ[i] = code.j[pc+jpt2.t2.tbl[2*i+1]].bb;
233 bb.succ[i] = code.j[pc+jpt2.t2.dflt].bb;
234 }
235}
236
237#
238# Build the basic block control flow graph.
239#
240
241flowgraph()
242{
243 js, je: ref Jinst;
244 pc, pcnext: int;
245
246 markldrs();
247
248 pc = 0;
249 while(pc < code.code_length) {
250 js = code.j[pc];
251 if(js.bb == nil)
252 fatal("flowgraph: nil bb");
253 # find last instruction in basic block
254 je = js;
255 while() {
256 pcnext = je.pc + je.size;
257 if(pcnext >= code.code_length
258 || code.j[pcnext].bb != nil) # hence a leader
259 break;
260 je = code.j[pcnext];
261 je.bb = js.bb;
262 }
263 js.bb.je = je;
264 linksucc(js.bb);
265 pc = pcnext;
266 }
267 finallyalloc();
268}
269
270#
271# Free basic block structures after each method is translated.
272#
273
274bbfree()
275{
276 j: ref Jinst;
277 jix: int;
278
279 jix = 0;
280 while(jix < code.code_length) {
281 j = code.j[jix];
282 if(j.bb.je == j) {
283 j.bb.succ = nil;
284 j.bb = nil;
285 }
286 jix += j.size;
287 }
288 roots = nil;
289 nr = 0;
290 maxr = 0;
291}
292
293#
294# The following stuff is used during method simulation.
295#
296
297SSIZE: con 128;
298bbstack := array [SSIZE] of ref BB;
299bbtos: int;
300
301bbput(bb: ref BB)
302{
303 if(bbtos == SSIZE)
304 fatal("bbstack overflow");
305 bb.state = BB_ACTIVE;
306 bb.flags |= BB_REACHABLE;
307 bbstack[bbtos++] = bb;
308}
309
310bbget(): ref BB
311{
312 ret: ref BB;
313
314 if(bbtos != 0)
315 ret = bbstack[--bbtos];
316 return ret;
317}
318
319bbinit()
320{
321 i: int;
322
323 bbtos = 0;
324 for(i = 0; i < nr; i++)
325 bbput(roots[i]);
326}
java/appl/j2d/datarloc.b+186−0
@@ -0,0 +1,186 @@
1#
2# Manage module data relocation and instruction patch information.
3#
4
5dreloc: ref Ipatch;
6Ipatchtid: int;
7
8setIpatchtid()
9{
10 Ipatchtid = descid(1, 0, array [1] of { byte 0 });
11}
12
13#
14# Add an instruction patch directive to ip.
15# (flag == SAVEINST) <=> runtime relocation: Inst* needed later
16# (flag == !SAVEINST) <=> other: pinfo expected in sequential order
17#
18
19addIpatch(ip: ref Ipatch, i: ref Inst, operand: int, patchkind: int, flag: int)
20{
21 j: int;
22
23 if(ip.n >= ip.max) {
24 oldmax := ip.max;
25 ip.max += ALLOCINCR;
26 newippinfo := array [ip.max] of int;
27 for(j = 0; j < oldmax; j++)
28 newippinfo[j] = ip.pinfo[j];
29 ip.pinfo = newippinfo;
30 if(flag == SAVEINST) {
31 newipi := array [ip.max] of ref Inst;
32 for(j = 0; j < oldmax; j++)
33 newipi[j] = ip.i[j];
34 ip.i = newipi;
35 }
36 }
37 ip.pinfo[ip.n] = (i.pc << 8) | operand | patchkind;
38 if(flag == SAVEINST)
39 ip.i[ip.n] = i;
40 ip.n += 1;
41}
42
43operand := array [] of {
44 "?",
45 "src", # PSRC >> 2
46 "dst", # PDST >> 2
47 "mid" # PMID >> 2
48};
49
50mode := array [] of {
51 "$x", # PIMM
52 "x(reg)", # PSIND
53 "n(x(reg))", # PDIND1
54 "x(n(reg))" # PDIND2
55};
56
57ba: array of byte;
58nba: int;
59HIGHBIT: con byte 16r80;
60
61sizeba(sz: int)
62{
63 if(sz > len ba) {
64 newba := array [sz] of byte;
65 for(i := 0; i < nba; i++)
66 newba[i] = ba[i];
67 ba = newba;
68 }
69}
70
71fillba(ip: ref Ipatch)
72{
73 i: int;
74 pclast, pcnext, delta, skip: int;
75
76 sizeba(2*ip.n);
77 pclast = 0;
78 for(i = 0; i < ip.n; i++) {
79 pcnext = ip.pinfo[i] >> 8;
80 delta = pcnext-pclast;
81 sizeba(nba + delta/1024 + 2);
82 while(delta > 7) {
83 if(delta > 1024)
84 skip = 1024;
85 else
86 skip = delta & int 16rfffffff8;
87 ba[nba++] = byte(256 - (skip >> 3));
88 delta -= skip;
89 }
90 ba[nba++] = byte((delta << 4) | (ip.pinfo[i] & 16rf));
91 pclast = pcnext;
92 }
93}
94
95#
96# Write Ipatch information to .s file.
97#
98
99asmIpatch(off: int, ip: ref Ipatch)
100{
101 i: int;
102 reloff: int; # relative offset for array elements
103 pc: int;
104
105 if(ip == nil || ip.n == 0)
106 return;
107
108 fillba(ip);
109
110 reloff = 0;
111 asmarray(off, Ipatchtid, nba, reloff);
112 pc = 0;
113 for(i = 0; i < nba; i++) {
114 bout.puts("\tbyte\t@mp+" + string reloff + "," + string ba[i]);
115 if(int(ba[i] & HIGHBIT))
116 pc += (256 - int ba[i]) << 3;
117 else
118 pc += int ba[i] >> 4;
119 bout.puts("\t# " + string pc);
120 if(!int(ba[i] & HIGHBIT)) {
121 bout.puts(", " + operand[(int ba[i] >> 2) & 16r3]
122 + ", " + mode[int ba[i] & 16r3]);
123 }
124 bout.putc('\n');
125 reloff += 1;
126 }
127 bout.puts("\tapop\n");
128
129 ba = nil;
130 nba = 0;
131}
132
133#
134# Write Ipatch information to .dis file.
135#
136
137disIpatch(off: int, ip: ref Ipatch)
138{
139 i: int;
140 reloff: int; # relative offset for array elements
141
142 if(ip == nil || ip.n == 0)
143 return;
144
145 fillba(ip);
146
147 disarray(off, Ipatchtid, nba);
148 reloff = 0;
149 for(i = 0; i < nba; i++) {
150 disbyte(reloff, ba[i]);
151 reloff += 1;
152 }
153 disapop();
154
155 ba = nil;
156 nba = 0;
157}
158
159#
160# Add instruction patch information to dreloc.
161#
162
163addDreloc(i: ref Inst, operand: int, patchkind: int)
164{
165 if(dreloc == nil)
166 dreloc = ref Ipatch(0, 0, nil, nil);
167 addIpatch(dreloc, i, operand, patchkind, !SAVEINST);
168}
169
170#
171# Write Dreloc information to .s file.
172#
173
174asmDreloc(off: int)
175{
176 asmIpatch(off, dreloc);
177}
178
179#
180# Write Dreloc information to .dis file.
181#
182
183disDreloc(off: int)
184{
185 disIpatch(off, dreloc);
186}
java/appl/j2d/desc.b+104−0
@@ -0,0 +1,104 @@
1#
2# 'desc' assembly directives.
3#
4
5Desc: adt {
6 id: int; # Dis type identifier
7 ln: int; # length, in bytes, of mapped object
8 map: array of byte; # bit map of pointers
9 nmap: int; # number of bytes in map
10 next: cyclic ref Desc;
11};
12
13dlist: ref Desc;
14dtail: ref Desc;
15id: int = 0; # reserve id == 0 for Module Data type descriptor
16
17#
18# Allocate a Desc adt.
19#
20
21newDesc(id: int, ln: int, nmap: int, map: array of byte): ref Desc
22{
23 return ref Desc(id, ln, map, nmap, nil);
24}
25
26mapeq(a, b: array of byte, n: int): int
27{
28 while(n-- > 0) {
29 if(a[n] != b[n])
30 return 0;
31 }
32 return 1;
33}
34
35#
36# Save a type descriptor; reuse existing descriptor if identical.
37#
38
39descid(ln: int, nmap: int, map: array of byte): int
40{
41 d: ref Desc;
42
43 for(d = dlist; d != nil; d = d.next) {
44 if(d.ln == ln && d.nmap == nmap && mapeq(d.map, map, nmap))
45 return d.id;
46 }
47
48 id += 1;
49 d = newDesc(id, ln, nmap, map);
50 if(dlist == nil)
51 dlist = d;
52 else
53 dtail.next = d;
54 dtail = d;
55
56 return d.id;
57}
58
59#
60# Save type descriptor for module data.
61#
62
63mpdescid(ln: int, nmap: int, map: array of byte)
64{
65 d: ref Desc;
66
67 d = newDesc(0, ln, nmap, map);
68 d.next = dlist;
69 dlist = d;
70}
71
72#
73# Emit assembly 'desc' directives.
74#
75
76asmdesc()
77{
78 d: ref Desc;
79 i: int;
80
81 for(d = dlist; d != nil; d = d.next) {
82 bout.puts("\tdesc\t$" + string d.id + "," + string d.ln + ",\"");
83 for(i = 0; i < d.nmap; i++)
84 bout.puts(hex(int d.map[i], 2));
85 bout.puts("\"\n");
86 }
87}
88
89disndesc()
90{
91 discon(id+1);
92}
93
94disdesc()
95{
96 d: ref Desc;
97
98 for(d = dlist; d != nil; d = d.next) {
99 discon(d.id);
100 discon(d.ln);
101 discon(d.nmap);
102 bout.write(d.map, d.nmap);
103 }
104}
java/appl/j2d/dis.b+284−0
@@ -0,0 +1,284 @@
1ihead: ref Inst; # first instruction generated for .class file
2itail: ref Inst; # last instruction (for appending to list)
3
4cache: array of byte; # module data cache
5ncached: int; # number of bytes in cache
6ndatum: int; # number of non-string basic datums in cache
7startoff: int; # offset of first datum in cache
8lastoff: int; # 1 past last byte offset in cache
9lastkind: int = -1; # last kind of datum put in cache
10lencache: int; # capacity of cache
11
12#
13# Generate Dis object file (.dis).
14#
15
16discon(val: int)
17{
18 if(val >= -64 && val <= 63) {
19 bout.putb(byte(val & ~16r80));
20 return;
21 }
22 if(val >= -8192 && val <= 8191) {
23 bout.putb(byte(((val>>8) & ~16rC0) | 16r80));
24 bout.putb(byte val);
25 return;
26 }
27 if(notimmable(val))
28 fatal("discon: overflow 16r" + hex(val, 0));
29 bout.putb(byte((val>>24) | 16rC0));
30 bout.putb(byte(val>>16));
31 bout.putb(byte(val>>8));
32 bout.putb(byte val);
33}
34
35disword(w: int)
36{
37 bout.putb(byte(w >> 24));
38 bout.putb(byte(w >> 16));
39 bout.putb(byte(w >> 8));
40 bout.putb(byte w);
41}
42
43disdata(kind: int, n: int)
44{
45 if(n < DMAX && n != 0)
46 bout.putb(byte((kind << DBYTE) | n));
47 else{
48 bout.putb(byte(kind << DBYTE));
49 discon(n);
50 }
51}
52
53disflush(kind: int, off: int, size: int)
54{
55 if(kind != lastkind || off != lastoff){
56 if(lastkind != -1 && ncached){
57 disdata(lastkind, ndatum);
58 discon(startoff);
59 bout.write(cache, ncached);
60 }
61 startoff = off;
62 lastkind = kind;
63 ncached = 0;
64 ndatum = 0;
65 }
66 lastoff = off + size;
67 while(kind >= 0 && ncached + size >= len cache){
68 c := array[ncached + 1024] of byte;
69 c[0:] = cache;
70 cache = c;
71 }
72}
73
74disbyte(off: int, v: byte)
75{
76 disflush(DEFB, off, 1);
77 cache[ncached++] = v;
78 ndatum++;
79}
80
81disint(off: int, v: int)
82{
83 disflush(DEFW, off, IBY2WD);
84 cache[ncached++] = byte(v >> 24);
85 cache[ncached++] = byte(v >> 16);
86 cache[ncached++] = byte(v >> 8);
87 cache[ncached++] = byte v;
88 ndatum++;
89}
90
91dislong(off: int, v: big)
92{
93 iv: int;
94
95 disflush(DEFL, off, IBY2LG);
96 iv = int(v >> 32);
97 cache[ncached++] = byte(iv >> 24);
98 cache[ncached++] = byte(iv >> 16);
99 cache[ncached++] = byte(iv >> 8);
100 cache[ncached++] = byte iv;
101 iv = int v;
102 cache[ncached++] = byte(iv >> 24);
103 cache[ncached++] = byte(iv >> 16);
104 cache[ncached++] = byte(iv >> 8);
105 cache[ncached++] = byte iv;
106 ndatum++;
107}
108
109disreal(off: int, v: real)
110{
111 disflush(DEFF, off, IBY2LG);
112 bv := math->realbits64(v);
113 iv := int(bv >> 32);
114 cache[ncached++] = byte(iv >> 24);
115 cache[ncached++] = byte(iv >> 16);
116 cache[ncached++] = byte(iv >> 8);
117 cache[ncached++] = byte(iv);
118 iv = int bv;
119 cache[ncached++] = byte(iv >> 24);
120 cache[ncached++] = byte(iv >> 16);
121 cache[ncached++] = byte(iv >> 8);
122 cache[ncached++] = byte(iv);
123 ndatum++;
124}
125
126disstring(offset: int, s: string)
127{
128 disflush(-1, -1, 0);
129 d := array of byte s;
130 disdata(DEFS, len d);
131 discon(offset);
132 bout.write(d, len d);
133}
134
135#
136# Begin an array initializer.
137#
138
139disarray(off: int, tid: int, nelt: int)
140{
141 disflush(-1, -1, 0);
142 disdata(DEFA, 1); # 1 is ignored
143 discon(off);
144 disword(tid);
145 disword(nelt);
146 disdata(DIND, 1); # 1 is ignored
147 discon(off);
148 disword(0);
149}
150
151#
152# Terminate an array initializer.
153#
154
155disapop()
156{
157 disflush(-1, -1, 0);
158 disdata(DAPOP, 1); # 1 is ignored
159 discon(0);
160}
161
162#
163# Put number of instructions into .dis Header.
164#
165
166disninst()
167{
168 i: int;
169
170 if(itail != nil)
171 i = itail.pc + 1;
172 else
173 i = 0;
174 discon(i);
175}
176
177dismode := array [int Aend] of {
178 byte AXXX, # Anone
179 byte AIMM, # Aimm
180 byte AMP, # Amp
181 byte (AMP|AIND), # Ampind
182 byte AFP, # Afp
183 byte (AFP|AIND) # Afpind
184};
185
186disregmode := array [int Aend] of {
187 byte AXNON, # Anone
188 byte AXIMM, # Aimm
189 byte AXINM, # Amp
190 byte AXNON, # Ampind
191 byte AXINF, # Afp
192 byte AXNON # Afpind
193};
194
195MAXCON: con 4;
196MAXADDR: con 2*MAXCON;
197MAXINST: con 3*MAXCON+2;
198NIBUF: con 1024;
199
200ibuf: array of byte;
201nibuf: int;
202
203disbcon(val: int)
204{
205 if(val >= -64 && val <= 63){
206 ibuf[nibuf++] = byte(val & ~16r80);
207 return;
208 }
209 if(val >= -8192 && val <= 8191){
210 ibuf[nibuf++] = byte(val>>8 & ~16rC0 | 16r80);
211 ibuf[nibuf++] = byte val;
212 return;
213 }
214 if(notimmable(val))
215 fatal("disbcon: overflow 16r" + hex(val, 0));
216 ibuf[nibuf++] = byte(val>>24 | 16rC0);
217 ibuf[nibuf++] = byte(val>>16);
218 ibuf[nibuf++] = byte(val>>8);
219 ibuf[nibuf++] = byte val;
220}
221
222disaddr(a: ref Addr)
223{
224 val: int;
225
226 val = 0;
227 case int a.mode {
228 int Aimm =>
229 val = a.ival;
230 int Afp or
231 int Amp =>
232 val = a.offset;
233 int Afpind or
234 int Ampind =>
235 disbcon(a.ival);
236 val = a.offset;
237 }
238 disbcon(val);
239}
240
241disinst()
242{
243 i: ref Inst;
244
245 ibuf = array [NIBUF] of byte;
246 nibuf = 0;
247 for(i = ihead; i != nil; i = i.next){
248 if(nibuf >= NIBUF-MAXINST){
249 bout.write(ibuf, nibuf);
250 nibuf = 0;
251 }
252 ibuf[nibuf++] = i.op;
253 o := dismode[int i.s.mode] << SRC;
254 o |= dismode[int i.d.mode] << DST;
255 o |= disregmode[int i.m.mode];
256 ibuf[nibuf++] = o;
257 if(i.m.mode != Anone)
258 disaddr(i.m);
259 if(i.s.mode != Anone)
260 disaddr(i.s);
261 if(i.d.mode != Anone)
262 disaddr(i.d);
263 }
264 if(nibuf > 0)
265 bout.write(ibuf, nibuf);
266 ibuf = nil;
267}
268
269disout()
270{
271 discon(XMAGIC);
272 discon(DONTCOMPILE); # runtime "hints"
273 disstackext(); # minimum stack extent size
274 disninst();
275 disnvar();
276 disndesc();
277 disnlinks();
278 disentry();
279 disinst();
280 disdesc();
281 disvar();
282 dismod();
283 dislinks();
284}
java/appl/j2d/entry.b+35−0
@@ -0,0 +1,35 @@
1#
2# 'entry' assembly directive.
3#
4
5pc: int = -1;
6tid: int = -1;
7
8#
9# Set the entry point; entry is the beginning of "main".
10#
11
12setentry(l: int, i: int)
13{
14 if(pc != -1)
15 verifyerrormess("main overloaded");
16 pc = l;
17 tid = i;
18}
19
20#
21# Emit 'entry' assembly directive.
22#
23
24asmentry()
25{
26 if(pc == -1)
27 return;
28 bout.puts("\tentry\t" + string pc + ", " + string tid + "\n");
29}
30
31disentry()
32{
33 discon(pc);
34 discon(tid);
35}
java/appl/j2d/finally.b+112−0
@@ -0,0 +1,112 @@
1#
2# Maintain information about 'finally' blocks.
3#
4
5Finally: adt {
6 npc: int; # Java pc of finally entry (jsr target)
7 xpc: int; # Java pc of finally exit (ret)
8 n: int; # number of jsr slots in gototbl
9 gototbl: array of int; # goto jump table
10 off: int; # mp offset to gototbl
11 next: cyclic ref Finally;
12};
13
14finally: ref Finally; # linked list of finally block records
15
16#
17# Get record for finally block whose entry point is pc.
18#
19
20getfinally(pc: int): ref Finally
21{
22 f: ref Finally;
23
24 for(f = finally; f != nil; f = f.next) {
25 if(f.npc == pc)
26 return f;
27 }
28 return nil;
29}
30
31#
32# Count jsr's to the finally block whose entry point is pc.
33#
34
35finallyentry(pc: int)
36{
37 f: ref Finally;
38
39 f = getfinally(pc);
40 if(f == nil) {
41 f = ref Finally(pc, 0, 0, nil, 0, finally);
42 finally = f;
43 }
44 f.n += 1;
45}
46
47#
48# Allocate the gototbl's and pass them to mdata.c.
49#
50
51finallyalloc()
52{
53 f: ref Finally;
54
55 for(f = finally; f != nil; f = f.next) {
56 f.gototbl = array [f.n] of { * => 0 };
57 f.off = mpgoto(f.n, f.gototbl);
58 }
59}
60
61#
62# Fix up operands of a Dis movw that implements Java jsr/jsr_w.
63#
64
65jsrfixup(s: ref Addr, d: ref Addr, dispc: int, javapc: int)
66{
67 f: ref Finally;
68 i: int;
69
70 f = getfinally(javapc);
71 for(i = 0; i < f.n; i++) {
72 if(f.gototbl[i] == 0) {
73 f.gototbl[i] = dispc;
74 break;
75 }
76 }
77 if(i == f.n)
78 fatal("jsrfixup: " + string dispc + ", " + string javapc);
79 s.ival = i;
80 d.offset = f.off + f.n*IBY2WD;
81}
82
83#
84# Fix up operands of a Dis goto that implements Java ret.
85#
86
87retfixup(s: ref Addr, d: ref Addr, retpc: int)
88{
89 fi, f: ref Finally;
90
91 f = nil;
92 for(fi = finally; fi != nil; fi = fi.next) {
93 if(fi.xpc == 0 && fi.npc < retpc
94 && (f == nil || f.npc < fi.npc)) {
95 f = fi;
96 }
97 }
98 if(f == nil)
99 fatal("retfixup: " + string retpc);
100 f.xpc = retpc; # claim this finally block for this 'ret'
101 s.offset = f.off + f.n*IBY2WD;
102 d.offset = f.off;
103}
104
105#
106# Free finally information after each method is translated.
107#
108
109finallyfree()
110{
111 finally = nil;
112}
java/appl/j2d/frame.b+475−0
@@ -0,0 +1,475 @@
1#
2# Manage method frame.
3#
4
5#
6# Local variables (including function parameters).
7#
8
9Local: adt { # local variable
10 dtype: byte; # type of local (DIS_[BWLP])
11 offset: int; # fp offset of this local
12 next: cyclic ref Local; # for locals that are reused
13};
14
15frameoff: int; # tracks growth of frame
16maxframe: int; # size of largest frame
17locals: array of ref Local; # local variables
18nlocals: int; # number of locals (in the Java sense)
19
20#
21# fp temporaries.
22#
23
24Fp: adt {
25 dtype: byte;
26 refcnt: int;
27};
28
29tmpslwm: int; # lowest temporary fp offset
30tmpssz: int; # size of tmps array
31tmps: array of Fp; # temporary arena
32
33#
34# Resize the locals array.
35#
36# Since the Java VM reuses local variables (e.g., perhaps using
37# the same slot for an int and an Object reference), max_locals
38# doesn't always give the number of Dis locals to allow for.
39#
40
41resizelocals(ix: int)
42{
43 oldsz: int;
44
45 oldsz = nlocals;
46 while(ix >= nlocals)
47 nlocals += ALLOCINCR;
48 newlocals := array [nlocals] of ref Local;
49 for(i := 0; i < oldsz; i++)
50 newlocals[i] = locals[i];
51 for(i = oldsz; i < nlocals; i++)
52 newlocals[i] = ref Local(byte 0, 0, nil);
53 locals = newlocals;
54}
55
56#
57# Reserve a frame cell for a local variable of the given type.
58# The Java VM reuses local variables.
59#
60
61reservelocal(dtype: byte, ix: int)
62{
63 l: ref Local;
64
65 if(ix >= nlocals)
66 resizelocals(ix);
67 if(locals[ix].dtype == dtype)
68 return;
69 if(locals[ix].dtype == DIS_X) # not yet reserved
70 l = locals[ix];
71 else { # check reuse list
72 for(l = locals[ix].next; l != nil; l = l.next) {
73 if(dtype == l.dtype)
74 return;
75 }
76 l = ref Local(byte 0, 0, nil);
77 l.next = locals[ix].next;
78 locals[ix].next = l;
79 }
80 l.dtype = dtype;
81 frameoff = align(frameoff, cellsize[int dtype]);
82 l.offset = frameoff;
83 frameoff += cellsize[int dtype];
84}
85
86#
87# Map the signature parameter types into 'locals' array.
88#
89
90mapmethodsig(sig: string, isstatic: int)
91{
92 index: int;
93
94 index = 0;
95 if(isstatic == 0) {
96 reservelocal(DIS_P, index); # this pointer
97 index += 1;
98 }
99 sig = sig[1:]; # skip '('
100 while(sig[0] != ')') {
101 case sig[0] {
102 'Z' or
103 'B' or
104 'C' or
105 'S' or
106 'I' =>
107 reservelocal(DIS_W, index);
108 index += 1;
109 'F' =>
110 reservelocal(DIS_L, index);
111 index += 1;
112 'J' or
113 'D' =>
114 reservelocal(DIS_L, index);
115 index += 2;
116 'L' or
117 '[' =>
118 reservelocal(DIS_P, index);
119 index += 1;
120 }
121 sig = nextjavatype(sig);
122 }
123}
124
125#
126# Map references to local variables in the Java bytecode into 'locals' array.
127#
128
129maplocalrefs()
130{
131 j: ref Jinst;
132 jpi: ref Jinst.Pi;
133 jpw: ref Jinst.Pw;
134 jpx1c: ref Jinst.Px1c;
135 jix: int;
136
137 jix = 0;
138 while(jix < code.code_length) {
139 j = code.j[jix];
140 pick jp := j {
141 Pi =>
142 jpi = jp;
143 Px1c =>
144 jpx1c = jp;
145 Pw =>
146 jpw = jp;
147 }
148 case int j.op {
149 Jiinc =>
150 reservelocal(DIS_W, jpx1c.x1c.ix);
151 Jiload or
152 Jistore =>
153 reservelocal(DIS_W, jpi.i);
154 Jiload_0 or
155 Jistore_0 =>
156 reservelocal(DIS_W, 0);
157 Jiload_1 or
158 Jistore_1 =>
159 reservelocal(DIS_W, 1);
160 Jiload_2 or
161 Jistore_2 =>
162 reservelocal(DIS_W, 2);
163 Jiload_3 or
164 Jistore_3 =>
165 reservelocal(DIS_W, 3);
166 Jlload or
167 Jlstore or
168 Jfload or
169 Jfstore or
170 Jdload or
171 Jdstore =>
172 reservelocal(DIS_L, jpi.i);
173 Jlload_0 or
174 Jlstore_0 or
175 Jfload_0 or
176 Jfstore_0 or
177 Jdload_0 or
178 Jdstore_0 =>
179 reservelocal(DIS_L, 0);
180 Jlload_1 or
181 Jlstore_1 or
182 Jfload_1 or
183 Jfstore_1 or
184 Jdload_1 or
185 Jdstore_1 =>
186 reservelocal(DIS_L, 1);
187 Jlload_2 or
188 Jlstore_2 or
189 Jfload_2 or
190 Jfstore_2 or
191 Jdload_2 or
192 Jdstore_2 =>
193 reservelocal(DIS_L, 2);
194 Jlload_3 or
195 Jlstore_3 or
196 Jfload_3 or
197 Jfstore_3 or
198 Jdload_3 or
199 Jdstore_3 =>
200 reservelocal(DIS_L, 3);
201 Jret or
202 Jaload or
203 Jastore =>
204 reservelocal(DIS_P, jpi.i);
205 Jaload_0 or
206 Jastore_0 =>
207 reservelocal(DIS_P, 0);
208 Jaload_1 or
209 Jastore_1 =>
210 reservelocal(DIS_P, 1);
211 Jaload_2 or
212 Jastore_2 =>
213 reservelocal(DIS_P, 2);
214 Jaload_3 or
215 Jastore_3 =>
216 reservelocal(DIS_P, 3);
217 Jwide => # repeat from above
218 case int jpw.w.op {
219 Jiinc or
220 Jiload or
221 Jistore =>
222 reservelocal(DIS_W, jpw.w.ix);
223 Jlload or
224 Jlstore or
225 Jfload or
226 Jfstore or
227 Jdload or
228 Jdstore =>
229 reservelocal(DIS_L, jpw.w.ix);
230 Jaload or
231 Jastore or
232 Jret =>
233 reservelocal(DIS_P, jpw.w.ix);
234 }
235 }
236 jix += j.size;
237 }
238}
239
240#
241# Prepare a method's frame prior to translating its code.
242#
243
244openframe(sig: string, isstatic: int)
245{
246 frameoff = REGSIZE;
247 # 'code' can == nil; e.g, when generating <clinit> for an interface
248 if(code != nil)
249 nlocals = code.max_locals;
250 else
251 nlocals = 2;
252 locals = array [nlocals] of { * => ref Local(byte 0, 0, nil) };
253 mapmethodsig(sig, isstatic);
254 if(code != nil)
255 maplocalrefs();
256 frameoff = align(frameoff, IBY2WD);
257 tmpslwm = frameoff;
258 tmpssz = frameoff;
259 tmps = array [tmpssz] of { * => (byte 0, 0) };
260}
261
262#
263# Return fp index of a local variable.
264#
265
266localix(dtype: byte, ix: int): int
267{
268 l: ref Local;
269
270 if(dtype == locals[ix].dtype)
271 return locals[ix].offset;
272 for(l = locals[ix].next; l != nil; l = l.next) {
273 if(dtype == l.dtype)
274 return l.offset;
275 }
276 fatal("localix: " + string dtype + ", " + string ix);
277 return 0;
278}
279
280# fp temporary management starts here
281
282incref(off: int)
283{
284 if(off >= tmpslwm) # if <, then local variable
285 tmps[off-tmpslwm].refcnt++;
286}
287
288acqreg(a: ref Addr)
289{
290 case int a.mode {
291 int Anone or
292 int Aimm or
293 int Amp or
294 int Ampind =>
295 ;
296 int Afp =>
297 incref(a.offset);
298 int Afpind =>
299 incref(a.ival);
300 }
301}
302
303#
304# Reserve the fp temporaries referenced by a StkSnap of some basic block.
305#
306
307reservereg(s: array of ref StkSnap, sz: int)
308{
309 i: int;
310
311 for(i = 0; i < sz; i++)
312 acqreg(code.j[s[i].pc[0]].dst);
313}
314
315#
316# Get fp offset of the next available register of the given type.
317#
318
319getoff(dtype: byte): int
320{
321 off: int;
322 stride: int;
323
324 if(dtype == DIS_L) {
325 stride = IBY2LG;
326 off = tmpslwm % IBY2LG;
327 } else {
328 stride = IBY2WD;
329 off = 0;
330 }
331 while(off < tmpssz) {
332 if(tmps[off].refcnt == 0
333 && (tmps[off].dtype == dtype || tmps[off].dtype == DIS_X)) {
334 return off;
335 }
336 off += stride;
337 }
338 return off;
339}
340
341#
342# Get a register (fp offset thereof) of the appropriate type.
343#
344
345getreg(dtype: byte): int
346{
347 off: int;
348 oldsz: int;
349
350 off = getoff(dtype);
351 if(off >= tmpssz) { # increase size of temporary arena
352 oldsz = tmpssz;
353 tmpssz += ALLOCINCR*IBY2LG;
354 newtmps := array [tmpssz] of Fp;
355 for(i := 0; i < oldsz; i++)
356 newtmps[i] = tmps[i];
357 for(i = oldsz; i < tmpssz; i++)
358 newtmps[i] = Fp(byte 0, 0);
359 tmps = newtmps;
360 }
361 tmps[off].dtype = dtype;
362 if(dtype == DIS_L) # also reserve next word
363 tmps[off+IBY2WD].dtype = dtype;
364 tmps[off].refcnt = 1;
365 if(tmpslwm+off+cellsize[int dtype] > frameoff)
366 frameoff = tmpslwm+off+cellsize[int dtype];
367 return tmpslwm+off;
368}
369
370decref(off: int)
371{
372 if(off >= tmpslwm) { # if <, then local variable
373 if(--tmps[off-tmpslwm].refcnt < 0)
374 fatal("decref: refcnt < 0");
375 }
376}
377
378#
379# "Free" register used by a.
380#
381
382relreg(a: ref Addr)
383{
384 # don't mess with exception object
385 if(code != nil && a == code.j[code.code_length].dst)
386 return;
387 case int a.mode {
388 int Anone or
389 int Aimm or
390 int Amp or
391 int Ampind =>
392 ;
393 int Afp =>
394 decref(a.offset);
395 int Afpind =>
396 decref(a.ival);
397 }
398}
399
400#
401# Mark all temporary fp registers as available. Leave typing as is.
402#
403
404clearreg()
405{
406 i: int;
407
408 i = 0;
409 while(i < frameoff-tmpslwm) {
410 tmps[i].refcnt = 0;
411 i += IBY2WD;
412 }
413}
414
415#
416# Calculate the type descriptor for a frame.
417#
418
419framedesc(): int
420{
421 ln, id, i: int;
422 map: array of byte;
423 l: ref Local;
424
425 ln = frameoff / (8*IBY2WD) + (frameoff % (8*IBY2WD) != 0);
426 map = array [ln] of { * => byte 0 };
427 #setbit(map, REFSYSEX); # slot for 'ref Sys->Exception'
428 setbit(map, EXOBJ); # slot for exception object
429 for(i = 0; i < nlocals; i++) {
430 if(locals[i].dtype == DIS_P)
431 setbit(map, locals[i].offset);
432 for(l = locals[i].next; l != nil; l = l.next) {
433 if(l.dtype == DIS_P)
434 setbit(map, l.offset);
435 }
436 }
437 i = 0;
438 while(i < frameoff-tmpslwm) {
439 if(tmps[i].dtype == DIS_P)
440 setbit(map, tmpslwm+i);
441 i += IBY2WD;
442 }
443 id = descid(frameoff, ln, map);
444 return id;
445}
446
447#
448# Dispense with a frame.
449#
450
451closeframe(): int
452{
453 tid: int;
454
455 # frame size is always a multiple of 8
456 frameoff = align(frameoff, IBY2LG);
457 if(frameoff > maxframe)
458 maxframe = frameoff;
459 tid = framedesc();
460 locals = nil;
461 frameoff = 0;
462 tmpslwm = 0;
463 tmpssz = 0;
464 tmps = nil;
465 return tid;
466}
467
468#
469# Minimum stack extent size.
470#
471
472disstackext()
473{
474 discon(10*maxframe);
475}
java/appl/j2d/j2d.b+42−0
@@ -0,0 +1,42 @@
1implement J2d;
2
3include "sys.m";
4include "bufio.m";
5include "draw.m";
6include "keyring.m";
7include "math.m";
8include "string.m";
9include "isa.m";
10
11include "java.m";
12include "javaisa.m";
13include "reloc.m";
14
15J2d: module {
16 init: fn(nil: ref Draw->Context, argv: list of string);
17};
18
19include "arg.m";
20include "main.b";
21include "loader.b";
22include "javadas.b";
23include "bb.b";
24include "datarloc.b";
25include "ltreloc.b";
26include "rtreloc.b";
27include "mdata.b";
28include "simjvm.b";
29include "module.b";
30include "entry.b";
31include "desc.b";
32include "links.b";
33include "patch.b";
34include "frame.b";
35include "unify.b";
36include "javatbl.b";
37include "finally.b";
38include "xlate.b";
39include "asm.b";
40include "dis.b";
41include "sbl.b";
42include "util.b";
java/appl/j2d/java.m+343−0
@@ -0,0 +1,343 @@
1# Java constant pool tags
2
3CON_Utf8: con 1;
4# CON_Unicode: con 2; # obsolete
5CON_Integer: con 3;
6CON_Float: con 4;
7CON_Long: con 5;
8CON_Double: con 6;
9CON_Class: con 7;
10CON_String: con 8;
11CON_Fieldref: con 9;
12CON_Methodref: con 10;
13CON_InterfaceMref: con 11;
14CON_NameAndType: con 12;
15# since 49.0
16CON_MethodHandle: con 15;
17CON_MethodType: con 16;
18CON_InvokeDynamic: con 18;
19
20# Java access flags
21
22ACC_PUBLIC: con 16r0001;
23ACC_PRIVATE: con 16r0002;
24ACC_PROTECTED: con 16r0004;
25ACC_STATIC: con 16r0008;
26ACC_FINAL: con 16r0010;
27ACC_SUPER: con 16r0020;
28ACC_SYNCHRONIZED: con 16r0020; # sic
29ACC_VOLATILE: con 16r0040;
30ACC_TRANSIENT: con 16r0080;
31ACC_NATIVE: con 16r0100;
32ACC_INTERFACE: con 16r0200;
33ACC_ABSTRACT: con 16r0400;
34
35_MUSTCOMPILE: con MUSTCOMPILE<<16;
36_DONTCOMPILE: con DONTCOMPILE<<16;
37
38# basic block flags
39
40BB_LDR, # set for all leaders
41BB_ENTRY, # method entry point
42BB_FINALLY, # finally block entry point
43BB_HANDLER, # EH entry point
44BB_REACHABLE: con byte(1 << iota); # reachable basic block */
45
46# basic block states
47
48BB_PRESIM, # not simulated yet
49BB_ACTIVE, # simulating or being unified
50BB_POSTSIM, # simulated
51BB_POSTUNIFY: con byte(1 << iota); # unified
52
53# Dis operand classification
54
55Anone,
56Aimm,
57Amp,
58Ampind,
59Afp,
60Afpind,
61Aend: con byte iota;
62
63# Dis n(fp) types
64
65DIS_X, # not yet typed
66DIS_W, # 'B', 'Z', 'C', 'S', 'I'
67DIS_L, # 'F', 'J', 'D'
68DIS_P: con byte iota; # 'L', '['
69
70# inferno/vm/Array
71
72ARY_DATA: con IBY2WD; # Array data (Dis array)
73ARY_NDIM: con 2*IBY2WD; # number of dimensions
74ARY_ADT: con 3*IBY2WD; # 'ref Class' of element type
75ARY_ETYPE: con 4*IBY2WD; # primitive element type code
76
77# java/lang/String
78
79STR_DISSTR: con IBY2WD; # offset to Dis string in a String
80
81# miscellaneous
82
83#REFSYSEX: con 24; # 24(fp) is a 'ref Sys->Exception'
84EXOBJ: con 28; # 28(fp) is exception object
85THISOFF: con 32; # 32(fp) is "this" pointer
86REGSIZE: con 32; # 32(fp) is first usable frame cell
87Hashsize: con 31;
88ALLOCINCR: con 16;
89
90Const_ci: adt {
91 name_index: int;
92};
93
94Const_fmiref: adt {
95 class_index: int;
96 name_type_index: int;
97};
98
99Const_nat: adt {
100 name_index: int;
101 sig_index: int;
102};
103
104Const_utf8: adt {
105 ln: int;
106 utf8: string;
107};
108
109# since 49.0
110
111Const_methodhandle: adt {
112 ref_kind: int;
113 ref_index: int;
114};
115
116Const_methodtype: adt {
117 descriptor_index: int;
118};
119
120Const_invokedyn: adt {
121 bs_method_attr_index: int;
122 name_type_index: int;
123};
124
125Const: adt {
126 pick {
127 # CONSTANT_[Float|Double]_info
128 Ptdouble =>
129 tdouble: real;
130 # CONSTANT_Long_info
131 Ptvlong =>
132 tvlong: big;
133 # CONSTANT_Integer_info
134 Ptint =>
135 tint: int;
136 # CONSTANT_String_info
137 Pstring_index =>
138 string_index: int;
139 # CONSTANT_Class_info
140 Pci =>
141 ci: ref Const_ci;
142 # CONSTANT_[Fieldref|Methodref|InterfaceMethodref]_info
143 Pfmiref =>
144 fmiref: ref Const_fmiref;
145 # CONSTANT_NameAndType
146 Pnat =>
147 nat: ref Const_nat;
148 # CONSTANT_Utf8_info
149 Putf8 =>
150 utf8: ref Const_utf8;
151
152 # since 49.0
153
154 # CONSTANT_MethodHandle_info
155 Pmethodhandle =>
156 mh: ref Const_methodhandle;
157 # CONSTANT_MethodType_info
158 Pmethodtype =>
159 mt: ref Const_methodtype;
160 # CONSTANT_InvokeDynamic_info
161 Pinvokedyn =>
162 invokedyn: ref Const_invokedyn;
163 }
164};
165
166Attr: adt { # attribute_info
167 name: int;
168 ln: int;
169 info: array of byte;
170};
171
172Field: adt { # field_info
173 access_flags: int;
174 name_index: int;
175 sig_index: int;
176 attr_count: int;
177 attr_info: array of ref Attr; # ConstantValue attributes
178};
179
180Method: adt { # method_info
181 access_flags: int;
182 name_index: int;
183 sig_index: int;
184 attr_count: int;
185 attr_info: array of ref Attr; # Code, Exceptions attributes
186};
187
188Class: adt { # ClassFile
189# magic int; # 0xcafebabe
190 min: int;
191 maj: int;
192 cp_count: int;
193 cps: array of ref Const;
194 cts: array of byte;
195 access_flags: int;
196 this_class: int;
197 super_class: int;
198 interfaces_count: int;
199 interfaces: array of int;
200 fields_count: int;
201 fields: array of ref Field;
202 methods_count: int;
203 methods: array of ref Method;
204 source_file: int;
205};
206
207Addr: adt { # Dis operand
208 mode: byte; # Anone, Aimm, Amp, etc.
209 ival: int; # immediate, $ival
210 offset: int; # single indirect, offset(fp)
211 # double indirect, offset(ival(fp))
212};
213
214Jinst_x1c: adt { # iinc
215 ix: int;
216 icon: int;
217};
218
219Jinst_x2c0: adt { # invokeinterface
220 ix: int;
221 narg: int;
222 zero: int;
223};
224
225Jinst_x2d: adt { # multianewarray
226 ix: int;
227 dim: int;
228};
229
230Jinst_t1: adt { # tableswitch
231 dflt: int;
232 lb: int;
233 hb: int;
234 tbl: array of int;
235};
236
237Jinst_t2: adt { # lookupswitch
238 dflt: int;
239 np: int;
240 tbl: array of int;
241};
242
243Jinst_w: adt { # wide
244 op: byte;
245 ix: int;
246 icon: int;
247};
248
249Jinst: adt { # Java instruction
250 op: byte; # op code
251 jtype: byte; # Java type of dst ('I', '[', etc.)
252 pc: int; # pc offset
253 pcdis: int; # pc offset counted in dis instructions
254 line: int; # source line number
255 size: int; # size of this instruction
256 dis: cyclic ref Inst; # Dis code for this instruction
257 bb: cyclic ref BB; # the instruction's basic block
258 nsrc: int; # 0 or more source operands
259 src: array of int; # the source operands
260 dst: ref Addr; # usual destination operand
261 movsrc: ref Addr; # source operand if mov generated for load
262 pick {
263 Pz =>
264 dummy: int; # Z
265 Pi =>
266 i: int; # AT, X1, X2, B2, B4, V1, V2
267 Px1c =>
268 x1c: ref Jinst_x1c; # iinc
269 Px2c0 =>
270 x2c0: ref Jinst_x2c0; # invokeinterface
271 Px2d =>
272 x2d: ref Jinst_x2d; # multianewarray
273 Pt1 =>
274 t1: ref Jinst_t1; # tableswitch
275 Pt2 =>
276 t2: ref Jinst_t2; # lookupswitch
277 Pw =>
278 w: ref Jinst_w; # wide
279 }
280};
281
282Handler: adt { # exception_table entry
283 start_pc: int;
284 end_pc: int;
285 handler_pc: int;
286 catch_type: int;
287};
288
289Code: adt { # one Java method
290 max_stack: int;
291 max_locals: int;
292 code_length: int;
293 j: array of ref Jinst;
294 nex: int;
295 ex: array of ref Handler;
296};
297
298PCode: adt {
299 code: ref Code;
300 name: string;
301 sig: string;
302};
303
304StkSnap: adt { # snapshot of simulated Java VM stack
305 jtype: byte;
306 npc: int;
307 pc: array of int;
308};
309
310BB: adt { # basic block
311 js: ref Jinst; # first instruction in basic block
312 je: cyclic ref Jinst; # last instruction in basic block
313 nsucc: int; # number of successors
314 succ: cyclic array of ref BB; # successors
315 flags: byte; # basic block leader flags
316 state: byte; # BB_PRESIM, etc.
317 entrysz: int; # size of saved entry stack
318 entrystk: array of ref StkSnap; # snapshot of entry stack
319 exitsz: int; # size of saved exit stack
320 exitstk: array of ref StkSnap; # snapshot of exit stack
321};
322
323Inst: adt { # Dis instruction
324 op: byte; # op code
325 s: ref Addr; # source
326 m: ref Addr; # middle
327 d: ref Addr; # destination
328 pc: int; # 0-based instruction offset
329 j: ref Jinst;
330 next: cyclic ref Inst;
331};
332
333# Bytecode Behaviors for Method Handles (see section 5.4.3.5 of jvm 1.7 specs)
334REF_getfield: con 1;
335REF_getstatic: con 2;
336REF_putfield: con 3;
337REF_putstatic: con 4;
338REF_invokevirtual: con 5;
339REF_invokestatic: con 6;
340REF_invokespecial: con 7;
341REF_newinvokespecial: con 8;
342REF_invokeinterface: con 9;
343
java/appl/j2d/javadas.b+585−0
@@ -0,0 +1,585 @@
1#
2# Java bytecode disassembler.
3#
4
5# Java operand classifications
6
7AT, # unsigned byte (newarray)
8B2, # 2-byte signed branch offset
9B4, # 4-byte signed branch offset
10X1, # 1-byte unsigned index (ldc)
11X1C, # iinc
12X2, # 2-byte unsigned index
13X2C0, # invokeinterface
14X2D, # multianewarray
15T1, # tableswitch
16T2, # lookupswitch
17V1, # 1-byte signed value (bipush)
18V2, # 2-byte signed value (sipush)
19W, # wide
20Z: con iota; # zero operands
21
22Jmnemon: adt {
23 op: string;
24 kind: int;
25};
26
27#
28# Java bytecode mnemonics.
29#
30
31tab: array of Jmnemon = array [MAXJAVA] of {
32 ("nop", Z),
33 ("aconst_null", Z),
34 ("iconst_m1", Z),
35 ("iconst_0", Z),
36 ("iconst_1", Z),
37 ("iconst_2", Z),
38 ("iconst_3", Z),
39 ("iconst_4", Z),
40 ("iconst_5", Z),
41 ("lconst_0", Z),
42 ("lconst_1", Z),
43 ("fconst_0", Z),
44 ("fconst_1", Z),
45 ("fconst_2", Z),
46 ("dconst_0", Z),
47 ("dconst_1", Z),
48 ("bipush", V1),
49 ("sipush", V2),
50 ("ldc", X1),
51 ("ldc_w", X2),
52 ("ldc2_w", X2),
53 ("iload", X1),
54 ("lload", X1),
55 ("fload", X1),
56 ("dload", X1),
57 ("aload", X1),
58 ("iload_0", Z),
59 ("iload_1", Z),
60 ("iload_2", Z),
61 ("iload_3", Z),
62 ("lload_0", Z),
63 ("lload_1", Z),
64 ("lload_2", Z),
65 ("lload_3", Z),
66 ("fload_0", Z),
67 ("fload_1", Z),
68 ("fload_2", Z),
69 ("fload_3", Z),
70 ("dload_0", Z),
71 ("dload_1", Z),
72 ("dload_2", Z),
73 ("dload_3", Z),
74 ("aload_0", Z),
75 ("aload_1", Z),
76 ("aload_2", Z),
77 ("aload_3", Z),
78 ("iaload", Z),
79 ("laload", Z),
80 ("faload", Z),
81 ("daload", Z),
82 ("aaload", Z),
83 ("baload", Z),
84 ("caload", Z),
85 ("saload", Z),
86 ("istore", X1),
87 ("lstore", X1),
88 ("fstore", X1),
89 ("dstore", X1),
90 ("astore", X1),
91 ("istore_0", Z),
92 ("istore_1", Z),
93 ("istore_2", Z),
94 ("istore_3", Z),
95 ("lstore_0", Z),
96 ("lstore_1", Z),
97 ("lstore_2", Z),
98 ("lstore_3", Z),
99 ("fstore_0", Z),
100 ("fstore_1", Z),
101 ("fstore_2", Z),
102 ("fstore_3", Z),
103 ("dstore_0", Z),
104 ("dstore_1", Z),
105 ("dstore_2", Z),
106 ("dstore_3", Z),
107 ("astore_0", Z),
108 ("astore_1", Z),
109 ("astore_2", Z),
110 ("astore_3", Z),
111 ("iastore", Z),
112 ("lastore", Z),
113 ("fastore", Z),
114 ("dastore", Z),
115 ("aastore", Z),
116 ("bastore", Z),
117 ("castore", Z),
118 ("sastore", Z),
119 ("pop", Z),
120 ("pop2", Z),
121 ("dup", Z),
122 ("dup_x1", Z),
123 ("dup_x2", Z),
124 ("dup2", Z),
125 ("dup2_x1", Z),
126 ("dup2_x2", Z),
127 ("swap", Z),
128 ("iadd", Z),
129 ("ladd", Z),
130 ("fadd", Z),
131 ("dadd", Z),
132 ("isub", Z),
133 ("lsub", Z),
134 ("fsub", Z),
135 ("dsub", Z),
136 ("imul", Z),
137 ("lmul", Z),
138 ("fmul", Z),
139 ("dmul", Z),
140 ("idiv", Z),
141 ("ldiv", Z),
142 ("fdiv", Z),
143 ("ddiv", Z),
144 ("irem", Z),
145 ("lrem", Z),
146 ("frem", Z),
147 ("drem", Z),
148 ("ineg", Z),
149 ("lneg", Z),
150 ("fneg", Z),
151 ("dneg", Z),
152 ("ishl", Z),
153 ("lshl", Z),
154 ("ishr", Z),
155 ("lshr", Z),
156 ("iushr", Z),
157 ("lushr", Z),
158 ("iand", Z),
159 ("land", Z),
160 ("ior", Z),
161 ("lor", Z),
162 ("ixor", Z),
163 ("lxor", Z),
164 ("iinc", X1C),
165 ("i2l", Z),
166 ("i2f", Z),
167 ("i2d", Z),
168 ("l2i", Z),
169 ("l2f", Z),
170 ("l2d", Z),
171 ("f2i", Z),
172 ("f2l", Z),
173 ("f2d", Z),
174 ("d2i", Z),
175 ("d2l", Z),
176 ("d2f", Z),
177 ("i2b", Z),
178 ("i2c", Z),
179 ("i2s", Z),
180 ("lcmp", Z),
181 ("fcmpl", Z),
182 ("fcmpg", Z),
183 ("dcmpl", Z),
184 ("dcmpg", Z),
185 ("ifeq", B2),
186 ("ifne", B2),
187 ("iflt", B2),
188 ("ifge", B2),
189 ("ifgt", B2),
190 ("ifle", B2),
191 ("if_icmpeq", B2),
192 ("if_icmpne", B2),
193 ("if_icmplt", B2),
194 ("if_icmpge", B2),
195 ("if_icmpgt", B2),
196 ("if_icmple", B2),
197 ("if_acmpeq", B2),
198 ("if_acmpne", B2),
199 ("goto", B2),
200 ("jsr", B2),
201 ("ret", X1),
202 ("tableswitch", T1),
203 ("lookupswitch", T2),
204 ("ireturn", Z),
205 ("lreturn", Z),
206 ("freturn", Z),
207 ("dreturn", Z),
208 ("areturn", Z),
209 ("return", Z),
210 ("getstatic", X2),
211 ("putstatic", X2),
212 ("getfield", X2),
213 ("putfield", X2),
214 ("invokevirtual", X2),
215 ("invokespecial", X2),
216 ("invokestatic", X2),
217 ("invokeinterface", X2C0),
218 ("xxxunusedxxx", Z),
219 ("new", X2),
220 ("newarray", AT),
221 ("anewarray", X2),
222 ("arraylength", Z),
223 ("athrow", Z),
224 ("checkcast", X2),
225 ("instanceof", X2),
226 ("monitorenter", Z),
227 ("monitorexit", Z),
228 ("wide", W),
229 ("multianewarray", X2D),
230 ("ifnull", B2),
231 ("ifnonnull", B2),
232 ("goto_w", B4),
233 ("jsr_w", B4),
234};
235
236#
237# %J format conversion.
238#
239
240jinstconv(j: ref Jinst): string
241{
242 t: Jmnemon;
243 i: int;
244
245 t = tab[int j.op];
246 s := t.op;
247 if(t.kind != Z)
248 s += " ";
249 pick jp := j {
250 Pz =>
251 ;
252 Pi =>
253 s += string jp.i;
254 Px1c =>
255 s += string jp.x1c.ix + "," + string jp.x1c.icon;
256 Px2c0 =>
257 s += string jp.x2c0.ix + "," + string jp.x2c0.narg;
258 s += "," + string jp.x2c0.zero;
259 Px2d =>
260 s += string jp.x2d.ix + "," + string jp.x2d.dim;
261 Pt1 =>
262 s += string jp.t1.dflt + "," + string jp.t1.lb;
263 s += "," + string jp.t1.hb;
264 if(jp.t1.tbl != nil) {
265 for(i = 0; i < jp.t1.hb - jp.t1.lb + 1; i++)
266 s += "," + string jp.t1.tbl[i];
267 }
268 Pt2 =>
269 s += string jp.t2.dflt + "," + string jp.t2.np;
270 if(jp.t2.tbl != nil) {
271 for(i = 0; i < 2*jp.t2.np; i++)
272 s += "," + string jp.t2.tbl[i];
273 }
274 Pw =>
275 s += string jp.w.op + "," + string jp.w.ix;
276 if(int jp.w.op == Jiinc)
277 s += "," + string jp.w.icon;
278 }
279 return s;
280}
281
282#
283# Verify an exception handler.
284#
285
286verifyehpc(c: ref Code, pc: int)
287{
288 if(pc >= c.code_length || c.j[pc] == nil)
289 verifyerrormess("handler pc");
290}
291
292verifyhandler(c: ref Code, h: ref Handler)
293{
294 verifyehpc(c, h.start_pc);
295
296 if(h.end_pc != c.code_length)
297 verifyehpc(c, h.end_pc);
298
299 verifyehpc(c, h.handler_pc);
300
301 if(h.catch_type != 0)
302 verifycpindex(nil, h.catch_type, 1 << CON_Class);
303}
304
305#
306# Disassemble code for a method.
307#
308
309javadas(a: ref Attr): ref Code
310{
311 c: ref Code;
312 h, h1, h2: ref Handler;
313 pc, codelen: int;
314 l, i, k, n, nat, nln, CON_bits: int;
315 op: byte;
316
317 uSet(a.info);
318 c = ref Code(0, 0, 0, nil, 0, nil);
319 c.max_stack = u2();
320 c.max_locals = u2();
321 c.code_length = u4();
322 if(c.code_length == 0 || c.code_length > 65535)
323 verifyerrormess("code_length");
324 # +1 is for exception object
325 c.j = array [c.code_length+1] of ref Jinst;
326 c.j[c.code_length] = ref Jinst.Pi;
327 c.j[c.code_length].dst = ref Addr;
328
329 pc = 0;
330 codelen = c.code_length;
331 while(codelen > 0) {
332 op = u1();
333 case int tab[int op].kind {
334 Z =>
335 j := ref Jinst.Pz;
336 j.op = op;
337 l = 1;
338 c.j[pc] = j;
339 V1 =>
340 j := ref Jinst.Pi;
341 j.op = op;
342 j.i = (int u1() << 24) >> 24; # sign-extend
343 l = 2;
344 c.j[pc] = j;
345 B2 or
346 V2 =>
347 j := ref Jinst.Pi;
348 j.op = op;
349 j.i = (u2() << 16) >> 16; # sign-extend
350 l = 3;
351 c.j[pc] = j;
352 B4 =>
353 j := ref Jinst.Pi;
354 j.op = op;
355 j.i = u4();
356 l = 5;
357 c.j[pc] = j;
358 X1 =>
359 j := ref Jinst.Pi;
360 j.op = op;
361 j.i = int u1();
362 if(int j.op == Jldc) {
363 CON_bits = 1 << CON_Integer | 1 << CON_Float | 1 << CON_String;
364 verifycpindex(j, j.i, CON_bits);
365 }
366 l = 2;
367 c.j[pc] = j;
368 X2 =>
369 j := ref Jinst.Pi;
370 j.op = op;
371 j.i = u2();
372 case int j.op {
373 Jldc_w =>
374 CON_bits = 1 << CON_Integer | 1 << CON_Float | 1 << CON_String;
375 if (class.maj >= 50)
376 CON_bits |= 1 << CON_Class;
377 if (class.maj >= 51)
378 CON_bits |= 1 << CON_MethodType | 1 << CON_MethodHandle;
379 Jldc2_w =>
380 CON_bits = 1 << CON_Long | 1 << CON_Double;
381 if (class.maj >= 50)
382 CON_bits |= 1 << CON_Class;
383 if (class.maj >= 51)
384 CON_bits |= 1 << CON_MethodType | 1 << CON_MethodHandle;
385 if(j.i == class.cp_count-1)
386 verifyerror(j);
387 Jgetstatic or
388 Jputstatic or
389 Jgetfield or
390 Jputfield =>
391 CON_bits = 1 << CON_Fieldref;
392 Jinvokevirtual or
393 Jinvokespecial or
394 Jinvokestatic =>
395 CON_bits = 1 << CON_Methodref;
396 Jnew or
397 Janewarray or
398 Jcheckcast or
399 Jinstanceof =>
400 CON_bits = 1 << CON_Class;
401 }
402 verifycpindex(j, j.i, CON_bits);
403 l = 3;
404 c.j[pc] = j;
405 X1C =>
406 j := ref Jinst.Px1c;
407 j.op = op;
408 j.x1c = ref Jinst_x1c;
409 j.x1c.ix = int u1();
410 j.x1c.icon = (int u1() << 24) >> 24; # sign-extend
411 l = 3;
412 c.j[pc] = j;
413 X2D =>
414 j := ref Jinst.Px2d;
415 j.op = op;
416 j.x2d = ref Jinst_x2d;
417 j.x2d.ix = u2();
418 j.x2d.dim = int u1();
419 verifycpindex(j, j.x2d.ix, 1 << CON_Class);
420 if(j.x2d.dim < 1)
421 verifyerror(j);
422 l = 4;
423 c.j[pc] = j;
424 AT =>
425 j := ref Jinst.Pi;
426 j.op = op;
427 j.i = int u1();
428 if(j.i < T_BOOLEAN || j.i > T_LONG)
429 verifyerror(j);
430 l = 2;
431 c.j[pc] = j;
432 T1 =>
433 j := ref Jinst.Pt1;
434 j.op = op;
435 j.t1 = ref Jinst_t1;
436 if((pc+1)%4) # <0-3 byte pad>
437 n = 4-(pc+1)%4;
438 else
439 n = 0;
440 l = n;
441 while(n--)
442 u1();
443 j.t1.dflt = u4();
444 j.t1.lb = u4();
445 j.t1.hb = u4();
446 if(j.t1.lb > j.t1.hb)
447 verifyerror(j);
448 n = j.t1.hb - j.t1.lb + 1;
449 j.t1.tbl = array [n] of int;
450 for(i = 0; i < n; i++)
451 j.t1.tbl[i] = u4();
452 l += 13 + n * 4;
453 c.j[pc] = j;
454 T2 =>
455 j := ref Jinst.Pt2;
456 j.op = op;
457 j.t2 = ref Jinst_t2;
458 if((pc+1)%4) # <0-3 byte pad>
459 n = 4-(pc+1)%4;
460 else
461 n = 0;
462 l = n;
463 while(n--)
464 u1();
465 j.t2.dflt = u4();
466 j.t2.np = u4();
467 n = j.t2.np;
468 if(n < 0)
469 verifyerror(j);
470 j.t2.tbl = array [n*2] of int;
471 for(i = 0; i < n*2; i++)
472 j.t2.tbl[i] = u4();
473 for(i = 2; i < n*2; i += 2) {
474 if(j.t2.tbl[i-2] > j.t2.tbl[i])
475 verifyerror(j);
476 }
477 l += 9 + n * 8;
478 c.j[pc] = j;
479 W =>
480 j := ref Jinst.Pw;
481 j.op = op;
482 j.w = ref Jinst_w;
483 j.w.op = u1();
484 j.w.ix = u2();
485 case int j.w.op {
486 Jiload or
487 Jlload or
488 Jfload or
489 Jdload or
490 Jaload or
491 Jistore or
492 Jlstore or
493 Jfstore or
494 Jdstore or
495 Jastore or
496 Jret =>
497 l = 4;
498 Jiinc =>
499 j.w.icon = (u2() << 16) >> 16; # sign-extend
500 l = 6;
501 * =>
502 verifyerror(j);
503 }
504 c.j[pc] = j;
505 X2C0 =>
506 j := ref Jinst.Px2c0;
507 j.op = op;
508 j.x2c0 = ref Jinst_x2c0;
509 j.x2c0.ix = u2();
510 j.x2c0.narg = int u1();
511 j.x2c0.zero = int u1(); # must be 0
512 verifycpindex(j, j.x2c0.ix, 1 << CON_InterfaceMref);
513 if(j.x2c0.narg < 1 || j.x2c0.zero != 0)
514 verifyerror(j);
515 l = 5;
516 c.j[pc] = j;
517 * =>
518 verifyerrormess("illegal opcode");
519 }
520 c.j[pc].pc = pc;
521 c.j[pc].line = 0;
522 c.j[pc].size = l;
523 c.j[pc].nsrc = 0;
524 c.j[pc].dst = ref Addr(byte 0, 0, 0);
525 c.j[pc].movsrc = ref Addr(byte 0, 0, 0);
526 codelen -= l;
527 pc += l;
528 }
529 if(codelen != 0)
530 verifyerrormess("code_length");
531
532 c.nex = u2();
533 if(c.nex > 0) {
534 c.ex = array [c.nex] of ref Handler;
535 for(i = 0; i < c.nex; i++) {
536 c.ex[i] = ref Handler(0, 0, 0, 0);
537 h = c.ex[i];
538 h.start_pc = u2();
539 h.end_pc = u2();
540 h.handler_pc = u2();
541 h.catch_type = u2();
542 verifyhandler(c, h);
543 #
544 # sort nested try blocks that have same start_pc,
545 # outer-most go first (see cvtehinfo() [xlate.c])
546 #
547 for(k = i; k > 0; k--) {
548 h1 = c.ex[k];
549 h2 = c.ex[k-1];
550 if(h1.start_pc == h2.start_pc
551 && h1.end_pc > h2.end_pc) {
552 c.ex[k] = h2;
553 c.ex[k-1] = h1;
554 }
555 }
556 }
557 }
558
559 if(gensbl == 0)
560 return c;
561
562 # interpret LineNumberTable attributes */
563 nat = u2();
564 for(i = 0; i < nat; i++) {
565 at := getattr();
566 if(STRING(at.name) == "LineNumberTable") {
567 nln = (int at.info[0] << 8) | int at.info[1];
568 for(k = 2; k < nln*4+2; k += 4) {
569 pc = (int at.info[k] << 8) | int at.info[k+1];
570 c.j[pc].line = (int at.info[k+2] << 8) | int at.info[k+3];
571 }
572 }
573 }
574 pc = 0;
575 n = 0;
576 while(pc < c.code_length) {
577 if(c.j[pc].line == 0)
578 c.j[pc].line = n;
579 else
580 n = c.j[pc].line;
581 pc += c.j[pc].size;
582 }
583
584 return c;
585}
java/appl/j2d/javaisa.m+219−0
@@ -0,0 +1,219 @@
1#
2# Java VM instruction set
3#
4
5Jnop,
6Jaconst_null,
7Jiconst_m1,
8Jiconst_0,
9Jiconst_1,
10Jiconst_2,
11Jiconst_3,
12Jiconst_4,
13Jiconst_5,
14Jlconst_0,
15Jlconst_1,
16Jfconst_0,
17Jfconst_1,
18Jfconst_2,
19Jdconst_0,
20Jdconst_1,
21Jbipush,
22Jsipush,
23Jldc,
24Jldc_w,
25Jldc2_w,
26Jiload,
27Jlload,
28Jfload,
29Jdload,
30Jaload,
31Jiload_0,
32Jiload_1,
33Jiload_2,
34Jiload_3,
35Jlload_0,
36Jlload_1,
37Jlload_2,
38Jlload_3,
39Jfload_0,
40Jfload_1,
41Jfload_2,
42Jfload_3,
43Jdload_0,
44Jdload_1,
45Jdload_2,
46Jdload_3,
47Jaload_0,
48Jaload_1,
49Jaload_2,
50Jaload_3,
51Jiaload,
52Jlaload,
53Jfaload,
54Jdaload,
55Jaaload,
56Jbaload,
57Jcaload,
58Jsaload,
59Jistore,
60Jlstore,
61Jfstore,
62Jdstore,
63Jastore,
64Jistore_0,
65Jistore_1,
66Jistore_2,
67Jistore_3,
68Jlstore_0,
69Jlstore_1,
70Jlstore_2,
71Jlstore_3,
72Jfstore_0,
73Jfstore_1,
74Jfstore_2,
75Jfstore_3,
76Jdstore_0,
77Jdstore_1,
78Jdstore_2,
79Jdstore_3,
80Jastore_0,
81Jastore_1,
82Jastore_2,
83Jastore_3,
84Jiastore,
85Jlastore,
86Jfastore,
87Jdastore,
88Jaastore,
89Jbastore,
90Jcastore,
91Jsastore,
92Jpop,
93Jpop2,
94Jdup,
95Jdup_x1,
96Jdup_x2,
97Jdup2,
98Jdup2_x1,
99Jdup2_x2,
100Jswap,
101Jiadd,
102Jladd,
103Jfadd,
104Jdadd,
105Jisub,
106Jlsub,
107Jfsub,
108Jdsub,
109Jimul,
110Jlmul,
111Jfmul,
112Jdmul,
113Jidiv,
114Jldiv,
115Jfdiv,
116Jddiv,
117Jirem,
118Jlrem,
119Jfrem,
120Jdrem,
121Jineg,
122Jlneg,
123Jfneg,
124Jdneg,
125Jishl,
126Jlshl,
127Jishr,
128Jlshr,
129Jiushr,
130Jlushr,
131Jiand,
132Jland,
133Jior,
134Jlor,
135Jixor,
136Jlxor,
137Jiinc,
138Ji2l,
139Ji2f,
140Ji2d,
141Jl2i,
142Jl2f,
143Jl2d,
144Jf2i,
145Jf2l,
146Jf2d,
147Jd2i,
148Jd2l,
149Jd2f,
150Ji2b,
151Ji2c,
152Ji2s,
153Jlcmp,
154Jfcmpl,
155Jfcmpg,
156Jdcmpl,
157Jdcmpg,
158Jifeq,
159Jifne,
160Jiflt,
161Jifge,
162Jifgt,
163Jifle,
164Jif_icmpeq,
165Jif_icmpne,
166Jif_icmplt,
167Jif_icmpge,
168Jif_icmpgt,
169Jif_icmple,
170Jif_acmpeq,
171Jif_acmpne,
172Jgoto,
173Jjsr,
174Jret,
175Jtableswitch,
176Jlookupswitch,
177Jireturn,
178Jlreturn,
179Jfreturn,
180Jdreturn,
181Jareturn,
182Jreturn,
183Jgetstatic,
184Jputstatic,
185Jgetfield,
186Jputfield,
187Jinvokevirtual,
188Jinvokespecial,
189Jinvokestatic,
190Jinvokeinterface,
191Jxxxunusedxxx,
192Jnew,
193Jnewarray,
194Janewarray,
195Jarraylength,
196Jathrow,
197Jcheckcast,
198Jinstanceof,
199Jmonitorenter,
200Jmonitorexit,
201Jwide,
202Jmultianewarray,
203Jifnull,
204Jifnonnull,
205Jgoto_w,
206Jjsr_w: con iota;
207
208MAXJAVA: con Jjsr_w+1;
209
210# newarray element types (Java VM Specification page 320)
211
212T_BOOLEAN,
213T_CHAR,
214T_FLOAT,
215T_DOUBLE,
216T_BYTE,
217T_SHORT,
218T_INT,
219T_LONG: con iota+4;
java/appl/j2d/javatbl.b+233−0
@@ -0,0 +1,233 @@
1XLOAD: con 16r1 << 0;
2XSTORE: con 16r1 << 1;
3
4javatbl := array [MAXJAVA] of {
5 byte 0, # Jnop
6 byte XLOAD, # Jaconst_null
7 byte XLOAD, # Jiconst_m1
8 byte XLOAD, # Jiconst_0
9 byte XLOAD, # Jiconst_1
10 byte XLOAD, # Jiconst_2
11 byte XLOAD, # Jiconst_3
12 byte XLOAD, # Jiconst_4
13 byte XLOAD, # Jiconst_5
14 byte XLOAD, # Jlconst_0
15 byte XLOAD, # Jlconst_1
16 byte XLOAD, # Jfconst_0
17 byte XLOAD, # Jfconst_1
18 byte XLOAD, # Jfconst_2
19 byte XLOAD, # Jdconst_0
20 byte XLOAD, # Jdconst_1
21 byte XLOAD, # Jbipush
22 byte XLOAD, # Jsipush
23 byte XLOAD, # Jldc
24 byte XLOAD, # Jldc_w
25 byte XLOAD, # Jldc2_w
26 byte XLOAD, # Jiload
27 byte XLOAD, # Jlload
28 byte XLOAD, # Jfload
29 byte XLOAD, # Jdload
30 byte XLOAD, # Jaload
31 byte XLOAD, # Jiload_0
32 byte XLOAD, # Jiload_1
33 byte XLOAD, # Jiload_2
34 byte XLOAD, # Jiload_3
35 byte XLOAD, # Jlload_0
36 byte XLOAD, # Jlload_1
37 byte XLOAD, # Jlload_2
38 byte XLOAD, # Jlload_3
39 byte XLOAD, # Jfload_0
40 byte XLOAD, # Jfload_1
41 byte XLOAD, # Jfload_2
42 byte XLOAD, # Jfload_3
43 byte XLOAD, # Jdload_0
44 byte XLOAD, # Jdload_1
45 byte XLOAD, # Jdload_2
46 byte XLOAD, # Jdload_3
47 byte XLOAD, # Jaload_0
48 byte XLOAD, # Jaload_1
49 byte XLOAD, # Jaload_2
50 byte XLOAD, # Jaload_3
51 byte 0, # Jiaload
52 byte 0, # Jlaload
53 byte 0, # Jfaload
54 byte 0, # Jdaload
55 byte 0, # Jaaload
56 byte 0, # Jbaload
57 byte 0, # Jcaload
58 byte 0, # Jsaload
59 byte XSTORE, # Jistore
60 byte XSTORE, # Jlstore
61 byte XSTORE, # Jfstore
62 byte XSTORE, # Jdstore
63 byte XSTORE, # Jastore
64 byte XSTORE, # Jistore_0
65 byte XSTORE, # Jistore_1
66 byte XSTORE, # Jistore_2
67 byte XSTORE, # Jistore_3
68 byte XSTORE, # Jlstore_0
69 byte XSTORE, # Jlstore_1
70 byte XSTORE, # Jlstore_2
71 byte XSTORE, # Jlstore_3
72 byte XSTORE, # Jfstore_0
73 byte XSTORE, # Jfstore_1
74 byte XSTORE, # Jfstore_2
75 byte XSTORE, # Jfstore_3
76 byte XSTORE, # Jdstore_0
77 byte XSTORE, # Jdstore_1
78 byte XSTORE, # Jdstore_2
79 byte XSTORE, # Jdstore_3
80 byte XSTORE, # Jastore_0
81 byte XSTORE, # Jastore_1
82 byte XSTORE, # Jastore_2
83 byte XSTORE, # Jastore_3
84 byte 0, # Jiastore
85 byte 0, # Jlastore
86 byte 0, # Jfastore
87 byte 0, # Jdastore
88 byte 0, # Jaastore
89 byte 0, # Jbastore
90 byte 0, # Jcastore
91 byte 0, # Jsastore
92 byte 0, # Jpop
93 byte 0, # Jpop2
94 byte 0, # Jdup
95 byte 0, # Jdup_x1
96 byte 0, # Jdup_x2
97 byte 0, # Jdup2
98 byte 0, # Jdup2_x1
99 byte 0, # Jdup2_x2
100 byte 0, # Jswap
101 byte 0, # Jiadd
102 byte 0, # Jladd
103 byte 0, # Jfadd
104 byte 0, # Jdadd
105 byte 0, # Jisub
106 byte 0, # Jlsub
107 byte 0, # Jfsub
108 byte 0, # Jdsub
109 byte 0, # Jimul
110 byte 0, # Jlmul
111 byte 0, # Jfmul
112 byte 0, # Jdmul
113 byte 0, # Jidiv
114 byte 0, # Jldiv
115 byte 0, # Jfdiv
116 byte 0, # Jddiv
117 byte 0, # Jirem
118 byte 0, # Jlrem
119 byte 0, # Jfrem
120 byte 0, # Jdrem
121 byte 0, # Jineg
122 byte 0, # Jlneg
123 byte 0, # Jfneg
124 byte 0, # Jdneg
125 byte 0, # Jishl
126 byte 0, # Jlshl
127 byte 0, # Jishr
128 byte 0, # Jlshr
129 byte 0, # Jiushr
130 byte 0, # Jlushr
131 byte 0, # Jiand
132 byte 0, # Jland
133 byte 0, # Jior
134 byte 0, # Jlor
135 byte 0, # Jixor
136 byte 0, # Jlxor
137 byte 0, # Jiinc
138 byte 0, # Ji2l
139 byte 0, # Ji2f
140 byte 0, # Ji2d
141 byte 0, # Jl2i
142 byte 0, # Jl2f
143 byte 0, # Jl2d
144 byte 0, # Jf2i
145 byte 0, # Jf2l
146 byte 0, # Jf2d
147 byte 0, # Jd2i
148 byte 0, # Jd2l
149 byte 0, # Jd2f
150 byte 0, # Ji2b
151 byte 0, # Ji2c
152 byte 0, # Ji2s
153 byte 0, # Jlcmp
154 byte 0, # Jfcmpl
155 byte 0, # Jfcmpg
156 byte 0, # Jdcmpl
157 byte 0, # Jdcmpg
158 byte 0, # Jifeq
159 byte 0, # Jifne
160 byte 0, # Jiflt
161 byte 0, # Jifge
162 byte 0, # Jifgt
163 byte 0, # Jifle
164 byte 0, # Jif_icmpeq
165 byte 0, # Jif_icmpne
166 byte 0, # Jif_icmplt
167 byte 0, # Jif_icmpge
168 byte 0, # Jif_icmpgt
169 byte 0, # Jif_icmple
170 byte 0, # Jif_acmpeq
171 byte 0, # Jif_acmpne
172 byte 0, # Jgoto
173 byte 0, # Jjsr
174 byte 0, # Jret
175 byte 0, # Jtableswitch
176 byte 0, # Jlookupswitch
177 byte 0, # Jireturn
178 byte 0, # Jlreturn
179 byte 0, # Jfreturn
180 byte 0, # Jdreturn
181 byte 0, # Jareturn
182 byte 0, # Jreturn
183 byte 0, # Jgetstatic
184 byte 0, # Jputstatic
185 byte 0, # Jgetfield
186 byte 0, # Jputfield
187 byte 0, # Jinvokevirtual
188 byte 0, # Jinvokespecial
189 byte 0, # Jinvokestatic
190 byte 0, # Jinvokeinterface
191 byte 0, # Jxxxunusedxxx
192 byte 0, # Jnew
193 byte 0, # Jnewarray
194 byte 0, # Janewarray
195 byte 0, # Jarraylength
196 byte 0, # Jathrow
197 byte 0, # Jcheckcast
198 byte 0, # Jinstanceof
199 byte 0, # Jmonitorenter
200 byte 0, # Jmonitorexit
201 byte 0, # Jwide
202 byte 0, # Jmultianewarray
203 byte 0, # Jifnull
204 byte 0, # Jifnonnull
205 byte 0, # Jgoto_w
206 byte 0, # Jjsr_w
207};
208
209opcode(j: ref Jinst): int
210{
211 ret: byte;
212
213 if(j.op == byte Jwide) {
214 pick jp := j {
215 Pw =>
216 ret = jp.w.op;
217 * =>
218 badpick("opcode");
219 }
220 } else
221 ret = j.op;
222 return int ret;
223}
224
225isload(j: ref Jinst): int
226{
227 return int javatbl[opcode(j)] & XLOAD;
228}
229
230isstore(j: ref Jinst): int
231{
232 return int javatbl[opcode(j)] & XSTORE;
233}
java/appl/j2d/links.b+141−0
@@ -0,0 +1,141 @@
1#
2# Manage .dis Link Section.
3#
4
5Link: adt {
6 id: int; # dis type identifier
7 pc: int; # method entry pc
8 sig: int; # MD5 signature
9 name: string; # method name
10 next: cyclic ref Link;
11};
12
13links: ref Link;
14last: ref Link;
15nlinks: int;
16
17#
18# Create a Link entry; one for each method defined in the class.
19#
20
21xtrnlink(id: int, pc: int, name: string, sig: string)
22{
23 l: ref Link;
24
25 l = ref Link(id, pc, 1247901281, name + sig, nil);
26 if(name == "main")
27 setentry(pc, id);
28 if(links == nil)
29 links = l;
30 else
31 last.next = l;
32 last = l;
33 nlinks += 1;
34}
35
36#
37# Functions for patching frame & call instructions.
38#
39
40FCPatch: adt {
41 frame: ref Inst;
42 call: ref Inst;
43 name: string;
44 sig: string;
45 next: cyclic ref FCPatch;
46};
47
48fcplist: ref FCPatch;
49
50#
51# Record a frame/call pair for later patching.
52#
53
54addfcpatch(frame: ref Inst, call: ref Inst, name: string, sig: string)
55{
56 fcp: ref FCPatch;
57
58 fcp = ref FCPatch(frame, call, name, sig, fcplist);
59 fcplist = fcp;
60}
61
62getLink(name: string, sig: string): ref Link
63{
64 l: ref Link;
65 nlen: int;
66
67 nlen = len name;
68 l = links;
69 while(l != nil) {
70 if(len l.name == nlen + len sig
71 && l.name[0:nlen] == name && l.name[nlen:] == sig) {
72 return l;
73 }
74 l = l.next;
75 }
76 fatal("getLink: " + name + ", " + sig);
77 return nil;
78}
79
80#
81# Patch frame/call pairs.
82#
83
84dofcpatch()
85{
86 fcp: ref FCPatch;
87 l: ref Link;
88
89 fcp = fcplist;
90 while(fcp != nil) {
91 l = getLink(fcp.name, fcp.sig);
92 fcp.frame.s.ival = l.id;
93 fcp.call.d.ival = l.pc;
94 fcp = fcp.next;
95 }
96}
97
98#
99# Emit assembly 'link' directives.
100#
101
102asmlinks()
103{
104 l: ref Link;
105
106 for(l = links; l != nil; l = l.next) {
107 bout.puts("\tlink\t" + string l.id + "," + string l.pc
108 + ",0x" + hex(l.sig, 0) + ",\"" + l.name + "\"\n");
109 }
110}
111
112sbllinks(bsym: ref Bufio->Iobuf)
113{
114 l: ref Link;
115
116 bsym.puts(string nlinks + "\n");
117 for(l = links; l != nil; l = l.next) {
118 bsym.puts(string l.pc + ":" + l.name + "\n");
119 bsym.puts("0\n"); # args
120 bsym.puts("0\n"); # locals
121 bsym.puts("n\n"); # return type
122 }
123}
124
125disnlinks()
126{
127 discon(nlinks);
128}
129
130dislinks()
131{
132 l: ref Link;
133
134 for(l = links; l != nil; l = l.next) {
135 discon(l.pc);
136 discon(l.id);
137 disword(l.sig);
138 bout.puts(l.name);
139 bout.putb(byte 0);
140 }
141}
java/appl/j2d/loader.b+691−0
@@ -0,0 +1,691 @@
1#
2# Class loader.
3#
4
5class: ref Class; # class under translation
6pcode: array of PCode; # pointers to byte code of defined methods
7THISCLASS: string;
8SUPERCLASS: string;
9
10STRING(i: int): string
11{
12 pick cp := class.cps[i] {
13 Putf8 =>
14 return cp.utf8.utf8;
15 * =>
16 badpick("STRING");
17 }
18 return nil;
19}
20
21CLASSNAME(i: int): string
22{
23 pick cp := class.cps[i] {
24 Pci =>
25 return STRING(cp.ci.name_index);
26 * =>
27 badpick("CLASSNAME");
28 }
29 return nil;
30}
31
32u8(): big
33{
34 b1, b2: big;
35
36 b1 = big u4() << 32;
37 b2 = big u4() & 16rffffffff;
38 return b1 | b2;
39}
40
41#
42# Bytecode verification.
43#
44
45verifyutf8index(index: int)
46{
47 verifycpindex(nil, index, 1 << CON_Utf8);
48 if(STRING(index) == nil)
49 verifyerrormess("nil name or descriptor");
50}
51
52verifyclassindex(index: int)
53{
54 verifycpindex(nil, index, 1 << CON_Class);
55 pick cp := class.cps[index] {
56 Pci =>
57 verifyutf8index(cp.ci.name_index);
58 * =>
59 badpick("verifyclassindex");
60 }
61}
62
63verifyfielddesc(name_index: int, sig_index: int)
64{
65 sig: string;
66 ftype: int;
67
68 verifyutf8index(name_index);
69 verifyutf8index(sig_index);
70 sig = STRING(sig_index);
71 ftype = sig[0];
72 sig = nextjavatype(sig);
73 if(ftype == 'V' || sig != nil)
74 verifyerrormess("field descriptor");
75}
76
77verifymethoddesc(name_index: int, sig_index: int)
78{
79 name, sig: string;
80 rtype: int;
81 wargs: int;
82
83 verifyutf8index(name_index);
84 name = STRING(name_index);
85 verifyutf8index(sig_index);
86 sig = STRING(sig_index);
87
88 # check special <method> names
89 if(name[0] == '<') {
90 if(name == "<init>")
91 ;
92 else if(name == "<clinit>") {
93 if(sig != "()V")
94 verifyerrormess("<clinit> signature");
95 return;
96 } else
97 verifyerrormess("<method> name");
98 }
99
100 # check signature
101 if(sig[0] != '(')
102 verifyerrormess("method descriptor");
103 sig = sig[1:];
104 wargs = 0;
105 while(sig[0] != ')') {
106 wargs++;
107 if(sig[0] == 'J' || sig[0] == 'D')
108 wargs++;
109 sig = nextjavatype(sig);
110 }
111 sig = sig[1:];
112 rtype = sig[0];
113 sig = nextjavatype(sig);
114 if(wargs > 255 || sig != nil || (name[0] == '<' && rtype != 'V'))
115 verifyerrormess("method descriptor");
116}
117
118verifycpindexes()
119{
120 i: int;
121 nameindex, sigindex, natindex: int;
122
123 for(i = 1; i < class.cp_count; i++) {
124 pick cp := class.cps[i] {
125 Pci =>
126 verifyutf8index(cp.ci.name_index);
127 Pfmiref =>
128 verifyclassindex(cp.fmiref.class_index);
129 natindex = cp.fmiref.name_type_index;
130 verifycpindex(nil, natindex, 1 << CON_NameAndType);
131 pick cpnat := class.cps[natindex] {
132 Pnat =>
133 nameindex = cpnat.nat.name_index;
134 sigindex = cpnat.nat.sig_index;
135 * =>
136 badpick("verifycpindexes (inner)");
137 }
138 if(int class.cts[i] == CON_Fieldref)
139 verifyfielddesc(nameindex, sigindex);
140 else
141 verifymethoddesc(nameindex, sigindex);
142 Pstring_index =>
143 verifycpindex(nil, cp.string_index, 1 << CON_Utf8);
144 Ptint =>
145 ;
146 Pnat =>
147 # CON_NameAndType is verified through
148 # CON_Fieldref, CON_Methodref, CON_InterfaceMref
149 ;
150 Putf8 =>
151 ;
152 Ptvlong =>
153 i++;
154 Ptdouble =>
155 if(int class.cts[i] == CON_Double) # else CON_Float
156 i++;
157 # since 49.0
158 Pmethodhandle =>
159 case cp.mh.ref_kind {
160 # TODO: implement all ref_kinds handling
161 * =>
162 verifyerrormess("bad method_handle ref_kind");
163 }
164 Pmethodtype =>
165 verifycpindex(nil, cp.mt.descriptor_index, 1 << CON_Utf8);
166 Pinvokedyn =>
167 # TODO: verify bs_method_attr_index field
168 verifycpindex(nil, cp.invokedyn.name_type_index, 1 << CON_NameAndType);
169 * =>
170 badpick("verifycpindexes (outer)");
171 }
172 }
173}
174
175CLASSMUTEX: con ACC_FINAL|ACC_ABSTRACT;
176
177verifyclassflags()
178{
179 bad: int;
180
181 if(class.access_flags & ACC_INTERFACE) {
182 if(SUPERCLASS != "java/lang/Object")
183 verifyerrormess("superclass");
184 # java bug: ACC_ABSTRACT should be set ???
185 # bad = (class.access_flags & ACC_ABSTRACT) != ACC_ABSTRACT;
186 bad = 0;
187 bad += (class.access_flags & ACC_FINAL) != 0;
188 } else {
189 bad = (class.access_flags & CLASSMUTEX) == CLASSMUTEX;
190 }
191 if(bad)
192 verifyerrormess("access_flags");
193}
194
195multippp(flag: int): int
196{
197 ret: int;
198
199 case flag & (ACC_PUBLIC|ACC_PRIVATE|ACC_PROTECTED) {
200 0 or
201 ACC_PUBLIC or
202 ACC_PRIVATE or
203 ACC_PROTECTED =>
204 ret = 0;
205 * =>
206 ret = 1;
207 }
208 return ret;
209}
210
211IFACEFIELD: con ACC_PUBLIC|ACC_STATIC|ACC_FINAL;
212_IFACEFIELD: con ACC_PRIVATE|ACC_PROTECTED|ACC_VOLATILE|ACC_TRANSIENT;
213FIELDMUTEX: con ACC_FINAL|ACC_VOLATILE;
214CVATTRTAGS: con ((1<<CON_Integer)|(1<<CON_Long)|(1<<CON_Float)|(1<<CON_Double)|(1<<CON_String));
215
216verifyfield(fp: ref Field)
217{
218 bad, n: int;
219 c: int;
220
221 verifyfielddesc(fp.name_index, fp.sig_index);
222 if(class.access_flags & ACC_INTERFACE) {
223 bad = (fp.access_flags & _IFACEFIELD) != 0;
224 bad += (fp.access_flags & IFACEFIELD) != IFACEFIELD;
225 } else {
226 bad = multippp(fp.access_flags);
227 bad += (fp.access_flags & FIELDMUTEX) == FIELDMUTEX;
228 }
229 if(bad)
230 verifyerrormess("access_flags");
231
232 # verify ConstantValue attribute
233 n = CVattrindex(fp);
234 if(n == 0)
235 return;
236 verifycpindex(nil, n, CVATTRTAGS);
237 c = STRING(fp.sig_index)[0];
238 pick cp := class.cps[n] {
239 Ptdouble =>
240 if(int class.cts[n] == CON_Float)
241 bad = (c != 'F');
242 else
243 bad = (c != 'D');
244 Ptvlong =>
245 bad = (c != 'J');
246 Ptint =>
247 case c {
248 'Z' or
249 'B' or
250 'C' or
251 'S' or
252 'I' =>
253 bad = 0;
254 * =>
255 bad = 1;
256 }
257 Pstring_index =>
258 bad = (c != 'L');
259 * =>
260 bad = 1;
261 }
262 if(bad)
263 verifyerrormess("ConstantValue attribute");
264}
265
266IFACEMETHOD: con ACC_PUBLIC|ACC_ABSTRACT;
267_IFACEMETHOD: con ACC_PRIVATE|ACC_PROTECTED|ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE;
268_INITFLAGS: con ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE|ACC_ABSTRACT;
269# java bug: ACC_SYNCHRONIZED wrongly allowed with ACC_ABSTRACT ???
270#METHODMUTEX: con ACC_PRIVATE|ACC_STATIC|ACC_FINAL|ACC_SYNCHRONIZED|ACC_NATIVE;
271METHODMUTEX: con ACC_PRIVATE|ACC_STATIC|ACC_FINAL|ACC_NATIVE;
272
273verifymethod(mp: ref Method)
274{
275 bad: int;
276 name: string;
277
278 verifymethoddesc(mp.name_index, mp.sig_index);
279 name = STRING(mp.name_index);
280 if(name == "<clinit>")
281 return;
282 if(class.access_flags & ACC_INTERFACE) {
283 bad = (mp.access_flags & _IFACEMETHOD) != 0;
284 bad += (mp.access_flags & IFACEMETHOD) != IFACEMETHOD;
285 } else {
286 bad = multippp(mp.access_flags);
287 if(name == "<init>")
288 bad += (mp.access_flags & _INITFLAGS) != 0;
289 if(mp.access_flags & ACC_ABSTRACT)
290 bad += (mp.access_flags & METHODMUTEX) != 0;
291 }
292 if(bad)
293 verifyerrormess("access_flags");
294 #
295 # Code attribute verified during disassembly
296 # ignore Exceptions attribute for now
297 #
298}
299
300#
301# Parse a byte stream into a Class stucture.
302#
303
304byte2Class(text: array of byte)
305{
306 i, j: int;
307 fp: ref Field;
308 mp: ref Method;
309
310 uSet(text);
311 class = ref Class(0, 0, 0, nil, nil, 0, 0, 0, 0, nil, 0, nil, 0, nil, 0);
312
313 if(u4() != int 16rCAFEBABE)
314 verifyerrormess("magic");
315
316 class.min = u2();
317 class.maj = u2();
318
319 class.cp_count = u2();
320 class.cps = array [class.cp_count] of ref Const;
321 class.cts = array [class.cp_count] of { * => byte 0 };
322
323 for(i = 1; i < class.cp_count; i++) {
324 class.cts[i] = byte u1();
325 case int class.cts[i] {
326 CON_Class =>
327 cp := ref Const.Pci;
328 cp.ci = ref Const_ci;
329 cp.ci.name_index = u2();
330 class.cps[i] = cp;
331 CON_Fieldref or
332 CON_Methodref or
333 CON_InterfaceMref =>
334 cp := ref Const.Pfmiref;
335 cp.fmiref = ref Const_fmiref;
336 cp.fmiref.class_index = u2();
337 cp.fmiref.name_type_index = u2();
338 class.cps[i] = cp;
339 CON_String =>
340 cp := ref Const.Pstring_index;
341 cp.string_index = u2();
342 class.cps[i] = cp;
343 CON_Integer =>
344 cp := ref Const.Ptint;
345 cp.tint = u4();
346 class.cps[i] = cp;
347 CON_Float =>
348 cp := ref Const.Ptdouble;
349 cp.tdouble = math->bits32real(u4());
350 class.cps[i] = cp;
351 CON_Long =>
352 cp := ref Const.Ptvlong;
353 cp.tvlong = u8();
354 class.cps[i] = cp;
355 i++;
356 CON_Double =>
357 cp := ref Const.Ptdouble;
358 cp.tdouble = math->bits64real(u8());
359 class.cps[i] = cp;
360 i++;
361 CON_NameAndType =>
362 cp := ref Const.Pnat;
363 cp.nat = ref Const_nat;
364 cp.nat.name_index = u2();
365 cp.nat.sig_index = u2();
366 class.cps[i] = cp;
367 CON_Utf8 =>
368 cp := ref Const.Putf8;
369 cp.utf8 = ref Const_utf8;
370 cp.utf8.ln = u2();
371 # null char represented as 16rC080 in String literals
372 a := uPtr(cp.utf8.ln);
373 (src, dst) := (0, 0);
374 while(src < cp.utf8.ln) {
375 if(src+1 < cp.utf8.ln && a[src] == byte 16rC0
376 && a[src+1] == byte 16r80) {
377 a[dst] = byte 0;
378 src++;
379 } else
380 a[dst] = a[src];
381 src++;
382 dst++;
383 }
384 cp.utf8.utf8 = string a[0:dst];
385 uN(cp.utf8.ln);
386 class.cps[i] = cp;
387 # since 49.0
388 CON_MethodHandle =>
389 verifyerrormess("MethodHandles are not implemented");
390 cp := ref Const.Pmethodhandle;
391 cp.mh = ref Const_methodhandle;
392 cp.mh.ref_kind = int u1();
393 cp.mh.ref_index = u2();
394 class.cps[i] = cp;
395 CON_MethodType =>
396 verifyerrormess("MethodTypes are not implemented");
397 cp := ref Const.Pmethodtype;
398 cp.mt = ref Const_methodtype;
399 cp.mt.descriptor_index = u2();
400 class.cps[i] = cp;
401 CON_InvokeDynamic =>
402 verifyerrormess("InvokeDynamics are not implemented");
403 cp := ref Const.Pinvokedyn;
404 cp.invokedyn = ref Const_invokedyn;
405 cp.invokedyn.bs_method_attr_index = u2();
406 cp.invokedyn.name_type_index = u2();
407 class.cps[i] = cp;
408 * =>
409 verifyerrormess("constant pool tag");
410 }
411 }
412
413 verifycpindexes(); # verify after all are established
414
415 class.access_flags = u2(); # verify after [THIS|SUPER]CLASS set
416
417 class.this_class = u2();
418 verifyclassindex(class.this_class);
419 THISCLASS = CLASSNAME(class.this_class);
420
421 class.super_class = u2();
422 if(class.super_class) {
423 verifyclassindex(class.super_class);
424 SUPERCLASS = CLASSNAME(class.super_class);
425 } else if(THISCLASS != "java/lang/Object")
426 verifyerrormess("superclass");
427
428 verifyclassflags();
429
430 # for compatibility with JavaSoft VM
431 if(len THISCLASS > len "inferno/vm/"
432 && THISCLASS[0:len "inferno/vm/"] == "inferno/vm/") {
433 #
434 # ACC_ABSTRACT & ACC_FINAL are both set in JVM,
435 # but a class can't be declared that way
436 #
437 class.access_flags |= ACC_ABSTRACT;
438 #
439 # ACC_SUPER not set in JVM, but javac sets it
440 # for inferno/vm/Array
441 #
442 class.access_flags &= ~ACC_SUPER;
443 } else if(class.access_flags & ACC_INTERFACE) {
444 # interfaces are implicitly abstract
445 class.access_flags |= ACC_ABSTRACT;
446 }
447
448 class.interfaces_count = u2();
449 if(class.interfaces_count > 0)
450 class.interfaces = array [class.interfaces_count] of int;
451 for(i = 0; i < class.interfaces_count; i++) {
452 class.interfaces[i] = u2();
453 verifyclassindex(class.interfaces[i]);
454 }
455
456 class.fields_count = u2();
457 if(class.fields_count > 0)
458 class.fields = array [class.fields_count] of ref Field;
459 for(i = 0; i < class.fields_count; i++) {
460 class.fields[i] = ref Field(0, 0, 0, 0, nil);
461 fp = class.fields[i];
462 fp.access_flags = u2();
463 fp.name_index = u2();
464 fp.sig_index = u2();
465 fp.attr_count = u2();
466 if(fp.attr_count > 0)
467 fp.attr_info = array [fp.attr_count] of ref Attr;
468 for(j = 0; j < fp.attr_count; j++)
469 fp.attr_info[j] = getattr();
470 verifyfield(fp);
471 }
472
473 class.methods_count = u2();
474 if(class.methods_count > 0) {
475 class.methods = array [class.methods_count] of ref Method;
476 pcode = array [class.methods_count] of PCode;
477 }
478 for(i = 0; i < class.methods_count; i++) {
479 class.methods[i] = ref Method(0, 0, 0, 0, nil);
480 mp = class.methods[i];
481 mp.access_flags = u2();
482 mp.name_index = u2();
483 mp.sig_index = u2();
484 mp.attr_count = u2();
485 if(mp.attr_count > 0)
486 mp.attr_info = array [mp.attr_count] of ref Attr;
487 for(j = 0; j < mp.attr_count; j++)
488 mp.attr_info[j] = getattr();
489 verifymethod(mp);
490 }
491
492 # get SourceFile attribute
493 i = u2();
494 for(j = 0; j < i; j++) {
495 a := getattr();
496 if(STRING(a.name) == "SourceFile") {
497 class.source_file = (int a.info[0] << 8) | int a.info[1];
498 verifyutf8index(class.source_file);
499 break;
500 }
501 }
502}
503
504#
505# Return Class structure for named class.
506#
507
508ClassLoader(name: string)
509{
510 fd := sys->open(name, Sys->OREAD);
511 if(fd == nil)
512 fatal("ClassLoader: can't open " + name + ": " + sprint("%r"));
513
514 (i, dir) := sys->fstat(fd);
515 if(i < 0)
516 fatal("ClassLoader: can't stat " + name + ": " + sprint("%r"));
517
518 bytecode := array [int dir.length] of byte;
519 if(sys->read(fd, bytecode, int dir.length) != int dir.length)
520 fatal("ClassLoader: read " + name + ": " + sprint("%r"));
521
522 byte2Class(bytecode);
523
524 fd = nil;
525 bytecode = nil;
526}
527
528#
529# Print access flag mnemonics.
530#
531
532accessflags(flags: int, isclass: int)
533{
534 if(flags == 0)
535 return;
536 bout.putc('\t');
537 if(flags & ACC_PUBLIC)
538 bout.puts("|public");
539 if(flags & ACC_PRIVATE)
540 bout.puts("|private");
541 if(flags & ACC_PROTECTED)
542 bout.puts("|protected");
543 if(flags & ACC_STATIC)
544 bout.puts("|static");
545 if(flags & ACC_FINAL)
546 bout.puts("|final");
547 if(flags & ACC_SUPER) { # ACC_SYNCHRONIZED == ACC_SUPER
548 if(isclass)
549 bout.puts("|super");
550 else
551 bout.puts("|synchronized");
552 }
553 if(flags & ACC_VOLATILE)
554 bout.puts("|volatile");
555 if(flags & ACC_TRANSIENT)
556 bout.puts("|transient");
557 if(flags & ACC_NATIVE)
558 bout.puts("|native");
559 if(flags & ACC_INTERFACE)
560 bout.puts("|interface");
561 if(flags & ACC_ABSTRACT)
562 bout.puts("|abstract");
563 bout.putc('|');
564}
565
566#
567# Print out the constant pool (-c option).
568#
569
570dumpcpool()
571{
572 i, n: int;
573 fp: ref Field;
574 mp: ref Method;
575
576 bout.puts("# -- Constant Pool Start --\n");
577 bout.puts("# minor: " + string class.min + "\n");
578 bout.puts("# major: " + string class.maj + "\n");
579
580 bout.puts("# constant pool count: " + string class.cp_count + "\n");
581
582 for(i = 1; i < class.cp_count; i++) {
583 bout.puts("# " + string i + " ");
584 pick cp := class.cps[i] {
585 Ptdouble =>
586 if(int class.cts[i] == CON_Float)
587 bout.puts("Float " + string cp.tdouble + "\n");
588 else {
589 bout.puts("Double " + string cp.tdouble + "\n");
590 i++;
591 }
592 Ptvlong =>
593 bout.puts("Long " + string cp.tvlong + "\n");
594 i++;
595 Ptint =>
596 bout.puts("Int " + string cp.tint + "\n");
597 Pstring_index =>
598 bout.puts("String " + string cp.string_index);
599 bout.puts("\t\"");
600 pstring(STRING(cp.string_index));
601 bout.puts("\"\n");
602 Pci =>
603 bout.puts("Class " + string cp.ci.name_index);
604 bout.puts("\t\"" + STRING(cp.ci.name_index) + "\"\n");
605 Pfmiref =>
606 case int class.cts[i] {
607 CON_Fieldref =>
608 bout.puts("Field");
609 CON_Methodref =>
610 bout.puts("Method");
611 CON_InterfaceMref =>
612 bout.puts("InterfaceMethod");
613 }
614 bout.puts(" Ref " + string cp.fmiref.class_index + " "
615 + string cp.fmiref.name_type_index + "\n");
616 Pnat =>
617 bout.puts("N&T " + string cp.nat.name_index + " "
618 + string cp.nat.sig_index);
619 bout.puts("\t\"" + STRING(cp.nat.name_index) + "\", \""
620 + STRING(cp.nat.sig_index) + "\"\n");
621 Putf8 =>
622 bout.puts("utf8 \"");
623 pstring(cp.utf8.utf8);
624 bout.puts("\"\n");
625 # since 49.0
626 Pmethodhandle =>
627 bout.puts("niy\n");
628 Pmethodtype =>
629 bout.puts("niy\n");
630 Pinvokedyn =>
631 bout.puts("niy\n");
632 * =>
633 badpick("dumpcpool");
634 }
635 }
636
637 bout.puts("# access flags: " + string class.access_flags);
638 accessflags(class.access_flags, 1);
639 bout.putc('\n');
640
641 bout.puts("# this_class: " + string class.this_class + "\t\""
642 + THISCLASS + "\"\n");
643 bout.puts("# super_class: " + string class.super_class);
644 if(SUPERCLASS != nil)
645 bout.puts("\t\"" + SUPERCLASS + "\"");
646 bout.putc('\n');
647
648 bout.puts("# interfaces: " + string class.interfaces_count + "\n");
649 for(i = 0; i < class.interfaces_count; i++) {
650 bout.puts("#\t" + CLASSNAME(class.interfaces[i]) + "\n");
651 }
652
653 bout.puts("# fields: " + string class.fields_count + "\n");
654 for(i = 0; i < class.fields_count; i++) {
655 fp = class.fields[i];
656 bout.puts("#\t" + STRING(fp.name_index)
657 + ": " + STRING(fp.sig_index));
658 accessflags(fp.access_flags, 0);
659 bout.putc('\n');
660 n = CVattrindex(fp);
661 if(n == 0)
662 continue;
663 bout.puts("#\t\tConstantValue: ");
664 pick cp := class.cps[n] {
665 Ptdouble =>
666 if(int class.cts[n] == CON_Float)
667 bout.puts("Float " + string cp.tdouble + "\n");
668 else # CON_Double
669 bout.puts("Double " + string cp.tdouble + "\n");
670 Ptvlong =>
671 bout.puts("Long " + string cp.tvlong + "\n");
672 Ptint =>
673 bout.puts("Int " + string cp.tint + "\n");
674 Pstring_index =>
675 bout.puts("String \"" + STRING(cp.string_index) + "\"\n");
676 }
677 }
678
679 bout.puts("# methods: " + string class.methods_count + "\n");
680 for(i = 0; i < class.methods_count; i++) {
681 mp = class.methods[i];
682 bout.puts("# " + string i + " Method " + string mp.name_index
683 + " sig " + string mp.sig_index);
684 bout.puts("\t" + STRING(mp.name_index) + STRING(mp.sig_index));
685 accessflags(mp.access_flags, 0);
686 bout.putc('\n');
687 }
688
689 bout.puts("# class attribute ignored\n");
690 bout.puts("# -- Constant Pool End --\n");
691}
java/appl/j2d/ltreloc.b+367−0
@@ -0,0 +1,367 @@
1#
2# Manage load-time resolution information.
3#
4
5LTHash: adt {
6 cr: ref Creloc;
7 next: cyclic ref LTHash;
8};
9
10doclinitinits: int;
11lttbl := array [Hashsize] of ref LTHash; # hash table of ref'd classes
12thisclass: ref Creloc; # class under translation
13nltclasses: int; # no. of classes referenced
14
15#
16# Allocate a Creloc structure.
17#
18
19newCreloc(s: string): ref Creloc
20{
21 nltclasses += 1;
22 return ref Creloc(s, nil, nil, 0);
23}
24
25ltappend(cr: ref Creloc, fr: ref Freloc)
26{
27 if(cr.fr == nil)
28 cr.fr = fr;
29 else
30 cr.tail.next = fr;
31 cr.tail = fr;
32}
33
34ltprepend(cr: ref Creloc, fr: ref Freloc)
35{
36 if(cr.fr == nil)
37 cr.tail = fr;
38 fr.next = cr.fr;
39 cr.fr = fr;
40}
41
42#
43# Add Freloc entry.
44#
45
46addFreloc(cr: ref Creloc, field: string, sig: string, flags: int): ref Freloc
47{
48 fr: ref Freloc;
49
50 fr = ref Freloc(field, sig, flags, nil, nil);
51 fr.ipatch = ref Ipatch(0, 0, nil, nil);
52 if(field[0] == '@') # these must go first in the list !
53 ltprepend(cr, fr);
54 else
55 ltappend(cr, fr);
56 cr.n += 1;
57 return fr;
58}
59
60#
61# Add Creloc entry for classname.
62#
63
64addCreloc(classname: string): ref Creloc
65{
66 h: int;
67 he: ref LTHash;
68
69 h = hashval(classname);
70 he = ref LTHash(newCreloc(classname), lttbl[h]);
71 lttbl[h] = he;
72 return he.cr;
73}
74
75#
76# Get Creloc entry for classname.
77#
78
79getCreloc(classname: string): ref Creloc
80{
81 he: ref LTHash;
82
83 for(he = lttbl[hashval(classname)]; he != nil; he = he.next) {
84 if(classname == he.cr.classname)
85 return he.cr;
86 }
87 return addCreloc(classname);
88}
89
90#
91# Get Freloc entry. Ignore signature if nil.
92#
93
94getFreloc(cr: ref Creloc, field: string, sig: string, flags: int): ref Freloc
95{
96 fr: ref Freloc;
97 lowflags: int;
98
99 lowflags = 0;
100 for(fr = cr.fr; fr != nil; fr = fr.next) {
101 if(fr.field == field && (sig == nil || fr.sig == sig)) {
102 if(fr.flags >> 16 == 0) {
103 fr.flags |= flags;
104 return fr;
105 } else if(fr.flags >> 16 == flags >> 16)
106 return fr;
107 lowflags = fr.flags & 16rffff;
108 }
109 }
110
111 return addFreloc(cr, field, sig, flags|lowflags);
112}
113
114#
115# Seed Creloc for this class.
116#
117
118thisCreloc()
119{
120 i, haveclinit: int;
121 fp: ref Field;
122 mp: ref Method;
123
124 thisclass = addCreloc(THISCLASS);
125
126 # class access_flags here for the benefit of interfaces
127 addFreloc(thisclass, RCLASS, nil, class.access_flags|compileflag);
128
129 # data
130 for(i = 0; i < class.fields_count; i++) {
131 fp = class.fields[i];
132 addFreloc(thisclass, STRING(fp.name_index),
133 STRING(fp.sig_index), fp.access_flags);
134 if((fp.access_flags & ACC_STATIC) && CVattrindex(fp))
135 doclinitinits = 1;
136 }
137
138 # methods
139 haveclinit = 0;
140 for(i = 0; i < class.methods_count; i++) {
141 mp = class.methods[i];
142 addFreloc(thisclass, STRING(mp.name_index),
143 STRING(mp.sig_index), mp.access_flags);
144 if(STRING(mp.name_index) == "<clinit>")
145 haveclinit = 1;
146 }
147 if(doclinitinits && haveclinit == 0)
148 addFreloc(thisclass, "<clinit>", "()V", ACC_STATIC);
149 if((class.access_flags & (ACC_INTERFACE | ACC_ABSTRACT)) == 0)
150 addFreloc(thisclass, "<clone>", "()V", ACC_STATIC);
151}
152
153#
154# Add instruction patch information to Freloc fr.
155#
156
157LTIpatch(fr: ref Freloc, i: ref Inst, operand: int, patchkind: int)
158{
159 addIpatch(fr.ipatch, i, operand, patchkind, !SAVEINST);
160}
161
162#
163# Size of Module Data space taken by load-time relocation information.
164# Includes nil terminator.
165#
166
167LTrelocsize(): int
168{
169 return align((9 + 2*(nltclasses-1)) * IBY2WD, 32);
170}
171
172#
173# Fix type descriptor for relocation information.
174#
175
176Freloctid, Ifacetid: int;
177
178LTrelocdesc(map: array of byte)
179{
180 i, bit: int;
181
182 Freloctid = descid(4*IBY2WD, 1, array [1] of { byte 16rd0 });
183 setIpatchtid(); # force type id for patch info
184 Ifacetid = descid(IBY2WD, 1, array [1] of { byte 16r80 });
185
186 setbit(map, 8); # Class name
187 setbit(map, 12); # Superclass name
188 setbit(map, 16); # Interfaces
189 setbit(map, 20); # Class relocation
190 setbit(map, 28); # Data relocation
191 #
192 # even i: Class name
193 # odd i: Class relocation
194 #
195 bit = 32;
196 for(i = 0; i < (nltclasses-1)*2; i++) {
197 setbit(map, bit);
198 bit += 4;
199 }
200 setbit(map, bit); # nil
201}
202
203#
204# Write Freloc array to .s file.
205#
206
207asmFreloc(off: int, cr: ref Creloc)
208{
209 fr: ref Freloc;
210 reloff: int; # relative offset for array elements
211
212 reloff = 0;
213 asmarray(off, Freloctid, cr.n, reloff); # cr.n != 0, always
214 for(fr = cr.fr; fr != nil; fr = fr.next) {
215 asmstring(reloff, fr.field);
216 reloff += IBY2WD;
217 if(fr.sig != nil)
218 asmstring(reloff, fr.sig);
219 reloff += IBY2WD;
220 asmint(reloff, fr.flags);
221 reloff += IBY2WD;
222 asmIpatch(reloff, fr.ipatch);
223 reloff += IBY2WD;
224 }
225 bout.puts("\tapop\n");
226}
227
228#
229# Write Creloc's (except for this_class) to .s file.
230#
231
232asmCreloc(off: int): int
233{
234 he: ref LTHash;
235 i: int;
236
237 for(i = 0; i < Hashsize; i++) {
238 for(he = lttbl[i]; he != nil; he = he.next) {
239 if(he.cr == thisclass)
240 continue;
241 asmstring(off, he.cr.classname);
242 off += IBY2WD;
243 asmFreloc(off, he.cr);
244 off += IBY2WD;
245 }
246 }
247 off += IBY2WD; # skip past nil
248 return off;
249}
250
251JVNO: con '4';
252JMAGIC: con ('J'<<24)|('a'<<16)|('v'<<8)|'a';
253JVERSION: con ('S'<<24)|('u'<<16)|('x'<<8)|JVNO;
254
255#
256# Write Creloc for this_class to .s file.
257#
258
259asmthisCreloc(off: int): int
260{
261 i: int;
262 reloff: int; # relative offset for array elements
263
264 asmint(off, JMAGIC);
265 off += IBY2WD;
266 asmint(off, JVERSION);
267 off += IBY2WD;
268 asmstring(off, THISCLASS);
269 off += IBY2WD;
270 if(SUPERCLASS != nil) # Object has no superclass
271 asmstring(off, SUPERCLASS);
272 off += IBY2WD;
273 if(class.interfaces_count > 0) {
274 reloff = 0;
275 asmarray(off, Ifacetid, class.interfaces_count, reloff);
276 for(i = 0; i < class.interfaces_count; i++) {
277 asmstring(reloff, CLASSNAME(class.interfaces[i]));
278 reloff += IBY2WD;
279 }
280 bout.puts("\tapop\n");
281 }
282 off += IBY2WD;
283 asmFreloc(off, thisclass);
284 off += IBY2WD;
285 return off;
286}
287
288#
289# Write Freloc array to .dis file.
290#
291
292disFreloc(off: int, cr: ref Creloc)
293{
294 fr: ref Freloc;
295 reloff: int; # relative offset for array elements
296
297 reloff = 0;
298 disarray(off, Freloctid, cr.n);
299 for(fr = cr.fr; fr != nil; fr = fr.next) {
300 disstring(reloff, fr.field);
301 reloff += IBY2WD;
302 if(fr.sig != nil)
303 disstring(reloff, fr.sig);
304 reloff += IBY2WD;
305 disint(reloff, fr.flags);
306 reloff += IBY2WD;
307 disIpatch(reloff, fr.ipatch);
308 reloff += IBY2WD;
309 }
310 disapop();
311}
312
313#
314# Write Creloc's (except for this_class) to .dis file.
315#
316
317disCreloc(off: int): int
318{
319 he: ref LTHash;
320 i: int;
321
322 for(i = 0; i < Hashsize; i++) {
323 for(he = lttbl[i]; he != nil; he = he.next) {
324 if(he.cr == thisclass)
325 continue;
326 disstring(off, he.cr.classname);
327 off += IBY2WD;
328 disFreloc(off, he.cr);
329 off += IBY2WD;
330 }
331 }
332 off += IBY2WD; # skip past nil
333 return off;
334}
335
336#
337# Write Creloc for this_class to .dis file.
338#
339
340disthisCreloc(off: int): int
341{
342 i: int;
343 reloff: int; # relative offset for array elements
344
345 disint(off, JMAGIC);
346 off += IBY2WD;
347 disint(off, JVERSION);
348 off += IBY2WD;
349 disstring(off, THISCLASS);
350 off += IBY2WD;
351 if(SUPERCLASS != nil) # Object has no superclass
352 disstring(off, SUPERCLASS);
353 off += IBY2WD;
354 if(class.interfaces_count > 0) {
355 reloff = 0;
356 disarray(off, Ifacetid, class.interfaces_count);
357 for(i = 0; i < class.interfaces_count; i++) {
358 disstring(reloff, CLASSNAME(class.interfaces[i]));
359 reloff += IBY2WD;
360 }
361 disapop();
362 }
363 off += IBY2WD;
364 disFreloc(off, thisclass);
365 off += IBY2WD;
366 return off;
367}
java/appl/j2d/main.b+179−0
@@ -0,0 +1,179 @@
1bufio: Bufio;
2math: Math;
3sys: Sys;
4str: String;
5
6Iobuf: import bufio;
7fprint, print, sprint: import sys;
8
9gendis: int = 1; # generate .dis rather than .s (default)
10fabort: int; # -f: cause broken thread on fatal error
11emitcpool: int; # -p: emit constant pool (with -S only)
12gensbl: int; # -g: generate .sbl file
13compileflag: int; # -c (MUSTCOMPILE) & -C (DONTCOMPILE)
14verbose: int; # -v: emit Java instructions (with -S only)
15bout: ref Bufio->Iobuf;
16ofile: string;
17
18usage()
19{
20 print("usage: j2d [-cgpvCS] [-o outfile] file.class\n");
21 exit;
22}
23
24#
25# Translate .class file (in) into .s or .dis (out).
26#
27
28translate(in: string, out: string)
29{
30 ClassLoader(in);
31
32 bout = bufio->create(out, Bufio->OWRITE, 8r644);
33 if(bout == nil)
34 fatal("can't open " + out + ": " + sprint("%r"));
35
36 if(emitcpool != 0)
37 dumpcpool();
38
39 thisCreloc();
40 xlate();
41 mpdesc();
42 # Patch frame/call for invokespecial/invokestatic.
43 dofcpatch();
44 # Patch instructions for run-time resolution.
45 doRTpatch();
46
47 if(gendis == 0) { # generate .s file
48 asminst();
49 asmentry();
50 asmdesc();
51 asmvar();
52 asmmod();
53 asmlinks();
54 } else
55 disout(); # generate .dis file
56
57 if(gensbl) # generate .sbl file
58 sblout(out);
59
60 bout.close();
61}
62
63MAXUNENCODED: con Sys->NAMEMAX - 7;
64ENCODEDLEN: con 21;
65
66encoding := array [] of {
67 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
68 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
69 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
70 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
71 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
72 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
73 'w', 'x', 'y', 'z', '0', '1', '2', '3',
74 '4', '5', '6', '7', '8', '9', '+', '-',
75};
76
77encodename(name: string): string
78{
79 d := array [Keyring->MD5dlen] of byte;
80 kr := load Keyring Keyring->PATH;
81 kr->md5(array of byte name, len name, d, nil);
82 e := array[ENCODEDLEN] of byte;
83 v := 0;
84 n := 0;
85 r := 0;
86 for(i := 0; i < ENCODEDLEN; i++) {
87 if(r < 6) {
88 v |= int d[n++] << r;
89 r += 8;
90 }
91 e[i] = byte encoding[v & 16r3F];
92 v >>= 6;
93 r -= 6;
94 }
95 return string e;
96}
97
98#
99# Construct output filename.
100#
101
102mkfileext(file: string, ext: string): string
103{
104 n := len file;
105 if(n <= 6 || file[n-6:] != ".class")
106 usage();
107 else
108 n -= 6;
109 if(n > MAXUNENCODED) {
110 file = encodename(file);
111 n = ENCODEDLEN;
112 }
113 return file[:n] + ext;
114}
115
116init(nil: ref Draw->Context, argv: list of string)
117{
118 ext, s: string;
119
120 sys = load Sys Sys->PATH;
121 math = load Math Math->PATH;
122 bufio = load Bufio Bufio->PATH;
123 if(bufio == nil)
124 fatal("can't load " + Bufio->PATH + ": " + sprint("%r"));
125 str = load String String->PATH;
126 if(str == nil)
127 fatal("can't load " + String->PATH + ": " + sprint("%r"));
128
129 arg := Arg.init(argv);
130 while(c := arg.opt()) {
131 case c {
132 'C' =>
133 compileflag |= _DONTCOMPILE;
134 'S' =>
135 gendis = 0;
136 'c' =>
137 compileflag |= _MUSTCOMPILE;
138 'g' =>
139 gensbl = 1;
140 'f' =>
141 fabort = 1;
142 'p' =>
143 emitcpool = 1;
144 'o' =>
145 ofile = arg.arg();
146 'v' =>
147 verbose = 1;
148 * =>
149 usage();
150 }
151 }
152 argv = arg.argv;
153 arg = nil;
154
155 if(len argv != 1)
156 usage();
157 ifile := hd argv;
158 if(compileflag == (_MUSTCOMPILE|_DONTCOMPILE)) {
159 print("j2d: warning: -c and -C are mutually exclusive, ignoring\n");
160 compileflag = 0;
161 }
162 if((verbose != 0 || emitcpool != 0) && gendis != 0) {
163 print("j2d: warning: -p/-v only allowed with -S, ignoring\n");
164 emitcpool = 0;
165 verbose = 0;
166 }
167 if(ofile != nil)
168 translate(ifile, ofile);
169 else {
170 if(gendis == 0)
171 ext = ".s";
172 else
173 ext = ".dis";
174 (nil, s) = str->splitr(ifile, "/");
175 ofile = mkfileext(s, ext);
176 translate(ifile, ofile);
177 }
178 reset();
179}
java/appl/j2d/mdata.b+461−0
@@ -0,0 +1,461 @@
1#
2# Manage module Data Section.
3#
4
5MP_INT,
6MP_LONG,
7MP_REAL,
8MP_STRING,
9MP_CASE,
10MP_GOTO: con iota;
11
12Datum_v: adt {
13 ival: big; # MP_[INT|LONG]
14 rval: real; # MP_REAL
15 next: cyclic ref Datum.Pv;
16};
17
18Datum_c: adt { # MP_CASE
19 n: int; # number of cases in jmptbl
20 jmptbl: array of int; # 3 words per case, plus default
21};
22
23Datum_g: adt { # MP_GOTO (for finally blocks)
24 n: int; # number of entries in gototbl
25 gototbl:array of int;
26};
27
28Datum: adt {
29 kind: byte; # MP_INT, etc.
30 offset: int; # byte offset in Data Section
31 next: cyclic ref Datum;
32 pick {
33 Pv =>
34 v: ref Datum_v; # MP_[INT|LONG|REAL]
35 Ps =>
36 s: string; # MP_STRING
37 Pc =>
38 c: ref Datum_c; # MP_CASE
39 Pg =>
40 g: ref Datum_g; # MP_GOTO
41 }
42};
43
44Hentry: adt {
45 md: ref Datum.Ps;
46 next: cyclic ref Hentry;
47};
48
49htable := array [Hashsize] of ref Hentry;
50mpoff: int;
51
52mplist: ref Datum;
53mptail: ref Datum;
54llist: ref Datum.Pv;
55rlist: ref Datum.Pv;
56
57#
58# Append a module datum to mplist.
59#
60
61append(md: ref Datum)
62{
63 if(mplist == nil)
64 mplist = md;
65 else
66 mptail.next = md;
67 mptail = md;
68}
69
70#
71# Add a 'byte', int 'word', or 'long'.
72#
73
74mpintegral(kind: int, ival: big): int
75{
76 size: int;
77
78 md := ref Datum.Pv;
79 md.v = ref Datum_v;
80 md.v.ival = ival;
81 case kind {
82 MP_INT =>
83 md.kind = byte MP_INT;
84 size = IBY2WD;
85 mpoff = align(mpoff, IBY2WD);
86 MP_LONG =>
87 md.kind = byte MP_LONG;
88 size = IBY2LG;
89 mpoff = align(mpoff, IBY2LG);
90 md.v.next = llist;
91 llist = md;
92 }
93 md.offset = mpoff;
94 mpoff += size;
95 append(md);
96 return md.offset;
97}
98
99#
100# Add a 'word' (int).
101#
102
103mpint(ival: int): int
104{
105 return mpintegral(MP_INT, big ival);
106}
107
108#
109# Add a 'long'.
110#
111
112mplong(lval: big): int
113{
114 md: ref Datum.Pv;
115
116 for(md = llist; md != nil; md = md.v.next) {
117 if(lval == md.v.ival)
118 return md.offset;
119 }
120 return mpintegral(MP_LONG, lval);
121}
122
123#
124# Add a 'real'.
125#
126
127mpreal(rval: real): int
128{
129 md: ref Datum.Pv;
130
131 for(md = rlist; md != nil; md = md.v.next) {
132 # distinguish 0.0 from -0.0
133 if(rval == md.v.rval
134 && math->realbits64(rval) == math->realbits64(md.v.rval))
135 return md.offset;
136 }
137 md = ref Datum.Pv;
138 md.kind = byte MP_REAL;
139 md.v = ref Datum_v;
140 md.v.rval = rval;
141 md.v.next = rlist;
142 rlist = md;
143 mpoff = align(mpoff, IBY2FT);
144 md.offset = mpoff;
145 mpoff += IBY2FT;
146 append(md);
147 return md.offset;
148}
149
150#
151# Add a 'case' jump table.
152#
153
154mpcase(sz: int, jt: array of int): int
155{
156 md := ref Datum.Pc;
157 md.kind = byte MP_CASE;
158 mpoff = align(mpoff, IBY2WD);
159 md.offset = mpoff;
160 mpoff += (sz*3+2)*IBY2WD;
161 md.c = ref Datum_c;
162 md.c.n = sz;
163 md.c.jmptbl = jt;
164 append(md);
165 return md.offset;
166}
167
168#
169# Add a 'goto' jump table; used for implementing finally blocks.
170#
171
172mpgoto(n: int, gototbl: array of int): int
173{
174 md := ref Datum.Pg;
175 md.kind = byte MP_GOTO;
176 mpoff = align(mpoff, IBY2WD);
177 md.offset = mpoff;
178 mpoff += (n+2)*IBY2WD;
179 md.g = ref Datum_g;
180 md.g.n = n;
181 md.g.gototbl = gototbl;
182 append(md);
183 return md.offset+IBY2WD;
184}
185
186#
187# Hash table lookup function.
188#
189
190htlook(s: string): ref Hentry
191{
192 he: ref Hentry;
193
194 for(he = htable[hashval(s)]; he != nil; he = he.next)
195 if(s == he.md.s)
196 return he;
197 return nil;
198}
199
200#
201# Hash table enter function.
202#
203
204htenter(md: ref Datum.Ps): ref Hentry
205{
206 h: int;
207 he: ref Hentry;
208
209 h = hashval(md.s);
210 he = ref Hentry(md, htable[h]);
211 htable[h] = he;
212 return he;
213}
214
215#
216# Add a 'string'.
217#
218
219mpstring(s: string): int
220{
221 he: ref Hentry;
222 md: ref Datum.Ps;
223
224 if((he = htlook(s)) != nil)
225 return he.md.offset;
226 md = ref Datum.Ps;
227 md.kind = byte MP_STRING;
228 md.s = s;
229 mpoff = align(mpoff, IBY2WD);
230 md.offset = mpoff;
231 mpoff += IBY2WD;
232 append(md);
233 htenter(md);
234 return md.offset;
235}
236
237#
238# Calculate the type descriptor for the Module Data section.
239#
240
241mpdesc()
242{
243 md: ref Datum;
244 ltsize, rtsize, ln, mdsize: int;
245 map: array of byte;
246
247 ltsize = LTrelocsize(); # link-time reloc data
248 mpoff = align(mpoff, IBY2WD);
249 rtsize = RTrelocsize(); # run-time reloc data
250 mdsize = ltsize + mpoff + rtsize;
251 ln = mdsize / (8*IBY2WD) + (mdsize % (8*IBY2WD) != 0);
252 map = array [ln] of { * => byte 0 };
253 LTrelocdesc(map);
254 for(md = mplist; md != nil; md = md.next) {
255 if(int md.kind == MP_STRING)
256 setbit(map, ltsize + md.offset);
257 }
258 RTrelocdesc(map, ltsize + mpoff);
259 RTfixoff(ltsize + mpoff);
260 mpdescid(mdsize, ln, map);
261}
262
263asmprefix(off: int, s: string)
264{
265 bout.puts("\t" + s + "\t@mp+" + string off + ",");
266}
267
268#
269# Begin an array initializer.
270#
271
272asmarray(off: int, tid: int, nelt: int, reloff: int)
273{
274 asmprefix(off, "array");
275 bout.puts("$" + string tid + "," + string nelt + "\n");
276 asmprefix(off, "indir");
277 bout.puts(string reloff + "\n");
278}
279
280asmint(off: int, val: int)
281{
282 asmprefix(off, "word");
283 bout.puts(string val + "\n");
284}
285
286asmlong(off: int, val: big)
287{
288 asmprefix(off, "long");
289 bout.puts(string val + "\n");
290}
291
292asmreal(off: int, val: real)
293{
294 asmprefix(off, "real");
295 bout.puts(string val + "\n");
296}
297
298asmstring(off: int, s: string)
299{
300 asmprefix(off, "string");
301 bout.putc('"');
302 pstring(s);
303 bout.puts("\"\n");
304}
305
306asmcase(off: int, md: ref Datum.Pc)
307{
308 i: int;
309
310 asmprefix(off, "word");
311 bout.puts(string md.c.n);
312 for(i = 0; i < md.c.n; i++) {
313 bout.puts("," + string md.c.jmptbl[i*3]);
314 bout.puts("," + string md.c.jmptbl[i*3+1]);
315 bout.puts("," + string md.c.jmptbl[i*3+2]);
316 }
317 bout.puts("," + string md.c.jmptbl[md.c.n*3] + "\n");
318}
319
320asmgoto(off: int, md: ref Datum.Pg)
321{
322 i: int;
323
324 asmprefix(off, "word");
325 bout.puts(string md.g.n);
326 for(i = 0; i < md.g.n; i++)
327 bout.puts("," + string md.g.gototbl[i]);
328 bout.putc('\n');
329}
330
331#
332# Write Module Data to .s file.
333#
334
335asmvar()
336{
337 md: ref Datum;
338 ltsize, rtsize, off: int;
339
340 ltsize = LTrelocsize();
341 rtsize = RTrelocsize();
342 bout.puts("\tvar\t@mp," + string(ltsize + mpoff + rtsize) + "\n");
343 off = asmthisCreloc(0);
344 asmint(off, mpoff + rtsize);
345 off += IBY2WD;
346 asmDreloc(off);
347 off += IBY2WD;
348 off = asmCreloc(off);
349 off = align(off, 32);
350 if(off != ltsize)
351 fatal("asmvar: off " + string off + ", " + string ltsize);
352
353 for(md = mplist; md != nil; md = md.next) {
354 off = ltsize + md.offset;
355 pick mdp := md {
356 Pv =>
357 case int mdp.kind {
358 MP_INT =>
359 asmint(off, int mdp.v.ival);
360 MP_LONG =>
361 asmlong(off, mdp.v.ival);
362 MP_REAL =>
363 asmreal(off, mdp.v.rval);
364 }
365 Ps =>
366 asmstring(off, mdp.s);
367 Pc =>
368 asmcase(off, mdp);
369 Pg =>
370 asmgoto(off, mdp);
371 * =>
372 badpick("asmvar");
373 }
374 }
375 asmRTClass(ltsize + mpoff);
376}
377
378#
379# Put Module Data size into .dis Header.
380#
381
382disnvar()
383{
384 discon(LTrelocsize() + mpoff + RTrelocsize());
385}
386
387discase(off: int, md: ref Datum.Pc)
388{
389 i: int;
390
391 disint(off, md.c.n);
392 off += IBY2WD;
393 for(i = 0; i < md.c.n; i++) {
394 disint(off, md.c.jmptbl[i*3]);
395 off += IBY2WD;
396 disint(off, md.c.jmptbl[i*3+1]);
397 off += IBY2WD;
398 disint(off, md.c.jmptbl[i*3+2]);
399 off += IBY2WD;
400 }
401 disint(off, md.c.jmptbl[md.c.n*3]);
402}
403
404disgoto(off: int, md: ref Datum.Pg)
405{
406 i: int;
407
408 disint(off, md.g.n);
409 for(i = 0; i < md.g.n; i++) {
410 off += IBY2WD;
411 disint(off, md.g.gototbl[i]);
412 }
413}
414
415#
416# Write Module Data to .dis file.
417#
418
419disvar()
420{
421 md: ref Datum;
422 ltsize, rtsize, off: int;
423
424 ltsize = LTrelocsize();
425 rtsize = RTrelocsize();
426 off = disthisCreloc(0);
427 disint(off, mpoff + rtsize);
428 off += IBY2WD;
429 disDreloc(off);
430 off += IBY2WD;
431 off = disCreloc(off);
432 off = align(off, 32);
433 if(off != ltsize)
434 fatal("disvar: off " + string off + ", ltsize " + string ltsize);
435
436 for(md = mplist; md != nil; md = md.next) {
437 off = ltsize + md.offset;
438 pick mdp := md {
439 Pv =>
440 case int mdp.kind {
441 MP_INT =>
442 disint(off, int mdp.v.ival);
443 MP_LONG =>
444 dislong(off, mdp.v.ival);
445 MP_REAL =>
446 disreal(off, mdp.v.rval);
447 }
448 Ps =>
449 disstring(off, mdp.s);
450 Pc =>
451 discase(off, mdp);
452 Pg =>
453 disgoto(off, mdp);
454 * =>
455 badpick("disvar");
456 }
457 }
458 disRTClass(ltsize + mpoff);
459 disflush(-1, -1, 0);
460 bout.putb(byte 0);
461}
java/appl/j2d/mkfile+49−0
@@ -0,0 +1,49 @@
1<../../../mkconfig
2
3TARG=j2d.dis\
4
5MODULES=\
6 java.m\
7 javaisa.m\
8 reloc.m\
9 $ROOT/appl/cmd/limbo/arg.m\
10 $ROOT/appl/cmd/limbo/isa.m\
11 asm.b\
12 bb.b\
13 datarloc.b\
14 desc.b\
15 dis.b\
16 entry.b\
17 finally.b\
18 frame.b\
19 j2d.b\
20 javadas.b\
21 javatbl.b\
22 links.b\
23 loader.b\
24 ltreloc.b\
25 main.b\
26 mdata.b\
27 module.b\
28 patch.b\
29 rtreloc.b\
30 sbl.b\
31 simjvm.b\
32 unify.b\
33 util.b\
34 xlate.b\
35
36SYSMODULES=\
37 bufio.m\
38 draw.m\
39 keyring.m\
40 math.m\
41 string.m\
42 sys.m\
43
44DISBIN=$ROOT/java/dis/java
45
46<$ROOT/mkfiles/mkdis
47
48LIMBOFLAGS=-I$MODDIR\
49 -I$ROOT/appl/cmd/limbo\
java/appl/j2d/module.b+18−0
@@ -0,0 +1,18 @@
1#
2# Emit 'module' assembly directive.
3#
4
5asmmod()
6{
7 bout.puts("\tmodule\t" + THISCLASS + "\n");
8}
9
10dismod()
11{
12 name := array of byte THISCLASS;
13 n := len name;
14 if(n > Sys->NAMEMAX-1)
15 n = Sys->NAMEMAX-1;
16 bout.write(name, n);
17 bout.putb(byte 0);
18}
java/appl/j2d/patch.b+114−0
@@ -0,0 +1,114 @@
1#
2# Patch operands, etc. that reference pc offsets.
3#
4
5P_CASE,
6P_OTHER: con iota+1;
7
8Patch: adt {
9 kind: byte; # P_xxx
10 i: ref Inst;
11 n: int; # number of cases in ...
12 jmptbl: array of int; # ... case jump table
13 next: cyclic ref Patch;
14};
15
16plist: ref Patch;
17
18#
19# Allocate a Patch structure.
20#
21
22newPatch(kind: int, i: ref Inst): ref Patch
23{
24 p: ref Patch;
25
26 p = ref Patch(byte kind, i, 0, nil, plist);
27 plist = p;
28 return p;
29}
30
31#
32# Record non-case branch instruction for later patching.
33#
34
35patchop(i: ref Inst)
36{
37 newPatch(P_OTHER, i);
38}
39
40#
41# Record case jump table for later patching.
42#
43
44patchcase(i: ref Inst, n: int, jmptbl: array of int)
45{
46 p: ref Patch;
47
48 p = newPatch(P_CASE, i);
49 p.n = n;
50 p.jmptbl = jmptbl;
51}
52
53#
54# Calculate patch address; Java branches are relative.
55#
56
57patchaddr(i: ref Inst, pc: int): int
58{
59 j: ref Jinst;
60 span, srcjpc, dstjpc: int;
61
62 span = pc;
63 srcjpc = i.j.pc;
64 dstjpc = srcjpc + span;
65 j = code.j[dstjpc];
66
67 # account for no-op's (dup, swap, pop, etc.), elided loads/stores
68 while(j.dis == nil) {
69 dstjpc += j.size;
70 j = code.j[dstjpc];
71 }
72
73 return j.dis.pc;
74}
75
76#
77# Patch branch instructions and case jump tables of a method.
78#
79
80patchmethod(startpc: int)
81{
82 p: ref Patch;
83 i: ref Inst;
84 jt: array of int;
85 n: int;
86
87 for(p = plist; p != nil; p = p.next) {
88 i = p.i;
89 if(int p.kind == P_CASE) {
90 jt = p.jmptbl;
91 for(n = 0; n < p.n; n++)
92 jt[n*3+2] = patchaddr(i, jt[n*3+2]);
93 jt[p.n*3] = patchaddr(i, jt[p.n*3]);
94 } else { # P_OTHER
95 i.d.ival = patchaddr(i, i.d.ival);
96 #
97 # jmp $start_of_method -> jmp $start_of_method+1
98 # skip (re-)allocation of Sys->Exception object
99 #
100 # no more Sys->Exception objects, we killed them all
101 #if(i.d.ival == startpc && int i.op == IJMP && code.nex != 0)
102 # i.d.ival += 1;
103 }
104 }
105}
106
107#
108# Clear the patch list after each method.
109#
110
111patchfree()
112{
113 plist = nil;
114}
java/appl/j2d/reloc.m+78−0
@@ -0,0 +1,78 @@
1Rgetputfield: con 16r1 << 16;
2Rgetputstatic: con 16r2 << 16;
3Rinvokeinterface: con 16r3 << 16;
4Rinvokespecial: con 16r4 << 16;
5Rinvokestatic: con 16r5 << 16;
6Rinvokevirtual: con 16r6 << 16;
7
8Rstaticmp: con 16r8 << 16;
9Rspecialmp: con 16r10 << 16;
10
11PSRC: con 16r1 << 2; # patch source operand
12PDST: con 16r2 << 2; # destination
13PMID: con 16r3 << 2; # middle
14
15PIMM: con 16r0; # patch immediate operand
16PSIND: con 16r1; # single indirect offset
17PDIND1: con 16r2; # 1st offset of double indirect
18PDIND2: con 16r3; # 2nd offset
19
20SAVEINST: con 1; # save 'ref Inst' for patching
21
22# special fields
23RCLASS: con "@Class";
24RADT: con "@adt";
25RJEX: con "@jex";
26RMP: con "@mp";
27RNP: con "@np";
28ROBJ: con "@obj";
29RSYS: con "@sys";
30
31# special class name
32RLOADER: con "@Loader";
33
34Ipatch: adt {
35 n: int; # no. of significant elts. in pinfo & i
36 max: int; # number of elements pinfo & i can hold
37 pinfo: array of int; # operand patch directives
38 i: array of ref Inst; # instructions to patch (runtime relocation)
39};
40
41#
42# Load-time relocation.
43#
44
45Freloc: adt {
46 field: string; # field name
47 sig: string; # Java type signature
48 flags: int; # access flags
49 ipatch: ref Ipatch; # instruction patch information
50 next: cyclic ref Freloc;
51};
52
53Creloc: adt {
54 classname: string;
55 fr: ref Freloc;
56 tail: ref Freloc;
57 n: int; # number of elements in 'fr'
58};
59
60#
61# Run-time relocation.
62#
63
64RTReloc: adt {
65 field: string; # field name
66 sig: string; # Java type signature
67 flags: int; # access flags
68 ipatch: ref Ipatch; # instruction patch information
69 next: cyclic ref RTReloc;
70};
71
72RTClass: adt {
73 classname: string;
74 rtr: ref RTReloc;
75 tail: ref RTReloc;
76 n: int; # number of elements in 'rtr'
77 off: int; # Module Data offset
78};
java/appl/j2d/rtreloc.b+389−0
@@ -0,0 +1,389 @@
1#
2# Manage run-time resolution information.
3#
4
5LTLOAD: con 6;
6
7ltload := array [LTLOAD] of {
8 "java/lang/Class",
9 "java/lang/Object",
10 "java/lang/String",
11 "java/lang/StringBuffer",
12 "inferno/vm/Array",
13 "java/io/Serializable"
14};
15
16dortload(name: string): int
17{
18 i: int;
19
20 if(name == nil || name == THISCLASS || name == SUPERCLASS)
21 return 0;
22 for(i = 0; i < LTLOAD; i++) {
23 if(name == ltload[i])
24 return 0;
25 }
26 return 1;
27}
28
29RTHash: adt {
30 rtc: ref RTClass;
31 next: cyclic ref RTHash;
32};
33
34rttbl := array [Hashsize] of ref RTHash; # hash table of ref'd classes
35nrtclasses: int; # no. of classes referenced
36
37rtappend(rtc: ref RTClass, rtr: ref RTReloc)
38{
39 if(rtc.rtr == nil)
40 rtc.rtr = rtr;
41 else
42 rtc.tail.next = rtr;
43 rtc.tail = rtr;
44}
45
46rtprepend(rtc: ref RTClass, rtr: ref RTReloc)
47{
48 if(rtc.rtr == nil)
49 rtc.tail = rtr;
50 rtr.next = rtc.rtr;
51 rtc.rtr = rtr;
52}
53
54#
55# Add RTReloc entry.
56#
57
58addRTReloc(rtc: ref RTClass, field: string, sig: string, flags: int): ref RTReloc
59{
60 rtr: ref RTReloc;
61
62 rtr = ref RTReloc(field, sig, flags, nil, nil);
63 rtr.ipatch = ref Ipatch(0, 0, nil, nil);
64 if(field[0] == '@') # these must go first in the list !
65 rtprepend(rtc, rtr);
66 else
67 rtappend(rtc, rtr);
68 rtc.n += 1;
69 return rtr;
70}
71
72#
73# Allocate a RTClass structure.
74#
75
76newRTClass(s: string): ref RTClass
77{
78 rtc: ref RTClass;
79
80 rtc = ref RTClass(s, nil, nil, 0, 0);
81 nrtclasses += 1;
82 # want the order: @mp, @np, @adt, @Class
83 addRTReloc(rtc, RCLASS, nil, 0);
84 addRTReloc(rtc, RADT, nil, 0);
85 addRTReloc(rtc, RNP, nil, 0);
86 addRTReloc(rtc, RMP, nil, 0);
87 return rtc;
88}
89
90#
91# Add RTClass entry for classname.
92#
93
94addRTClass(classname: string): ref RTClass
95{
96 h: int;
97 he: ref RTHash;
98
99 h = hashval(classname);
100 he = ref RTHash(newRTClass(classname), rttbl[h]);
101 rttbl[h] = he;
102 return he.rtc;
103}
104
105#
106# Get RTClass entry for classname.
107#
108
109getRTClass(classname: string): ref RTClass
110{
111 he: ref RTHash;
112
113 for(he = rttbl[hashval(classname)]; he != nil; he = he.next) {
114 if(classname == he.rtc.classname)
115 return he.rtc;
116 }
117 return addRTClass(classname);
118}
119
120#
121# Get RTReloc entry. Ignore signature if nil.
122#
123
124getRTReloc(rtc: ref RTClass, field: string, sig: string, flags: int): ref RTReloc
125{
126 rtr: ref RTReloc;
127 lowflags: int;
128
129 lowflags = 0;
130 for(rtr = rtc.rtr; rtr != nil; rtr = rtr.next) {
131 if(rtr.field == field && (sig == nil || rtr.sig == sig)) {
132 if(rtr.flags >> 16 == 0) {
133 rtr.flags |= flags;
134 return rtr;
135 } else if(rtr.flags >> 16 == flags >> 16)
136 return rtr;
137 lowflags = rtr.flags & 16rffff;
138 }
139 }
140
141 return addRTReloc(rtc, field, sig, flags|lowflags);
142}
143
144#
145# Add instruction patch information to RTReloc rtr.
146#
147
148RTIpatch(rtr: ref RTReloc, i: ref Inst, operand: int, patchkind: int)
149{
150 addDreloc(i, operand, patchkind);
151 addIpatch(rtr.ipatch, i, operand, patchkind, SAVEINST);
152}
153
154#
155# Fix RTClass and RTReloc 'off' fields to prepare for instruction patch.
156#
157
158RTfixoff(off: int)
159{
160 he: ref RTHash;
161 i: int;
162
163 if(nrtclasses > 0) {
164 for(i = 0; i < Hashsize; i++) {
165 for(he = rttbl[i]; he != nil; he = he.next) {
166 he.rtc.off = off;
167 off += he.rtc.n * IBY2WD;
168 }
169 }
170 }
171}
172
173#
174# Patch instructions for run-time relocation.
175#
176
177doRTpatch()
178{
179 a: ref Addr;
180 he: ref RTHash;
181 ip: ref Ipatch;
182 rtr: ref RTReloc;
183 i, j: int;
184 off, ltsize: int;
185
186 if(nrtclasses == 0)
187 return;
188
189 ltsize = LTrelocsize();
190 for(i = 0; i < Hashsize; i++) {
191 for(he = rttbl[i]; he != nil; he = he.next) {
192 off = he.rtc.off - ltsize;
193 for(rtr = he.rtc.rtr; rtr != nil; rtr = rtr.next) {
194 ip = rtr.ipatch;
195 for(j = 0; j < ip.n; j++) {
196 case(ip.pinfo[j] & (16r3 << 2)) {
197 PSRC =>
198 a = ip.i[j].s;
199 PDST =>
200 a = ip.i[j].d;
201 PMID =>
202 a = ip.i[j].m;
203 }
204 case (ip.pinfo[j] & 16r3) {
205 PIMM or
206 PDIND1 =>
207 a.ival = off;
208 PSIND or
209 PDIND2 =>
210 a.offset = off;
211 }
212 }
213 off += IBY2WD;
214 }
215 }
216 }
217}
218
219#
220# Size of Module Data space taken by run-time relocation information.
221#
222
223RTrelocsize(): int
224{
225 i: int;
226 n: int;
227 he: ref RTHash;
228
229 n = 0;
230 if(nrtclasses > 0) {
231 for(i = 0; i < Hashsize; i++) {
232 for(he = rttbl[i]; he != nil; he = he.next)
233 n += he.rtc.n;
234 }
235 }
236 return n * IBY2WD;
237}
238
239#
240# Fix type descriptor for run-time relocation information.
241#
242
243RTReloctid: int;
244
245RTrelocdesc(map: array of byte, off: int)
246{
247 i: int;
248 he: ref RTHash;
249 rtr: ref RTReloc;
250
251 if(nrtclasses == 0)
252 return;
253
254 RTReloctid = descid(3*IBY2WD, 1, array [1] of { byte 16rc0 });
255
256 for(i = 0; i < Hashsize; i++) {
257 for(he = rttbl[i]; he != nil; he = he.next) {
258 setbit(map, off); # @mp cell
259 off += 4;
260 setbit(map, off); # @np cell
261 off += 4;
262 setbit(map, off); # @adt cell
263 off += 8;
264 rtr = he.rtc.rtr.next.next.next.next;
265 while(rtr != nil) {
266 if(rtr.flags & (Rspecialmp | Rstaticmp))
267 setbit(map, off);
268 off += 4;
269 rtr = rtr.next;
270 }
271 }
272 }
273}
274
275#
276# Write RTReloc array to .s file.
277#
278
279asmRTReloc(off: int, rtc: ref RTClass)
280{
281 rtr: ref RTReloc;
282 reloff: int; # relative offset for array elements
283
284 if(rtc.n <= 4)
285 return;
286
287 reloff = 0;
288 asmarray(off, RTReloctid, rtc.n - 4, reloff);
289 # skip @mp @np @adt @Class
290 rtr = rtc.rtr.next.next.next.next;
291 while(rtr != nil) {
292 asmstring(reloff, rtr.field);
293 reloff += IBY2WD;
294 if(rtr.sig != nil)
295 asmstring(reloff, rtr.sig);
296 reloff += IBY2WD;
297 asmint(reloff, rtr.flags);
298 reloff += IBY2WD;
299 rtr = rtr.next;
300 }
301 bout.puts("\tapop\n");
302}
303
304#
305# Write RTClass information to .s file.
306#
307
308asmRTClass(off: int): int
309{
310 he: ref RTHash;
311 i: int;
312 ltsize: int;
313
314 if(nrtclasses > 0) {
315 ltsize = LTrelocsize();
316 for(i = 0; i < Hashsize; i++) {
317 for(he = rttbl[i]; he != nil; he = he.next) {
318 off += IBY2WD; # @mp cell
319 asmstring(off, he.rtc.classname);
320 off += IBY2WD;
321 asmRTReloc(off, he.rtc);
322 off += IBY2WD;
323 asmint(off, he.rtc.off - ltsize);
324 off += IBY2WD;
325 # account for fields beyond @Class
326 off += (he.rtc.n - 4) * IBY2WD;
327 }
328 }
329 }
330 return off;
331}
332
333#
334# Write RTReloc array to .dis file.
335#
336
337disRTReloc(off: int, rtc: ref RTClass)
338{
339 rtr: ref RTReloc;
340 reloff: int; # relative offset for array elements
341
342 if(rtc.n <= 4)
343 return;
344
345 reloff = 0;
346 disarray(off, RTReloctid, rtc.n - 4);
347 # skip @mp @np @adt @Class
348 rtr = rtc.rtr.next.next.next.next;
349 while(rtr != nil) {
350 disstring(reloff, rtr.field);
351 reloff += IBY2WD;
352 if(rtr.sig != nil)
353 disstring(reloff, rtr.sig);
354 reloff += IBY2WD;
355 disint(reloff, rtr.flags);
356 reloff += IBY2WD;
357 rtr = rtr.next;
358 }
359 disapop();
360}
361
362#
363# Write RTClass information to .dis file.
364#
365
366disRTClass(off: int): int
367{
368 he: ref RTHash;
369 i: int;
370 ltsize: int;
371
372 if(nrtclasses > 0) {
373 ltsize = LTrelocsize();
374 for(i = 0; i < Hashsize; i++) {
375 for(he = rttbl[i]; he != nil; he = he.next) {
376 off += IBY2WD; # @mp cell
377 disstring(off, he.rtc.classname);
378 off += IBY2WD;
379 disRTReloc(off, he.rtc);
380 off += IBY2WD;
381 disint(off, he.rtc.off - ltsize);
382 off += IBY2WD;
383 # account for fields beyond @Class
384 off += (he.rtc.n - 4) * IBY2WD;
385 }
386 }
387 }
388 return off;
389}
java/appl/j2d/sbl.b+43−0
@@ -0,0 +1,43 @@
1#
2# Generate symbol table file (.sbl).
3#
4
5SBLVERSION: con "limbo .sbl 2.0";
6EXT: con ".sbl";
7
8sblout(out: string)
9{
10 n: int;
11 sym: string;
12 bsym: ref Bufio->Iobuf;
13
14 n = len out;
15 if(n > 2 && out[n-1] == 's') { # .s or .dis file ?
16 if(out[n-2] == '.')
17 n -= 2;
18 else if(n > 4 && out[n-2] == 'i'
19 && out[n-3] == 'd' && out[n-4] == '.')
20 n -= 4;
21 }
22 sym = out[0:n] + EXT;
23
24 bsym = bufio->create(sym, Bufio->OWRITE, 8r644);
25 if(bsym == nil)
26 fatal("can't open " + sym + ": " + sprint("%r"));
27
28 bsym.puts(SBLVERSION + "\n");
29 bsym.puts(THISCLASS + "\n");
30 bsym.puts("1\n");
31 s: string;
32 if(class.source_file)
33 s = STRING(class.source_file) + "\n";
34 else
35 s = THISCLASS + ".java\n";
36 bsym.puts(s);
37 sblinst(bsym); # Dis instructions
38 bsym.puts("0\n"); # adts
39 sbllinks(bsym); # functions
40 bsym.puts("0\n"); # globals
41
42 bsym.close();
43}
java/appl/j2d/simjvm.b+1329−0
@@ -0,0 +1,1329 @@
1#
2# "Simulate" the Java VM on a method.
3#
4
5Result: adt {
6 jtype: byte;
7 pc: int;
8};
9
10jvmstack: array of ref Result; # simulated JVM stack
11jvmtos: int; # number of items in jvmstack
12jvmwords: int; # number of words that would be on JVM stack
13rettype: int; # return type of simulated method
14
15jvmpop(): ref Result
16{
17 r: ref Result;
18
19 if(jvmtos == 0)
20 verifyerrormess("stack underflow");
21 r = jvmstack[--jvmtos];
22 if(r.jtype == byte 'J' || r.jtype == byte 'D')
23 jvmwords -= 2;
24 else
25 jvmwords -= 1;
26 if(jvmwords < 0)
27 verifyerrormess("stack underflow");
28 return r;
29}
30
31jvmpush(r: ref Result)
32{
33 if(r.jtype == byte 'J' || r.jtype == byte 'D')
34 jvmwords += 2;
35 else
36 jvmwords += 1;
37 if(jvmwords > code.max_stack)
38 verifyerrormess("stack overflow");
39 jvmstack[jvmtos++] = r;
40}
41
42#
43# Initialize jvmstack to process basic block bb.
44#
45
46jvminit(bb: ref BB)
47{
48 i: int;
49 r: ref Result;
50 s: array of ref StkSnap;
51
52 jvmtos = 0;
53 jvmwords = 0;
54 if(int (bb.flags & (BB_FINALLY | BB_HANDLER))) {
55 r = ref Result(byte 'L', code.code_length);
56 jvmpush(r); # push a dummy
57 return;
58 }
59
60 # set jvmstack to bb.entrystk
61 s = bb.entrystk;
62 for(i = 0; i < bb.entrysz; i++) {
63 r = ref Result(s[i].jtype, s[i].pc[0]);
64 jvmpush(r);
65 }
66}
67
68typecheck(r: ref Result, jtype: byte)
69{
70 # assumes 'L' and '[' are interchangeable
71 if(r.jtype != jtype && (int r.jtype + int jtype) != 'L' + '[')
72 verifyerror(code.j[r.pc]);
73}
74
75jvmtype(jtype: int): byte
76{
77 case jtype {
78 'Z' or
79 'B' or
80 'C' or
81 'S' =>
82 jtype = 'I';
83 }
84 return byte jtype;
85}
86
87srcalloc(j: ref Jinst, n: int)
88{
89 j.nsrc = n;
90 j.src = array [n] of int;
91}
92
93iconst(j: ref Jinst, ival: int)
94{
95 r: ref Result;
96
97 addrimm(j.dst, ival);
98 r = ref Result(byte 'I', j.pc);
99 j.jtype = byte 'I';
100 jvmpush(r);
101}
102
103mpconst(j: ref Jinst, jtype: int, off: int)
104{
105 r: ref Result;
106
107 addrsind(j.dst, Amp, off);
108 r = ref Result(byte jtype, j.pc);
109 j.jtype = byte jtype;
110 jvmpush(r);
111}
112
113verifyindex(j: ref Jinst, jtype: int, ix: int)
114{
115 n: int;
116
117 case jtype {
118 'I' or
119 'F' or
120 'L' =>
121 n = code.max_locals-1;
122 'J' or
123 'D' =>
124 n = code.max_locals-2;
125 }
126 if(ix > n)
127 verifyerror(j);
128}
129
130getfpoff(jtype: int, ix: int): int
131{
132 off: int;
133
134 case jtype {
135 'I' =>
136 off = localix(DIS_W, ix);
137 'J' or
138 'F' or
139 'D' =>
140 off = localix(DIS_L, ix);
141 'L' =>
142 off = localix(DIS_P, ix);
143 }
144 return off;
145}
146
147javaload(j: ref Jinst, jtype: int, ix: int)
148{
149 r: ref Result;
150
151 verifyindex(j, jtype, ix);
152 addrsind(j.dst, Afp, getfpoff(jtype, ix));
153 r = ref Result(byte jtype, j.pc);
154 j.jtype = byte jtype;
155 jvmpush(r);
156}
157
158javastore(j: ref Jinst, jtype: int, ix: int)
159{
160 r: ref Result;
161
162 verifyindex(j, jtype, ix);
163
164 srcalloc(j, 1);
165
166 r = jvmpop();
167 typecheck(r, byte jtype);
168 j.src[0] = r.pc;
169
170 addrsind(j.dst, Afp, getfpoff(jtype, ix));
171}
172
173arrayload(j: ref Jinst, jtype: int)
174{
175 r: ref Result;
176
177 srcalloc(j, 2);
178
179 r = jvmpop();
180 typecheck(r, byte 'I');
181 j.src[1] = r.pc;
182
183 r = jvmpop();
184 typecheck(r, byte '[');
185 j.src[0] = r.pc;
186
187 addrsind(j.dst, Afp, -1);
188 r = ref Result(byte jtype, j.pc);
189 j.jtype = byte jtype;
190 jvmpush(r);
191}
192
193arraystore(j: ref Jinst, jtype: int)
194{
195 r: ref Result;
196
197 srcalloc(j, 3);
198
199 r = jvmpop();
200 typecheck(r, byte jtype);
201 j.src[2] = r.pc;
202
203 r = jvmpop();
204 typecheck(r, byte 'I');
205 j.src[1] = r.pc;
206
207 r = jvmpop();
208 typecheck(r, byte '[');
209 j.src[0] = r.pc;
210
211}
212
213binop(j: ref Jinst, loptype: int, roptype: int, dsttype: int)
214{
215 r: ref Result;
216
217 srcalloc(j, 2);
218
219 r = jvmpop();
220 typecheck(r, byte roptype);
221 j.src[1] = r.pc;
222
223 r = jvmpop();
224 typecheck(r, byte loptype);
225 j.src[0] = r.pc;
226
227 addrsind(j.dst, Afp, -1);
228 r = ref Result(byte dsttype, j.pc);
229 j.jtype = byte dsttype;
230 jvmpush(r);
231}
232
233unop(j: ref Jinst, srctype: int, dsttype: int)
234{
235 r: ref Result;
236
237 srcalloc(j, 1);
238
239 r = jvmpop();
240 typecheck(r, byte srctype);
241 j.src[0] = r.pc;
242
243 addrsind(j.dst, Afp, -1);
244 r = ref Result(byte dsttype, j.pc);
245 j.jtype = byte dsttype;
246 jvmpush(r);
247}
248
249#
250# If the local variable being stored into corresponds to a local
251# that is on the stack, then an explicit mov_ MUST be generated
252# for the load instruction that put it on the stack.
253#
254
255storechk(six: int, stype: int)
256{
257 i, lix: int;
258 ltype: byte;
259 j: ref Jinst;
260 jpi: ref Jinst.Pi;
261 jpw: ref Jinst.Pw;
262
263 for(i = 0; i < jvmtos; i++) {
264 j = code.j[jvmstack[i].pc];
265 lix = -1;
266 pick jp := j {
267 Pi =>
268 jpi = jp;
269 Pw =>
270 jpw = jp;
271 }
272 case int j.op {
273 Jiload or
274 Jlload or
275 Jfload or
276 Jdload or
277 Jaload =>
278 lix = jpi.i;
279 Jiload_0 or
280 Jlload_0 or
281 Jfload_0 or
282 Jdload_0 or
283 Jaload_0 =>
284 lix = 0;
285 Jiload_1 or
286 Jlload_1 or
287 Jfload_1 or
288 Jdload_1 or
289 Jaload_1 =>
290 lix = 1;
291 Jiload_2 or
292 Jlload_2 or
293 Jfload_2 or
294 Jdload_2 or
295 Jaload_2 =>
296 lix = 2;
297 Jiload_3 or
298 Jlload_3 or
299 Jfload_3 or
300 Jdload_3 or
301 Jaload_3 =>
302 lix = 3;
303 Jwide =>
304 case int jpw.w.op {
305 Jiload or
306 Jlload or
307 Jfload or
308 Jdload or
309 Jaload =>
310 lix = jpw.w.ix;
311 }
312 }
313 ltype = byte '-';
314 case int j.op {
315 Jiload or
316 Jiload_0 or
317 Jiload_1 or
318 Jiload_2 or
319 Jiload_3 =>
320 ltype = byte 'I';
321 Jlload or
322 Jlload_0 or
323 Jlload_1 or
324 Jlload_2 or
325 Jlload_3 =>
326 ltype = byte 'J';
327 Jfload or
328 Jfload_0 or
329 Jfload_1 or
330 Jfload_2 or
331 Jfload_3 =>
332 ltype = byte 'F';
333 Jdload or
334 Jdload_0 or
335 Jdload_1 or
336 Jdload_2 or
337 Jdload_3 =>
338 ltype = byte 'D';
339 Jaload or
340 Jaload_0 or
341 Jaload_1 or
342 Jaload_2 or
343 Jaload_3 =>
344 ltype = byte 'L';
345 Jwide =>
346 case int jpw.w.op {
347 Jiload =>
348 ltype = byte 'I';
349 Jlload =>
350 ltype = byte 'J';
351 Jfload =>
352 ltype = byte 'F';
353 Jdload =>
354 ltype = byte 'D';
355 Jaload =>
356 ltype = byte 'L';
357 }
358 }
359 if(lix == six && ltype == byte stype && j.movsrc.mode == byte Anone) {
360 *j.movsrc = *j.dst;
361 addrsind(j.dst, Afp, -1);
362 }
363 }
364}
365
366useone(j: ref Jinst, jtype: int)
367{
368 r: ref Result;
369
370 srcalloc(j, 1);
371
372 r = jvmpop();
373 typecheck(r, byte jtype);
374 j.src[0] = r.pc;
375}
376
377usetwo(j: ref Jinst, loptype: byte, roptype: byte)
378{
379 r: ref Result;
380
381 srcalloc(j, 2);
382
383 r = jvmpop();
384 typecheck(r, roptype);
385 j.src[1] = r.pc;
386
387 r = jvmpop();
388 typecheck(r, loptype);
389 j.src[0] = r.pc;
390}
391
392javanew(j: ref Jinst.Pi)
393{
394 r: ref Result;
395 name: string;
396
397 name = CLASSNAME(j.i);
398 if(name[0] == '[')
399 verifyerror(j);
400
401 addrsind(j.dst, Afp, -1);
402 r = ref Result(byte 'L', j.pc);
403 j.jtype = byte 'L';
404 jvmpush(r);
405}
406
407checkdim(j: ref Jinst, ix: int): int
408{
409 ndim: int;
410 name: string;
411
412 ndim = 0;
413 name = CLASSNAME(ix);
414 while(name[ndim] == '[')
415 ndim++;
416 if(ndim > 255)
417 verifyerror(j);
418 return ndim;
419}
420
421anewarray(j: ref Jinst.Pi)
422{
423 checkdim(j, j.i);
424 unop(j, 'I', '[');
425}
426
427multianewarray(j: ref Jinst.Px2d)
428{
429 r: ref Result;
430 i, ndim: int;
431
432 ndim = checkdim(j, j.x2d.ix);
433 if(ndim == 0 || j.x2d.dim > ndim)
434 verifyerror(j);
435
436 srcalloc(j, j.x2d.dim);
437 for(i = j.x2d.dim-1; i >= 0; i--) {
438 r = jvmpop();
439 typecheck(r, byte 'I');
440 j.src[i] = r.pc;
441 }
442
443 addrsind(j.dst, Afp, -1);
444 r = ref Result(byte '[', j.pc);
445 j.jtype = byte '[';
446 jvmpush(r);
447}
448
449getname(j: ref Jinst): string
450{
451 ix: int;
452
453 pick jp := j {
454 Pi =>
455 ix = jp.i;
456 Px2c0 =>
457 ix = jp.x2c0.ix;
458 * =>
459 badpick("getname[Pi|Px2c0]");
460 }
461 pick c := class.cps[ix] {
462 Pfmiref =>
463 pick n := class.cps[c.fmiref.name_type_index] {
464 Pnat =>
465 return STRING(n.nat.name_index);
466 * =>
467 badpick("getname[Pnat]");
468 }
469 * =>
470 badpick("getname[Pfmiref]");
471 }
472 return nil;
473}
474
475getsig(j: ref Jinst): string
476{
477 ix: int;
478
479 pick jp := j {
480 Pi =>
481 ix = jp.i;
482 Px2c0 =>
483 ix = jp.x2c0.ix;
484 * =>
485 badpick("getsig[Pi|Px2c0]");
486 }
487 pick c := class.cps[ix] {
488 Pfmiref =>
489 pick n := class.cps[c.fmiref.name_type_index] {
490 Pnat =>
491 return STRING(n.nat.sig_index);
492 * =>
493 badpick("getsig[Pnat]");
494 }
495 * =>
496 badpick("getsig[Pfmiref]");
497 }
498 return nil;
499}
500
501getfs(j: ref Jinst)
502{
503 r: ref Result;
504 sig: string;
505
506 sig = getsig(j);
507 if(int j.op == Jgetfield)
508 useone(j, 'L');
509 addrsind(j.dst, Afp, -1);
510 r = ref Result(jvmtype(sig[0]), j.pc);
511 j.jtype = jvmtype(sig[0]);
512 jvmpush(r);
513}
514
515putfs(j: ref Jinst)
516{
517 sig: string;
518
519 sig = getsig(j);
520 if(int j.op == Jputstatic)
521 useone(j, int jvmtype(sig[0]));
522 else
523 usetwo(j, byte 'L', jvmtype(sig[0]));
524}
525
526invoke(j: ref Jinst)
527{
528 name, sig, savesig: string;
529 i, nargs, wargs: int;
530 args: array of ref Result;
531 rv: ref Result;
532
533 name = getname(j);
534 if(name[0] == '<' && (name != "<init>" || int j.op != Jinvokespecial))
535 verifyerror(j);
536
537 # count arguments
538 sig = getsig(j);
539 nargs = 0;
540 wargs = 0;
541 sig = sig[1:]; # skip '('
542 savesig = sig;
543 while(sig[0] != ')') {
544 nargs++;
545 wargs++;
546 if(sig[0] == 'J' || sig[0] == 'D')
547 wargs++;
548 sig = nextjavatype(sig);
549 }
550 if(int j.op != Jinvokestatic) {
551 nargs++;
552 wargs++;
553 }
554 if(wargs > 255)
555 verifyerror(j);
556 pick jp := j {
557 Px2c0 =>
558 if(jp.x2c0.narg != wargs)
559 verifyerror(j);
560 }
561
562 # collect and typecheck arguments
563 if(nargs > 0) {
564 srcalloc(j, nargs);
565 args = array [nargs] of ref Result;
566 for(i = nargs-1; i >= 0; i--) {
567 args[i] = jvmpop();
568 j.src[i] = args[i].pc;
569 }
570 i = 0;
571 if(int j.op != Jinvokestatic) {
572 typecheck(args[0], byte 'L');
573 i++;
574 }
575 sig = savesig;
576 while(sig[0] != ')') {
577 typecheck(args[i], jvmtype(sig[0]));
578 i++;
579 sig = nextjavatype(sig);
580 }
581 args = nil;
582 }
583
584 # return type
585 if(sig[1] != 'V') { # skip ')'
586 addrsind(j.dst, Afp, -1);
587 rv = ref Result(jvmtype(sig[1]), j.pc);
588 j.jtype = jvmtype(sig[1]);
589 jvmpush(rv);
590 }
591}
592
593javareturn(j: ref Jinst)
594{
595 jtype: int;
596
597 case int j.op {
598 Jireturn =>
599 jtype = 'I';
600 Jlreturn =>
601 jtype = 'J';
602 Jfreturn =>
603 jtype = 'F';
604 Jdreturn =>
605 jtype = 'D';
606 Jareturn =>
607 jtype = 'L';
608 Jreturn =>
609 jtype = 'V';
610 }
611 if(jtype != rettype && jtype + rettype != 'L' + '[')
612 verifyerror(j);
613 if(int j.op != Jreturn)
614 useone(j, jtype);
615}
616
617ldc(j: ref Jinst)
618{
619 pick jp := j {
620 Pi =>
621 ix = jp.i;
622 * =>
623 badpick("ldc[1]");
624 }
625
626 pick c := class.cps[ix] {
627 Ptdouble =>
628 jtype: int;
629 if(int class.cts[ix] == CON_Float)
630 jtype = 'F';
631 else
632 jtype = 'D';
633 mpconst(j, jtype, mpreal(c.tdouble));
634 Ptvlong =>
635 mpconst(j, 'J', mplong(c.tvlong));
636 Ptint =>
637 if(notimmable(c.tint))
638 mpconst(j, 'I', mpint(c.tint));
639 else
640 iconst(j, c.tint);
641 Pstring_index =>
642 mpconst(j, 'L', mpstring(STRING(c.string_index)));
643 *j.movsrc = *j.dst;
644 addrsind(j.dst, Afp, -1);
645 Pci =>
646 if (class.maj < 50)
647 badpick("ldc[2]");
648 # TODO: is this actually correct?
649 mpconst(j, 'L', mpstring(STRING(c.ci.name_index)));
650 *j.movsrc = *j.dst;
651 addrsind(j.dst, Afp, -1);
652 * =>
653 badpick("ldc[2]");
654 }
655}
656
657oneword(j: ref Jinst, jtype: byte)
658{
659 if(jtype == byte 'J' || jtype == byte 'D')
660 verifyerror(j);
661}
662
663javapop(j: ref Jinst)
664{
665 r1, r2: ref Result;
666 n: int;
667
668 r1 = jvmpop();
669 n = 1;
670 case int j.op {
671 Jpop =>
672 oneword(j, r1.jtype);
673 Jpop2 =>
674 if(r1.jtype != byte 'J' && r1.jtype != byte 'D') {
675 r2 = jvmpop();
676 n = 2;
677 oneword(j, r2.jtype);
678 }
679 }
680 srcalloc(j, n);
681 j.src[0] = r1.pc;
682 if(n == 2) # pop2
683 j.src[1] = r2.pc;
684}
685
686javadup(j: ref Jinst)
687{
688 w1, w2, w3, w4: ref Result;
689 n: int; # number of stack items duplicated
690
691 n = 1;
692 case int j.op {
693 Jdup =>
694 w1 = jvmpop();
695 oneword(j, w1.jtype);
696 jvmpush(w1);
697 jvmpush(w1);
698 Jdup_x1 =>
699 w1 = jvmpop();
700 oneword(j, w1.jtype);
701 w2 = jvmpop();
702 oneword(j, w2.jtype);
703 jvmpush(w1);
704 jvmpush(w2);
705 jvmpush(w1);
706 Jdup_x2 =>
707 w1 = jvmpop();
708 oneword(j, w1.jtype);
709 w2 = jvmpop();
710 if(w2.jtype == byte 'J' || w2.jtype == byte 'D') {
711 jvmpush(w1);
712 } else {
713 w3 = jvmpop();
714 oneword(j, w3.jtype);
715 jvmpush(w1);
716 jvmpush(w3);
717 }
718 jvmpush(w2);
719 jvmpush(w1);
720 Jdup2 =>
721 w1 = jvmpop();
722 if(w1.jtype == byte 'J' || w1.jtype == byte 'D') {
723 jvmpush(w1);
724 } else {
725 n = 2;
726 w2 = jvmpop();
727 oneword(j, w2.jtype);
728 jvmpush(w2);
729 jvmpush(w1);
730 jvmpush(w2);
731 }
732 jvmpush(w1);
733 Jdup2_x1 =>
734 w1 = jvmpop();
735 if(w1.jtype == byte 'J' || w1.jtype == byte 'D') {
736 w3 = jvmpop();
737 oneword(j, w3.jtype);
738 jvmpush(w1);
739 jvmpush(w3);
740 } else {
741 n = 2;
742 w2 = jvmpop();
743 oneword(j, w2.jtype);
744 w3 = jvmpop();
745 oneword(j, w3.jtype);
746 jvmpush(w2);
747 jvmpush(w1);
748 jvmpush(w3);
749 jvmpush(w2);
750 }
751 jvmpush(w1);
752 Jdup2_x2 =>
753 w1 = jvmpop();
754 if(w1.jtype != byte 'J' && w1.jtype != byte 'D') {
755 n = 2;
756 w2 = jvmpop();
757 oneword(j, w2.jtype);
758 }
759 w3 = jvmpop();
760 if(w3.jtype != byte 'J' && w3.jtype != byte 'D') {
761 w4 = jvmpop();
762 oneword(j, w4.jtype);
763 }
764
765 if(w1.jtype != byte 'J' && w1.jtype != byte 'D')
766 jvmpush(w2);
767 jvmpush(w1);
768 if(w3.jtype != byte 'J' && w3.jtype != byte 'D')
769 jvmpush(w4);
770 jvmpush(w3);
771 if(w1.jtype != byte 'J' && w1.jtype != byte 'D')
772 jvmpush(w2);
773 jvmpush(w1);
774 }
775 srcalloc(j, n);
776 j.src[0] = w1.pc;
777 if(n == 2)
778 j.src[1] = w2.pc;
779}
780
781javaswap(j: ref Jinst)
782{
783 w1, w2: ref Result;
784
785 w1 = jvmpop();
786 oneword(j, w1.jtype);
787 w2 = jvmpop();
788 oneword(j, w2.jtype);
789 jvmpush(w1);
790 jvmpush(w2);
791}
792
793simjinst(j: ref Jinst)
794{
795 jpi: ref Jinst.Pi;
796 jpx1c: ref Jinst.Px1c;
797 jpx2d: ref Jinst.Px2d;
798 jpw: ref Jinst.Pw;
799
800 pick jp := j {
801 Pi =>
802 jpi = jp;
803 Px1c =>
804 jpx1c = jp;
805 Px2d =>
806 jpx2d = jp;
807 Pw =>
808 jpw = jp;
809 }
810
811 case int j.op {
812 Jnop =>
813 ;
814 Jaconst_null =>
815 mpconst(j, 'L', 0);
816 Jiconst_m1 =>
817 iconst(j, -1);
818 Jiconst_0 =>
819 iconst(j, 0);
820 Jiconst_1 =>
821 iconst(j, 1);
822 Jiconst_2 =>
823 iconst(j, 2);
824 Jiconst_3 =>
825 iconst(j, 3);
826 Jiconst_4 =>
827 iconst(j, 4);
828 Jiconst_5 =>
829 iconst(j, 5);
830 Jlconst_0 =>
831 mpconst(j, 'J', mplong(big 0));
832 Jlconst_1 =>
833 mpconst(j, 'J', mplong(big 1));
834 Jfconst_0 =>
835 mpconst(j, 'F', mpreal(0.0));
836 Jfconst_1 =>
837 mpconst(j, 'F', mpreal(1.0));
838 Jfconst_2 =>
839 mpconst(j, 'F', mpreal(2.0));
840 Jdconst_0 =>
841 mpconst(j, 'D', mpreal(0.0));
842 Jdconst_1 =>
843 mpconst(j, 'D', mpreal(1.0));
844 Jbipush or
845 Jsipush =>
846 iconst(j, jpi.i);
847 Jldc or
848 Jldc_w or
849 Jldc2_w =>
850 ldc(j);
851 Jiload =>
852 javaload(j, 'I', jpi.i);
853 Jlload =>
854 javaload(j, 'J', jpi.i);
855 Jfload =>
856 javaload(j, 'F', jpi.i);
857 Jdload =>
858 javaload(j, 'D', jpi.i);
859 Jaload =>
860 javaload(j, 'L', jpi.i);
861 Jiload_0 =>
862 javaload(j, 'I', 0);
863 Jiload_1 =>
864 javaload(j, 'I', 1);
865 Jiload_2 =>
866 javaload(j, 'I', 2);
867 Jiload_3 =>
868 javaload(j, 'I', 3);
869 Jlload_0 =>
870 javaload(j, 'J', 0);
871 Jlload_1 =>
872 javaload(j, 'J', 1);
873 Jlload_2 =>
874 javaload(j, 'J', 2);
875 Jlload_3 =>
876 javaload(j, 'J', 3);
877 Jfload_0 =>
878 javaload(j, 'F', 0);
879 Jfload_1 =>
880 javaload(j, 'F', 1);
881 Jfload_2 =>
882 javaload(j, 'F', 2);
883 Jfload_3 =>
884 javaload(j, 'F', 3);
885 Jdload_0 =>
886 javaload(j, 'D', 0);
887 Jdload_1 =>
888 javaload(j, 'D', 1);
889 Jdload_2 =>
890 javaload(j, 'D', 2);
891 Jdload_3 =>
892 javaload(j, 'D', 3);
893 Jaload_0 =>
894 javaload(j, 'L', 0);
895 Jaload_1 =>
896 javaload(j, 'L', 1);
897 Jaload_2 =>
898 javaload(j, 'L', 2);
899 Jaload_3 =>
900 javaload(j, 'L', 3);
901 Jbaload or
902 Jcaload or
903 Jsaload or
904 Jiaload =>
905 arrayload(j, 'I');
906 Jlaload =>
907 arrayload(j, 'J');
908 Jfaload =>
909 arrayload(j, 'F');
910 Jdaload =>
911 arrayload(j, 'D');
912 Jaaload =>
913 arrayload(j, 'L');
914 Jistore =>
915 storechk(jpi.i, 'I');
916 javastore(j, 'I', jpi.i);
917 Jlstore =>
918 storechk(jpi.i, 'J');
919 javastore(j, 'J', jpi.i);
920 Jfstore =>
921 storechk(jpi.i, 'F');
922 javastore(j, 'F', jpi.i);
923 Jdstore =>
924 storechk(jpi.i, 'D');
925 javastore(j, 'D', jpi.i);
926 Jastore => # could be start of finally block or handler
927 storechk(jpi.i, 'L');
928 javastore(j, 'L', jpi.i);
929 Jistore_0 =>
930 storechk(0, 'I');
931 javastore(j, 'I', 0);
932 Jistore_1 =>
933 storechk(1, 'I');
934 javastore(j, 'I', 1);
935 Jistore_2 =>
936 storechk(2, 'I');
937 javastore(j, 'I', 2);
938 Jistore_3 =>
939 storechk(3, 'I');
940 javastore(j, 'I', 3);
941 Jlstore_0 =>
942 storechk(0, 'J');
943 javastore(j, 'J', 0);
944 Jlstore_1 =>
945 storechk(1, 'J');
946 javastore(j, 'J', 1);
947 Jlstore_2 =>
948 storechk(2, 'J');
949 javastore(j, 'J', 2);
950 Jlstore_3 =>
951 storechk(3, 'J');
952 javastore(j, 'J', 3);
953 Jfstore_0 =>
954 storechk(0, 'F');
955 javastore(j, 'F', 0);
956 Jfstore_1 =>
957 storechk(1, 'F');
958 javastore(j, 'F', 1);
959 Jfstore_2 =>
960 storechk(2, 'F');
961 javastore(j, 'F', 2);
962 Jfstore_3 =>
963 storechk(3, 'F');
964 javastore(j, 'F', 3);
965 Jdstore_0 =>
966 storechk(0, 'D');
967 javastore(j, 'D', 0);
968 Jdstore_1 =>
969 storechk(1, 'D');
970 javastore(j, 'D', 1);
971 Jdstore_2 =>
972 storechk(2, 'D');
973 javastore(j, 'D', 2);
974 Jdstore_3 =>
975 storechk(3, 'D');
976 javastore(j, 'D', 3);
977 Jastore_0 => # could be start of finally block or handler
978 storechk(0, 'L');
979 javastore(j, 'L', 0);
980 Jastore_1 =>
981 storechk(1, 'L');
982 javastore(j, 'L', 1);
983 Jastore_2 =>
984 storechk(2, 'L');
985 javastore(j, 'L', 2);
986 Jastore_3 =>
987 storechk(3, 'L');
988 javastore(j, 'L', 3);
989 Jbastore or
990 Jcastore or
991 Jsastore or
992 Jiastore =>
993 arraystore(j, 'I');
994 Jlastore =>
995 arraystore(j, 'J');
996 Jfastore =>
997 arraystore(j, 'F');
998 Jdastore =>
999 arraystore(j, 'D');
1000 Jaastore =>
1001 arraystore(j, 'L');
1002 Jpop or
1003 Jpop2 =>
1004 javapop(j);
1005 Jdup or
1006 Jdup_x1 or
1007 Jdup_x2 or
1008 Jdup2 or
1009 Jdup2_x1 or
1010 Jdup2_x2 =>
1011 javadup(j);
1012 Jswap =>
1013 javaswap(j);
1014 Jiadd or
1015 Jisub or
1016 Jimul or
1017 Jidiv or
1018 Jirem or
1019 Jishl or
1020 Jishr or
1021 Jiushr or
1022 Jiand or
1023 Jior or
1024 Jixor =>
1025 binop(j, 'I', 'I', 'I');
1026 Jladd or
1027 Jlsub or
1028 Jlmul or
1029 Jldiv or
1030 Jlrem or
1031 Jland or
1032 Jlor or
1033 Jlxor =>
1034 binop(j, 'J', 'J', 'J');
1035 Jfadd or
1036 Jfsub or
1037 Jfmul or
1038 Jfdiv or
1039 Jfrem =>
1040 binop(j, 'F', 'F', 'F');
1041 Jdadd or
1042 Jdsub or
1043 Jdmul or
1044 Jddiv or
1045 Jdrem =>
1046 binop(j, 'D', 'D', 'D');
1047 Jineg =>
1048 unop(j, 'I', 'I');
1049 Jlneg =>
1050 unop(j, 'J', 'J');
1051 Jfneg =>
1052 unop(j, 'F', 'F');
1053 Jdneg =>
1054 unop(j, 'D', 'D');
1055 Jlshl or
1056 Jlshr or
1057 Jlushr =>
1058 binop(j, 'J', 'I', 'J');
1059 Jiinc =>
1060 verifyindex(j, 'I', jpx1c.x1c.ix);
1061 storechk(jpx1c.x1c.ix, 'I');
1062 Ji2l =>
1063 unop(j, 'I', 'J');
1064 Ji2f =>
1065 unop(j, 'I', 'F');
1066 Ji2d =>
1067 unop(j, 'I', 'D');
1068 Jl2i =>
1069 unop(j, 'J', 'I');
1070 Jl2f =>
1071 unop(j, 'J', 'F');
1072 Jl2d =>
1073 unop(j, 'J', 'D');
1074 Jf2i =>
1075 unop(j, 'F', 'I');
1076 Jf2l =>
1077 unop(j, 'F', 'J');
1078 Jf2d =>
1079 unop(j, 'F', 'D');
1080 Jd2i =>
1081 unop(j, 'D', 'I');
1082 Jd2l =>
1083 unop(j, 'D', 'J');
1084 Jd2f =>
1085 unop(j, 'D', 'F');
1086 Ji2b or
1087 Ji2c or
1088 Ji2s =>
1089 unop(j, 'I', 'I');
1090 Jlcmp =>
1091 binop(j, 'J', 'J', 'I');
1092 Jfcmpl or
1093 Jfcmpg =>
1094 binop(j, 'F', 'F', 'I');
1095 Jdcmpl or
1096 Jdcmpg =>
1097 binop(j, 'D', 'D', 'I');
1098 Jifeq or
1099 Jifne or
1100 Jiflt or
1101 Jifge or
1102 Jifgt or
1103 Jifle =>
1104 useone(j, 'I');
1105 Jif_icmpeq or
1106 Jif_icmpne or
1107 Jif_icmplt or
1108 Jif_icmpge or
1109 Jif_icmpgt or
1110 Jif_icmple =>
1111 usetwo(j, byte 'I', byte 'I');
1112 Jif_acmpeq or
1113 Jif_acmpne =>
1114 usetwo(j, byte 'L', byte 'L');
1115 Jgoto or
1116 Jgoto_w or
1117 Jjsr or # no push; not following ...
1118 Jjsr_w => # ... these branches
1119 ;
1120 Jret =>
1121 verifyindex(j, 'L', jpi.i);
1122 Jtableswitch or
1123 Jlookupswitch =>
1124 useone(j, 'I');
1125 Jireturn or
1126 Jlreturn or
1127 Jfreturn or
1128 Jdreturn or
1129 Jareturn or
1130 Jreturn =>
1131 javareturn(j);
1132 Jgetfield or
1133 Jgetstatic =>
1134 getfs(j);
1135 Jputfield or
1136 Jputstatic =>
1137 putfs(j);
1138 Jinvokevirtual or
1139 Jinvokespecial or
1140 Jinvokestatic or
1141 Jinvokeinterface =>
1142 invoke(j);
1143 Jxxxunusedxxx =>
1144 ;
1145 Jnew =>
1146 javanew(jpi);
1147 Jnewarray =>
1148 unop(j, 'I', '[');
1149 Janewarray =>
1150 anewarray(jpi);
1151 Jarraylength =>
1152 unop(j, '[', 'I');
1153 Jathrow =>
1154 useone(j, 'L');
1155 Jcheckcast =>
1156 unop(j, 'L', 'L');
1157 Jinstanceof =>
1158 unop(j, 'L', 'I');
1159 Jmonitorenter or
1160 Jmonitorexit =>
1161 useone(j, 'L');
1162 Jwide =>
1163 case int jpw.w.op {
1164 Jiload =>
1165 javaload(j, 'I', jpw.w.ix);
1166 Jlload =>
1167 javaload(j, 'J', jpw.w.ix);
1168 Jfload =>
1169 javaload(j, 'F', jpw.w.ix);
1170 Jdload =>
1171 javaload(j, 'D', jpw.w.ix);
1172 Jaload =>
1173 javaload(j, 'L', jpw.w.ix);
1174 Jistore =>
1175 storechk(jpw.w.ix, 'I');
1176 javastore(j, 'I', jpw.w.ix);
1177 Jlstore =>
1178 storechk(jpw.w.ix, 'J');
1179 javastore(j, 'J', jpw.w.ix);
1180 Jfstore =>
1181 storechk(jpw.w.ix, 'F');
1182 javastore(j, 'F', jpw.w.ix);
1183 Jdstore =>
1184 storechk(jpw.w.ix, 'D');
1185 javastore(j, 'D', jpw.w.ix);
1186 Jastore =>
1187 storechk(jpw.w.ix, 'L');
1188 javastore(j, 'L', jpw.w.ix);
1189 Jret =>
1190 verifyindex(j, 'L', jpw.w.ix);
1191 Jiinc =>
1192 verifyindex(j, 'I', jpw.w.ix);
1193 storechk(jpw.w.ix, 'I');
1194 }
1195 Jmultianewarray =>
1196 multianewarray(jpx2d);
1197 Jifnull or
1198 Jifnonnull =>
1199 useone(j, 'L');
1200 }
1201}
1202
1203#
1204# Take snapshot of current stack.
1205#
1206
1207snapstack(): array of ref StkSnap
1208{
1209 s: array of ref StkSnap;
1210 i: int;
1211
1212 s = array [jvmtos] of ref StkSnap;
1213 for(i = 0; i < jvmtos; i++) {
1214 s[i] = ref StkSnap(byte 0, 0, nil);
1215 s[i].jtype = jvmstack[i].jtype;
1216 s[i].npc = 1;
1217 s[i].pc = array [1] of int;
1218 s[i].pc[0] = jvmstack[i].pc;
1219 }
1220 return s;
1221}
1222
1223#
1224# Merge current stack into bb.entrystk.
1225#
1226
1227stackmerge(bb: ref BB)
1228{
1229 s: ref StkSnap;
1230 i, j: int;
1231 pct: int;
1232 jtype1, jtype2: byte;
1233
1234 if(jvmtos == 0) {
1235 if(bb.entrysz != 0)
1236 verifyerrormess("stack merge");
1237 return;
1238 }
1239 if(bb.entrystk == nil) {
1240 bb.entrysz = jvmtos;
1241 bb.entrystk = snapstack();
1242 return;
1243 }
1244 # true stack merge
1245 if(bb.entrysz != jvmtos)
1246 verifyerrormess("stack merge");
1247outer: for(i = 0; i < jvmtos; i++) {
1248 jtype1 = jvmstack[i].jtype;
1249 jtype2 = bb.entrystk[i].jtype;
1250 if(jtype1 != jtype2 && (int jtype1 + int jtype2) != 'L' + '[')
1251 verifyerrormess("stack merge");
1252 s = bb.entrystk[i];
1253 for(j = 0; j < s.npc; j++) {
1254 if(s.pc[j] == jvmstack[i].pc)
1255 continue outer;
1256 }
1257 newpc := array [s.npc+1] of int;
1258 for(k := 0; k < s.npc; k++)
1259 newpc[k] = s.pc[k];
1260 s.pc = newpc;
1261 s.pc[s.npc++] = jvmstack[i].pc;
1262 # percolate into sorted order
1263 for(j = s.npc-1; j > 0; j--) {
1264 if(s.pc[j-1] > s.pc[j]) {
1265 pct = s.pc[j-1];
1266 s.pc[j-1] = s.pc[j];
1267 s.pc[j] = pct;
1268 } else
1269 break;
1270 }
1271 }
1272}
1273
1274#
1275# Simulate the instructions in a basic block.
1276#
1277
1278simbb(bb: ref BB)
1279{
1280 i: int;
1281 j: ref Jinst;
1282 pc: int;
1283
1284 if(bb.state == BB_POSTSIM)
1285 fatal("simbb: BB_POSTSIM");
1286
1287 jvminit(bb);
1288 pc = bb.js.pc;
1289 while(pc <= bb.je.pc) {
1290 j = code.j[pc];
1291 simjinst(j);
1292 pc += j.size;
1293 }
1294 bb.state = BB_POSTSIM;
1295
1296 if(jvmtos != 0) {
1297 bb.exitsz = jvmtos;
1298 bb.exitstk = snapstack();
1299 }
1300
1301 for(i = 0; i < bb.nsucc; i++) {
1302 stackmerge(bb.succ[i]);
1303 if(bb.succ[i].state == BB_PRESIM)
1304 bbput(bb.succ[i]);
1305 }
1306}
1307
1308#
1309# Simulate the Java VM on each of the method's basic blocks.
1310#
1311
1312simjvm(sig: string)
1313{
1314 bb: ref BB;
1315 ix: int;
1316
1317 ix = 1; # skip '('
1318 while(sig[ix] != ')')
1319 ix++;
1320 rettype = int jvmtype(sig[ix+1]);
1321
1322 jvmstack = array [code.max_stack] of ref Result;
1323
1324 bbinit();
1325 while((bb = bbget()) != nil)
1326 simbb(bb);
1327
1328 jvmstack = nil;
1329}
java/appl/j2d/unify.b+98−0
@@ -0,0 +1,98 @@
1#
2# "Unify" results that are produced in one basic block and consumed
3# in another. I.e., ensure that producers and consumers access results
4# through consistent fp offsets.
5#
6
7pushsucc(bb: ref BB)
8{
9 i: int;
10
11 for(i = 0; i < bb.nsucc; i++) {
12 if(bb.succ[i].state == BB_POSTSIM)
13 bbput(bb.succ[i]);
14 }
15}
16
17pass1(s: ref StkSnap): int
18{
19 j: ref Jinst;
20 i: int;
21 fpoff: int;
22
23 fpoff = -1;
24 for(i = 0; i < s.npc; i++) {
25 j = code.j[s.pc[i]];
26 if((isload(j) && j.movsrc.mode != byte Anone)
27 || (!isload(j) && j.dst.offset != -1)) {
28 if(fpoff == -1)
29 fpoff = j.dst.offset;
30 else if(fpoff != j.dst.offset)
31 fatal("pass1: can't");
32 }
33 }
34 if(fpoff == -1)
35 fpoff = getreg(j2dtype(s.jtype));
36 return fpoff;
37}
38
39pass2(s: ref StkSnap, fpoff: int)
40{
41 j: ref Jinst;
42 i: int;
43
44 for(i = 0; i < s.npc; i++) {
45 j = code.j[s.pc[i]];
46 if(isload(j) && j.movsrc.mode == byte Anone) {
47 *j.movsrc = *j.dst;
48 j.dst.mode = byte Afp;
49 }
50 j.dst.offset = fpoff;
51 }
52}
53
54unifybb(bb: ref BB)
55{
56 s: ref StkSnap;
57 n, m: int;
58
59 if(bb.state == BB_POSTUNIFY)
60 fatal("unifybb: BB_POSTUNIFY");
61
62 if(bb.entrystk == nil) {
63 pushsucc(bb);
64 return;
65 }
66
67 clearreg();
68 reservereg(bb.entrystk, bb.entrysz);
69 reservereg(bb.exitstk, bb.exitsz);
70
71 for(n = 0; n < bb.entrysz; n++) {
72 s = bb.entrystk[n];
73 for(m = 0; m < s.npc; m++) {
74 reservereg(code.j[s.pc[m]].bb.entrystk,
75 code.j[s.pc[m]].bb.entrysz);
76 }
77 }
78
79 for(n = 0; n < bb.entrysz; n++) {
80 s = bb.entrystk[n];
81 if(s.npc == 1)
82 dstreg(code.j[s.pc[0]].dst, j2dtype(s.jtype));
83 else
84 pass2(s, pass1(s));
85 }
86
87 bb.state = BB_POSTUNIFY;
88 pushsucc(bb);
89}
90
91unify()
92{
93 bb: ref BB;
94
95 bbinit();
96 while((bb = bbget()) != nil)
97 unifybb(bb);
98}
java/appl/j2d/util.b+432−0
@@ -0,0 +1,432 @@
1#
2# Utility functions.
3#
4
5codeix: array of byte;
6ix: int;
7
8uSet(x: array of byte)
9{
10 codeix = x;
11 ix = 0;
12}
13
14boundscheck(n: int)
15{
16 if(ix+n-1 >= len codeix)
17 verifyerrormess("Attribute bounds");
18}
19
20uPtr(i: int): array of byte
21{
22 boundscheck(i);
23 return codeix[ix:ix+i];
24}
25
26uN(i: int)
27{
28 ix += i;
29}
30
31u1(): byte
32{
33 boundscheck(1);
34 return codeix[ix++];
35}
36
37u2(): int
38{
39 l: int;
40
41 boundscheck(2);
42 l = (int(codeix[ix])<<8) | int(codeix[ix+1]);
43 ix += 2;
44 return l;
45}
46
47u4(): int
48{
49 l: int;
50
51 boundscheck(4);
52 l = (int(codeix[ix])<<24) | (int(codeix[ix+1])<<16)
53 | (int(codeix[ix+2])<<8) | int(codeix[ix+3]);
54 ix += 4;
55 return l;
56}
57
58getattr(): ref Attr
59{
60 a := ref Attr(0, 0, nil);
61 a.name = u2();
62 verifycpindex(nil, a.name, 1 << CON_Utf8);
63 a.ln = u4();
64 boundscheck(a.ln);
65 a.info = array [a.ln] of byte;
66 a.info[:] = codeix[ix:ix+a.ln];
67 ix += a.ln;
68 return a;
69}
70
71#
72# Get the constantvalue_index of a ConstantValue attribute.
73#
74
75CVattrindex(fp: ref Field): int
76{
77 i: int;
78 a: ref Attr;
79
80 for(i = 0; i < fp.attr_count; i++) {
81 a = fp.attr_info[i];
82 if(STRING(a.name) != "ConstantValue")
83 continue;
84 if(a.ln != 2)
85 verifyerrormess("ConstantValue attribute");
86 return ((int a.info[0])<<8) | int a.info[1];
87 }
88 return 0;
89}
90
91#
92# Align 'off' on an 'align'-byte boundary ('align' is a power of 2).
93#
94
95align(off: int, align: int): int
96{
97 align--;
98 return (off + align) & ~align;
99}
100
101#
102# Set 'offset' bit in type descriptor 'map'.
103#
104
105setbit(map: array of byte, offset: int)
106{
107 map[offset / (8*IBY2WD)] |= byte(1 << (7 - (offset / IBY2WD % 8)));
108}
109
110#
111# Trivial hash function from asm.
112#
113
114hashval(s: string): int
115{
116 h, i: int;
117
118 h = 0;
119 for(i = 0; i < len s; i++)
120 h = h*3 + s[i];
121 if(h < 0)
122 h = -h;
123 return h % Hashsize;
124}
125
126#
127# Advance to the next Java type in a method descriptor.
128#
129
130nextjavatype(s: string): string
131{
132 nlb: int;
133
134 nlb = 0;
135 while(1) {
136 case s[0] {
137 'L' =>
138 (nil, s) = str->splitl(s, ";");
139 return s[1:];
140 'V' or
141 'Z' or
142 'B' or
143 'C' or
144 'S' or
145 'I' or
146 'J' or
147 'F' or
148 'D' =>
149 return s[1:];
150 '[' =>
151 if(++nlb < 256)
152 s = s[1:];
153 else
154 s[0] = 'X'; # force verifyerrormess()
155 * =>
156 verifyerrormess("field/method descriptor");
157 }
158 }
159}
160
161j2dtype(jtype: byte): byte
162{
163 dtype: byte;
164
165 case int jtype {
166 'Z' or
167 'B' or
168 'C' or
169 'S' or
170 'I' =>
171 dtype = byte DIS_W;
172 'J' or
173 'F' or
174 'D' =>
175 dtype = byte DIS_L;
176 'L' or
177 '[' =>
178 dtype = byte DIS_P;
179 }
180 return dtype;
181}
182
183#
184# $i operands
185#
186
187addrimm(a: ref Addr, ival: int)
188{
189 a.mode = byte Aimm;
190 a.ival = ival;
191}
192
193#
194# Is an int too big to be an immediate operand?
195#
196
197notimmable(val: int): int
198{
199 return val < 0 && ((val >> 29) & 7) != 7 || val > 0 && (val >> 29) != 0;
200}
201
202#
203# i(fp) and i(mp) operands
204#
205
206addrsind(a: ref Addr, mode: byte, off: int)
207{
208 a.mode = mode;
209 a.offset = off;
210}
211
212#
213# i(j(fp)) and i(j(mp)) operands
214#
215
216addrdind(a: ref Addr, mode: byte, fi: int, si: int)
217{
218 a.mode = mode;
219 a.ival = fi;
220 a.offset = si;
221}
222
223#
224# Assign a register to a destination operand if not already done so.
225#
226
227dstreg(a: ref Addr, dtype: byte)
228{
229 if(a.mode == Afp && a.offset == -1)
230 a.offset = getreg(dtype);
231}
232
233#
234# Print a string.
235#
236
237pstring(s: string)
238{
239 slen, c: int;
240
241 slen = len s;
242 for(i := 0; i < slen; i++) {
243 c = s[i];
244 if(c == '\n')
245 bout.puts("\\n");
246 else if(c == '\t')
247 bout.puts("\\t");
248 else if(c == '"')
249 bout.puts("\\\"");
250 else if(c == '\\')
251 bout.puts("\\\\");
252 else
253 bout.putc(c);
254 }
255}
256
257#
258# Die.
259#
260
261fatal(msg: string)
262{
263 print("fatal j2d error: %s\n", msg);
264 if(bout != nil)
265 sys->remove(ofile);
266 reset();
267 if(fabort) {
268 j: ref Jinst;
269 if(j.dst == nil); # abort
270 }
271 raise "fail:fail";
272 #exit;
273}
274
275#
276# Bytecode verification.
277#
278
279#
280# Verify a constant pool index.
281#
282
283verifycpindex(j: ref Jinst, ix: int, CON_bits: int)
284{
285 if(ix > 0 && ix < class.cp_count && ((1 << int class.cts[ix]) & CON_bits))
286 return;
287
288 if(j != nil)
289 verifyerror(j);
290 else
291 verifyerrormess("constant pool index");
292}
293
294verifyerror(j: ref Jinst)
295{
296 fatal("VerifyError: " + jinstconv(j));
297}
298
299verifyerrormess(mess: string)
300{
301 fatal("VerifyError: " + mess);
302}
303
304badpick(s: string)
305{
306 fatal("bad pick in " + s);
307}
308
309hex(v, n: int): string
310{
311 return sprint("%.*ux", n, v);
312}
313
314#
315# Size of frame cell of given type.
316#
317
318cellsize := array [int DIS_P + 1] of {
319 0, # DIS_X
320 IBY2WD, # DIS_W
321 IBY2LG, # DIS_L
322 IBY2WD, # DIS_P
323};
324
325#
326# enable consecutive runs of J2d->init() without having to reload
327#
328
329reset()
330{
331 i: int;
332
333 # asm.b
334 clinitclone = nil;
335
336 # bb.b
337 roots = nil;
338 nr = 0;
339 maxr = 0;
340
341 # datarloc.b
342 dreloc = nil;
343 Ipatchtid = 0;
344
345 # desc.b
346 dlist = nil;
347 dtail = nil;
348 id = 0;
349
350 # dis.b
351 ihead = nil;
352 itail = nil;
353 cache = nil;
354 ncached = 0;
355 ndatum = 0;
356 startoff = 0;
357 lastoff = 0;
358 lastkind = -1;
359 lencache = 0;
360 ibuf = nil;
361 nibuf = 0;
362
363 # entry.b
364 pc = -1;
365 tid = -1;
366
367 # finally.b
368 finally = nil;
369
370 # frame.b
371 frameoff = 0;
372 maxframe = 0;
373 locals = nil;
374 nlocals = 0;
375 tmpslwm = 0;
376 tmpssz = 0;
377 tmps = nil;
378
379 # links.b
380 links = nil;
381 nlinks = 0;
382 fcplist = nil;
383
384 # loader.b
385 pcode = nil;
386 THISCLASS = nil;
387 SUPERCLASS = nil;
388
389 # ltreloc.b
390 doclinitinits = 0;
391 for(i = 0; i < Hashsize; i++)
392 lttbl[i] = nil;
393 thisclass = nil;
394 nltclasses = 0;
395 Freloctid = 0;
396 Ifacetid = 0;
397
398 # main.b
399 gendis = 1;
400 fabort = 0;
401 emitcpool = 0;
402 verbose = 0;
403 bout = nil;
404
405 # mdata.b
406 for(i = 0; i < Hashsize; i++)
407 htable[i] = nil;
408 mpoff = 0;
409 mplist = nil;
410 mptail = nil;
411 llist = nil;
412 rlist = nil;
413
414 # patch.b
415 plist = nil;
416
417 # rtreloc.b
418 for(i = 0; i < Hashsize; i++)
419 rttbl[i] = nil;
420 nrtclasses = 0;
421 RTReloctid = 0;
422
423 # xlate.b
424 code = nil;
425 pcdis = 0;
426 callunrescue = 0;
427 rtcache = nil;
428 rtncache = 0;
429 rtnmax = 0;
430 ehinst = nil;
431 trylist = nil;
432}
java/appl/j2d/xlate.b+2996−0
@@ -0,0 +1,2996 @@
1pcdis: int;
2callunrescue: int;
3J: ref Jinst;
4M: ref Method;
5code: ref Code; # method under translation
6
7trylevel: fn(pc: int): int;
8unrescue: fn(n: int);
9
10#
11# Allocate a Dis instruction.
12#
13
14newi(op: int): ref Inst
15{
16 i: ref Inst;
17
18 i = ref Inst(byte op, nil, nil, nil, pcdis, J, nil);
19 i.s = ref Addr(byte 0, 0, 0);
20 i.m = ref Addr(byte 0, 0, 0);
21 i.d = ref Addr(byte 0, 0, 0);
22 pcdis += 1;
23 if(J != nil && J.dis == nil)
24 J.dis = i;
25 if(ihead == nil)
26 ihead = i;
27 if(itail != nil)
28 itail.next = i;
29 itail = i;
30 return i;
31}
32
33#
34# Allocate a Dis instruction and record for branch-address patching.
35#
36
37newibap(op: int): ref Inst
38{
39 i: ref Inst;
40
41 i = newi(op);
42 patchop(i);
43 return i;
44}
45
46#
47# Turn single indirection off fp into double indirection.
48#
49
50sind2dind(a: ref Addr, s: int)
51{
52 if(a.mode == byte Afp) {
53 a.mode = byte Afpind;
54 a.ival = a.offset;
55 a.offset = s;
56 } else if(a.mode == byte Amp && a.offset == 0)
57 ; # verifyerror(J); # can't reject prior to runtime
58 else
59 fatal("sind2dind: " + string a.mode + " not Afp");
60}
61
62#
63# Middle operands that match destination operands are redundant.
64#
65
66middstcmp(i: ref Inst)
67{
68 m, d: ref Addr;
69
70 m = i.m;
71 d = i.d;
72 if(m.mode == Afp && m.mode == d.mode && m.offset == d.offset) {
73 m.mode = Anone;
74 m.offset = 0;
75 }
76}
77
78#
79# For instructions that may reference Module Data.
80#
81
82datareloc(i: ref Inst)
83{
84 if(i.op == byte IMOVP && i.s.mode == byte Amp && i.s.offset == 0)
85 return; # don't relocate reference to nil
86 if(i.s.mode == byte Amp)
87 addDreloc(i, PSRC, PSIND);
88 if(i.m.mode == byte Amp)
89 addDreloc(i, PMID, PSIND);
90}
91
92movinst(jtype: int): int
93{
94 movi: int;
95
96 case jtype {
97 'Z' or
98 'B' =>
99 if(J.op == byte Jgetfield || J.op == byte Jgetstatic)
100 movi = ICVTBW;
101 else if(J.op == byte Jputfield || J.op == byte Jputstatic)
102 movi = ICVTWB;
103 else
104 movi = IMOVW;
105 'C' or
106 'S' or
107 'I' =>
108 movi = IMOVW;
109 'J' =>
110 movi = IMOVL;
111 'F' or
112 'D' =>
113 movi = IMOVF;
114 'L' or
115 '[' =>
116 movi = IMOVP;
117 }
118 return movi;
119}
120
121FieldInfo: adt {
122 classname: string;
123 fieldname: string;
124 sig: string;
125 flags: int;
126};
127
128getfldinfo(): ref FieldInfo
129{
130 i: int;
131 m: ref Method;
132 fi: ref FieldInfo = ref FieldInfo(nil, nil, nil, 0);
133 ix: int;
134
135 pick jp := J {
136 Pi =>
137 ix = jp.i;
138 Px2c0 =>
139 ix = jp.x2c0.ix;
140 * =>
141 badpick("getfldinfo[Pi|Px2c0]");
142 }
143
144 pick c := class.cps[ix] {
145 Pfmiref =>
146 fi.classname = CLASSNAME(c.fmiref.class_index);
147 pick n := class.cps[c.fmiref.name_type_index] {
148 Pnat =>
149 fi.fieldname = STRING(n.nat.name_index);
150 fi.sig = STRING(n.nat.sig_index);
151 * =>
152 badpick("getfldinfo[Pnat]");
153 }
154 * =>
155 badpick("getfldinfo[Pfmiref]");
156 }
157 fi.flags = 0;
158 if(fi.classname != THISCLASS)
159 return fi;
160 for(i = 0; i < class.methods_count; i++) {
161 m = class.methods[i];
162 if(fi.fieldname == STRING(m.name_index)
163 && fi.sig == STRING(m.sig_index)) {
164 fi.flags = m.access_flags;
165 break;
166 }
167 }
168 return fi;
169}
170
171#
172# mframe instruction for a call to a Loader entry point.
173#
174
175loadermframe(frm: ref Freloc, frf: ref Freloc): ref Inst
176{
177 imframe: ref Inst;
178
179 imframe = newi(IMFRAME);
180 addrsind(imframe.s, Amp, 0);
181 addrimm(imframe.m, 0);
182 addrsind(imframe.d, Afp, getreg(DIS_W));
183 LTIpatch(frm, imframe, PSRC, PSIND);
184 LTIpatch(frf, imframe, PMID, PIMM);
185
186 return imframe;
187}
188
189#
190# mcall instruction for a call to a Loader entry point.
191#
192
193loadermcall(imframe: ref Inst, frf: ref Freloc, frm: ref Freloc): ref Inst
194{
195 imcall: ref Inst;
196
197 imcall = newi(IMCALL);
198 *imcall.s = *imframe.d;
199 *imcall.m = *imframe.m;
200 *imcall.d = *imframe.s;
201 LTIpatch(frf, imcall, PMID, PIMM);
202 LTIpatch(frm, imcall, PDST, PSIND);
203
204 return imcall;
205}
206
207#
208# Call "rtload" for run-time resolution.
209#
210
211rtcache: array of string;
212rtncache: int;
213rtnmax: int;
214
215callrtload(rtc: ref RTClass, classname: string)
216{
217 j: int;
218 imframe, i: ref Inst;
219 cr: ref Creloc;
220 frm, frf: ref Freloc;
221 rtr: ref RTReloc;
222
223 # rtload() already called for classname in this basic block ?
224 for(j = 0; j < rtncache; j++) {
225 if(rtcache[j] == classname)
226 return;
227 }
228 if(rtncache >= rtnmax) {
229 oldrtnmax := rtnmax;
230 rtnmax += ALLOCINCR;
231 newrtcache := array [rtnmax] of string;
232 for(k := 0; k < oldrtnmax; k++)
233 newrtcache[k] = rtcache[k];
234 rtcache = newrtcache;
235 }
236 rtcache[rtncache++] = classname;
237
238 rtr = getRTReloc(rtc, RMP, nil, 0);
239 cr = getCreloc(RLOADER);
240 frm = getFreloc(cr, RMP, nil, 0);
241 frf = getFreloc(cr, "rtload", nil, 0);
242
243 i = newi(IBNEW);
244 addrsind(i.s, Amp, 0);
245 addrsind(i.m, Amp, 0);
246 addrimm(i.d, i.pc+4);
247 RTIpatch(rtr, i, PSRC, PSIND);
248
249 imframe = loadermframe(frm, frf);
250
251 i = newi(ILEA);
252 addrsind(i.s, Amp, 0);
253 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
254 RTIpatch(rtr, i, PSRC, PSIND);
255
256 loadermcall(imframe, frf, frm);
257 relreg(imframe.d);
258}
259
260#
261# Sign-extend an 8-bit unsigned char (Dis byte) to a 32-bit int.
262#
263
264signextend(dst: ref Addr)
265{
266 i: ref Inst;
267
268 i = newi(ISHLW);
269 addrimm(i.s, 24);
270 # *i.m = *dst; # redundant
271 *i.d = *dst;
272
273 i = newi(ISHRW);
274 addrimm(i.s, 24);
275 # *i.m = *dst; # redundant
276 *i.d = *dst;
277}
278
279#
280# addw instruction for run-time relocated getstatic & putstatic.
281#
282
283rtstaticadd(fi: ref FieldInfo, rtc: ref RTClass): ref Addr
284{
285 i: ref Inst;
286
287 i = newi(IADDW);
288 addrdind(i.s, Ampind, 0, 0);
289 addrsind(i.m, Amp, 0);
290 addrsind(i.d, Afp, getreg(DIS_W));
291
292 RTIpatch(getRTReloc(rtc, RMP, nil, 0), i, PSRC, PDIND1);
293 RTIpatch(getRTReloc(rtc, fi.fieldname, fi.sig, Rgetputstatic),
294 i, PMID, PSIND);
295
296 return i.d;
297}
298
299#
300# Run-time relocated getstatic.
301#
302
303rtgetstatic(fi: ref FieldInfo)
304{
305 a: ref Addr;
306 i: ref Inst;
307 rtc: ref RTClass;
308
309 rtc = getRTClass(fi.classname);
310 callrtload(rtc, fi.classname);
311 a = rtstaticadd(fi, rtc);
312
313 i = newi(movinst(fi.sig[0]));
314 *i.s = *a;
315 sind2dind(i.s, 0);
316 relreg(a);
317 dstreg(J.dst, j2dtype(J.jtype));
318 *i.d = *J.dst;
319
320 if(fi.sig[0] == 'B')
321 signextend(i.d);
322}
323
324#
325# Run-time relocated putstatic.
326#
327
328rtputstatic(fi: ref FieldInfo)
329{
330 a: ref Addr;
331 i: ref Inst;
332 rtc: ref RTClass;
333
334 rtc = getRTClass(fi.classname);
335 callrtload(rtc, fi.classname);
336 a = rtstaticadd(fi, rtc);
337
338 i = newi(movinst(fi.sig[0]));
339 *i.s = *code.j[J.src[0]].dst;
340 relreg(code.j[J.src[0]].dst);
341 *i.d = *a;
342 sind2dind(i.d, 0);
343 relreg(a);
344 datareloc(i);
345}
346
347#
348# addw instruction for load-time relocated getstatic & putstatic.
349#
350
351ltstaticadd(fi: ref FieldInfo): ref Addr
352{
353 i: ref Inst;
354 cr: ref Creloc;
355
356 i = newi(IADDW);
357 addrdind(i.s, Ampind, 0, 0);
358 addrimm(i.m, 0);
359 addrsind(i.d, Afp, getreg(DIS_W));
360
361 cr = getCreloc(fi.classname);
362 LTIpatch(getFreloc(cr, RMP, nil, 0), i, PSRC, PDIND1);
363 LTIpatch(getFreloc(cr, fi.fieldname, fi.sig, Rgetputstatic),
364 i, PMID, PIMM);
365
366 return i.d;
367}
368
369#
370# Load-time relocated getstatic.
371#
372
373getstatic()
374{
375 i: ref Inst;
376 a: ref Addr;
377 fi: ref FieldInfo;
378
379 fi = getfldinfo();
380 if(dortload(fi.classname)) {
381 rtgetstatic(fi);
382 return;
383 }
384
385 a = ltstaticadd(fi);
386
387 i = newi(movinst(fi.sig[0]));
388 *i.s = *a;
389 sind2dind(i.s, 0);
390 relreg(a);
391 dstreg(J.dst, j2dtype(J.jtype));
392 *i.d = *J.dst;
393
394 if(fi.sig[0] == 'B')
395 signextend(i.d);
396}
397
398#
399# Load-time relocated putstatic.
400#
401
402putstatic()
403{
404 i: ref Inst;
405 a: ref Addr;
406 fi: ref FieldInfo;
407
408 fi = getfldinfo();
409 if(dortload(fi.classname)) {
410 rtputstatic(fi);
411 return;
412 }
413
414 a = ltstaticadd(fi);
415
416 i = newi(movinst(fi.sig[0]));
417 *i.s = *code.j[J.src[0]].dst;
418 relreg(code.j[J.src[0]].dst);
419 *i.d = *a;
420 sind2dind(i.d, 0);
421 relreg(a);
422 datareloc(i);
423}
424
425#
426# addw instruction for run-time relocated getfield & putfield.
427#
428
429rtfieldadd(fi: ref FieldInfo, rtc: ref RTClass, a: ref Addr): ref Addr
430{
431 i: ref Inst;
432
433 i = newi(IADDW);
434 *i.s = *a;
435 addrsind(i.m, Amp, 0);
436 addrsind(i.d, Afp, getreg(DIS_W));
437
438 RTIpatch(getRTReloc(rtc, fi.fieldname, fi.sig, Rgetputfield),
439 i, PMID, PSIND);
440
441 return i.d;
442}
443
444#
445# Run-time relocated getfield.
446#
447
448rtgetfield(fi: ref FieldInfo)
449{
450 a: ref Addr;
451 i: ref Inst;
452 rtc: ref RTClass;
453
454 rtc = getRTClass(fi.classname);
455 callrtload(rtc, fi.classname);
456 a = rtfieldadd(fi, rtc, code.j[J.src[0]].dst);
457 relreg(code.j[J.src[0]].dst);
458
459 i = newi(movinst(fi.sig[0]));
460 *i.s = *a;
461 sind2dind(i.s, 0);
462 relreg(a);
463 dstreg(J.dst, j2dtype(J.jtype));
464 *i.d = *J.dst;
465
466 if(fi.sig[0] == 'B')
467 signextend(i.d);
468}
469
470#
471# Run-time relocated putfield.
472#
473
474rtputfield(fi: ref FieldInfo)
475{
476 a: ref Addr;
477 i: ref Inst;
478 rtc: ref RTClass;
479
480 rtc = getRTClass(fi.classname);
481 callrtload(rtc, fi.classname);
482 a = rtfieldadd(fi, rtc, code.j[J.src[0]].dst);
483 relreg(code.j[J.src[0]].dst);
484
485 i = newi(movinst(fi.sig[0]));
486 *i.s = *code.j[J.src[1]].dst;
487 relreg(code.j[J.src[1]].dst);
488 *i.d = *a;
489 relreg(a);
490 sind2dind(i.d, 0);
491 datareloc(i);
492}
493
494#
495# Load-time relocated getfield.
496#
497
498getfield()
499{
500 i: ref Inst;
501 cr: ref Creloc;
502 fi: ref FieldInfo;
503
504 fi = getfldinfo();
505 if(dortload(fi.classname)) {
506 rtgetfield(fi);
507 return;
508 }
509
510 i = newi(movinst(fi.sig[0]));
511 *i.s = *code.j[J.src[0]].dst;
512 sind2dind(i.s, 0);
513 relreg(code.j[J.src[0]].dst);
514 dstreg(J.dst, j2dtype(J.jtype));
515 *i.d = *J.dst;
516
517 cr = getCreloc(fi.classname);
518 LTIpatch(getFreloc(cr, fi.fieldname, fi.sig, Rgetputfield),
519 i, PSRC, PDIND2);
520
521 if(fi.sig[0] == 'B')
522 signextend(i.d);
523}
524
525#
526# Load-time relocated putfield.
527#
528
529putfield()
530{
531 i: ref Inst;
532 cr: ref Creloc;
533 fi: ref FieldInfo;
534
535 fi = getfldinfo();
536 if(dortload(fi.classname)) {
537 rtputfield(fi);
538 return;
539 }
540
541 i = newi(movinst(fi.sig[0]));
542 *i.s = *code.j[J.src[1]].dst;
543 relreg(code.j[J.src[1]].dst);
544 *i.d = *code.j[J.src[0]].dst;
545 relreg(code.j[J.src[0]].dst);
546 sind2dind(i.d, 0);
547 datareloc(i);
548
549 cr = getCreloc(fi.classname);
550 LTIpatch(getFreloc(cr, fi.fieldname, fi.sig, Rgetputfield),
551 i, PDST, PDIND2);
552}
553
554#
555# Push function arguments.
556#
557
558pushargs(calltype: int, calleeframe: int, sig: string)
559{
560 i: ref Inst;
561 frameoff: int;
562 arg, size: int;
563
564 frameoff = REGSIZE;
565 arg = 0;
566 if(calltype != Rinvokestatic) {
567 i = newi(IMOVP); # this pointer
568 *i.s = *code.j[J.src[arg]].dst;
569 addrdind(i.d, Afpind, calleeframe, frameoff);
570 frameoff += IBY2WD;
571 arg++;
572 }
573
574 sig = sig[1:]; # skip '('
575 while(sig[0] != ')') {
576 i = newi(movinst(sig[0]));
577 *i.s = *code.j[J.src[arg]].dst;
578 size = cellsize[int j2dtype(byte sig[0])];
579 frameoff = align(frameoff, size);
580 addrdind(i.d, Afpind, calleeframe, frameoff);
581 datareloc(i);
582 frameoff += size;
583 sig = nextjavatype(sig);
584 arg++;
585 }
586
587 # return value
588 if(sig[1] != 'V') { # skip ')'
589 i = newi(ILEA);
590 dstreg(J.dst, j2dtype(J.jtype));
591 *i.s = *J.dst;
592 addrdind(i.d, Afpind, calleeframe, REGRET*IBY2WD);
593 }
594}
595
596#
597# Run-time relocated invokespecial and invokestatic.
598#
599
600rtinvokess(fi: ref FieldInfo, calltype: int, mpflag: int)
601{
602 n: int;
603 imframe, imcall: ref Inst;
604 rtc: ref RTClass;
605 rtr1, rtr2: ref RTReloc;
606
607 rtc = getRTClass(fi.classname);
608 callrtload(rtc, fi.classname);
609
610 imframe = newi(IMFRAME);
611 addrsind(imframe.s, Amp, 0);
612 addrsind(imframe.m, Amp, 0);
613 addrsind(imframe.d, Afp, getreg(DIS_W));
614
615 rtr1 = getRTReloc(rtc, fi.fieldname, fi.sig, calltype|mpflag);
616 rtr2 = getRTReloc(rtc, fi.fieldname, fi.sig, calltype);
617 RTIpatch(rtr1, imframe, PSRC, PSIND);
618 RTIpatch(rtr2, imframe, PMID, PSIND);
619
620 # push arguments into callee's frame, handle return type
621 pushargs(calltype, imframe.d.offset, fi.sig);
622
623 imcall = newi(IMCALL);
624 *imcall.s = *imframe.d;
625 *imcall.m = *imframe.m;
626 *imcall.d = *imframe.s;
627
628 RTIpatch(rtr1, imcall, PDST, PSIND);
629 RTIpatch(rtr2, imcall, PMID, PSIND);
630
631 for(n = 0; n < J.nsrc; n++)
632 relreg(code.j[J.src[n]].dst);
633 relreg(imframe.d);
634}
635
636#
637# Load-time relocated invokespecial and invokestatic.
638#
639
640invokess(calltype: int, mpflag: int)
641{
642 n: int;
643 imframe, imcall: ref Inst;
644 cr: ref Creloc;
645 frf, frm: ref Freloc;
646 fi: ref FieldInfo;
647
648 fi = getfldinfo();
649 if(dortload(fi.classname)) {
650 rtinvokess(fi, calltype, mpflag);
651 return;
652 }
653 cr = getCreloc(fi.classname);
654 # fi.flags set only if fi.classname == this_class
655 if(fi.flags & (ACC_PRIVATE | ACC_STATIC)) {
656 if(fi.flags & ACC_NATIVE)
657 frm = getFreloc(cr, RNP, nil, 0);
658 else
659 frm = nil; # frame/call
660 } else {
661 # force @mp, @np into the list for cr
662 getFreloc(cr, RMP, nil, 0);
663 getFreloc(cr, RNP, nil, 0);
664 frm = getFreloc(cr, fi.fieldname, fi.sig, calltype|mpflag);
665 }
666
667 if(frm == nil) {
668 imframe = newi(IFRAME);
669 addrimm(imframe.s, 0);
670 } else {
671 imframe = newi(IMFRAME);
672 addrsind(imframe.s, Amp, 0);
673 addrimm(imframe.m, 0);
674 LTIpatch(frm, imframe, PSRC, PSIND);
675 frf = getFreloc(cr, fi.fieldname, fi.sig, calltype);
676 LTIpatch(frf, imframe, PMID, PIMM);
677 }
678 addrsind(imframe.d, Afp, getreg(DIS_W));
679
680 # push arguments into callee's frame, handle return type
681 pushargs(calltype, imframe.d.offset, fi.sig);
682
683 if(frm == nil) {
684 imcall = newi(ICALL);
685 addfcpatch(imframe, imcall, fi.fieldname, fi.sig);
686 } else {
687 imcall = newi(IMCALL);
688 *imcall.m = *imframe.m;
689 LTIpatch(frf, imcall, PMID, PIMM);
690 LTIpatch(frm, imcall, PDST, PSIND);
691 }
692 *imcall.s = *imframe.d;
693 *imcall.d = *imframe.s;
694
695 for(n = 0; n < J.nsrc; n++)
696 relreg(code.j[J.src[n]].dst);
697 relreg(imframe.d);
698}
699
700#
701# Load-time relocated invokeinterface.
702# Resolve all interfaces at load-time.
703#
704
705invokei()
706{
707 n: int;
708 cr: ref Creloc;
709 frm, frf, frfi: ref Freloc;
710 fi: ref FieldInfo;
711 #
712 # call Loader.getinterface() with these
713 #
714 imframe1, imovw1, imovp, imovw2, ilea, imcall1: ref Inst;
715 #
716 # call interface method with these
717 #
718 iaddw, imovw3, imframe2, imcall2: ref Inst;
719
720 cr = getCreloc(RLOADER);
721 frm = getFreloc(cr, RMP, nil, 0);
722 frf = getFreloc(cr, "getinterface", nil, 0);
723
724 # call Loader.getinterface
725
726 imframe1 = loadermframe(frm, frf);
727
728 imovw1 = newi(IMOVW);
729 *imovw1.s = *code.j[J.src[0]].dst; # this pointer
730 sind2dind(imovw1.s, 0);
731 addrsind(imovw1.d, Afp, getreg(DIS_W));
732
733 imovp = newi(IMOVP);
734 *imovp.s = *imovw1.d;
735 sind2dind(imovp.s, 4);
736 addrdind(imovp.d, Afpind, imframe1.d.offset, REGSIZE);
737
738 imovw2 = newi(IMOVW);
739 addrimm(imovw2.s, 0);
740 addrdind(imovw2.d, Afpind, imframe1.d.offset, REGSIZE+IBY2WD);
741
742 fi = getfldinfo();
743 frfi = getFreloc(getCreloc(fi.classname), fi.fieldname,
744 fi.sig, Rinvokeinterface);
745 LTIpatch(frfi, imovw2, PSRC, PIMM);
746
747 ilea = newi(ILEA);
748 addrsind(ilea.s, Afp, getreg(DIS_W));
749 addrdind(ilea.d, Afpind, imframe1.d.offset, REGRET*IBY2WD);
750
751 imcall1 = loadermcall(imframe1, frf, frm);
752
753 # call interface method
754
755 iaddw = newi(IADDW);
756 *iaddw.s = *imovw1.d;
757 *iaddw.m = *ilea.s;
758 *iaddw.d = *imovw1.d;
759
760 imovw3 = newi(IMOVW);
761 *imovw3.s = *iaddw.d;
762 sind2dind(imovw3.s, 4);
763 *imovw3.d = *ilea.s;
764
765 imframe2 = newi(IMFRAME);
766 *imframe2.s = *iaddw.d;
767 sind2dind(imframe2.s, 0);
768 *imframe2.m = *imovw3.d;
769 *imframe2.d = *imframe1.d;
770
771 # push arguments into callee's frame, handle return type
772 pushargs(Rinvokeinterface, imframe2.d.offset, fi.sig);
773
774 imcall2 = newi(IMCALL);
775 *imcall2.s = *imframe2.d;
776 *imcall2.m = *imframe2.m;
777 *imcall2.d = *imframe2.s;
778
779 for(n = 0; n < J.nsrc; n++)
780 relreg(code.j[J.src[n]].dst);
781 relreg(imframe1.d);
782 relreg(imovw1.d);
783 relreg(ilea.s);
784}
785
786#
787# Run-time relocated invokevirtual.
788#
789
790rtinvokev(fi: ref FieldInfo)
791{
792 n: int;
793 iaddw, imovw1, imovw2, imframe, imcall: ref Inst;
794 rtc: ref RTClass;
795
796 rtc = getRTClass(fi.classname);
797 callrtload(rtc, fi.classname);
798
799 imovw1 = newi(IMOVW);
800 *imovw1.s = *code.j[J.src[0]].dst; # this pointer
801 sind2dind(imovw1.s, 0);
802 addrsind(imovw1.d, Afp, getreg(DIS_W));
803
804 iaddw = newi(IADDW);
805 *iaddw.s = *imovw1.d;
806 addrsind(iaddw.m, Amp, 0);
807 *iaddw.d = *imovw1.d;
808
809 RTIpatch(getRTReloc(rtc, fi.fieldname, fi.sig, Rinvokevirtual),
810 iaddw, PMID, PSIND);
811
812 imovw2 = newi(IMOVW);
813 *imovw2.s = *iaddw.d;
814 sind2dind(imovw2.s, 4);
815 addrsind(imovw2.d, Afp, getreg(DIS_W));
816
817 imframe = newi(IMFRAME);
818 *imframe.s = *imovw1.d;
819 sind2dind(imframe.s, 0);
820 *imframe.m = *imovw2.d;
821 addrsind(imframe.d, Afp, getreg(DIS_W));
822
823 # push arguments into callee's frame, handle return type
824 pushargs(Rinvokevirtual, imframe.d.offset, fi.sig);
825
826 imcall = newi(IMCALL);
827 *imcall.s = *imframe.d;
828 *imcall.m = *imframe.m;
829 *imcall.d = *imframe.s;
830
831 for(n = 0; n < J.nsrc; n++)
832 relreg(code.j[J.src[n]].dst);
833 relreg(imovw1.d);
834 relreg(imovw2.d);
835 relreg(imframe.d);
836}
837
838#
839# Load-time relocated invokevirtual.
840#
841
842invokev()
843{
844 n: int;
845 imovw1, imovw2, imframe, imcall: ref Inst;
846 cr: ref Creloc;
847 fr: ref Freloc;
848 fi: ref FieldInfo;
849
850 fi = getfldinfo();
851 if(dortload(fi.classname)) {
852 rtinvokev(fi);
853 return;
854 }
855 cr = getCreloc(fi.classname);
856 fr = getFreloc(cr, fi.fieldname, fi.sig, Rinvokevirtual);
857
858 imovw1 = newi(IMOVW);
859 *imovw1.s = *code.j[J.src[0]].dst; # this pointer
860 sind2dind(imovw1.s, 0);
861 addrsind(imovw1.d, Afp, getreg(DIS_W));
862
863 imovw2 = newi(IMOVW);
864 *imovw2.s = *imovw1.d;
865 sind2dind(imovw2.s, 4);
866 addrsind(imovw2.d, Afp, getreg(DIS_W));
867 LTIpatch(fr, imovw2, PSRC, PDIND2);
868
869 imframe = newi(IMFRAME);
870 *imframe.s = *imovw1.d;
871 sind2dind(imframe.s, 0);
872 *imframe.m = *imovw2.d;
873 addrsind(imframe.d, Afp, getreg(DIS_W));
874 LTIpatch(fr, imframe, PSRC, PDIND2);
875
876 # push arguments into callee's frame, handle return type
877 pushargs(Rinvokevirtual, imframe.d.offset, fi.sig);
878
879 imcall = newi(IMCALL);
880 *imcall.s = *imframe.d;
881 *imcall.m = *imframe.m;
882 *imcall.d = *imframe.s;
883 LTIpatch(fr, imcall, PDST, PDIND2);
884
885 for(n = 0; n < J.nsrc; n++)
886 relreg(code.j[J.src[n]].dst);
887 relreg(imovw1.d);
888 relreg(imovw2.d);
889 relreg(imframe.d);
890}
891
892#
893# Run-time relocated new.
894#
895
896rtnew(fi: ref FieldInfo)
897{
898 i1, i2: ref Inst;
899 rtc: ref RTClass;
900 rtr: ref RTReloc;
901
902 rtc = getRTClass(fi.classname);
903 callrtload(rtc, fi.classname);
904
905 i1 = newi(IMNEWZ);
906 addrsind(i1.s, Amp, 0);
907 addrsind(i1.m, Amp, 0);
908 dstreg(J.dst, DIS_P);
909 *i1.d = *J.dst;
910
911 rtr = getRTReloc(rtc, RCLASS, nil, 0);
912 RTIpatch(rtr, i1, PMID, PSIND);
913 rtr = getRTReloc(rtc, RMP, nil, 0);
914 RTIpatch(rtr, i1, PSRC, PSIND);
915
916 i2 = newi(IMOVP);
917 addrdind(i2.s, Ampind, 0, 0);
918 *i2.d = *i1.d;
919 sind2dind(i2.d, 0);
920
921 RTIpatch(rtr, i2, PSRC, PDIND1);
922}
923
924#
925# Load-time relocated new.
926#
927
928xjavanew(name: string, a: ref Addr)
929{
930 i1, i2: ref Inst;
931 cr: ref Creloc;
932 frc, frm: ref Freloc;
933 fi: ref FieldInfo;
934
935 if(dortload(name)) {
936 fi = ref FieldInfo(name, nil, nil, 0);
937 rtnew(fi);
938 return;
939 }
940 cr = getCreloc(name);
941 frc = getFreloc(cr, RCLASS, nil, 0);
942 frm = getFreloc(cr, RMP, nil, 0);
943
944 if(name == THISCLASS) {
945 i1 = newi(INEWZ);
946 addrimm(i1.s, 0);
947 LTIpatch(frc, i1, PSRC, PIMM);
948 } else {
949 i1 = newi(IMNEWZ);
950 addrsind(i1.s, Amp, 0);
951 LTIpatch(frm, i1, PSRC, PSIND);
952 addrimm(i1.m, 0);
953 LTIpatch(frc, i1, PMID, PIMM);
954 }
955 dstreg(a, DIS_P);
956 *i1.d = *a;
957
958 i2 = newi(IMOVP);
959 addrdind(i2.s, Ampind, 0, 0);
960 LTIpatch(frm, i2, PSRC, PDIND1);
961 *i2.d = *i1.d;
962 sind2dind(i2.d, 0);
963}
964
965#
966# Java newarray
967#
968
969newarray()
970{
971 i: ref Inst;
972 n, tid: int;
973 ix: int;
974
975 pick jp := J {
976 Pi =>
977 ix = jp.i;
978 * =>
979 badpick("newarray");
980 }
981
982 case ix {
983 T_BOOLEAN or
984 T_BYTE =>
985 n = 1;
986 T_CHAR or
987 T_SHORT or
988 T_INT =>
989 n = IBY2WD;
990 T_LONG or
991 T_FLOAT or
992 T_DOUBLE =>
993 n = IBY2LG;
994 }
995 if(n == 1)
996 tid = descid(n, 0, array [1] of { byte 0 });
997 else
998 tid = descid(n, 1, array [1] of { byte 0 });
999
1000 xjavanew("inferno/vm/Array", J.dst);
1001 i = newi(INEWAZ);
1002 *i.s = *code.j[J.src[0]].dst;
1003 relreg(code.j[J.src[0]].dst);
1004 addrimm(i.m, tid);
1005 *i.d = *J.dst;
1006 sind2dind(i.d, ARY_DATA);
1007 datareloc(i);
1008
1009 i = newi(IMOVW);
1010 addrimm(i.s, 1);
1011 *i.d = *J.dst;
1012 sind2dind(i.d, ARY_NDIM);
1013
1014 i = newi(IMOVW);
1015 addrimm(i.s, ix);
1016 *i.d = *J.dst;
1017 sind2dind(i.d, ARY_ETYPE);
1018}
1019
1020ArrayInfo: adt {
1021 ndim: int; # number of dimensions
1022 etype: int; # element type code (if primitive)
1023 ename: string; # element type name (if non-primitive)
1024};
1025
1026#
1027# Glean array information. s may name a Class, Interface, or Array type.
1028# Used by xanewarray, xmultianewarray, checkcast, instanceof.
1029#
1030
1031getaryinfo(s: string): ref ArrayInfo
1032{
1033 n: int;
1034 ai: ref ArrayInfo = ref ArrayInfo(0, 0, nil);
1035
1036 while(s[0] == '[') {
1037 ai.ndim++;
1038 s = s[1:];
1039 }
1040
1041 if(ai.ndim > 0) {
1042 case s[0] {
1043 'Z' =>
1044 ai.etype = T_BOOLEAN;
1045 'B' =>
1046 ai.etype = T_BYTE;
1047 'C' =>
1048 ai.etype = T_CHAR;
1049 'S' =>
1050 ai.etype = T_SHORT;
1051 'I' =>
1052 ai.etype = T_INT;
1053 'F' =>
1054 ai.etype = T_FLOAT;
1055 'J' =>
1056 ai.etype = T_LONG;
1057 'D' =>
1058 ai.etype = T_DOUBLE;
1059 'L' =>
1060 ; # ai.etype = 0; # above
1061 }
1062 }
1063 if(ai.etype == 0) {
1064 n = len s + 1;
1065 if(ai.ndim > 0) { # e.g., s == "LX.Y.Z;"
1066 s = s[1:];
1067 n -= 2;
1068 }
1069 ai.ename = s[0:n-1];
1070 }
1071 return ai;
1072}
1073
1074#
1075# Java anewarray
1076#
1077
1078xanewarray()
1079{
1080 i: ref Inst;
1081 rtflag: int;
1082 rtc: ref RTClass;
1083 ai: ref ArrayInfo;
1084 ix: int;
1085
1086 pick jp := J {
1087 Pi =>
1088 ix = jp.i;
1089 * =>
1090 badpick("xanewarray");
1091 }
1092
1093 ai = getaryinfo(CLASSNAME(ix));
1094 rtflag = 0;
1095 if(dortload(ai.ename)) {
1096 rtflag = 1;
1097 rtc = getRTClass(ai.ename);
1098 callrtload(rtc, ai.ename);
1099 }
1100
1101 xjavanew("inferno/vm/Array", J.dst);
1102 i = newi(INEWA);
1103 *i.s = *code.j[J.src[0]].dst;
1104 relreg(code.j[J.src[0]].dst);
1105 addrimm(i.m, descid(IBY2WD, 1, array [1] of { byte 16r80 }));
1106 *i.d = *J.dst;
1107 sind2dind(i.d, ARY_DATA);
1108 datareloc(i);
1109
1110 i = newi(IMOVW);
1111 addrimm(i.s, ai.ndim+1);
1112 *i.d = *J.dst;
1113 sind2dind(i.d, ARY_NDIM);
1114
1115 if(ai.etype == 0) {
1116 i = newi(IMOVP);
1117 addrsind(i.s, Amp, 0);
1118 if(rtflag == 1) {
1119 RTIpatch(getRTReloc(rtc, RADT, nil, 0), i, PSRC, PSIND);
1120 } else {
1121 LTIpatch(getFreloc(getCreloc(ai.ename), RADT, nil, 0),
1122 i, PSRC, PSIND);
1123 }
1124 *i.d = *J.dst;
1125 sind2dind(i.d, ARY_ADT);
1126 } else {
1127 i = newi(IMOVW);
1128 addrimm(i.s, ai.etype);
1129 *i.d = *J.dst;
1130 sind2dind(i.d, ARY_ETYPE);
1131 }
1132}
1133
1134#
1135# Java multianewarray
1136#
1137
1138xmultianewarray()
1139{
1140 imframe, iindw, i: ref Inst;
1141 n, rtflag: int;
1142 rtc: ref RTClass;
1143 cr: ref Creloc;
1144 frm, frf: ref Freloc;
1145 ai: ref ArrayInfo;
1146 jpx2d: ref Jinst.Px2d;
1147
1148 pick jp := J {
1149 Px2d =>
1150 jpx2d = jp;
1151 * =>
1152 badpick("xmultianewarray");
1153 }
1154
1155 ai = getaryinfo(CLASSNAME(jpx2d.x2d.ix));
1156 rtflag = 0;
1157 if(dortload(ai.ename)) {
1158 rtflag = 1;
1159 rtc = getRTClass(ai.ename);
1160 callrtload(rtc, ai.ename);
1161 }
1162
1163 cr = getCreloc(RLOADER);
1164 frm = getFreloc(cr, RMP, nil, 0);
1165 frf = getFreloc(cr, "multianewarray", nil, 0);
1166
1167 imframe = loadermframe(frm, frf);
1168
1169 # 1st arg: number of dimensions
1170
1171 i = newi(IMOVW);
1172 addrimm(i.s, ai.ndim);
1173 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
1174
1175 # 2nd arg: @adt reloc if ref element type, nil otherwise
1176
1177 i = newi(IMOVP);
1178 addrsind(i.s, Amp, 0);
1179 if(ai.etype == 0) {
1180 if(rtflag == 1) {
1181 RTIpatch(getRTReloc(rtc, RADT, nil, 0), i, PSRC, PSIND);
1182 } else {
1183 LTIpatch(getFreloc(getCreloc(ai.ename), RADT, nil, 0),
1184 i, PSRC, PSIND);
1185 }
1186 }
1187 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE+IBY2WD);
1188
1189 # 3rd arg: element type
1190
1191 i = newi(IMOVW);
1192 addrimm(i.s, ai.etype);
1193 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE+2*IBY2WD);
1194
1195 # 4th arg: array of dimensionality information
1196
1197 i = newi(INEWA);
1198 addrimm(i.s, jpx2d.x2d.dim);
1199 addrimm(i.m, descid(IBY2WD, 1, array [1] of { byte 0 }));
1200 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE+3*IBY2WD);
1201
1202 iindw = newi(IINDW);
1203 addrdind(iindw.s, Afpind, imframe.d.offset, REGSIZE+3*IBY2WD);
1204 addrsind(iindw.m, Afp, getreg(DIS_W));
1205 addrimm(iindw.d, 0);
1206
1207 for(n = 0; n < jpx2d.x2d.dim; n++) {
1208 i = newi(IMOVW);
1209 *i.s = *code.j[J.src[n]].dst;
1210 relreg(code.j[J.src[n]].dst);
1211 *i.d = *iindw.m;
1212 sind2dind(i.d, n*IBY2WD);
1213 }
1214 relreg(iindw.m);
1215
1216 i = newi(ILEA);
1217 dstreg(J.dst, DIS_P);
1218 *i.s = *J.dst;
1219 addrdind(i.d, Afpind, imframe.d.offset, REGRET*IBY2WD);
1220
1221 loadermcall(imframe, frf, frm);
1222 relreg(imframe.d);
1223}
1224
1225arraylength()
1226{
1227 i: ref Inst;
1228
1229 i = newi(ILENA);
1230 *i.s = *code.j[J.src[0]].dst;
1231 relreg(code.j[J.src[0]].dst);
1232 sind2dind(i.s, ARY_DATA);
1233 dstreg(J.dst, DIS_W);
1234 *i.d = *J.dst;
1235}
1236
1237arrayindex(index: int): ref Addr
1238{
1239 i: ref Inst;
1240
1241 i = newi(index);
1242 *i.s = *code.j[J.src[0]].dst;
1243 relreg(code.j[J.src[0]].dst);
1244 sind2dind(i.s, ARY_DATA);
1245 *i.d = *code.j[J.src[1]].dst;
1246 relreg(code.j[J.src[1]].dst);
1247 addrsind(i.m, Afp, getreg(DIS_W));
1248
1249 return i.m;
1250}
1251
1252#
1253# Load an array element.
1254#
1255
1256xarrayload(inst1: int, inst2: int, dtype: byte)
1257{
1258 a: ref Addr;
1259 i: ref Inst;
1260
1261 a = arrayindex(inst1);
1262 i = newi(inst2);
1263 *i.s = *a;
1264 sind2dind(i.s, 0);
1265 relreg(a);
1266 dstreg(J.dst, dtype);
1267 *i.d = *J.dst;
1268 if(inst2 == ICVTBW) # loading from a byte array
1269 signextend(i.d);
1270}
1271
1272#
1273# Call Loader.aastorecheck() to do runtime checks for aastore.
1274#
1275
1276aastore()
1277{
1278 imframe, imovp, imcall: ref Inst;
1279 cr: ref Creloc;
1280 frm, frf: ref Freloc;
1281
1282 cr = getCreloc(RLOADER);
1283 frm = getFreloc(cr, RMP, nil, 0);
1284 frf = getFreloc(cr, "aastorecheck", nil, 0);
1285
1286 imframe = loadermframe(frm, frf);
1287
1288 imovp = newi(IMOVP);
1289 *imovp.s = *code.j[J.src[2]].dst;
1290 addrdind(imovp.d, Afpind, imframe.d.offset, REGSIZE);
1291
1292 imovp = newi(IMOVP);
1293 *imovp.s = *code.j[J.src[0]].dst;
1294 addrdind(imovp.d, Afpind, imframe.d.offset, REGSIZE+IBY2WD);
1295
1296 imcall = loadermcall(imframe, frf, frm);
1297 relreg(imframe.d);
1298}
1299
1300#
1301# Store an array element.
1302#
1303
1304xarraystore(inst1: int, inst2: int)
1305{
1306 a: ref Addr;
1307 i: ref Inst;
1308
1309 a = arrayindex(inst1);
1310 i = newi(inst2);
1311 *i.s = *code.j[J.src[2]].dst;
1312 relreg(code.j[J.src[2]].dst);
1313 *i.d = *a;
1314 sind2dind(i.d, 0);
1315 relreg(a);
1316 datareloc(i);
1317}
1318
1319#
1320# monitorenter, monitorexit, athrow. Also used for synchronized methods.
1321#
1322
1323mon_or_throw(op: int, flags: int, syncblock: int)
1324{
1325 loaderfn: string;
1326 imframe, i: ref Inst;
1327 cr: ref Creloc;
1328 frm, frf, fro: ref Freloc;
1329
1330 case op {
1331 Jathrow =>
1332 loaderfn = "throw";
1333 Jmonitorenter =>
1334 loaderfn = "monitorenter";
1335 Jmonitorexit =>
1336 loaderfn = "monitorexit";
1337 }
1338
1339 cr = getCreloc(RLOADER);
1340 frm = getFreloc(cr, RMP, nil, 0);
1341 frf = getFreloc(cr, loaderfn, nil, 0);
1342
1343 imframe = loadermframe(frm, frf);
1344
1345 i = newi(IMOVP);
1346 if(op == Jathrow || syncblock) { # throw or synchronized block
1347 *i.s = *code.j[J.src[0]].dst;
1348 relreg(code.j[J.src[0]].dst);
1349 } else if(flags & ACC_STATIC) { # synchronized class method
1350 addrsind(i.s, Amp, 0);
1351 fro = getFreloc(getCreloc(THISCLASS), ROBJ, nil, 0);
1352 LTIpatch(fro, i, PSRC, PSIND);
1353 } else # synchronized instance method
1354 addrsind(i.s, Afp, THISOFF);
1355 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
1356
1357 loadermcall(imframe, frf, frm);
1358 relreg(imframe.d);
1359
1360 # for jit: so mcall has an instruction for its return address
1361 if(op == Jathrow && J.pc+1 == code.code_length) {
1362 i = newi(IJMP);
1363 addrimm(i.d, 0);
1364 }
1365}
1366
1367xjavaload(op: int)
1368{
1369 i: ref Inst;
1370
1371 if(J.movsrc.mode != Anone) { # marked for explicit mov
1372 i = newi(op);
1373 *i.s = *J.movsrc;
1374 dstreg(J.dst, j2dtype(J.jtype));
1375 *i.d = *J.dst;
1376 datareloc(i);
1377 }
1378}
1379
1380xjavastore(op: int)
1381{
1382 i: ref Inst;
1383
1384 if(op == IMOVP && J.bb.js == J && int (J.bb.flags & BB_FINALLY))
1385 ; # astore instruction at the start of a finally block
1386 else if(J.dst.mode != Anone) { # marked for explicit mov
1387 i = newi(op);
1388 *i.s = *code.j[J.src[0]].dst;
1389 relreg(code.j[J.src[0]].dst);
1390 *i.d = *J.dst;
1391 datareloc(i);
1392 }
1393}
1394
1395#
1396# Check immediate middle operands that are too big.
1397#
1398
1399midcheck(a: ref Addr)
1400{
1401 if(a.mode == Aimm && (a.ival > 16r7fff || a.ival < -16r8000)) {
1402 a.mode = Amp;
1403 a.offset = mpint(a.ival);
1404 }
1405}
1406
1407#
1408# Coerce a 64-bit real to a 32-bit real (and back).
1409#
1410
1411real64to32(a: ref Addr)
1412{
1413 i1, i2: ref Inst;
1414
1415 i1 = newi(ICVTFR);
1416 *i1.s = *a;
1417 addrsind(i1.d, Afp, getreg(DIS_W));
1418
1419 i2 = newi(ICVTRF);
1420 *i2.s = *i1.d;
1421 *i2.d = *i1.s;
1422
1423 relreg(i1.d);
1424}
1425
1426xbinop(op: int, dtype: byte, cvtreal: int)
1427{
1428 i: ref Inst;
1429
1430 i = newi(op);
1431 *i.s = *code.j[J.src[1]].dst;
1432 relreg(code.j[J.src[1]].dst);
1433 *i.m = *code.j[J.src[0]].dst;
1434 relreg(code.j[J.src[0]].dst);
1435 midcheck(i.m);
1436 dstreg(J.dst, dtype);
1437 *i.d = *J.dst;
1438 middstcmp(i);
1439 datareloc(i);
1440
1441 if(cvtreal)
1442 real64to32(i.d);
1443}
1444
1445shift(op: int, dtype: byte)
1446{
1447 iaddw, i: ref Inst;
1448
1449 iaddw = newi(IANDW);
1450 *iaddw.s = *code.j[J.src[1]].dst;
1451 relreg(code.j[J.src[1]].dst);
1452 if(dtype == DIS_W) # ishl, ishr, iushr
1453 addrimm(iaddw.m, 31);
1454 else # lshl, lshr, lushr
1455 addrimm(iaddw.m, 63);
1456 addrsind(iaddw.d, Afp, getreg(DIS_W));
1457 datareloc(iaddw);
1458
1459 i = newi(op);
1460 *i.s = *iaddw.d;
1461 relreg(iaddw.d);
1462 *i.m = *code.j[J.src[0]].dst;
1463 relreg(code.j[J.src[0]].dst);
1464 midcheck(i.m);
1465 dstreg(J.dst, dtype);
1466 *i.d = *J.dst;
1467 middstcmp(i);
1468 datareloc(i);
1469}
1470
1471cvt(op: int, dtype: byte, cvtreal: int)
1472{
1473 i: ref Inst;
1474
1475 i = newi(op);
1476 *i.s = *code.j[J.src[0]].dst;
1477 relreg(code.j[J.src[0]].dst);
1478 dstreg(J.dst, dtype);
1479 *i.d = *J.dst;
1480 datareloc(i);
1481
1482 if(cvtreal)
1483 real64to32(i.d);
1484}
1485
1486i2c()
1487{
1488 i: ref Inst;
1489
1490 i = newi(IANDW);
1491 *i.s = *code.j[J.src[0]].dst;
1492 relreg(code.j[J.src[0]].dst);
1493 addrsind(i.m, Amp, mpint(16rffff));
1494 dstreg(J.dst, DIS_W);
1495 *i.d = *J.dst;
1496 datareloc(i);
1497}
1498
1499#
1500# i2b, i2s.
1501#
1502
1503i2bs(shift: int)
1504{
1505 i1, i2: ref Inst;
1506
1507 i1 = newi(ISHLW);
1508 addrimm(i1.s, shift);
1509 *i1.m = *code.j[J.src[0]].dst;
1510 relreg(code.j[J.src[0]].dst);
1511 midcheck(i1.m);
1512 dstreg(J.dst, DIS_W);
1513 *i1.d = *J.dst;
1514 middstcmp(i1);
1515 datareloc(i1);
1516
1517 i2 = newi(ISHRW);
1518 addrimm(i2.s, shift);
1519 # *i2.m = *i1.d; # redundant
1520 *i2.d = *i1.d;
1521}
1522
1523#
1524# ineg, lneg, fneg, dneg
1525#
1526
1527neg(op: int, dtype: byte)
1528{
1529 i: ref Inst;
1530
1531 i = newi(op);
1532 *i.s = *code.j[J.src[0]].dst;
1533 relreg(code.j[J.src[0]].dst);
1534 if(op == ISUBW) # ineg
1535 addrimm(i.m, 0);
1536 else if(op == ISUBL) # lneg
1537 addrsind(i.m, Amp, mplong(big 0));
1538 dstreg(J.dst, dtype);
1539 *i.d = *J.dst;
1540 datareloc(i);
1541}
1542
1543iinc(val: int, ix: int)
1544{
1545 i: ref Inst;
1546
1547 i = newi(IADDW);
1548 addrimm(i.s, val);
1549 addrsind(i.d, Afp, localix(DIS_W, ix));
1550}
1551
1552#
1553# For javaif and javagoto, compute difference of try nesting
1554# level between source PC and destination PC.
1555# J.pc is source PC
1556# J.u.i is destination PC (relative from J.pc)
1557#
1558
1559tldiff(): int
1560{
1561 tls, tld: int;
1562 ix: int;
1563
1564 pick jp := J {
1565 Pi =>
1566 ix = jp.i;
1567 * =>
1568 badpick("tldiff");
1569 }
1570
1571 tld = 0;
1572 tls = trylevel(J.pc);
1573 if(tls > 0)
1574 tld = trylevel(J.pc+ix);
1575 return tls-tld;
1576}
1577
1578#
1579# Java if_acmp<cond>, if_icmp<cond>, if<cond>, ifnonnull, ifnull.
1580#
1581
1582CMPNULL, # compare against null: ifnonnull, ifnull
1583CMPZERO, # compare against 0: if<cond>
1584CMP2OP: con iota; # general compare: if_acmp<cond>, if_icmp<cond>
1585
1586javaif(op: int, cmpkind: int)
1587{
1588 i: ref Inst;
1589 n: int;
1590 ix: int;
1591
1592 pick jp := J {
1593 Pi =>
1594 ix = jp.i;
1595 * =>
1596 badpick("javaif");
1597 }
1598
1599 #n = tldiff();
1600 #if(n > 0) {
1601 # # complement the test when calling Sys.unrescue()
1602 # case op {
1603 # IBEQW =>
1604 # op = IBNEW;
1605 # IBNEW =>
1606 # op = IBEQW;
1607 # IBLTW =>
1608 # op = IBGEW;
1609 # IBLEW =>
1610 # op = IBGTW;
1611 # IBGTW =>
1612 # op = IBLEW;
1613 # IBGEW =>
1614 # op = IBLTW;
1615 # }
1616 # i = newi(op);
1617 # addrimm(i.d, pcdis + 2*n + 1);
1618 #} else {
1619 i = newibap(op);
1620 addrimm(i.d, ix);
1621 #}
1622
1623 *i.s = *code.j[J.src[0]].dst;
1624 relreg(code.j[J.src[0]].dst);
1625
1626 case cmpkind {
1627 CMPNULL =>
1628 addrsind(i.m, Amp, 0);
1629 CMPZERO =>
1630 addrimm(i.m, 0);
1631 datareloc(i);
1632 CMP2OP =>
1633 *i.m = *code.j[J.src[1]].dst;
1634 relreg(code.j[J.src[1]].dst);
1635 midcheck(i.m);
1636 datareloc(i);
1637 }
1638
1639 #if(n > 0) {
1640 # unrescue(n);
1641 # callunrescue = 0;
1642 # i = newibap(IJMP);
1643 # addrimm(i.d, ix);
1644 #}
1645}
1646
1647#
1648# Java goto and goto_w.
1649#
1650
1651javagoto()
1652{
1653 i: ref Inst;
1654 n: int;
1655 ix: int;
1656
1657 pick jp := J {
1658 Pi =>
1659 ix = jp.i;
1660 * =>
1661 badpick("javagoto");
1662 }
1663
1664 #n = tldiff();
1665 #if(n > 0) {
1666 # unrescue(n);
1667 # callunrescue = 0;
1668 #}
1669 i = newibap(IJMP);
1670 addrimm(i.d, ix);
1671}
1672
1673#
1674# Java return instructions.
1675#
1676
1677xjavareturn(op: int)
1678{
1679 i: ref Inst;
1680
1681 if(op != 0) { # if op == 0, then return void
1682 i = newi(op);
1683 *i.s = *code.j[J.src[0]].dst;
1684 relreg(code.j[J.src[0]].dst);
1685 addrdind(i.d, Afpind, REGRET*IBY2WD, 0);
1686 datareloc(i);
1687 }
1688
1689 if(M.access_flags & ACC_SYNCHRONIZED)
1690 mon_or_throw(Jmonitorexit, M.access_flags, 0);
1691
1692 newi(IRET);
1693}
1694
1695#
1696# pop & pop2
1697#
1698
1699xjavapop()
1700{
1701 relreg(code.j[J.src[0]].dst);
1702 if(J.nsrc == 2) # pop2
1703 relreg(code.j[J.src[1]].dst);
1704}
1705
1706#
1707# dup, dup2, etc.
1708#
1709
1710xjavadup()
1711{
1712 acqreg(code.j[J.src[0]].dst);
1713 if(J.nsrc == 2)
1714 acqreg(code.j[J.src[1]].dst);
1715}
1716
1717xldc()
1718{
1719 i: ref Inst;
1720 ix: int;
1721
1722 pick jp := J {
1723 Pi =>
1724 ix = jp.i;
1725 * =>
1726 badpick("xldc[1]");
1727 }
1728
1729 case int class.cts[ix] {
1730 CON_Integer =>
1731 xjavaload(IMOVW);
1732 CON_Float or
1733 CON_Double =>
1734 xjavaload(IMOVF);
1735 CON_Long =>
1736 xjavaload(IMOVL);
1737 CON_String =>
1738 xjavanew("java/lang/String", J.dst);
1739 i = newi(IMOVP);
1740 *i.s = *J.movsrc;
1741 *i.d = *J.dst;
1742 sind2dind(i.d, STR_DISSTR);
1743 addDreloc(i, PSRC, PSIND);
1744 CON_Class =>
1745 # TODO: stub!
1746 xjavaload(IMOVW);
1747 * =>
1748 badpick("xldc[2]");
1749 }
1750}
1751
1752#
1753# Java jsr and jsr_w.
1754# ix is relative Java pc offset of finally block entry point.
1755#
1756
1757jsr(ix: int)
1758{
1759 i: ref Inst;
1760
1761 i = newi(IMOVW);
1762 addrimm(i.s, 0);
1763 addrsind(i.d, Amp, 0);
1764 jsrfixup(i.s, i.d, i.pc+2, J.pc+ix);
1765 addDreloc(i, PDST, PSIND);
1766
1767 i = newibap(IJMP);
1768 addrimm(i.d, ix);
1769}
1770
1771#
1772# Java ret and wide ret.
1773#
1774
1775ret()
1776{
1777 i: ref Inst;
1778
1779 i = newi(IGOTO);
1780 addrsind(i.s, Amp, 0);
1781 addrsind(i.d, Amp, 0);
1782 retfixup(i.s, i.d, J.pc);
1783 addDreloc(i, PSRC, PSIND);
1784 addDreloc(i, PDST, PSIND);
1785}
1786
1787tableswitch()
1788{
1789 i: ref Inst;
1790 j, k, n, lb: int;
1791 jt: array of int;
1792 jpt1: ref Jinst.Pt1;
1793
1794 pick jp := J {
1795 Pt1 =>
1796 jpt1 = jp;
1797 * =>
1798 badpick("tableswitch");
1799 }
1800
1801 n = jpt1.t1.hb - jpt1.t1.lb + 1;
1802 jt = array [n*3+1] of int;
1803 j = 0;
1804 k = 0;
1805 lb = jpt1.t1.lb;
1806 while(j < n) {
1807 jt[k++] = lb;
1808 jt[k++] = ++lb;
1809 jt[k++] = jpt1.t1.tbl[j];
1810 j++;
1811 }
1812 jt[k] = jpt1.t1.dflt;
1813 i = newi(ICASE);
1814 *i.s = *code.j[J.src[0]].dst;
1815 relreg(code.j[J.src[0]].dst);
1816 addrsind(i.d, Amp, mpcase(n, jt));
1817 patchcase(i, n, jt);
1818 addDreloc(i, PDST, PSIND);
1819}
1820
1821lookupswitch()
1822{
1823 i: ref Inst;
1824 j, k: int;
1825 jt: array of int;
1826 jpt2: ref Jinst.Pt2;
1827
1828 pick jp := J {
1829 Pt2 =>
1830 jpt2 = jp;
1831 * =>
1832 badpick("lookupswitch");
1833 }
1834
1835 jt = array [jpt2.t2.np*3+1] of int;
1836 j = 0;
1837 k = 0;
1838 while(j < jpt2.t2.np*2) {
1839 jt[k++] = jpt2.t2.tbl[j];
1840 jt[k++] = jpt2.t2.tbl[j]+1;
1841 jt[k++] = jpt2.t2.tbl[j+1];
1842 j += 2;
1843 }
1844 jt[k] = jpt2.t2.dflt;
1845 i = newi(ICASE);
1846 *i.s = *code.j[J.src[0]].dst;
1847 relreg(code.j[J.src[0]].dst);
1848 addrsind(i.d, Amp, mpcase(jpt2.t2.np, jt));
1849 patchcase(i, jpt2.t2.np, jt);
1850 addDreloc(i, PDST, PSIND);
1851}
1852
1853#
1854# Call a library routine. Supports lcmp, [df]cmp[gl], [df]rem.
1855#
1856
1857jmath(jname: string, movinst: int, dtype: byte)
1858{
1859 imframe, i: ref Inst;
1860 cr: ref Creloc;
1861 frm, frf: ref Freloc;
1862
1863 cr = getCreloc(RLOADER);
1864 frm = getFreloc(cr, RMP, nil, 0);
1865 frf = getFreloc(cr, jname, nil, 0);
1866
1867 imframe = loadermframe(frm, frf);
1868
1869 i = newi(movinst);
1870 *i.s = *code.j[J.src[0]].dst;
1871 relreg(code.j[J.src[0]].dst);
1872 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
1873 datareloc(i);
1874
1875 if(jname[1] != '2') { # d2i or d2l ?
1876 i = newi(movinst);
1877 *i.s = *code.j[J.src[1]].dst;
1878 relreg(code.j[J.src[1]].dst);
1879 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE+IBY2LG);
1880 datareloc(i);
1881 }
1882
1883 i = newi(ILEA);
1884 dstreg(J.dst, dtype);
1885 *i.s = *J.dst;
1886 addrdind(i.d, Afpind, imframe.d.offset, REGRET*IBY2WD);
1887
1888 loadermcall(imframe, frf, frm);
1889 relreg(imframe.d);
1890}
1891
1892#
1893# checkcast & instanceof
1894#
1895
1896rtti()
1897{
1898 loaderfn: string;
1899 imframe, i: ref Inst;
1900 rtflag: int;
1901 rtc: ref RTClass;
1902 cr: ref Creloc;
1903 frm, frf: ref Freloc;
1904 ai: ref ArrayInfo;
1905 ix: int;
1906
1907 pick jp := J {
1908 Pi =>
1909 ix = jp.i;
1910 * =>
1911 badpick("rtti");
1912 }
1913
1914 ai = getaryinfo(CLASSNAME(ix));
1915 rtflag = 0;
1916 if(dortload(ai.ename)) {
1917 rtflag = 1;
1918 rtc = getRTClass(ai.ename);
1919 callrtload(rtc, ai.ename);
1920 }
1921
1922 if(J.op == byte Jcheckcast) {
1923 if(ai.ndim > 0) {
1924 if(ai.etype > 0)
1925 loaderfn = "pcheckcast";
1926 else
1927 loaderfn = "acheckcast";
1928 } else
1929 loaderfn = "checkcast";
1930 } else {
1931 if(ai.ndim > 0) {
1932 if(ai.etype > 0)
1933 loaderfn = "pinstanceof";
1934 else
1935 loaderfn = "ainstanceof";
1936 } else
1937 loaderfn = "instanceof";
1938 }
1939
1940 cr = getCreloc(RLOADER);
1941 frm = getFreloc(cr, RMP, nil, 0);
1942 frf = getFreloc(cr, loaderfn, nil, 0);
1943
1944 imframe = loadermframe(frm, frf);
1945
1946 # pass object as first argument
1947
1948 i = newi(IMOVP);
1949 *i.s = *code.j[J.src[0]].dst;
1950 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
1951
1952 # second argument
1953
1954 if(ai.etype == 0) {
1955 i = newi(IMOVP);
1956 addrsind(i.s, Amp, 0);
1957 if(rtflag == 1) {
1958 RTIpatch(getRTReloc(rtc, RADT, nil, 0), i, PSRC, PSIND);
1959 } else {
1960 LTIpatch(getFreloc(getCreloc(ai.ename), RADT, nil, 0),
1961 i, PSRC, PSIND);
1962 }
1963 } else {
1964 i = newi(IMOVW);
1965 addrimm(i.s, ai.etype);
1966 }
1967 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE+IBY2WD);
1968
1969 # third argument, if present
1970
1971 if(ai.ndim > 0) {
1972 i = newi(IMOVW);
1973 addrimm(i.s, ai.ndim);
1974 addrdind(i.d, Afpind, imframe.d.offset, REGSIZE+2*IBY2WD);
1975 }
1976
1977 if(J.op == byte Jinstanceof) {
1978 i = newi(ILEA);
1979 dstreg(J.dst, DIS_W);
1980 *i.s = *J.dst;
1981 addrdind(i.d, Afpind, imframe.d.offset, REGRET*IBY2WD);
1982 }
1983
1984 loadermcall(imframe, frf, frm);
1985 relreg(imframe.d);
1986
1987 if(J.op == byte Jcheckcast) {
1988 i = newi(IMOVP);
1989 *i.s = *code.j[J.src[0]].dst;
1990 relreg(code.j[J.src[0]].dst);
1991 dstreg(J.dst, DIS_P);
1992 *i.d = *J.dst;
1993 datareloc(i);
1994 } else
1995 relreg(code.j[J.src[0]].dst);
1996}
1997
1998#
1999# Exception handling.
2000#
2001
2002Catch: adt {
2003 exname: string;
2004 handler_pc: int;
2005 next: cyclic ref Catch;
2006};
2007
2008Try: adt {
2009 start_pc: int;
2010 end_pc: int;
2011 any_pc: int;
2012 catch: ref Catch;
2013 next: cyclic ref Try;
2014};
2015
2016EHInst: adt {
2017 i: ref Inst;
2018 next: cyclic ref EHInst;
2019};
2020
2021ehinst: ref EHInst;
2022trylist: ref Try;
2023distrylist: ref Try;
2024
2025#
2026# Save an EH branch instruction for later patching.
2027#
2028
2029saveehinst(i: ref Inst)
2030{
2031 ehi: ref EHInst;
2032
2033 ehi = ref EHInst(i, ehinst);
2034 ehinst = ehi;
2035}
2036
2037#
2038# Patch an EH branch instruction.
2039# Java PCs in exception tables are absolute, not relative.
2040#
2041
2042patchehinst()
2043{
2044 ehi: ref EHInst;
2045 i: ref Inst;
2046 j: ref Jinst;
2047 jix: int;
2048
2049 for(ehi = ehinst; ehi != nil; ehi = ehi.next) {
2050 i = ehi.i;
2051 jix = i.d.ival;
2052 j = code.j[jix];
2053 while(j.dis == nil) {
2054 jix += j.size;
2055 j = code.j[jix];
2056 }
2057 i.d.ival = j.dis.pc;
2058 }
2059 ehinst = nil;
2060}
2061
2062#
2063# Convert handler information into a more convenient form.
2064#
2065
2066cvtehinfo()
2067{
2068 i: int;
2069 t: ref Try;
2070 c: ref Catch;
2071 h: ref Handler;
2072
2073 if(code.nex == 0)
2074 return;
2075
2076 # process in reverse to maintain order of try & catch blocks
2077 for(i = code.nex-1; i >= 0; i--) {
2078 h = code.ex[i];
2079 if(trylist == nil
2080 || (t.start_pc != h.start_pc || t.end_pc != h.end_pc)) {
2081 t = ref Try(h.start_pc, h.end_pc, 0, nil, trylist);
2082 trylist = t;
2083 }
2084 if(h.catch_type == 0) {
2085 t.any_pc = h.handler_pc;
2086 } else {
2087 c = ref Catch(CLASSNAME(h.catch_type), h.handler_pc, t.catch);
2088 t.catch = c;
2089 }
2090 }
2091}
2092
2093#
2094# At what try nesting level is the given Java pc at.
2095# 0 means not within a try block.
2096#
2097
2098trylevel(pc: int): int
2099{
2100 level: int;
2101 t: ref Try;
2102
2103 level = 0;
2104 for(t = trylist; t != nil; t = t.next) {
2105 if(pc >= t.start_pc && pc < t.end_pc)
2106 level += 1;
2107 }
2108 return level;
2109}
2110
2111#
2112# Install an exception handler: call sys.rescue("*", nil).
2113#
2114
2115rescue(): ref Addr
2116{
2117 print("rescue()\n");
2118 #imframe, i: ref Inst;
2119 #cr: ref Creloc;
2120 #frm, frf: ref Freloc;
2121#
2122 #cr = getCreloc(RLOADER);
2123 #frm = getFreloc(cr, RSYS, nil, 0);
2124 #frf = getFreloc(cr, "rescue", nil, 0);
2125#
2126 #imframe = loadermframe(frm, frf);
2127#
2128 #i = newi(IMOVP);
2129 #addrsind(i.s, Amp, mpstring("*"));
2130 #addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
2131 #addDreloc(i, PSRC, PSIND);
2132#
2133 #i = newi(IMOVP);
2134 #addrsind(i.s, Afp, REFSYSEX);
2135 #addrdind(i.d, Afpind, imframe.d.offset, REGSIZE+IBY2WD);
2136#
2137 #i = newi(ILEA);
2138 #addrsind(i.s, Afp, getreg(DIS_W));
2139 #addrdind(i.d, Afpind, imframe.d.offset, REGRET*IBY2WD);
2140#
2141 #loadermcall(imframe, frf, frm);
2142 #relreg(imframe.d);
2143#
2144 #return i.s;
2145 return nil;
2146}
2147
2148#
2149# Uninstall one or more exception handlers: call sys.unrescue() n times.
2150#
2151
2152unrescue(n: int)
2153{
2154 print("unrescue()\n");
2155 #imframe: ref Inst;
2156 #cr: ref Creloc;
2157 #frm, frf: ref Freloc;
2158#
2159 #cr = getCreloc(RLOADER);
2160 #frm = getFreloc(cr, RSYS, nil, 0);
2161 #frf = getFreloc(cr, "unrescue", nil, 0);
2162#
2163 #while(n > 0) {
2164 # imframe = loadermframe(frm, frf);
2165 # loadermcall(imframe, frf, frm);
2166 # relreg(imframe.d);
2167 # n--;
2168 #}
2169}
2170
2171#
2172# Current handler doesn't catch current exception.
2173# Call sys.raise(@jex) to propagate (rethrow) the exception.
2174#
2175
2176rethrow(): ref Inst
2177{
2178 print("rethrow()\n");
2179 #imframe, i: ref Inst;
2180 #cr: ref Creloc;
2181 #frm, frf: ref Freloc;
2182#
2183 #cr = getCreloc(RLOADER);
2184 #frm = getFreloc(cr, RSYS, nil, 0);
2185 #frf = getFreloc(cr, "raise", nil, 0);
2186#
2187 #if(M.access_flags & ACC_SYNCHRONIZED && trylevel(J.pc) == 1)
2188 # mon_or_throw(Jmonitorexit, M.access_flags, 0);
2189#
2190 #imframe = loadermframe(frm, frf);
2191#
2192 #i = newi(IMOVP);
2193 #addrsind(i.s, Amp, 0);
2194 #addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
2195 #LTIpatch(getFreloc(cr, RJEX, nil, 0), i, PSRC, PSIND);
2196#
2197 #i = loadermcall(imframe, frf, frm);
2198 #relreg(imframe.d);
2199#
2200 #return i;
2201 return nil;
2202}
2203
2204#
2205# Retrieve thrown object prior to jumping to exception handler.
2206#
2207
2208catch()
2209{
2210 print("catch()\n");
2211 #imframe, i: ref Inst;
2212 #cr: ref Creloc;
2213 #frm, frf: ref Freloc;
2214#
2215 #cr = getCreloc(RLOADER);
2216 #frm = getFreloc(cr, RMP, nil, 0);
2217 #frf = getFreloc(cr, "culprit", nil, 0);
2218#
2219 #imframe = loadermframe(frm, frf);
2220#
2221 #i = newi(IMOVP);
2222 #addrsind(i.s, Afp, REFSYSEX);
2223 #addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
2224#
2225 #i = newi(ILEA);
2226 #addrsind(i.s, Afp, EXOBJ); # put in known location
2227 #addrdind(i.d, Afpind, imframe.d.offset, REGRET*IBY2WD);
2228#
2229 #loadermcall(imframe, frf, frm);
2230 #relreg(imframe.d);
2231}
2232
2233#
2234# Does thrown object match handler for exception class exname ?
2235#
2236
2237chkhandler(exname: string): ref Addr
2238{
2239 print("chkhandler()\n");
2240 #imframe, i: ref Inst;
2241 #rtc: ref RTClass;
2242 #cr: ref Creloc;
2243 #frm, frf: ref Freloc;
2244#
2245 #rtc = getRTClass(exname);
2246 #callrtload(rtc, exname);
2247#
2248 #cr = getCreloc(RLOADER);
2249 #frm = getFreloc(cr, RMP, nil, 0);
2250 #frf = getFreloc(cr, "instanceof", nil, 0);
2251#
2252 #imframe = loadermframe(frm, frf);
2253#
2254 #i = newi(IMOVP);
2255 #addrsind(i.s, Afp, EXOBJ);
2256 #addrdind(i.d, Afpind, imframe.d.offset, REGSIZE);
2257#
2258 #i = newi(IMOVP);
2259 #addrsind(i.s, Amp, 0);
2260 #RTIpatch(getRTReloc(rtc, RADT, nil, 0), i, PSRC, PSIND);
2261 #addrdind(i.d, Afpind, imframe.d.offset, REGSIZE+IBY2WD);
2262#
2263 #i = newi(ILEA);
2264 #addrsind(i.s, Afp, getreg(DIS_W));
2265 #addrdind(i.d, Afpind, imframe.d.offset, REGRET*IBY2WD);
2266#
2267 #loadermcall(imframe, frf, frm);
2268 #relreg(imframe.d);
2269#
2270 #return i.s;
2271 return nil;
2272}
2273
2274#
2275# Start of a try block. Install exception handler for try block t.
2276#
2277
2278trystart(t: ref Try)
2279{
2280 print("trystart()\n");
2281 ibeqw, i: ref Inst;
2282 a: ref Addr;
2283 c: ref Catch;
2284
2285 a = rescue();
2286
2287 #ibeqw = newi(IBEQW);
2288 #*ibeqw.s = *a;
2289 #relreg(a);
2290 #addrimm(ibeqw.m, 0); # Sys.HANDLER == 0
2291 #addrimm(ibeqw.d, 0);
2292
2293 # code executed when sys.rescue() "returns" Sys.EXCEPTION
2294
2295 unrescue(1);
2296
2297 catch();
2298
2299 for(c = t.catch; c != nil; c = c.next) {
2300 a = chkhandler(c.exname);
2301 i = newi(IBEQW);
2302 *i.s = *a;
2303 relreg(a);
2304 addrimm(i.m, 1);
2305 addrimm(i.d, c.handler_pc);
2306 saveehinst(i);
2307 }
2308
2309 if(t.any_pc > 0) {
2310 i = newi(IJMP);
2311 addrimm(i.d, t.any_pc);
2312 saveehinst(i);
2313 } #else
2314 # i = rethrow();
2315
2316 #ibeqw.d.ival = i.pc+1;
2317
2318 #
2319 # rtload()'s done in Sys.EXCEPTION branch are not valid
2320 # for normal flow (Sys.HANDLER branch)
2321 #
2322 rtncache = 0;
2323}
2324
2325#
2326# At the start or end of a try block ?
2327#
2328
2329tryhandling()
2330{
2331 #print("tryhandling()\n");
2332 #t: ref Try;
2333#
2334 #for(t = trylist; t != nil; t = t.next) {
2335 # # > 1 try block can have the same start_pc
2336 # if(t.start_pc == J.pc)
2337 # trystart(t);
2338 # # try block may consist of just 1 bytecode
2339 # if(t.end_pc == J.pc+J.size)
2340 # callunrescue = 1;
2341 #}
2342}
2343
2344#
2345# Generate Dis assembly code for one method.
2346#
2347
2348java2dis()
2349{
2350 jnext: ref Jinst;
2351 jix: int;
2352
2353 jix = 0;
2354 while(jix < code.code_length) {
2355 J = code.j[jix];
2356 J.pcdis = pcdis;
2357 if(J.bb.js == J) { # start of a basic block ?
2358 # ignore unreachable code
2359 if((J.bb.flags & BB_REACHABLE) == byte 0) {
2360 jix = J.bb.je.pc + J.bb.je.size;
2361 continue;
2362 }
2363 # initialize fp temporary pool
2364 clearreg();
2365 reservereg(J.bb.entrystk, J.bb.entrysz);
2366 reservereg(J.bb.exitstk, J.bb.exitsz);
2367 # flush run-time load cache
2368 rtncache = 0;
2369 }
2370
2371 # start of a synchronized method ?
2372 if(J.pc == 0 && M.access_flags & ACC_SYNCHRONIZED)
2373 mon_or_throw(Jmonitorenter, M.access_flags, 0);
2374
2375 #tryhandling();
2376
2377 if(jix+J.size < code.code_length)
2378 jnext = code.j[jix+J.size];
2379 else
2380 jnext = nil;
2381 # "optimize" loads and stores
2382 if(jnext != nil && isstore(jnext) && jnext.bb.js != jnext) {
2383 if(J.dst.mode == Afp && J.dst.offset == -1) {
2384 *J.dst = *jnext.dst;
2385 # mark jnext so mov not generated for it
2386 jnext.dst.mode = Anone;
2387 } else if(isload(J) && J.movsrc.mode == Anone) {
2388 *J.movsrc = *J.dst;
2389 *J.dst = *jnext.dst;
2390 # mark jnext so mov not generated for it
2391 jnext.dst.mode = Anone;
2392 }
2393 }
2394
2395 jpi: ref Jinst.Pi;
2396 jpx1c: ref Jinst.Px1c;
2397 jpw: ref Jinst.Pw;
2398
2399 pick jp := J {
2400 Pi =>
2401 jpi = jp;
2402 Px1c =>
2403 jpx1c = jp;
2404 Pw =>
2405 jpw = jp;
2406 }
2407
2408 case int J.op {
2409 Jnop =>
2410 ;
2411 Jaconst_null =>
2412 xjavaload(IMOVP);
2413 Jiconst_m1 or
2414 Jiconst_0 or
2415 Jiconst_1 or
2416 Jiconst_2 or
2417 Jiconst_3 or
2418 Jiconst_4 or
2419 Jiconst_5 or
2420 Jbipush or
2421 Jsipush =>
2422 xjavaload(IMOVW);
2423 Jlconst_0 or
2424 Jlconst_1 =>
2425 xjavaload(IMOVL);
2426 Jfconst_0 or
2427 Jdconst_0 or
2428 Jfconst_1 or
2429 Jdconst_1 or
2430 Jfconst_2 =>
2431 xjavaload(IMOVF);
2432 Jldc or
2433 Jldc_w or
2434 Jldc2_w =>
2435 xldc();
2436 Jiload or
2437 Jiload_0 or
2438 Jiload_1 or
2439 Jiload_2 or
2440 Jiload_3 =>
2441 xjavaload(IMOVW);
2442 Jlload or
2443 Jlload_0 or
2444 Jlload_1 or
2445 Jlload_2 or
2446 Jlload_3 =>
2447 xjavaload(IMOVL);
2448 Jfload or
2449 Jdload or
2450 Jfload_0 or
2451 Jdload_0 or
2452 Jfload_1 or
2453 Jdload_1 or
2454 Jfload_2 or
2455 Jdload_2 or
2456 Jfload_3 or
2457 Jdload_3 =>
2458 xjavaload(IMOVF);
2459 Jaload or
2460 Jaload_0 or
2461 Jaload_1 or
2462 Jaload_2 or
2463 Jaload_3 =>
2464 xjavaload(IMOVP);
2465 Jbaload =>
2466 xarrayload(IINDB, ICVTBW, DIS_W);
2467 Jcaload or
2468 Jsaload or
2469 Jiaload =>
2470 xarrayload(IINDW, IMOVW, DIS_W);
2471 Jlaload =>
2472 xarrayload(IINDL, IMOVL, DIS_L);
2473 Jfaload or
2474 Jdaload =>
2475 xarrayload(IINDF, IMOVF, DIS_L);
2476 Jaaload =>
2477 xarrayload(IINDX, IMOVP, DIS_P);
2478 Jistore or
2479 Jistore_0 or
2480 Jistore_1 or
2481 Jistore_2 or
2482 Jistore_3 =>
2483 xjavastore(IMOVW);
2484 Jlstore or
2485 Jlstore_0 or
2486 Jlstore_1 or
2487 Jlstore_2 or
2488 Jlstore_3 =>
2489 xjavastore(IMOVL);
2490 Jfstore or
2491 Jdstore or
2492 Jfstore_0 or
2493 Jdstore_0 or
2494 Jfstore_1 or
2495 Jdstore_1 or
2496 Jfstore_2 or
2497 Jdstore_2 or
2498 Jfstore_3 or
2499 Jdstore_3 =>
2500 xjavastore(IMOVF);
2501 Jastore or
2502 Jastore_0 or
2503 Jastore_1 or
2504 Jastore_2 or
2505 Jastore_3 =>
2506 xjavastore(IMOVP);
2507 Jbastore =>
2508 xarraystore(IINDB, ICVTWB);
2509 Jcastore or
2510 Jsastore or
2511 Jiastore =>
2512 xarraystore(IINDW, IMOVW);
2513 Jlastore =>
2514 xarraystore(IINDL, IMOVL);
2515 Jfastore or
2516 Jdastore =>
2517 xarraystore(IINDF, IMOVF);
2518 Jaastore =>
2519 aastore();
2520 xarraystore(IINDX, IMOVP);
2521 Jpop or
2522 Jpop2 =>
2523 xjavapop();
2524 Jdup or
2525 Jdup_x1 or
2526 Jdup_x2 or
2527 Jdup2 or
2528 Jdup2_x1 or
2529 Jdup2_x2 =>
2530 xjavadup();
2531 Jswap =>
2532 ;
2533 Jiadd =>
2534 xbinop(IADDW, DIS_W, 0);
2535 Jisub =>
2536 xbinop(ISUBW, DIS_W, 0);
2537 Jimul =>
2538 xbinop(IMULW, DIS_W, 0);
2539 Jidiv =>
2540 xbinop(IDIVW, DIS_W, 0);
2541 Jishl =>
2542 shift(ISHLW, DIS_W);
2543 Jishr =>
2544 shift(ISHRW, DIS_W);
2545 Jiushr =>
2546 shift(ILSRW, DIS_W);
2547 Jirem =>
2548 xbinop(IMODW, DIS_W, 0);
2549 Jiand =>
2550 xbinop(IANDW, DIS_W, 0);
2551 Jior =>
2552 xbinop(IORW, DIS_W, 0);
2553 Jixor =>
2554 xbinop(IXORW, DIS_W, 0);
2555 Jladd =>
2556 xbinop(IADDL, DIS_L, 0);
2557 Jlsub =>
2558 xbinop(ISUBL, DIS_L, 0);
2559 Jlmul =>
2560 xbinop(IMULL, DIS_L, 0);
2561 Jldiv =>
2562 xbinop(IDIVL, DIS_L, 0);
2563 Jlrem =>
2564 xbinop(IMODL, DIS_L, 0);
2565 Jland =>
2566 xbinop(IANDL, DIS_L, 0);
2567 Jlor =>
2568 xbinop(IORL, DIS_L, 0);
2569 Jlxor =>
2570 xbinop(IXORL, DIS_L, 0);
2571 Jfadd =>
2572 xbinop(IADDF, DIS_L, 1);
2573 Jdadd =>
2574 xbinop(IADDF, DIS_L, 0);
2575 Jfsub =>
2576 xbinop(ISUBF, DIS_L, 1);
2577 Jdsub =>
2578 xbinop(ISUBF, DIS_L, 0);
2579 Jfmul =>
2580 xbinop(IMULF, DIS_L, 1);
2581 Jdmul =>
2582 xbinop(IMULF, DIS_L, 0);
2583 Jfdiv =>
2584 xbinop(IDIVF, DIS_L, 1);
2585 Jddiv =>
2586 xbinop(IDIVF, DIS_L, 0);
2587 Jfrem or
2588 Jdrem =>
2589 jmath("drem", IMOVF, DIS_L);
2590 Jineg =>
2591 neg(ISUBW, DIS_W);
2592 Jlneg =>
2593 neg(ISUBL, DIS_L);
2594 Jfneg or
2595 Jdneg =>
2596 neg(INEGF, DIS_L);
2597 Jlshl =>
2598 shift(ISHLL, DIS_L);
2599 Jlshr =>
2600 shift(ISHRL, DIS_L);
2601 Jlushr =>
2602 shift(ILSRL, DIS_L);
2603 Jiinc =>
2604 iinc(jpx1c.x1c.icon, jpx1c.x1c.ix);
2605 Ji2l =>
2606 cvt(ICVTWL, DIS_L, 0);
2607 Ji2f =>
2608 cvt(ICVTWF, DIS_L, 1);
2609 Ji2d =>
2610 cvt(ICVTWF, DIS_L, 0);
2611 Jl2i =>
2612 cvt(ICVTLW, DIS_W, 0);
2613 Jl2f =>
2614 cvt(ICVTLF, DIS_L, 1);
2615 Jl2d =>
2616 cvt(ICVTLF, DIS_L, 0);
2617 Jf2i or
2618 Jd2i =>
2619 jmath("d2i", IMOVF, DIS_W);
2620 Jf2l or
2621 Jd2l =>
2622 jmath("d2l", IMOVF, DIS_L);
2623 Jf2d =>
2624 cvt(IMOVF, DIS_L, 0);
2625 Jd2f =>
2626 cvt(IMOVF, DIS_L, 1);
2627 Ji2b =>
2628 i2bs(24);
2629 Ji2c =>
2630 i2c();
2631 Ji2s =>
2632 i2bs(16);
2633 Jlcmp =>
2634 jmath("lcmp", IMOVL, DIS_W);
2635 Jfcmpl or
2636 Jdcmpl =>
2637 jmath("dcmpl", IMOVF, DIS_W);
2638 Jfcmpg or
2639 Jdcmpg =>
2640 jmath("dcmpg", IMOVF, DIS_W);
2641 Jifeq =>
2642 javaif(IBEQW, CMPZERO);
2643 Jifne =>
2644 javaif(IBNEW, CMPZERO);
2645 Jiflt =>
2646 javaif(IBLTW, CMPZERO);
2647 Jifge =>
2648 javaif(IBGEW, CMPZERO);
2649 Jifgt =>
2650 javaif(IBGTW, CMPZERO);
2651 Jifle =>
2652 javaif(IBLEW, CMPZERO);
2653 Jif_acmpeq or
2654 Jif_icmpeq =>
2655 javaif(IBEQW, CMP2OP);
2656 Jif_acmpne or
2657 Jif_icmpne =>
2658 javaif(IBNEW, CMP2OP);
2659 Jif_icmplt =>
2660 javaif(IBLTW, CMP2OP);
2661 Jif_icmpge =>
2662 javaif(IBGEW, CMP2OP);
2663 Jif_icmpgt =>
2664 javaif(IBGTW, CMP2OP);
2665 Jif_icmple =>
2666 javaif(IBLEW, CMP2OP);
2667 Jgoto or
2668 Jgoto_w =>
2669 javagoto();
2670 Jjsr or
2671 Jjsr_w =>
2672 jsr(jpi.i);
2673 Jret =>
2674 ret();
2675 Jtableswitch =>
2676 tableswitch();
2677 Jlookupswitch =>
2678 lookupswitch();
2679 Jireturn =>
2680 xjavareturn(IMOVW);
2681 Jlreturn =>
2682 xjavareturn(IMOVL);
2683 Jfreturn or
2684 Jdreturn =>
2685 xjavareturn(IMOVF);
2686 Jareturn =>
2687 xjavareturn(IMOVP);
2688 Jreturn =>
2689 xjavareturn(0);
2690 Jgetfield =>
2691 getfield();
2692 Jgetstatic =>
2693 getstatic();
2694 Jputfield =>
2695 putfield();
2696 Jputstatic =>
2697 putstatic();
2698 Jinvokevirtual =>
2699 invokev();
2700 Jinvokespecial =>
2701 invokess(Rinvokespecial, Rspecialmp);
2702 Jinvokestatic =>
2703 invokess(Rinvokestatic, Rstaticmp);
2704 Jinvokeinterface =>
2705 invokei();
2706 Jxxxunusedxxx =>
2707 ;
2708 Jnew =>
2709 xjavanew(CLASSNAME(jpi.i), jpi.dst);
2710 Jnewarray =>
2711 newarray();
2712 Janewarray =>
2713 xanewarray();
2714 Jarraylength =>
2715 arraylength();
2716 Jcheckcast or
2717 Jinstanceof =>
2718 rtti();
2719 Jathrow or
2720 Jmonitorenter or
2721 Jmonitorexit =>
2722 if(J.op == byte Jathrow
2723 && M.access_flags & ACC_SYNCHRONIZED
2724 && trylevel(J.pc) == 0) {
2725 mon_or_throw(Jmonitorexit, M.access_flags, 0);
2726 }
2727 mon_or_throw(int J.op, 0, 1);
2728 Jwide =>
2729 case int jpw.w.op {
2730 Jiload =>
2731 xjavaload(IMOVW);
2732 Jlload =>
2733 xjavaload(IMOVL);
2734 Jfload or
2735 Jdload =>
2736 xjavaload(IMOVF);
2737 Jaload =>
2738 xjavaload(IMOVP);
2739 Jistore =>
2740 xjavastore(IMOVW);
2741 Jlstore =>
2742 xjavastore(IMOVL);
2743 Jfstore or
2744 Jdstore =>
2745 xjavastore(IMOVF);
2746 Jastore =>
2747 xjavastore(IMOVP);
2748 Jret =>
2749 ret();
2750 Jiinc =>
2751 iinc(jpw.w.icon, jpw.w.ix);
2752 }
2753 Jmultianewarray =>
2754 xmultianewarray();
2755 Jifnull =>
2756 javaif(IBEQW, CMPNULL);
2757 Jifnonnull =>
2758 javaif(IBNEW, CMPNULL);
2759 }
2760 if(callunrescue == 1) {
2761 #unrescue(1);
2762 callunrescue = 0;
2763 }
2764 jix += J.size;
2765 }
2766 # handle exception handlers
2767 for(t := trylist; t != nil; t = t.next) {
2768 # just convert pc's and append the entries to global distrylist
2769
2770 }
2771 J = nil;
2772}
2773
2774#
2775# If there are exception handlers, then allocate a 'ref Sys->Exception'
2776# to pass to Sys->rescue() and Loader->culprit().
2777# Not needed anymore
2778#
2779
2780#ref_sys_except()
2781#{
2782# i: ref Inst;
2783#
2784# if(code.nex == 0)
2785# return;
2786#
2787# i = newi(INEW);
2788# addrimm(i.s, descid(3*IBY2WD, 1, array [1] of { byte 16rc0 }));
2789# addrsind(i.d, Afp, REFSYSEX);
2790#}
2791
2792#
2793# Generate initialization code for 'static final' fields that have
2794# ConstantValue attributes.
2795#
2796
2797clinitinits(): ref Inst
2798{
2799 movi: int;
2800 j, ix, offset, value: int;
2801 sig: string;
2802 a: ref Addr;
2803 as: ref Addr;
2804 fp: ref Field;
2805 fi: ref FieldInfo;
2806 i, reti: ref Inst;
2807
2808 as = ref Addr(Afp, 0, 0);
2809 fi = ref FieldInfo(THISCLASS, nil, nil, 0);
2810 reti = nil;
2811
2812 for(j = 0; j < class.fields_count; j++) {
2813 fp = class.fields[j];
2814 if((fp.access_flags & ACC_STATIC) && (ix = CVattrindex(fp))) {
2815 sig = STRING(fp.sig_index);
2816 pick cp := class.cps[ix] {
2817 Ptint =>
2818 if(cp.tint == 0)
2819 continue;
2820 if(sig[0] == 'Z' || sig[0] == 'B')
2821 movi = ICVTWB;
2822 else
2823 movi = IMOVW;
2824 if(notimmable(cp.tint))
2825 offset = mpint(cp.tint);
2826 else {
2827 offset = -1;
2828 value = cp.tint;
2829 }
2830 Ptvlong =>
2831 if(cp.tvlong == big 0)
2832 continue;
2833 movi = IMOVL;
2834 offset = mplong(cp.tvlong);
2835 Ptdouble =>
2836 if(cp.tdouble == 0.0)
2837 continue;
2838 movi = IMOVF;
2839 offset = mpreal(cp.tdouble);
2840 Pstring_index =>
2841 movi = IMOVP;
2842 offset = mpstring(STRING(cp.string_index));
2843 break;
2844 * =>
2845 badpick("clinitinits");
2846 }
2847 fi.fieldname = STRING(fp.name_index);
2848 fi.sig = sig;
2849 a = ltstaticadd(fi);
2850 if(reti == nil)
2851 reti = itail;
2852 if(movi == IMOVP) {
2853 as.offset = -1;
2854 xjavanew("java/lang/String", as);
2855 i = newi(IMOVP);
2856 addrsind(i.s, Amp, offset);
2857 *i.d = *as;
2858 sind2dind(i.d, STR_DISSTR);
2859 addDreloc(i, PSRC, PSIND);
2860 }
2861 i = newi(movi);
2862 if(movi == IMOVP) {
2863 *i.s = *as;
2864 relreg(as);
2865 } else if(offset >= 0) {
2866 addrsind(i.s, Amp, offset);
2867 addDreloc(i, PSRC, PSIND);
2868 } else
2869 addrimm(i.s, value);
2870 *i.d = *a;
2871 sind2dind(i.d, 0);
2872 relreg(a);
2873 }
2874 }
2875 return reti;
2876}
2877
2878#
2879# Cook up a <clinit> static method.
2880#
2881
2882genclinit()
2883{
2884 savepc: int;
2885
2886 savepc = pcdis;
2887 openframe("()V", ACC_STATIC);
2888 clinitclone = clinitinits(); # save for -v option
2889 newi(IRET);
2890 xtrnlink(closeframe(), savepc, "<clinit>", "()V");
2891}
2892
2893#
2894# Cook up link entry and body for <clone> static method.
2895#
2896
2897genclone(): ref Inst
2898{
2899 i, clone: ref Inst;
2900 fr: ref Freloc;
2901
2902 xtrnlink(descid(40, 2, array [2] of { byte 0, byte 16rc0 }), pcdis, "<clone>", "()V");
2903
2904 #
2905 # new @Class, 36(fp)
2906 # movmp 0(32(fp)), @Class, 0(36(fp))
2907 # movp 36(fp), 0(16(fp))
2908 # ret
2909 #
2910
2911 fr = getFreloc(getCreloc(THISCLASS), RCLASS, nil, 0);
2912
2913 i = newi(INEW);
2914 addrimm(i.s, 0);
2915 LTIpatch(fr, i, PSRC, PIMM);
2916 addrsind(i.d, Afp, 36);
2917 clone = i; # save for -v option
2918
2919 i = newi(IMOVMP);
2920 addrdind(i.s, Afpind, 32, 0);
2921 addrimm(i.m, 0);
2922 LTIpatch(fr, i, PMID, PIMM);
2923 addrdind(i.d, Afpind, 36, 0);
2924
2925 i = newi(IMOVP);
2926 addrsind(i.s, Afp, 36);
2927 addrdind(i.d, Afpind, 16, 0);
2928
2929 newi(IRET);
2930
2931 return clone;
2932}
2933
2934#
2935# Translate the methods in class cl.
2936#
2937
2938xlate()
2939{
2940 i, j, n: int;
2941 savepcdis: int;
2942 a: ref Attr;
2943 clone: ref Inst;
2944 m: ref Method;
2945 name, sig: string;
2946
2947 n = 0;
2948 for(i = 0; i < class.methods_count; i++) {
2949 m = class.methods[i];
2950 name = STRING(m.name_index);
2951 pcode[n].name = name;
2952 sig = STRING(m.sig_index);
2953 pcode[n].sig = sig;
2954 for(j = 0; j < m.attr_count; j++) {
2955 a = m.attr_info[j];
2956 if(STRING(a.name) == "Code") {
2957 M = m;
2958 code = javadas(a);
2959 pcode[n].code = code;
2960 cvtehinfo();
2961 # exception object TODO: needs fix
2962 addrsind(code.j[code.code_length].dst, Afp, EXOBJ);
2963 #addrsind(code.j[code.code_length].dst, Afp, 0);
2964 openframe(sig, m.access_flags&ACC_STATIC);
2965 savepcdis = pcdis;
2966 flowgraph();
2967 simjvm(sig);
2968 unify();
2969 J = code.j[0];
2970 #ref_sys_except();
2971 if(doclinitinits && name == "<clinit>") {
2972 clinitinits();
2973 doclinitinits = 0;
2974 }
2975 java2dis();
2976 bbfree();
2977 xtrnlink(closeframe(), savepcdis, name, sig);
2978 patchmethod(savepcdis);
2979 patchehinst();
2980 patchfree();
2981 finallyfree();
2982 trylist = nil;
2983 }
2984 }
2985 n += 1;
2986 }
2987
2988 if(doclinitinits)
2989 genclinit();
2990
2991 if((class.access_flags & (ACC_INTERFACE | ACC_ABSTRACT)) == 0) {
2992 clone = genclone();
2993 if(clinitclone == nil)
2994 clinitclone = clone;
2995 }
2996}
java/appl/java/cast.base+53−0
@@ -0,0 +1,53 @@
1#0
2 movp 32(fp),0(16(fp))
3 ret
4 desc $0,0,""
5 desc $1,40,"0080"
6 var @mp,0
7 module Cast
8# cast to JObject
9 link 1,0,0xaaaaaaaa,"FromJArray"
10 link 1,0,0xaaaaaaaa,"FromJClass"
11 link 1,0,0xaaaaaaaa,"FromJString"
12# cast JArray* to JArray
13 link 1,0,0xaaaaaaaa,"ByteToJArray"
14 link 1,0,0xaaaaaaaa,"IntToJArray"
15 link 1,0,0xaaaaaaaa,"BigToJArray"
16 link 1,0,0xaaaaaaaa,"RealToJArray"
17 link 1,0,0xaaaaaaaa,"ClassToJArray"
18 link 1,0,0xaaaaaaaa,"StringToJArray"
19 link 1,0,0xaaaaaaaa,"ObjectToJArray"
20# cast JArray to JArray*
21 link 1,0,0xaaaaaaaa,"JArrayToByte"
22 link 1,0,0xaaaaaaaa,"JArrayToInt"
23 link 1,0,0xaaaaaaaa,"JArrayToBig"
24 link 1,0,0xaaaaaaaa,"JArrayToReal"
25 link 1,0,0xaaaaaaaa,"JArrayToClass"
26 link 1,0,0xaaaaaaaa,"JArrayToString"
27 link 1,0,0xaaaaaaaa,"JArrayToObject"
28
29# cast from JObject
30 link 1,0,0xaaaaaaaa,"ToJArray"
31 link 1,0,0xaaaaaaaa,"ToJArrayB"
32 link 1,0,0xaaaaaaaa,"ToJArrayC"
33 link 1,0,0xaaaaaaaa,"ToJArrayS"
34 link 1,0,0xaaaaaaaa,"ToJArrayI"
35 link 1,0,0xaaaaaaaa,"ToJArrayJ"
36 link 1,0,0xaaaaaaaa,"ToJArrayF"
37 link 1,0,0xaaaaaaaa,"ToJArrayD"
38 link 1,0,0xaaaaaaaa,"ToJArrayZ"
39 link 1,0,0xaaaaaaaa,"ToJArrayJString"
40 link 1,0,0xaaaaaaaa,"ToJArrayJObject"
41 link 1,0,0xaaaaaaaa,"ToJClass"
42 link 1,0,0xaaaaaaaa,"ToJString"
43
44# cast thread data
45 link 1,0,0xaaaaaaaa,"JObjToJThd"
46 link 1,0,0xaaaaaaaa,"JThdToJObj"
47
48# misc cast
49 link 1,0,0xaaaaaaaa,"Class2Niladt"
50 link 1,0,0xaaaaaaaa,"Obj2Niladt"
51 link 1,0,0xaaaaaaaa,"JNI2Nilmod"
52 link 1,0,0xaaaaaaaa,"JArrayToHolder"
53
java/appl/java/cast.s+53−0
@@ -0,0 +1,53 @@
1#0
2 movp 32(fp),0(16(fp))
3 ret
4 desc $0,0,""
5 desc $1,40,"0080"
6 var @mp,0
7 module Cast
8# cast to JObject
9 link 1,0,0xb8ed9861,"FromJArray"
10 link 1,0,0xb8884c9a,"FromJClass"
11 link 1,0,0x76cd0754,"FromJString"
12# cast JArray* to JArray
13 link 1,0,0x308d465a,"ByteToJArray"
14 link 1,0,0x54d1047d,"IntToJArray"
15 link 1,0,0x8943ab,"BigToJArray"
16 link 1,0,0xf7ce22ea,"RealToJArray"
17 link 1,0,0x7e0e257a,"ClassToJArray"
18 link 1,0,0xf0709f5f,"StringToJArray"
19 link 1,0,0x5e96bb51,"ObjectToJArray"
20# cast JArray to JArray*
21 link 1,0,0xdab35b9b,"JArrayToByte"
22 link 1,0,0xdfce047b,"JArrayToInt"
23 link 1,0,0x8b84c7a8,"JArrayToBig"
24 link 1,0,0x7960d11,"JArrayToReal"
25 link 1,0,0xdaebabf,"JArrayToClass"
26 link 1,0,0x1102d2ef,"JArrayToString"
27 link 1,0,0x14d3cbb9,"JArrayToObject"
28
29# cast from JObject
30 link 1,0,0x6d675ef6,"ToJArray"
31 link 1,0,0xe0b15252,"ToJArrayB"
32 link 1,0,0x32346c9,"ToJArrayC"
33 link 1,0,0x32346c9,"ToJArrayS"
34 link 1,0,0x32346c9,"ToJArrayI"
35 link 1,0,0xdea604f9,"ToJArrayJ"
36 link 1,0,0x5cde7840,"ToJArrayF"
37 link 1,0,0x5cde7840,"ToJArrayD"
38 link 1,0,0xe0b15252,"ToJArrayZ"
39 link 1,0,0xe6e32a84,"ToJArrayJString"
40 link 1,0,0x4cbbe2c3,"ToJArrayJObject"
41 link 1,0,0x424af2d7,"ToJClass"
42 link 1,0,0x4fd3acd0,"ToJString"
43
44# cast thread data
45 link 1,0,0x52e73674,"JObjToJThd"
46 link 1,0,0x7e48ea3a,"JThdToJObj"
47
48# misc cast
49 link 1,0,0x2b7b0708,"Class2Niladt"
50 link 1,0,0x2e1c372c,"Obj2Niladt"
51 link 1,0,0x69964565,"JNI2Nilmod"
52 link 1,0,0xe04c9ec8,"JArrayToHolder"
53
java/appl/java/castproto.b+144−0
@@ -0,0 +1,144 @@
1#
2# this file contains stubs for the fcts
3# declared in cast.m. This file is
4# run through the limbo compiler in order
5# to obtain valid funtion signatures which
6# are then combined with cast.base (the
7# dis assmebly code) to produce a valid
8# cast.s. The generated cast.s will contain
9# the code from cast.base and the correct
10# function signatures generated by limbo
11# and this file. cast.s is then run through
12# the assembler to produce cast.dis.
13# weird, but it works.
14#
15implement Cast;
16
17include "jni.m";
18
19
20#
21# to JObject
22#
23FromJArray( o : JNI->JArray ) : JNI->JObject
24{ junk := o; return(nil); }
25
26FromJClass( o : JNI->JClass ) : JNI->JObject
27{ junk := o; return(nil); }
28
29FromJString( o : JNI->JString ) : JNI->JObject
30{ junk := o; return(nil); }
31
32#
33# cast JArray* to JArray
34#
35ByteToJArray( o : ref JNI->ByteArray ) : JNI->JArray
36{ junk := o; return(nil); }
37
38IntToJArray( o : ref JNI->IntArray ) : JNI->JArray
39{ junk := o; return(nil); }
40
41BigToJArray( o : ref JNI->BigArray ) : JNI->JArray
42{ junk := o; return(nil); }
43
44RealToJArray( o : ref JNI->RealArray ) : JNI->JArray
45{ junk := o; return(nil); }
46
47ClassToJArray( o : ref JNI->ClassArray ) : JNI->JArray
48{ junk := o; return(nil); }
49
50StringToJArray( o : ref JNI->StringArray ) : JNI->JArray
51{ junk := o; return(nil); }
52
53ObjectToJArray( o : ref JNI->ObjectArray ) : JNI->JArray
54{ junk := o; return(nil); }
55
56#
57# cast JArray to JArray*
58#
59JArrayToByte( ptr : JNI->JArray ) : ref JNI->ByteArray
60{ junk := ptr; return(nil); }
61
62JArrayToInt( ptr : JNI->JArray ) : ref JNI->IntArray
63{ junk := ptr; return(nil); }
64
65JArrayToBig( ptr : JNI->JArray ) : ref JNI->BigArray
66{ junk := ptr; return(nil); }
67
68JArrayToReal( ptr : JNI->JArray ) : ref JNI->RealArray
69{ junk := ptr; return(nil); }
70
71JArrayToClass( ptr : JNI->JArray ) : ref JNI->ClassArray
72{ junk := ptr; return(nil); }
73
74JArrayToString( ptr : JNI->JArray ) : ref JNI->StringArray
75{ junk := ptr; return(nil); }
76
77JArrayToObject( ptr : JNI->JArray ) : ref JNI->ObjectArray
78{ junk := ptr; return(nil); }
79
80
81#
82# cast from JObjects
83#
84ToJClass( o : JNI->JObject ) : JNI->JClass
85{ junk := o; return(nil); }
86
87ToJString( o : JNI->JObject ) : JNI->JString
88{ junk := o; return(nil); }
89
90ToJArray( o : JNI->JObject ) : JNI->JArray
91{ junk := o; return(nil); }
92
93ToJArrayB( o : JNI->JObject ) : JNI->JArrayB
94{ junk := o; return(nil); }
95
96ToJArrayC( o : JNI->JObject ) : JNI->JArrayC
97{ junk := o; return(nil); }
98
99ToJArrayS( o : JNI->JObject ) : JNI->JArrayS
100{ junk := o; return(nil); }
101
102ToJArrayI( o : JNI->JObject ) : JNI->JArrayI
103{ junk := o; return(nil); }
104
105ToJArrayJ( o : JNI->JObject ) : JNI->JArrayJ
106{ junk := o; return(nil); }
107
108ToJArrayF( o : JNI->JObject ) : JNI->JArrayF
109{ junk := o; return(nil); }
110
111ToJArrayD( o : JNI->JObject ) : JNI->JArrayD
112{ junk := o; return(nil); }
113
114ToJArrayZ( o : JNI->JObject ) : JNI->JArrayZ
115{ junk := o; return(nil); }
116
117ToJArrayJString( o : JNI->JObject ) : JNI->JArrayJString
118{ junk := o; return(nil); }
119
120ToJArrayJObject( o : JNI->JObject ) : JNI->JArrayJObject
121{ junk := o; return(nil); }
122
123#
124# cast for thread data
125JObjToJThd( o : JNI->JObject ) : (JNI->JThread)
126{ junk := o; return(nil); }
127
128JThdToJObj( o : JNI->JThread ) : (JNI->JObject)
129{ junk := o; return(nil); }
130
131#
132# misc casts
133#
134Class2Niladt( o : JNI->ClassData ) : ref Loader->Niladt
135{ junk := o; return(nil); }
136
137Obj2Niladt( o : JNI->JObject ) : ref Loader->Niladt
138{ junk := o; return(nil); }
139
140JNI2Nilmod( o : JNI ) : Nilmod
141{ junk := o; return(nil); }
142
143JArrayToHolder( o : array of JNI->JArray ) : array of JNI->JString
144{ junk := o; return(nil); }
java/appl/java/classloader.b+3452−0
@@ -0,0 +1,3452 @@
1implement JavaClassLoader;
2
3#
4# Java Class Loader.
5#
6
7include "sys.m";
8 sys: Sys;
9
10stderr: ref Sys->FD;
11
12include "keyring.m";
13 kr: Keyring;
14
15include "string.m";
16 str: String;
17
18include "math.m";
19 math: Math;
20
21include "hash.m";
22 hash: Hash;
23
24include "loader.m";
25include "classloader.m";
26 ld: Loader;
27 Niladt: import Loader;
28 jassist: JavaAssist;
29 jtrace: JavaTrace;
30
31 JDEBUG, JVERBOSE: import JavaTrace;
32
33 getint, getintarray, getptr: import jassist;
34 getreloc, getrtreloc, getstring: import jassist;
35 getclassadt, getabsint, getadtstring: import jassist;
36 getbytearray, getstrarray, arrayof: import jassist;
37 getmd, putclass, putint, putmod: import jassist;
38 putobj, putptr, putstring, makeadt: import jassist;
39 bytearraytoJS, intarraytoJS: import jassist;
40 bigarraytoJS, realarraytoJS: import jassist;
41 ArraytoJS, JStoObject: import jassist;
42
43this: JavaClassLoader;
44thisnil: Nilmod;
45sysnil: Nilmod;
46loadlinks: array of Loader->Link;
47syslinks: array of Loader->Link;
48relocs: list of ref Class;
49relocd: list of ref Class;
50interf: list of ref Class;
51interfx: list of ref Class;
52initcl: list of ref Class;
53main: ref Class;
54arrayclass: ref Class;
55arraymd: ref Loader->Niladt;
56stringclass: ref Class;
57fsindir: int;
58cur: string;
59
60interfaces: array of ref Class;
61ninterfaces: int = 0;
62linterfaces: int = 0;
63
64INITINTER: con 32;
65
66acqchan: chan of int;
67relchan: chan of int;
68exitchan: chan of int;
69
70MSHUTDOWN, MENTER, MEXIT, MWAIT, MNOTIFY, MSLEEP, MINTERRUPT, MTIMER, MSYNC:
71 con iota;
72
73monitorctl: chan of (int, ref ThreadData, ref Object, int);
74threadctl: chan of (ref ThreadData, int);
75
76threadcount: int = 0;
77daemoncount: int = 0;
78stopped: int = 0;
79
80ident: con "ClassLoader";
81warn: int = 1;
82debug: int = 0;
83verbose: int = 0;
84errors: int = 0;
85
86# for generating ClassLoader exceptions use
87# the following con's. They will be turned
88# into a corresponding Java Exception by
89# sysexcetion
90# when thrown the format is:
91# raise( ex +":"+detail );
92# see loaderror();
93#
94# NOTE: the "raise" string has limited size
95# hence the "e"+<int>
96#
97JCLDREX : con "JLD:"; #prefix
98noclassdeffound,
99classcircularity,
100classformat,
101nosuchmethod,
102nosuchfield,
103unsatisfiedlink,
104linkageerr,
105exceptionininitializer
106 : con "e" + (string iota);
107
108badcallindex : con "call index";
109nocloneindex : con "clone index";
110
111encoding := array[] of
112{
113 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
114 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
115 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
116 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
117 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
118 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
119 'w', 'x', 'y', 'z', '0', '1', '2', '3',
120 '4', '5', '6', '7', '8', '9', '+', '-',
121};
122
123bits := array[] of { 16r80, 16r40, 16r20, 16r10, 16r08, 16r04, 16r02, 16r01 };
124mbits := array[] of { 16r80, 16r20, 16r08, 16r02 };
125
126#
127# Diagnostics.
128#
129
130mesg(s: string)
131{
132 sys->fprint(stderr, "%s: %s\n", ident, s);
133}
134
135diag(s: string)
136{
137 if (cur != nil)
138 s = cur + ": " + s;
139 mesg(s);
140 errors++;
141}
142
143loaderror( ex : string, msg : string )
144{
145 s := msg;
146
147 # if prefix exists then just rethrow msg
148 if ( str->prefix( JCLDREX+ex, msg ) == 0 )
149 {
150 if ( cur != nil )
151 s = cur +": " + s;
152
153 s = sys->sprint( "%s%s:%s", JCLDREX, ex, s );
154 }
155
156 trace(JDEBUG,s);
157
158 raise s;
159}
160
161error(s: string)
162{
163 if ( s == nil )
164 s = JCLDREX + "fatal error";
165 else
166 {
167 # if prefix exists then just re-throw s
168 if ( str->prefix(JCLDREX,s) == 0 )
169 {
170 # add prefix to tag as a Loader ex
171 s = sys->sprint( "%s%s:%s", JCLDREX, s, cur );
172 }
173 }
174
175 trace(JDEBUG,s);
176
177 raise s;
178}
179
180warning(s: string)
181{
182 if (!warn)
183 return;
184 if (cur != nil)
185 s = cur + ": " + s;
186 sys->fprint(stderr, "%s: warning: %s\n", ident, s);
187}
188
189trace(c: int, s: string)
190{
191 if (jtrace != nil)
192 jtrace->trace(c, s);
193}
194
195loadtrace()
196{
197 if (jtrace != nil)
198 return;
199 jtrace = load JavaTrace JavaTrace->PATH;
200 if (jtrace == nil)
201 error(sys->sprint("could not load %s: %r", JavaTrace->PATH));
202 jtrace->init(jassist);
203}
204
205#
206# Load synchronization. Allow only one thread to be loading at a time.
207#
208
209loadsync()
210{
211 for (;;) {
212 alt {
213 <- acqchan =>
214 ;
215 <- exitchan =>
216 return;
217 }
218 alt {
219 <- relchan =>
220 ;
221 <- exitchan =>
222 return;
223 }
224 }
225}
226
227acquire()
228{
229 acqchan <-= 0;
230}
231
232release()
233{
234 relchan <-= 0;
235}
236
237context: ref Draw->Context;
238
239#
240# Initialize loader. Entry.
241#
242init(j: JavaClassLoader, ctxt: ref Draw->Context)
243{
244 sys = load Sys Sys->PATH;
245 stderr = sys->fildes(2);
246 context = ctxt;
247 kr = load Keyring Keyring->PATH;
248 if (kr == nil)
249 error(sys->sprint("could not load %s: %r", Keyring->PATH));
250 str = load String String->PATH;
251 if (str == nil)
252 error(sys->sprint("could not load %s: %r", String->PATH));
253 math = load Math Math->PATH;
254 if (math == nil)
255 error(sys->sprint("could not load %s: %r", Math->PATH));
256 math->FPcontrol(0, Math->INVAL|Math->ZDIV|Math->OVFL|Math->UNFL|Math->INEX);
257 hash = load Hash Hash->PATH;
258 if (hash == nil)
259 error(sys->sprint("could not load %s: %r", Hash->PATH));
260 ld = load Loader Loader->PATH;
261 if (ld == nil)
262 error(sys->sprint("could not load %s: %r", Loader->PATH));
263 jassist = load JavaAssist JavaAssist->PATH;
264 if (jassist == nil)
265 error(sys->sprint("could not load %s: %r", JavaAssist->PATH));
266 if (verbose) {
267 loadtrace();
268 if (debug)
269 jtrace->level = JDEBUG;
270 else
271 jtrace->level = JVERBOSE;
272 }
273 fsindir = jassist->little_endian();
274 this = j;
275 thisnil = jassist->jclnilmod(j);
276 sysnil = jassist->sysnilmod(sys);
277 loadlinks = ld->link(thisnil);
278 syslinks = ld->link(sysnil);
279 if (loadlinks == nil || syslinks == nil)
280 error(sys->sprint("Loader->link failed: %r"));
281 initloadhash();
282 acqchan = chan of int;
283 relchan = chan of int;
284 exitchan = chan of int;
285 spawn loadsync();
286 monitorctl = chan of (int, ref ThreadData, ref Object, int);
287 spawn monitor();
288 threadctl = chan of (ref ThreadData, int);
289 spawn threadmanager();
290 jniinit();
291}
292
293loadarrayclass()
294{
295 arrayclass = loader(ARRAYCLASS);
296 arraymd = arrayclass.moddata;
297}
298
299loadstringclass()
300{
301 stringclass = loader(STRINGCLASS);
302}
303
304#
305# Native interface initialization.
306#
307jniinit()
308{
309 j := load JavaNative JavaNative->PATH;
310 if (j == nil)
311 error(sys->sprint("could not load %s: %r", JavaNative->PATH));
312 e := j->init(sys, ld, this, jassist);
313 if (e != nil)
314 error(sys->sprint("JavaNative->init failed: %s", e));
315}
316
317#
318# Shutdown loader. Entry.
319#
320shutdown()
321{
322 if (exitchan != nil) {
323 exitchan <-= 0;
324 exitchan = nil;
325 }
326 if (monitorctl != nil) {
327 monitorctl <-= (MSHUTDOWN, nil, nil, 0);
328 monitorctl = nil;
329 }
330 if (threadctl != nil) {
331 threadctl <-= (nil, ThreadData.SHUTDOWN);
332 threadctl = nil;
333 }
334}
335
336#
337# Load a class and print information about it.
338# Does not resolve the class and should not be
339# called in the execution environment. Entry.
340#
341info(name: string)
342{
343 c := getclass(name);
344 if (c.state == NEW)
345 c.loadclass();
346 loadtrace();
347 jtrace->info(c);
348}
349
350#
351# Perform outstanding relocation on loaded classes.
352#
353doreloc()
354{
355 #
356 # Load classes we need for relocation.
357 #
358 while (relocs != nil) {
359 r: list of ref Class;
360 r = nil;
361 reloc := hd relocs;
362 relocs = tl relocs;
363 trace(JDEBUG, sys->sprint("reloc %s", reloc.name));
364 i := CLASSREF;
365 while ((s := getstring(reloc.mod, i)) != nil) {
366 if (s != LOADER)
367 r = loadhierarchy(s) :: r;
368 else
369 r = nil :: r;
370 i += 2 * WORDZ;
371 }
372 reloc.refs = mkclarray(r);
373 reloc.relocate();
374 relocd = reloc :: relocd;
375 }
376 #
377 # Patch the module data of the relocated classes.
378 #
379 while (relocd != nil) {
380 patch := hd relocd;
381 relocd = tl relocd;
382 trace(JDEBUG, sys->sprint("modpatch %s", patch.name));
383 patch.modpatch();
384 if (patch.native != nil || patch.classinit != nil) {
385 initcl = patch :: initcl;
386 patch.state = LOADED;
387 } else
388 patch.state = INITED;
389 }
390 #
391 # Extend interfaces.
392 #
393 while (interfx != nil) {
394 extend := hd interfx;
395 interfx = tl interfx;
396 extend.interdirect = extend.interextends;
397 extend.extinterfaces();
398 }
399 #
400 # Make interface linkage tables for classes that implement interfaces.
401 #
402 while (interf != nil) {
403 inter := hd interf;
404 interf = tl interf;
405 inter.interdirect = inter.interextends;
406 inter.linkinterfaces();
407 }
408 #
409 # Call class initializers.
410 #
411 initc : ref Class;
412 t : ref ThreadData;
413
414 {
415 while (initcl != nil) {
416 initc = hd initcl;
417 initcl = tl initcl;
418 initc.state = INITED;
419 trace(JVERBOSE, sys->sprint("Switching class %s state to INITED", initc.name));
420 t = getthreaddata();
421 release();
422 unblock(t);
423 if (initc.native != nil)
424 initc.initjni();
425 if (initc.classinit != nil) {
426 trace(JVERBOSE, sys->sprint("%s-><clinit>()", initc.name));
427 jassist->mcall0(initc.mod, initc.classinit.value);
428 trace(JDEBUG, sys->sprint("clinit done"));
429 }
430 block(t);
431 acquire();
432 }
433 }
434 exception e
435 {
436 "*" =>
437 #NOTE: a raise is only expected from the init calls therefore
438 # when we reach here we need to block and acquire
439 block(t);
440 acquire();
441 trace(JVERBOSE, sys->sprint("Some exception: %s", e));
442 if ( str->prefix(JCLDREX+exceptionininitializer, e ) == 1 )
443 loaderror(exceptionininitializer, e ); #rethrow
444 else
445 {
446 # clear any java exception; we are replacing it
447 t.culprit = nil;
448 loaderror(exceptionininitializer, sys->sprint("%s[unk]", initc.name));
449 }
450 }
451}
452
453#
454# Main "load class" routine. Load a class hierarchy and
455# its dependencies and prepare it for use. Entry.
456# No return on error.
457#
458loader(name: string): ref Class
459{
460 released := 0;
461 t := getthreaddata();
462 {
463 trace(JDEBUG, sys->sprint("load class %s", name));
464 block(t);
465 acquire();
466 c := loadhierarchy(name);
467 if (relocs != nil)
468 doreloc();
469 release();
470 unblock(t);
471 released = 1;
472 trace(JDEBUG, sys->sprint("loader() exit"));
473# if (errors)
474# error(nil);
475 return c;
476 }
477 exception e
478 {
479 "*" =>
480 if(released == 0) {
481 release();
482 unblock(t);
483 }
484 if (e == nil)
485 e = "exit";
486
487 if ( str->prefix(JCLDREX, e) == 1 )
488 error(e);
489
490 error( sys->sprint( "%s", e) );
491
492 #else if (e.name == noclassdeffound)
493 #{
494 # error(nil);
495 #}
496 #else
497 # error(sys->sprint("loader exception: %s: %s: %d", e.mod, e.name, e.pc));
498 }
499 return nil;
500}
501
502#
503# Recursively load a hierarchy.
504#
505loadhierarchy(name: string): ref Class
506{
507 c := getclass(name);
508 case c.state {
509 NEW =>
510 trace(JVERBOSE, sys->sprint("[%s]", name));
511 c.loadclass();
512 relocs = c :: relocs;
513 if ((s := getstring(c.mod, SUPER)) != nil) {
514 c.state = HIER;
515 trace(JVERBOSE, sys->sprint("Switching class %s state to HIER", name));
516 c.super = loadhierarchy(s);
517 } else
518 c.super = nil;
519 c.state = RESOLVE;
520 trace(JVERBOSE, sys->sprint("Switching class %s state to RESOLVE", name));
521 c.resolve();
522 c.loadinterfaces();
523 HIER =>
524 loaderror( classcircularity, name );
525 }
526 return c;
527}
528
529#
530# Check if a string matches exception,
531# right aligned in string
532#
533matches(str, e: string): int
534{
535 if (len str >= len e && str[len str - len e:] == e)
536 return 1;
537 return 0;
538}
539
540#
541# Encode a class name path if its final component
542# will be too long. Entry.
543#
544encodename(name: string): string
545{
546 (dir, base) := str->splitr(name, "/");
547 b := array of byte base;
548 if (len b <= MAXUNENCODED)
549 return name;
550 d := array[kr->MD5dlen] of byte;
551 if (kr->md5(b, len b, d, nil) == nil)
552 error(sys->sprint("md5 failed: %r"));
553 e := array[ENCODEDLEN] of byte;
554 v := 0;
555 n := 0;
556 r := 0;
557 for (i := 0; i < ENCODEDLEN; i++) {
558 if (r < 6) {
559 v |= int d[n++] << r;
560 r += 8;
561 }
562 e[i] = byte encoding[v & 16r3F];
563 v >>= 6;
564 r -= 6;
565 }
566 return dir + string e;
567}
568
569##
570## Runtime entries.
571##
572
573#
574# Runtime load. Passed a pointer into a module's data of a rtload table.
575#
576rtload(addr: int)
577{
578 o := getabsint(addr + RTTHISOFFSET);
579 r := getabsint(addr - (o + WORDZ));
580 l := o + r;
581 d := makeadt(addr - l);
582 s := getadtstring(d, l + RTCLASSOFFSET);
583 a := getrtreloc(d, l + RTRELOCOFFSET);
584 t := getclassadt(d, CLASSADTOFFSET);
585 trace(JVERBOSE, sys->sprint("rtload %s [%d -> %d] for %s", s, o, r, t.name));
586 if (t.state != INITED)
587 error("this not loaded");
588 c := loader(s);
589 cur = c.name;
590 putmod(d, l, c.mod);
591 putmod(d, l + RTCLASSOFFSET, c.native);
592 putclass(d, l + RTRELOCOFFSET, c);
593 putint(d, l + RTTHISOFFSET, c.objtype);
594 o = l + RTFIRSTRELOC;
595 n := len a;
596 for (i := 0; i < n; i++) {
597 if ((a[i].flags & Rmask) == Rinvokespecial) {
598 (w, m, x) := t.special(a[i].field, a[i].signature, a[i].flags, c);
599 if (a[i].flags & Rspecialmp) {
600 if (w == CMP)
601 putmod(d, o, m.mod);
602 else if (w == CNP)
603 putmod(d, o, m.native);
604 else
605 error("bad special");
606 } else
607 putint(d, o, x);
608 } else {
609 (w, v) := c.resolvereloc(a[i].field, a[i].signature, a[i].flags);
610 case w {
611 VVAL =>
612 putint(d, o, v);
613 VMP =>
614 putmod(d, o, c.mod);
615 VNP =>
616 putmod(d, o, c.native);
617 VOBJ =>
618 putobj(d, o, c.this);
619 * =>
620 error("bad resolve");
621 }
622 }
623 o += WORDZ;
624 }
625 cur = nil;
626# if (errors)
627# error("rtload failed");
628}
629
630#
631# Get a Class adt by name. Used internally and made visible.
632# It does no loading so should only be called if you know
633# the class is loaded (or are loading it).
634#
635
636CHSZ: con 31;
637classhash := array[CHSZ] of list of ref Class;
638
639getclass(name: string): ref Class
640{
641 h := classhash[hash->fun1(name, CHSZ):];
642 for (l := h[0]; l != nil; l = tl l) {
643 c := hd l;
644 if (c.name == name)
645 return c;
646 }
647 c := ref Class;
648 c.state = NEW;
649 trace(JVERBOSE, sys->sprint("Switching class %s state to NEW", name));
650 c.name = name;
651 c.flags = 0;
652 c.info = ref Ldinfo;
653 h[0] = c :: h[0];
654 return c;
655}
656
657#
658# Map a module to its class. This works for native modules too.
659#
660
661MHSZ: con 31;
662modhash := array[MHSZ] of list of (Nilmod, ref Class);
663
664addmodclass(m: Nilmod, c: ref Class)
665{
666 h := modhash[jassist->modhash(m) % MHSZ:];
667 h[0] = (m, c) :: h[0];
668}
669
670getmodclass(m: Nilmod): ref Class
671{
672 for (l := modhash[jassist->modhash(m) % MHSZ]; l != nil; l = tl l) {
673 (t, c) := hd l;
674 if (t == m)
675 return c;
676 }
677 return nil;
678}
679
680#
681# Thread data.
682#
683
684THSZ: con 31;
685threadhash := array[THSZ] of list of ref ThreadData;
686
687getpid(): int
688{
689 return sys->pctl(0, nil);
690}
691
692getcontext(): ref Draw->Context
693{
694 return context;
695}
696
697getthreaddata(): ref ThreadData
698{
699 p := getpid();
700 for (l := threadhash[p % THSZ]; l != nil; l = tl l) {
701 t := hd l;
702 if (t.pid == p)
703 return t;
704 }
705 acquire();
706 h := threadhash[p % THSZ:];
707 d := ref ThreadData;
708 d.pid = p;
709 d.wchan = chan of int;
710 d.flags = 0;
711 h[0] = d :: h[0];
712 threadcount++;
713 trace(JVERBOSE, sys->sprint("count = %d + %d", threadcount, daemoncount));
714 release();
715 return d;
716}
717
718delthreaddata()
719{
720 n: list of ref ThreadData;
721 acquire();
722 p := getpid();
723 h := threadhash[p % THSZ:];
724 for (l := h[0]; l != nil; l = tl l) {
725 t := hd l;
726 if (t.pid == p) {
727 if (t.flags & ThreadData.DAEMON)
728 daemoncount--;
729 else
730 threadcount--;
731 } else
732 n = t :: n;
733 }
734 h[0] = n;
735 trace(JVERBOSE, sys->sprint("count = %d + %d", threadcount, daemoncount));
736 if (threadcount == 0)
737 nothreads(nil);
738 else
739 release();
740}
741
742#
743# Mark current thread a daemon. Entry.
744#
745daemonize()
746{
747 t := getthreaddata();
748 acquire();
749 if ((t.flags & ThreadData.DAEMON) == 0) {
750 t.flags |= ThreadData.DAEMON;
751 daemoncount++;
752 threadcount--;
753 }
754 trace(JVERBOSE, sys->sprint("count = %d + %d", threadcount, daemoncount));
755 if (threadcount == 0)
756 nothreads(t);
757 else
758 release();
759}
760
761#
762# Stop all threads. When all are dead we will shutdown.
763#
764stopthreads(t: ref ThreadData)
765{
766 for (i := 0; i < THSZ; i++)
767 for (l := threadhash[i]; l != nil; l = tl l) {
768 s := hd l;
769 if (s != t)
770 stop(s, nil);
771 }
772 stopped = 1;
773}
774
775#
776# No non-daemon threads. Maybe clean up, maybe shutdown.
777#
778nothreads(t: ref ThreadData)
779{
780 if (!stopped)
781 stopthreads(t);
782 if (daemoncount != 0) {
783 release();
784 if (t != nil) {
785 t.culprit = threaddeath().new();
786 raise JAVAEXCEPTION;
787 }
788 return;
789 }
790 release();
791 shutdown();
792}
793
794#
795# Entry for system.exit().
796#
797system_exit()
798{
799 t := getthreaddata();
800 acquire();
801 stopthreads(t);
802 release();
803 t.culprit = threaddeath().new();
804 raise JAVAEXCEPTION;
805}
806
807cmd_start: array of byte;
808cmd_stop: array of byte;
809cmd_kill: array of byte;
810cmd_failed: int = 0;
811tdclass: ref Class;
812
813ctlfile(t: ref ThreadData)
814{
815 if (t.ctlfile == nil)
816 t.ctlfile = PROG + "/" + string t.pid + "/dbgctl";
817}
818
819threaddeath(): ref Class
820{
821 if (tdclass == nil)
822 tdclass = loader(EXCEPTIONPATH + "ThreadDeath");
823 return tdclass;
824}
825
826dosuspend(t: ref ThreadData)
827{
828 ctlfile(t);
829 f := sys->open(t.ctlfile, Sys->ORDWR);
830 monsync();
831 t.flags |= ThreadData.SUSPENDED;
832 if (f == nil) {
833 if (!cmd_failed) {
834 warning(sys->sprint("could not open %s: %r", t.ctlfile));
835 cmd_failed = 1;
836 }
837 } else {
838 sys->write(f, cmd_stop, len cmd_stop);
839 t.control = f;
840 }
841}
842
843doresume(t: ref ThreadData)
844{
845 if (t.control != nil) {
846 sys->write(t.control, cmd_start, len cmd_start);
847 t.control = nil;
848 }
849 monsync();
850 t.flags &= ~ThreadData.SUSPENDED;
851 if (t.flags & ThreadData.ACKSUSP) {
852 t.wchan <-= MONOK;
853 t.flags &= ~ThreadData.ACKSUSP;
854 }
855}
856
857dostop(t: ref ThreadData)
858{
859 ctlfile(t);
860 f := sys->open(t.ctlfile, Sys->ORDWR);
861 if (f == nil) {
862 if (!cmd_failed) {
863 warning(sys->sprint("could not open %s: %r", t.ctlfile));
864 cmd_failed = 1;
865 }
866 } else
867 sys->write(f, cmd_kill, len cmd_kill);
868}
869
870#
871# The thread manager looks after suspend and resume.
872# A thread that cannot be suspended enters a block()/unblock()
873# pair for the duration of its critical region.
874#
875
876threadmanager()
877{
878 cmd_start = array of byte "start";
879 cmd_stop = array of byte "stop";
880 cmd_kill = array of byte "maim";
881 for (;;) {
882 (t, c) := <- threadctl;
883 if (t != nil && (t.flags & ThreadData.EXITED)) {
884 t = nil;
885 continue;
886 }
887 case c {
888 ThreadData.SHUTDOWN =>
889 return;
890 ThreadData.BLOCK =>
891 t.flags |= ThreadData.BLOCKED;
892 ThreadData.UNBLOCK =>
893 if (t.flags & ThreadData.WAITSTOP)
894 dostop(t);
895 else if (t.flags & ThreadData.WAITSUSP)
896 dosuspend(t);
897 t.flags &= ~(ThreadData.BLOCKED | ThreadData.WAITSTOP | ThreadData.WAITSUSP);
898 ThreadData.SUSPEND =>
899 if ((t.flags & ThreadData.SUSPENDED) == 0) {
900 if (t.flags & ThreadData.BLOCKED)
901 t.flags |= ThreadData.WAITSUSP;
902 else
903 dosuspend(t);
904 }
905 ThreadData.RESUME =>
906 if (t.flags & ThreadData.SUSPENDED)
907 doresume(t);
908 else
909 t.flags &= ~ThreadData.WAITSUSP;
910 ThreadData.STOP =>
911 if (t.flags & ThreadData.BLOCKED)
912 t.flags |= ThreadData.WAITSTOP;
913 else
914 dostop(t);
915 * =>
916 threadctl = nil;
917 raise "bad threadctl command"; #error("bad threadctl command");
918 }
919 t = nil;
920 }
921}
922
923block(t: ref ThreadData)
924{
925 threadctl <-= (t, ThreadData.BLOCK);
926}
927
928unblock(t: ref ThreadData)
929{
930 threadctl <-= (t, ThreadData.UNBLOCK);
931}
932
933suspend(t: ref ThreadData)
934{
935 threadctl <-= (t, ThreadData.SUSPEND);
936}
937
938resume(t: ref ThreadData)
939{
940 threadctl <-= (t, ThreadData.RESUME);
941}
942
943stop(t: ref ThreadData, o: ref Object)
944{
945 if (o == nil)
946 o = threaddeath().new();
947 t.culprit = o;
948 threadctl <-= (t, ThreadData.STOP);
949}
950
951#
952# Exceptions.
953#
954
955mkexception( name : string ) : ref Object
956{
957 return(loader(EXCEPTIONPATH + name).new());
958}
959
960# convert an Inferno exception into a Java Exception
961sysexception( e : string ) : ref Object
962{
963 s : string;
964 msg : string;
965
966
967 if ( e == nil )
968 {
969 s = "InternalError";
970 msg = "unknown";
971 }
972 else if ( str->prefix(JCLDREX,e) == 1 )
973 {
974 trace(JDEBUG, sys->sprint("sysexception: / %s /", e));
975 # try to convert JavaClassLoader exceptions first
976 rest := e[len JCLDREX:]; #strip off prefix
977
978 # pull the possible java ex name; save the rest as a message
979 ex : string;
980 (ex,msg) = str->splitl(rest, ":");
981
982 # convert to coresponding Java Exception, if any
983 case ex
984 {
985 noclassdeffound => s = "NoClassDefFoundError";
986 nosuchmethod => s = "NoSuchMethodError";
987 classcircularity => s = "ClassCircularityError";
988 classformat => s = "ClassFormatError";
989 unsatisfiedlink => s = "UnsatisfiedLinkError";
990 exceptionininitializer => s = "ExceptionInInitializerError";
991 linkageerr => s = "LinkageError"; #different then '*'
992
993 # if none found then make into a generic LinkageError
994 * => s = "LinkageError";
995 msg = rest;
996 }
997 }
998 else
999 {
1000 trace(JDEBUG, sys->sprint("sysexception: / %s /", e));
1001 case e
1002 {
1003 #
1004 # inferno system exceptions
1005 #
1006 "zero divide" or
1007 "invalid math argument" or
1008 "Floating point exception" or
1009 "Integer Overflow" or
1010 "Divide by Zero" or
1011 "Floating Point Divide by Zero" or
1012 "Inexact Floating Point" or
1013 "Invalid Floating Operation" or
1014 "Floating Point Result Overflow" or
1015 "Floating Point Stack Check" or
1016 "Floating Point Result Underflow" =>
1017 s = "ArithmeticException";
1018 "heap full" or
1019 "no memory" =>
1020 s = "OutOfMemoryError";
1021 "array bounds error" or
1022 "Array Bounds Check" =>
1023 s = "ArrayIndexOutOfBoundsException";
1024 "negative array size" =>
1025 s = "NegativeArraySizeException";
1026 "dereference of nil" or
1027 "Segmentation violation" or
1028 "Bus error" =>
1029 s = "NullPointerException";
1030 "Stack Overflow" =>
1031 s = "StackOverflowError";
1032 * =>
1033 s = "InternalError";
1034 }
1035
1036 # fill throwable object with information from inferno ex
1037 #msg = sys->sprint( "%s[%d]:%s", e.mod, e.pc, e.name );
1038 }
1039
1040 obj := mkexception(s); #create Java Ex object
1041
1042
1043 # set the detailed message
1044 throwable := jassist->ObjecttoJT(obj);
1045 if (stringclass == nil)
1046 loadstringclass();
1047 throwable.msg = ref JavaString(stringclass.moddata, msg);
1048
1049 return( obj );
1050}
1051
1052culprit(e: string): ref Object
1053{
1054 thd := getthreaddata();
1055
1056 if ( thd.culprit == nil || e != JAVAEXCEPTION )
1057 {
1058 # no java exception -- turn an inferno
1059 # exception into a Java Exception
1060 thd.culprit = sysexception(e);
1061 }
1062
1063 return( thd.culprit );
1064}
1065
1066throw(c: ref Object)
1067{
1068 getthreaddata().culprit = c;
1069 raise JAVAEXCEPTION;
1070}
1071
1072sthrow(s: string)
1073{
1074 throw(mkexception(s));
1075}
1076
1077#
1078# Monitors.
1079#
1080
1081MONOK, MONILL, MONINT:
1082 con iota;
1083
1084Synch: adt
1085{
1086 thread: ref ThreadData;
1087 count: int;
1088 status: int;
1089 next: cyclic ref Synch;
1090};
1091
1092Monitor: adt
1093{
1094 thread: ref ThreadData;
1095 object: ref Object;
1096 count: int;
1097 head: ref Synch;
1098 tail: ref Synch;
1099};
1100
1101Waiter: adt
1102{
1103 thread: ref ThreadData;
1104 object: ref Object;
1105 count: int;
1106 time: int;
1107 next: cyclic ref Waiter;
1108};
1109
1110sleepers: ref Waiter;
1111waiters: ref Waiter;
1112timeout: int;
1113
1114MAXSLEEP: con 1000;
1115SLEEPTOL: con 50;
1116
1117MONHSZ: con 31;
1118monhash := array[MONHSZ] of list of ref Monitor;
1119
1120getmonitor(o: ref Object): ref Monitor
1121{
1122 z: ref Monitor;
1123 h := monhash[jassist->objhash(o) % MONHSZ:];
1124 for (l := h[0]; l != nil; l = tl l) {
1125 m := hd l;
1126 if (m.object == o)
1127 return m;
1128 if (m.count == 0)
1129 z = m;
1130 }
1131 if (z == nil) {
1132 z = ref Monitor;
1133 z.count = 0;
1134 h[0] = z :: h[0];
1135 }
1136 z.object = o;
1137 return z;
1138}
1139
1140#
1141# Timer thread.
1142#
1143timer(t: int)
1144{
1145 s := t - sys->millisec();
1146 if (s > 0)
1147 sys->sleep(s);
1148 if(monitorctl != nil)
1149 monitorctl <-= (MTIMER, nil, nil, t);
1150}
1151
1152#
1153# Wait to be interrupted, notified or for timeout to expire.
1154#
1155waiter(w: ref Waiter)
1156{
1157 w.thread.flags &= ~ThreadData.INTERRUPTED;
1158 s := w.time;
1159 if (s == 0) {
1160 w.next = waiters.next;
1161 waiters.next = w;
1162 } else {
1163 t := sys->millisec();
1164 w.time += t;
1165 if (sleepers.next == nil) {
1166 sleepers.next = w;
1167 if (s > MAXSLEEP)
1168 s = MAXSLEEP;
1169 timeout = t + s;
1170 spawn timer(timeout);
1171 } else if (w.time >= sleepers.next.time) {
1172 h := sleepers.next;
1173 while (h.next != nil && w.time > h.next.time)
1174 h = h.next;
1175 w.next = h.next;
1176 h.next = w;
1177 } else {
1178 w.next = sleepers.next;
1179 sleepers.next = w;
1180 if (w.time < timeout - SLEEPTOL) {
1181 timeout = w.time;
1182 spawn timer(timeout);
1183 }
1184 }
1185 }
1186}
1187
1188#
1189# Respond to timer.
1190#
1191dotimer(t: int)
1192{
1193 c := sys->millisec();
1194 n := t;
1195 if (t < c)
1196 n = c;
1197 n += SLEEPTOL;
1198 w := sleepers;
1199 while ((l := w.next) != nil && l.time <= n) {
1200 w.next = l.next;
1201 mondone(l, MONOK);
1202 }
1203 if (t == timeout && l != nil) {
1204 timeout = l.time;
1205 if (timeout - c > MAXSLEEP)
1206 timeout = c + MAXSLEEP;
1207 spawn timer(timeout);
1208 }
1209}
1210
1211#
1212# Notify.
1213#
1214
1215donotifyl(w: ref Waiter, o: ref Object): ref Waiter
1216{
1217 while ((l := w.next) != nil) {
1218 if (l.object == o) {
1219 w.next = l.next;
1220 return l;
1221 }
1222 else
1223 w = l;
1224 }
1225 return nil;
1226}
1227
1228donotify(o: ref Object)
1229{
1230 if ((l := donotifyl(waiters, o)) != nil || (l = donotifyl(sleepers, o)) != nil)
1231 mondone(l, MONOK);
1232}
1233
1234#
1235# Notify all.
1236#
1237
1238donotifyalll(w: ref Waiter, o: ref Object)
1239{
1240 while ((t := w.next) != nil) {
1241 if (t.object == o) {
1242 w.next = t.next;
1243 mondone(t, MONOK);
1244 } else
1245 w = t;
1246 }
1247}
1248
1249donotifyall(o: ref Object)
1250{
1251 donotifyalll(waiters, o);
1252 donotifyalll(sleepers, o);
1253}
1254
1255#
1256# Interrupt.
1257#
1258
1259dointerruptl(w: ref Waiter, t: ref ThreadData): ref Waiter
1260{
1261 while ((l := w.next) != nil) {
1262 if (l.thread == t) {
1263 w.next = l.next;
1264 return l;
1265 }
1266 else
1267 w = l;
1268 }
1269 return nil;
1270}
1271
1272dointerrupt(t: ref ThreadData)
1273{
1274 if ((l := dointerruptl(waiters, t)) != nil || (l = dointerruptl(sleepers, t)) != nil) {
1275 l.thread.flags |= ThreadData.INTERRUPTED;
1276 mondone(l, MONINT);
1277 }
1278}
1279
1280#
1281# Enter or reenter a monitor.
1282#
1283doenter(t: ref ThreadData, o: ref Object, n: int, s: int)
1284{
1285 m := getmonitor(o);
1286 if (m.count == 0) {
1287 m.thread = t;
1288 m.count = n;
1289 } else if (m.thread == t)
1290 m.count += n;
1291 else {
1292 w := ref Synch;
1293 w.thread = t;
1294 w.count = n;
1295 w.status = s;
1296 if (m.tail == nil) {
1297 m.head = w;
1298 m.tail = w;
1299 } else {
1300 m.tail.next = w;
1301 m.tail = w;
1302 }
1303 return ;
1304 }
1305 for (;;) {
1306 alt {
1307 t.wchan <-= s =>
1308 return;
1309 * =>
1310 if (t.flags & ThreadData.SUSPENDED) {
1311 t.flags |= ThreadData.ACKSUSP;
1312 return;
1313 }
1314 sys->sleep(0);
1315 }
1316 }
1317}
1318
1319#
1320# A sleeper or waiter is done.
1321#
1322mondone(w: ref Waiter, s: int)
1323{
1324 if (w.object != nil)
1325 doenter(w.thread, w.object, w.count, s);
1326 else
1327 w.thread.wchan <-= s;
1328}
1329
1330#
1331# Concede monitor to next synchronizer.
1332#
1333monitornext(m: ref Monitor)
1334{
1335 h := m.head;
1336 if (h != nil) {
1337 x := h.next;
1338 m.head = x;
1339 if (x == nil)
1340 m.tail = nil;
1341 m.thread = h.thread;
1342 m.count = h.count;
1343 m.thread.wchan <-= h.status;
1344 } else {
1345 m.thread = nil;
1346 m.object = nil;
1347 m.count = 0;
1348 }
1349}
1350
1351#
1352# Monitor thread.
1353#
1354monitor()
1355{
1356 m: ref Monitor;
1357 sleepers = ref Waiter;
1358 waiters = ref Waiter;
1359 for (;;) {
1360 (c, t, o, n) := <- monitorctl;
1361 case c {
1362 MSHUTDOWN =>
1363 return;
1364 MSYNC =>
1365 sys->sleep(0);
1366 MENTER =>
1367 doenter(t, o, n, MONOK);
1368 MEXIT =>
1369 m = getmonitor(o);
1370 if (m.count == 0)
1371 raise "mexit inbalance"; #error("mexit inbalance");
1372 if (m.thread != t)
1373 raise "mexit mismatch"; #error("mexit mismatch");
1374 m.count--;
1375 if (m.count == 0)
1376 monitornext(m);
1377 MWAIT =>
1378 m = getmonitor(o);
1379 if (m.count == 0 || m.thread != t) {
1380 t.wchan <-= MONILL;
1381 break;
1382 }
1383 waiter(ref Waiter(t, o, m.count, n, nil));
1384 monitornext(m);
1385 MNOTIFY =>
1386 m = getmonitor(o);
1387 if (m.count == 0 || m.thread != t) {
1388 t.wchan <-= MONILL;
1389 break;
1390 }
1391 if (n)
1392 donotifyall(o);
1393 else
1394 donotify(o);
1395 t.wchan <-= MONOK;
1396 MSLEEP =>
1397 waiter(ref Waiter(t, nil, 0, n, nil));
1398 MINTERRUPT =>
1399 dointerrupt(t);
1400 MTIMER =>
1401 dotimer(n);
1402 * =>
1403 monitorctl = nil;
1404 raise "bad monitorctl command"; #error("bad monitorctl command");
1405 }
1406 t = nil;
1407 o = nil;
1408 m = nil;
1409 }
1410}
1411
1412#
1413# Common resume code.
1414#
1415monitorresume(d: ref ThreadData)
1416{
1417 case <- d.wchan {
1418 MONILL =>
1419 unblock(d);
1420 sthrow("IllegalMonitorStateException");
1421 MONINT =>
1422 unblock(d);
1423 sthrow("InterruptedException");
1424 }
1425 unblock(d);
1426}
1427
1428#
1429# Monitor / thread control entries.
1430#
1431
1432monitorenter(o: ref Object)
1433{
1434 if ( o == nil )
1435 sthrow("NullPointerException");
1436 d := getthreaddata();
1437 if (monitorctl != nil) {
1438 monitorctl <-= (MENTER, d, o, 1);
1439 <- d.wchan;
1440 }
1441}
1442
1443monitorexit(o: ref Object)
1444{
1445 if ( o == nil )
1446 sthrow("NullPointerException");
1447 d := getthreaddata();
1448 if (monitorctl != nil)
1449 monitorctl <-= (MEXIT, d, o, 0);
1450}
1451
1452monitorwait(o: ref Object, l: int)
1453{
1454 if ( o == nil )
1455 sthrow("NullPointerException");
1456 d := getthreaddata();
1457 if (monitorctl != nil) {
1458 block(d);
1459 monitorctl <-= (MWAIT, d, o, l);
1460 monitorresume(d);
1461 }
1462}
1463
1464monitornotify(o: ref Object, f: int)
1465{
1466 if ( o == nil )
1467 sthrow("NullPointerException");
1468 d := getthreaddata();
1469 if (monitorctl != nil) {
1470 block(d);
1471 monitorctl <-= (MNOTIFY, d, o, f);
1472 monitorresume(d);
1473 }
1474}
1475
1476monsync()
1477{
1478 monitorctl <-= (MSYNC, nil, nil, 0);
1479}
1480
1481sleep(l: int)
1482{
1483 if (l <= 100) {
1484 sys->sleep(l);
1485 return;
1486 }
1487 d := getthreaddata();
1488 if (monitorctl != nil) {
1489 block(d);
1490 monitorctl <-= (MSLEEP, d, nil, l);
1491 monitorresume(d);
1492 }
1493}
1494
1495interrupt(t: ref ThreadData)
1496{
1497 d := getthreaddata();
1498 if (monitorctl != nil) {
1499 block(d);
1500 monitorctl <-= (MINTERRUPT, t, nil, 0);
1501 unblock(d);
1502 }
1503}
1504
1505#
1506# Runtime hierarchy/type check routines.
1507#
1508
1509compatclass(who, what: ref Class): int
1510{
1511 if ((what.flags & ACC_INTERFACE) && (who.flags & ACC_INTERFACE) == 0)
1512 return who.getinterface(what) != nil;
1513 do {
1514 if (who == what)
1515 return 1;
1516 who = who.super;
1517 } while (who != nil);
1518 return 0;
1519}
1520
1521checkcast(who: ref Object, what: ref Class)
1522{
1523 if (who != nil && !instanceof(who, what))
1524 sthrow("ClassCastException");
1525}
1526
1527instanceof(who: ref Object, what: ref Class): int
1528{
1529 if (who == nil)
1530 return 0;
1531 return compatclass(who.class(), what);
1532}
1533
1534acheckcast(who: ref Array, what: ref Class, dims: int)
1535{
1536 if (who != nil && !ainstanceof(who, what, dims))
1537 sthrow("ClassCastException");
1538}
1539
1540ainstanceof(who: ref Array, what: ref Class, dims: int): int
1541{
1542 if (who == nil)
1543 return 0;
1544 if (arrayclass == nil)
1545 loadarrayclass();
1546 if (who.mod != arraymd)
1547 return 0;
1548 # is 'what' Object[]... ?
1549 if (who.dims > dims && what.super == nil && (what.flags & ACC_INTERFACE) == 0)
1550 return 1;
1551 if (who.dims != dims || who.class == nil)
1552 return 0;
1553 return compatclass(who.class, what);
1554}
1555
1556pcheckcast(who: ref Array, what, dims: int)
1557{
1558 if (who != nil && !pinstanceof(who, what, dims))
1559 sthrow("ClassCastException");
1560}
1561
1562pinstanceof(who: ref Array, what, dims: int): int
1563{
1564 if (who == nil)
1565 return 0;
1566 if (arrayclass == nil)
1567 loadarrayclass();
1568 if (who.mod != arraymd || who.dims != dims || who.class != nil)
1569 return 0;
1570 return who.primitive == what;
1571}
1572
1573aastoreinstanceof(who: ref Object, what: ref Array): int
1574{
1575 if (arrayclass == nil)
1576 loadarrayclass();
1577 if (what.mod != arraymd)
1578 return 0;
1579 if (what.dims == 1) {
1580 if (what.class == nil)
1581 return 0;
1582 if (who == nil)
1583 return 1;
1584 return compatclass(who.class(), what.class);
1585 } else {
1586 if (who == nil)
1587 return 1;
1588 if (who.class() != arrayclass)
1589 return 0;
1590 a := arrayof(who);
1591 if (a.dims != what.dims - 1)
1592 return 0;
1593 if (a.class == nil)
1594 return what.class == nil && a.primitive == what.primitive;
1595 if (what.class == nil)
1596 return 0;
1597 return compatclass(a.class, what.class);
1598 }
1599}
1600
1601aastorecheck(who: ref Object, what: ref Array)
1602{
1603 if (what == nil)
1604 sthrow("NullPointerException");
1605 if (!aastoreinstanceof(who, what))
1606 sthrow("ArrayStoreException");
1607}
1608
1609multianewarray(ndim: int, c: ref Class, etype: int, bounds: array of int): ref Array
1610{
1611 n := bounds[0];
1612 if (n < 0)
1613 sthrow("NegativeArraySizeException");
1614 if (arrayclass == nil)
1615 loadarrayclass();
1616 a := ref Array(arraymd, nil, ndim, c, etype);
1617 if (etype == 0 || ndim > 1)
1618 a.holder = array[n] of ref JavaString;
1619 else {
1620 case etype {
1621 T_BOOLEAN or T_BYTE =>
1622 a.holder = bytearraytoJS(array[n] of byte);
1623 T_CHAR or T_SHORT or T_INT =>
1624 a.holder = intarraytoJS(array[n] of int);
1625 T_LONG =>
1626 a.holder = bigarraytoJS(array[n] of big);
1627 T_FLOAT or T_DOUBLE =>
1628 a.holder = realarraytoJS(array[n] of real);
1629 }
1630 }
1631 if (len bounds > 1) {
1632 for (i := 0; i < n; i++)
1633 a.holder[i] = ArraytoJS(multianewarray(ndim - 1, c, etype, bounds[1:]));
1634 }
1635 return a;
1636}
1637
1638arraycopy(src: ref Array, sx: int, dst: ref Array, dx: int, n: int)
1639{
1640 if (arrayclass == nil)
1641 loadarrayclass();
1642 if (src == nil || dst == nil)
1643 sthrow("NullPointerException");
1644 if (src.mod != arraymd || dst.mod != arraymd)
1645 sthrow("ArrayStoreException");
1646 sa := src.holder;
1647 if (src.dims == dst.dims) {
1648 if (src.class == nil) {
1649 if (dst.class != nil || src.primitive != dst.primitive)
1650 sthrow("ArrayStoreException");
1651 } else {
1652 if (dst.class == nil)
1653 sthrow("ArrayStoreException");
1654 if (src.class != dst.class && !compatclass(src.class, dst.class))
1655 for (i := 0; i < n; i++)
1656 if (!aastoreinstanceof(JStoObject(sa[sx + i]), dst))
1657 sthrow("ArrayStoreException");
1658 }
1659 } else if (dst.class == nil || dst.class.super != nil || dst.dims > src.dims)
1660 sthrow("ArrayStoreException");
1661 if (sx < 0 || dx < 0 || n < 0 || sx + n > len src.holder || dx + n > len dst.holder || sx > 2147483647 - n || dx > 2147483647 - n)
1662 sthrow("ArrayIndexOutOfBoundsException");
1663 dst.holder[dx:] = sa[sx:sx + n];
1664}
1665
1666#
1667# Map a class and a interface cookie to a methodtable entry.
1668#
1669getinterface(c: ref Class, cookie: int) : int
1670{
1671 x := cookie >> 16;
1672 t := cookie & 16rFFFF;
1673 if (x >= ninterfaces)
1674 error("bad interface number");
1675 k := interfaces[x];
1676 m := c.getinterface(k);
1677 if (m == nil)
1678 error(sys->sprint("class %s does not implement interface %s", c.name, k.name));
1679 if (t >= len m)
1680 error("bad interface index");
1681 return m[t];
1682}
1683
1684#
1685# Math.
1686#
1687
1688lcmp(x, y: big): int
1689{
1690 if(x < y)
1691 return -1;
1692 if(x == y)
1693 return 0;
1694 return 1;
1695}
1696
1697truncate(x: real): real
1698{
1699 if (x < 0.0)
1700 x = math->ceil(x);
1701 else
1702 x = math->floor(x);
1703 return x;
1704}
1705
1706d2i(x: real): int
1707{
1708 return int truncate(x);
1709}
1710
1711d2l(x: real): big
1712{
1713 return big truncate(x);
1714}
1715
1716dcmpg(x, y: real): int
1717{
1718 if (math->isnan(x) || math->isnan(y) || x > y)
1719 return 1;
1720 if (x == y)
1721 return 0;
1722 return -1;
1723}
1724
1725dcmpl(x, y: real): int
1726{
1727 if (math->isnan(x) || math->isnan(y) || x < y)
1728 return -1;
1729 if (x == y)
1730 return 0;
1731 return 1;
1732}
1733
1734drem(x, y: real): real
1735{
1736 if (math->isnan(x) || math->isnan(y) || !math->finite(x) || y == 0.0)
1737 return math->NaN;
1738 if ((math->finite(x) && !math->finite(y)) || (x == 0.0 && math->finite(y)))
1739 return x;
1740 return math->fmod(x, y);
1741}
1742
1743#
1744# Class entries.
1745#
1746
1747Class.run(c: self ref Class, args: list of string)
1748{
1749 m := c.findsmethod(MAINFIELD, MAINSIGNATURE);
1750 if (m == nil)
1751 loaderror( nosuchmethod, sys->sprint("%s: missing static method main", c.name));
1752 main = c;
1753 if (arrayclass == nil)
1754 loadarrayclass();
1755 if (stringclass == nil)
1756 loadstringclass();
1757 n := len args;
1758 h := array[n] of ref JavaString;
1759 d := stringclass.moddata;
1760 for (i := 0; i < n; i++) {
1761 h[i] = ref JavaString(d, hd args);
1762 args = tl args;
1763 }
1764 #c.xeq(m.value, ref Array(arraymd, h, 1, stringclass, 0));
1765 getthreaddata();
1766 r := jassist->mcalla(c.mod, m.value, ref Array(arraymd, h, 1, stringclass, 0));
1767 delthreaddata();
1768}
1769
1770
1771Class.new(c: self ref Class): ref Object
1772{
1773 o := jassist->new(c.mod, c.objtype);
1774 o.mod = c.moddata;
1775 f := findasig(c.initmethods, VOIDSIGNATURE);
1776 if (f == nil)
1777 error(sys->sprint("%s: %s: missing constructor", nosuchmethod, c.name));
1778 c.call(f.value, o);
1779 return o;
1780}
1781
1782Class.call(c: self ref Class, x: int, a: ref Object): ref Object
1783{
1784 if (x < 0 || x >= c.mlinks)
1785 raise badcallindex;
1786 return jassist->mcall1(c.mod, x, a);
1787}
1788
1789Class.clone(c: self ref Class, o: ref Object): ref Object
1790{
1791 if (c.cloneindex < 0)
1792 raise nocloneindex;
1793 return jassist->mcall1(c.mod, c.cloneindex, o);
1794}
1795
1796#
1797# Class private methods.
1798#
1799
1800#
1801# Load a class file.
1802#
1803Class.loadclass(c: self ref Class)
1804{
1805 c.encoding = encodename(c.name);
1806 f := c.encoding + ".dis";
1807 m := load Nilmod f;
1808 if (m == nil) {
1809 e := sys->sprint("%r");
1810 if (!matches(e, EXIST))
1811 error(f + ": " + e);
1812 f = ROOT + f;
1813 m = load Nilmod f;
1814 if (m == nil) {
1815 e = sys->sprint("%r");
1816 m : string;
1817 if (!matches(e, EXIST))
1818 m = f + ": " + e;
1819 else
1820 m = c.name + ": class not found";
1821 loaderror(noclassdeffound, m);
1822 }
1823 }
1824 trace(JDEBUG, sys->sprint("\"%s\"", f));
1825 c.file = f;
1826 c.mod = m;
1827 if (getint(m, MAGIC) != JAVA)
1828 loaderror(classformat, f + ": bad magic number");
1829 c.version = getint(m, VERSION) & 16rFF;
1830 if (c.version != SUXV)
1831 loaderror(classformat, f + ": incompatible version (rerun j2d)");
1832 c.ownname = getstring(m, NAME);
1833 if (c.ownname != c.name && encodename(c.ownname) != c.name)
1834 warning("class file " + f + ": inconsistent classname: " + c.ownname);
1835}
1836
1837#
1838# The bulk of the work for loading a class is done here.
1839# This is the essentially the first (resolution) pass.
1840#
1841Class.resolve(c: self ref Class)
1842{
1843 od, vm, pm, sd, sm, im: list of ref Field;
1844 oz, vz, sz: int;
1845 cur = c.name;
1846 c.info.links = ld->link(c.mod);
1847 if (c.info.links == nil)
1848 error(sys->sprint("link failed: %r"));
1849 c.mlinks = len c.info.links;
1850 c.info.types = ld->tdesc(c.mod);
1851 if (c.info.types == nil)
1852 error(sys->sprint("tdesc failed: %r"));
1853 c.objtype = len c.info.types;
1854 c.cloneindex = -1;
1855 if (c.super != nil) {
1856 od = c.super.objectdata;
1857 vz = len c.super.virtualmethods;
1858 oz = c.super.objectsize;
1859 } else {
1860 od = nil;
1861 vz = 0;
1862 oz = WORDZ;
1863 }
1864 vm = nil;
1865 pm = nil;
1866 sd = nil;
1867 sm = nil;
1868 im = nil;
1869 sz = 0;
1870 r := getreloc(c.mod, RELOC);
1871 n := len r;
1872 p := array[n] of Patch;
1873 e := 0;
1874 for (i := 0; i < n; i++) {
1875 s := r[i].field;
1876 if (s[0] != '@')
1877 break;
1878 case s {
1879 CLASS =>
1880 p[i].what = PVALUE;
1881 p[i].value = c.objtype;
1882 c.flags = r[i].flags;
1883 MP or NP or ADT or OBJ =>
1884 p[i].what = PEXTRA;
1885 p[i].value = e++;
1886 JEX =>
1887 error("@jex not in @Loader");
1888 SYS =>
1889 error("@sys not in @Loader");
1890 }
1891 }
1892 for (; i < n; i++) {
1893 t := r[i];
1894 if (isdata(t.signature)) {
1895 if (isspecial(t.field))
1896 error(sys->sprint("unknown special data: %s", t.field));
1897 else if (isstatic(t.flags)) {
1898 trace(JDEBUG, sys->sprint("%s: static data", t.field));
1899 sz = alignto(sz, t.signature);
1900 p[i].what = PSTATIC;
1901 p[i].value = sz;
1902 f := ref Field(t.field, t.signature, t.flags, sz);
1903 sz += sizeof(t.signature);
1904 sd = f :: sd;
1905 } else {
1906 trace(JDEBUG, sys->sprint("%s: new data", t.field));
1907 oz = alignto(oz, t.signature);
1908 p[i].what = PVALUE;
1909 p[i].value = oz;
1910 f := ref Field(t.field, t.signature, t.flags, oz);
1911 od = f :: od;
1912 oz += sizeof(t.signature);
1913 }
1914 } else {
1915 if (isspecial(t.field)) {
1916 s := t.field;
1917 case s {
1918 SPECIALINIT =>
1919 if (isstatic(t.flags))
1920 error("<init> static");
1921 x := c.getmethod(s, t.signature, t.flags);
1922 if (t.flags & Rspecialmp) {
1923 p[i].what = PEXTRA;
1924 p[i].value = e++;
1925 } else {
1926 p[i].what = PVALUE;
1927 p[i].value = x;
1928 }
1929 if (findsig(im, t.signature) == nil)
1930 im = ref Field(s, t.signature, t.flags, x) :: im;
1931 SPECIALCLINIT or SPECIALCLONE =>
1932 if (!isstatic(t.flags))
1933 error(s + " not static");
1934 if (t.patch != nil)
1935 error(s + " patches");
1936 if (t.signature != VOIDSIGNATURE)
1937 error(s + " bad signature");
1938 if (isnative(t.flags))
1939 error(s + " is native");
1940 x := c.getmethod(s, t.signature, t.flags);
1941 if (s == SPECIALCLINIT)
1942 c.classinit = ref Field(s, t.signature, t.flags, x);
1943 else
1944 c.cloneindex = x;
1945 p[i].what = PVALUE;
1946 p[i].value = x;
1947 * =>
1948 error(sys->sprint("unknown special: %s", s));
1949 }
1950 } else if (isvirtual(t.flags)) {
1951 f := findfs(vm, t.field, t.signature);
1952 if (f == nil) {
1953 x := c.override(t.field, t.signature);
1954 if (x < 0) {
1955 trace(JDEBUG, sys->sprint("%s: new method", t.field));
1956 x = vz++;
1957 } else {
1958 trace(JDEBUG, sys->sprint("%s: overriden method", t.field));
1959 }
1960 f = ref Field(t.field, t.signature, t.flags, x);
1961 vm = f :: vm;
1962 }
1963 if (t.flags & Rspecialmp) {
1964 p[i].what = PVALUE;
1965 p[i].value = e++;
1966 } else {
1967 p[i].what = PMETHOD;
1968 p[i].value = f.value;
1969 }
1970 } else {
1971 trace(JDEBUG, sys->sprint("%s: static method", t.field));
1972 x := c.getmethod(t.field, t.signature, t.flags);
1973 f := ref Field(t.field, t.signature, t.flags, x);
1974 p[i].what = PVALUE;
1975 p[i].value = x;
1976 if (isstatic(t.flags)) {
1977 trace(JDEBUG, sys->sprint("%s: static method", t.field));
1978 sm = f :: sm;
1979 } else {
1980 trace(JDEBUG, sys->sprint("%s: private method", t.field));
1981 pm = f :: pm;
1982 }
1983 }
1984 }
1985 }
1986 if (c.flags & ACC_INTERFACE)
1987 c.addinterface();
1988 c.info.reloc = p;
1989 c.objectdata = od;
1990 c.virtualmethods = c.makevmtable(vm, vz);
1991 c.staticdata = mkfdarray(sd);
1992 c.staticmethods = mkfdarray(sm);
1993 c.privatemethods = mkfdarray(pm);
1994 c.initmethods = mkfdarray(im);
1995 c.objectsize = alignto(oz, nil);
1996 c.staticsize = alignto(sz, nil);
1997 c.info.extrabase = e;
1998 cur = nil;
1999}
2000
2001#
2002# Make a type for a class object.
2003#
2004Class.makeobjtype(c: self ref Class)
2005{
2006 z := ((c.objectsize / WORDZ) + 7) / 8;
2007 m := array[z] of byte;
2008 m[0] = byte 16r80;
2009 for (i := 1; i < z; i++)
2010 m[i] = byte 0;
2011 for (l := c.objectdata; l != nil; l = tl l) {
2012 f := hd l;
2013 if (ispointer(f.signature)) {
2014 v := f.value / WORDZ;
2015 x := v / 8;
2016 m[x] = byte ((int m[x]) | bits[v & 7]);
2017 }
2018 }
2019 c.objmap = m;
2020 if (ld->tnew(c.mod, c.objectsize, c.objmap) != c.objtype)
2021 error("objtype mismatch");
2022}
2023
2024#
2025# Make a virtual method table from that of the superclass
2026# and the overriden and new entries.
2027#
2028Class.makevmtable(c: self ref Class, m: list of ref Field, z: int): array of Method
2029{
2030 t := array[z] of Method;
2031 if (c.super != nil) {
2032 s := c.super.virtualmethods;
2033 n := len s;
2034 for (i := 0; i < n; i++)
2035 t[i] = s[i];
2036 }
2037 while (m != nil) {
2038 f := hd m;
2039 n := f.value;
2040 # TODO: check if we don't have this method in links, so just use parent class's one
2041 trace(JDEBUG, sys->sprint("Makevmtable for %s, %d", c.name, z));
2042 {
2043 f.value = c.getmethod(f.field, f.signature, f.flags);
2044 }
2045 exception e {
2046 JCLDREX + nosuchmethod + "*" =>
2047 ; # silently ignore
2048 }
2049 t[n].field = f;
2050 t[n].class = c;
2051 m = tl m;
2052 }
2053 return t;
2054}
2055
2056#
2057# Load the interfaces implemented by a class.
2058#
2059Class.loadinterfaces(c: self ref Class)
2060{
2061 s := getstrarray(c.mod, INTERFACES);
2062 if (s == nil)
2063 return;
2064 n := len s;
2065 trace(JDEBUG, sys->sprint("inter %s %d", c.name, n));
2066 l: list of ref Class;
2067 for (i := 0; i < n; i++)
2068 l = loadhierarchy(s[i]) :: l;
2069 c.interextends = l;
2070 if (c.flags & ACC_INTERFACE) {
2071 c.flags |= JCL_INTEREXT;
2072 interfx = c :: interfx;
2073 } else
2074 interf = c :: interf;
2075}
2076
2077#
2078# Add a class to a list.
2079#
2080addclass(c: ref Class, n: list of ref Class): list of ref Class
2081{
2082 for (l := n; l != nil; l = tl l)
2083 if (hd l == c)
2084 return n;
2085 return c :: n;
2086}
2087
2088#
2089# Extend list of interfaces.
2090#
2091interext(l: list of ref Class): list of ref Class
2092{
2093 n: list of ref Class;
2094 while (l != nil) {
2095 c := hd l;
2096 n = addclass(c, n);
2097 for (x := c.interextends; x != nil; x = tl x)
2098 n = addclass(hd x, n);
2099 l = tl l;
2100 }
2101 return n;
2102}
2103
2104#
2105# Extend (transitively) an interface.
2106#
2107intertrans(c: ref Class, n: list of ref Class): list of ref Class
2108{
2109 if (c.flags & JCL_INTERWORK)
2110 error("circular interface extension"); #ClassCircularityError ??
2111 n = addclass(c, n);
2112 c.extinterfaces();
2113 for (l := c.interextends; l != nil; l = tl l)
2114 n = addclass(hd l, n);
2115 return n;
2116}
2117
2118#
2119# Extend interfaces.
2120#
2121Class.extinterfaces(c: self ref Class)
2122{
2123 if ((c.flags & JCL_INTEREXT) == 0)
2124 return;
2125 c.flags |= JCL_INTERWORK;
2126 n: list of ref Class;
2127 for (l := c.interextends; l != nil; l = tl l)
2128 n = intertrans(hd l, n);
2129 c.interextends = n;
2130 c.flags &= ~(JCL_INTEREXT | JCL_INTERWORK);
2131}
2132
2133#
2134# Resolve the implementation of a class' interfaces.
2135#
2136Class.linkinterfaces(c: self ref Class)
2137{
2138 cur = c.name;
2139 l := interext(c.interextends);
2140 n := len l;
2141 a := array[n] of Interface;
2142 c.interfaces = a;
2143 for (i := 0; i < n; i++) {
2144 s := hd l;
2145 l = tl l;
2146 a[i].class = s;
2147 if ((s.flags & ACC_INTERFACE) == 0)
2148 loaderror(linkageerr, sys->sprint("%s not an interface", s.name));
2149 v := s.virtualmethods;
2150 m := len v;
2151 o := array[m] of int;
2152 a[i].methods = o;
2153 for (j := 0; j < m; j++) {
2154 f := v[j].field;
2155 x := findmfsx(c.virtualmethods, f.field, f.signature);
2156 if (x < 0)
2157 loaderror( nosuchmethod, sys->sprint("method %s'%s' of interface %s not implemented",
2158 f.field, f.signature, s.name));
2159 else
2160 o[j] = (METHODOFFSET + x * 2) * WORDZ;
2161 }
2162 }
2163 cur = nil;
2164}
2165
2166#
2167# This is the second pass of class loading. All classes needed for
2168# relocation have been resolved.
2169#
2170Class.relocate(c: self ref Class)
2171{
2172 cur = c.name;
2173 trace(JDEBUG, sys->sprint("relocate(%s) enter", c.name));
2174 #
2175 # Count extra entries (e.g. @mp and @adt).
2176 #
2177 n := nextra(getreloc(c.mod, RELOC));
2178 i := CLASSREF;
2179 while ((s := getstring(c.mod, i)) != nil) {
2180 n += nextra(getreloc(c.mod, i + WORDZ));
2181 i += 2 * WORDZ;
2182 }
2183 c.dataoffset = (i + 4 + 31) & ~31;
2184 c.nextra = n;
2185 #
2186 # Record extras.
2187 #
2188 c.info.extras = array[n] of Extra;
2189 n = c.extras(getreloc(c.mod, RELOC), 0, c);
2190 j := 0;
2191 i = CLASSREF;
2192 while ((s = getstring(c.mod, i)) != nil) {
2193 n = c.extras(getreloc(c.mod, i + WORDZ), n, c.refs[j]);
2194 i += 2 * WORDZ;
2195 j++;
2196 }
2197 #
2198 # Determine size of new module data.
2199 #
2200 v := len c.virtualmethods;
2201 z := METHODOFFSET * WORDZ + v * 2 * WORDZ + c.staticsize + c.nextra * WORDZ + WORDZ;
2202 c.datareloc = (z + 31) & ~31;
2203 c.datasize = getint(c.mod, DSIZE);
2204 c.modsize = c.datareloc + c.datasize;
2205 z = ((c.modsize / WORDZ) + 7) / 8;
2206 m := array[z] of byte;
2207 #
2208 # Create type map for module.
2209 #
2210 c.modmap = m;
2211 #
2212 # First two entries are nil and ref Class adt.
2213 #
2214 m[0] = byte 16rC0;
2215 for (i = 1; i < z; i++)
2216 m[i] = byte 0;
2217 #
2218 # Method table.
2219 #
2220 for (i = 1; i <= v; i++) {
2221 x := i / 4;
2222 m[x] = byte ((int m[x]) | mbits[i & 3]);
2223 }
2224 o := METHODOFFSET + v * 2;
2225 #
2226 # Static data.
2227 #
2228 c.staticoffset = o * WORDZ;
2229 d := c.staticdata;
2230 for (i = 0; i < len d; i++) {
2231 f := d[i];
2232 if (ispointer(f.signature)) {
2233 w := o + (f.value / WORDZ);
2234 x := w / 8;
2235 m[x] = byte ((int m[x]) | bits[w & 7]);
2236 }
2237 }
2238 o += c.staticsize / WORDZ;
2239 #
2240 # Extra data.
2241 #
2242 c.info.extraoffset = o * WORDZ;
2243 for (i = 0; i < c.nextra; i++) {
2244 x := o / 8;
2245 m[x] = byte ((int m[x]) | bits[o & 7]);
2246 o++;
2247 }
2248 #
2249 # Copy class module data and its map.
2250 #
2251 if (c.datasize > 0) {
2252 if (c.datasize + c.dataoffset > c.info.types[0].size) {
2253 error("bad data size/offset");
2254 c.datasize = 0;
2255 } else
2256 c.copymap(c.info.types[0].map, c.dataoffset);
2257 }
2258 trace(JDEBUG, sys->sprint("%s data %d reloc %d", c.name, c.modsize, c.datareloc));
2259 trace(JDEBUG, sys->sprint("\t%d bytes at %d", c.datasize, c.dataoffset));
2260 md := ld->dnew(c.modsize, c.modmap);
2261 if (md == nil)
2262 error(sys->sprint("dnew failed: %r"));
2263 c.moddata = md;
2264 c.this = ref ClassObject(nil, c, nil);
2265 #
2266 # Fetch the instruction stream and patch it.
2267 #
2268 instructions := ld->ifetch(c.mod);
2269 if (instructions == nil)
2270 error(sys->sprint("ifetch failed: %r"));
2271 c.instrpatch(instructions);
2272 trace(JDEBUG, sys->sprint("\t%d instrs", len instructions));
2273 #
2274 # Make the new module.
2275 #
2276 links := c.info.links;
2277 oldmod := c.mod;
2278 c.mod = ld->newmod(c.name, STACKSIZE, len links, instructions, md);
2279 if (c.mod == nil)
2280 error(sys->sprint("newmod failed: %r"));
2281 addmodclass(c.mod, c);
2282 #
2283 # Install the new types.
2284 #
2285 types := c.info.types;
2286 for (i = 1; i < len types; i++) {
2287 if (ld->tnew(c.mod, types[i].size, types[i].map) != i)
2288 error(sys->sprint("tnew failed: %r"));
2289 }
2290 #
2291 # Install the links.
2292 #
2293 for (i = 0; i < len links; i++) {
2294 if (ld->ext(c.mod, i, links[i].pc, links[i].tdesc) < 0)
2295 error(sys->sprint("ext failed: %r"));
2296 }
2297 #
2298 # This word is used by rtload.
2299 #
2300 putint(md, c.datareloc - WORDZ, c.datareloc);
2301 if (c.datasize > 0)
2302 c.copymd(md, c.dataoffset, oldmod);
2303 c.makeobjtype();
2304 trace(JDEBUG, sys->sprint("relocate(%s) exit", c.name));
2305 cur = nil;
2306}
2307
2308#
2309# Instruction patching.
2310#
2311Class.instrpatch(c: self ref Class, inst: array of Loader->Inst)
2312{
2313 #
2314 # A class' own relocations were determined in resolve.
2315 #
2316 r := getreloc(c.mod, RELOC);
2317 p := c.info.reloc;
2318 x := c.info.extraoffset;
2319 n := len r;
2320 for (i := 0; i < n; i++) {
2321 v: int;
2322 case p[i].what {
2323 PVALUE =>
2324 v = p[i].value;
2325 PEXTRA =>
2326 v = x + p[i].value * WORDZ;
2327 PMETHOD =>
2328 v = (METHODOFFSET + p[i].value * 2) * WORDZ;
2329 PSTATIC =>
2330 v = c.staticoffset + p[i].value;
2331 * =>
2332 error("bad Patch");
2333 }
2334 ipatch(inst, r[i].patch, v);
2335 }
2336 x += c.info.extrabase * WORDZ;
2337 #
2338 # Data relocation.
2339 #
2340 ipatch(inst, getbytearray(c.mod, DRELOC), c.datareloc);
2341 #
2342 # Patching for referenced classes (and @Loader).
2343 #
2344 j := 0;
2345 i = CLASSREF;
2346 while ((s := getstring(c.mod, i)) != nil) {
2347 k := c.refs[j];
2348 if (k != nil)
2349 x = k.relocref(c, inst, getreloc(c.mod, i + WORDZ), x);
2350 else
2351 x = relocloader(inst, getreloc(c.mod, i + WORDZ), x);
2352 i += 2 * WORDZ;
2353 j++;
2354 }
2355}
2356
2357#
2358# Third pass of class loader. All referenced classes
2359# have had new modules allocated.
2360#
2361Class.modpatch(c: self ref Class)
2362{
2363 cur = c.name;
2364 d := c.moddata;
2365 putclass(d, CLASSADTOFFSET, c);
2366 v := c.virtualmethods;
2367 n := len v;
2368 o := METHODOFFSET * WORDZ;
2369 for (i := 0; i < n; i++) {
2370 m := v[i];
2371 if (isnative(m.field.flags))
2372 putmod(d, o, m.class.native);
2373 else
2374 putmod(d, o, m.class.mod);
2375 putint(d, o + WORDZ, m.field.value);
2376 o += 2 * WORDZ;
2377 }
2378 x := c.info.extras;
2379 n = len x;
2380 o = c.info.extraoffset;
2381 for (i = 0; i < n; i++) {
2382 e := x[i];
2383 case e.what {
2384 CMP =>
2385 if (e.class == nil)
2386 putmod(d, o, thisnil);
2387 else
2388 putmod(d, o, e.class.mod);
2389 CADT =>
2390 putclass(d, o, e.class);
2391 CNP =>
2392 putmod(d, o, e.class.native);
2393 COBJ =>
2394 putobj(d, o, e.class.this);
2395 CJEX =>
2396 putstring(d, o, JAVAEXCEPTION);
2397 CSYS =>
2398 putmod(d, o, sysnil);
2399 * =>
2400 error("bad extra what");
2401 }
2402 o += WORDZ;
2403 }
2404 trace(JDEBUG, sys->sprint("compile %s", c.name));
2405 if ((c.flags & DONTCOMPILE) == 0) {
2406 if (ld->compile(c.mod, c.flags & MUSTCOMPILE) < 0)
2407 error(sys->sprint("compile %s failed: %r", c.name));
2408 if (c.native != nil) {
2409 trace(JDEBUG, sys->sprint("compile native %s", c.name));
2410 if (ld->compile(c.native, c.flags & MUSTCOMPILE) < 0)
2411 error(sys->sprint("compile native %s failed: %r", c.name));
2412 }
2413 }
2414 cur = nil;
2415}
2416
2417#
2418# Resolution routines.
2419#
2420
2421#
2422# Check for method override.
2423#
2424Class.override(c: self ref Class, f, s: string): int
2425{
2426 if (c.super == nil)
2427 return -1;
2428 m := c.super.virtualmethods;
2429 n := len m;
2430 for (i := 0; i < n; i++) {
2431 t := m[i].field;
2432 if (t.field == f && t.signature == s)
2433 return i;
2434 }
2435 return -1;
2436}
2437
2438#
2439# Find init method.
2440#
2441Class.findimethod(c: self ref Class, s: string): ref Field
2442{
2443 return findasig(c.initmethods, s);
2444}
2445
2446#
2447# Find private method.
2448#
2449Class.findpmethod(c: self ref Class, f, s: string): ref Field
2450{
2451 return findafs(c.privatemethods, f, s);
2452}
2453
2454#
2455# Find static field.
2456#
2457Class.findsfield(c: self ref Class, f: string): ref Field
2458{
2459 return findafield(c.staticdata, f);
2460}
2461
2462#
2463# Find static method.
2464#
2465Class.findsmethod(c: self ref Class, f, s: string): ref Field
2466{
2467 return findafs(c.staticmethods, f, s);
2468}
2469
2470#
2471# Find object field.
2472#
2473Class.findofield(c: self ref Class, f: string): ref Field
2474{
2475 return findfield(c.objectdata, f);
2476}
2477
2478#
2479# Find virtual method.
2480#
2481Class.findvmethod(c: self ref Class, f, s: string): int
2482{
2483 a := c.virtualmethods;
2484 n := len a;
2485 if (c.name == "java/lang/StringBuffer") {
2486 trace(JDEBUG, sys->sprint("Class: %s, virtual methods: %d", c.name, n));
2487 trace(JDEBUG, sys->sprint("Started looking for method: %s, %s", f, s));
2488 statenames := array [] of {"NEW", "HIER", "RESOLVE", "LOADED", "INITED"};
2489 trace(JDEBUG, sys->sprint("Class state: %s", statenames[c.state]));
2490 }
2491 for (i := 0; i < n; i++) {
2492 t := a[i].field;
2493 if (t.field == f && t.signature == s)
2494 return i;
2495 }
2496 trace(JDEBUG, "returned fail");
2497 return -1;
2498}
2499
2500Class.loadnative(c: self ref Class)
2501{
2502 native := ROOT + c.encoding + "_L.dis";
2503 mod := load Nilmod native;
2504 if (mod == nil) {
2505 trace(JVERBOSE, sys->sprint("Load native failed: %r"));
2506 return;
2507 }
2508 trace(JDEBUG, sys->sprint("\"%s\"", native));
2509 links := ld->link(mod);
2510 if (links == nil)
2511 error(sys->sprint("%s: native Loader->link failed: %r", unsatisfiedlink));
2512 c.info.nlinks = links;
2513 types := ld->tdesc(mod);
2514 if (types == nil)
2515 error(sys->sprint("%s: native tdesc failed: %r",unsatisfiedlink));
2516 instrs := ld->ifetch(mod);
2517 if (instrs == nil)
2518 error(sys->sprint("%s: native ifetch failed: %r",unsatisfiedlink));
2519 nm := ld->newmod("N-" + c.name, STACKSIZE, len links, instrs, getmd(mod));
2520 if (nm == nil)
2521 error(sys->sprint("%s: native newmod failed: %r",unsatisfiedlink));
2522 n := len types;
2523 for (i := 1; i < n; i++) {
2524 if (ld->tnew(nm, types[i].size, types[i].map) != i)
2525 error(sys->sprint("%s: native tnew failed: %r",unsatisfiedlink));
2526 }
2527 n = len links;
2528 for (i = 0; i < n; i++) {
2529 if (ld->ext(nm, i, links[i].pc, links[i].tdesc) < 0)
2530 error(sys->sprint("%s: native ext failed: %r",unsatisfiedlink));
2531 }
2532 addmodclass(nm, c);
2533 c.native = nm;
2534}
2535
2536#
2537# Search the links for a method. Maybe load the native module.
2538#
2539Class.getmethod(c: self ref Class, f, s: string, flags: int): int
2540{
2541 trace(JDEBUG, sys->sprint("Getmethod of %s: %s, %s, %d", c.name, f, s, flags));
2542 l: array of Loader->Link;
2543 m: string;
2544 if (isnative(flags)) {
2545 if (c.native == nil)
2546 c.loadnative();
2547 l = c.info.nlinks;
2548 m = mangle(f, s);
2549 } else {
2550 l = c.info.links;
2551 m = f + s;
2552 }
2553 n := len l;
2554 for (i := 0; i < n; i++) {
2555 if (l[i].name == m)
2556 return i;
2557 }
2558 if (!(flags & (ACC_ABSTRACT | ACC_NATIVE)))
2559 {
2560 loaderror( nosuchmethod, sys->sprint("method %x %s '%s' %s not found", flags, f, s, m) );
2561 }
2562 return -1;
2563}
2564
2565#
2566# Find method called with invokespecial.
2567#
2568Class.special(c: self ref Class, f, s: string, flags: int, r: ref Class): (int, ref Class, int)
2569{
2570 if (f == SPECIALINIT) {
2571 i := findasig(r.initmethods, s);
2572 if (i == nil)
2573 error(sys->sprint("%s: <init> '%s' not found in class %s", nosuchmethod, s, r.name));
2574 return (CMP, r, i.value);
2575 } else if (isprivate(flags)) {
2576 p := findafs(r.privatemethods, f, s);
2577 if (p == nil)
2578 error("invokespecial private botch");
2579 if (isnative(p.flags))
2580 return (CNP, r, p.value);
2581 else
2582 return (CMP, r, p.value);
2583 } else {
2584 r = c.super;
2585 if (r == nil)
2586 error("invokespecial super botch");
2587 i := r.findvmethod(f, s);
2588 if (i < 0)
2589 error("invokespecial botch");
2590 m := r.virtualmethods[i];
2591 if (isnative(m.field.flags))
2592 return (CNP, m.class, m.field.value);
2593 else
2594 return (CMP, m.class, m.field.value);
2595 }
2596}
2597
2598#
2599# Record info for an extra.
2600#
2601Class.extra(c: self ref Class, w, n: int, r: ref Class)
2602{
2603 c.info.extras[n].what = w;
2604 c.info.extras[n].class = r;
2605}
2606
2607#
2608# Record info for extras.
2609#
2610Class.extras(c: self ref Class, a: array of Reloc, n: int, r: ref Class): int
2611{
2612 l := len a;
2613 for (i := 0; i < l; i++) {
2614 f := a[i].field;
2615 if (f[0] != '@')
2616 break;
2617 case f {
2618 MP =>
2619 c.extra(CMP, n, r);
2620 ADT =>
2621 c.extra(CADT, n, r);
2622 NP =>
2623 c.extra(CNP, n, r);
2624 OBJ =>
2625 c.extra(COBJ, n, r);
2626 JEX =>
2627 if (r != nil)
2628 error("@jex not in @Loader");
2629 c.extra(CJEX, n, nil);
2630 SYS =>
2631 if (r != nil)
2632 error("@sys not in @Loader");
2633 c.extra(CSYS, n, nil);
2634 CLASS =>
2635 n--;
2636 * =>
2637 error(sys->sprint("unknown reloc: %s", f));
2638 }
2639 n++;
2640 }
2641 for (; i < l; i++) {
2642 if (a[i].flags & Rspecialmp) {
2643 if ((a[i].flags & Rmask) != Rinvokespecial)
2644 error("bad Rspecialmp");
2645 (v, s, nil) := c.special(a[i].field, a[i].signature, a[i].flags, r);
2646 c.extra(v, n, s);
2647 n++;
2648 }
2649 }
2650 return n;
2651}
2652
2653#
2654# Count the extra data fields need for a Reloc.
2655#
2656nextra(a: array of Reloc): int
2657{
2658 n := 0;
2659 l := len a;
2660 for (i := 0; i < l; i++) {
2661 f := a[i].field;
2662 if (f[0] != '@')
2663 break;
2664 case f {
2665 MP or NP or ADT or OBJ or JEX or SYS =>
2666 n++;
2667 }
2668 }
2669 for (; i < l; i++) {
2670 if (a[i].flags & Rspecialmp)
2671 n++;
2672 }
2673 return n;
2674}
2675
2676#
2677# Copy old module map corresponding to module data to new map.
2678#
2679Class.copymap(c: self ref Class, om: array of byte, dr: int)
2680{
2681 nm := c.modmap;
2682 s := dr / MAPZ;
2683 d := c.datareloc / MAPZ;
2684 while (d < len nm) {
2685 if (s < len om)
2686 nm[d] = om[s];
2687 else
2688 nm[d] = byte 0;
2689 s++;
2690 d++;
2691 }
2692}
2693
2694#
2695# Copy old module data to new module data.
2696#
2697Class.copymd(c: self ref Class, md: ref Niladt, dr: int, om: Nilmod)
2698{
2699 m := c.modmap;
2700 s := dr;
2701 d := c.datareloc;
2702 for (i := 0; i < c.datasize; i+= WORDZ) {
2703 w := d / WORDZ;
2704 if ((int m[w / 8] & bits[w & 7]) != 0)
2705 putptr(md, d, getptr(om, s));
2706 else
2707 putint(md, d, getint(om, s));
2708 d += WORDZ;
2709 s += WORDZ;
2710 }
2711}
2712
2713#
2714# Resolve a relocation for a referenced class.
2715#
2716Class.resolvereloc(c: self ref Class, r, s: string, flags: int): (int, int)
2717{
2718 v: int;
2719 f: ref Field;
2720 case flags & Rmask {
2721 Rgetputfield =>
2722 f = findfield(c.objectdata, r);
2723 if (f == nil)
2724 loaderror(nosuchfield, sys->sprint("%s not resolved in class %s", r, c.name));
2725 else {
2726 if (f.signature != s) {
2727 loaderror(nosuchfield, sys->sprint("%s type mismatch in class %s:%s vs %s", r, c.name, f.signature, s));
2728 }
2729 v = f.value;
2730 }
2731 Rgetputstatic =>
2732 f = c.findsfield(r);
2733 if (f == nil)
2734 loaderror( nosuchfield, sys->sprint("static %s not found in class %s", r, c.name));
2735 else {
2736 if (f.signature != s) {
2737 loaderror(nosuchfield, sys->sprint("%s static type mismatch in class %s:%s vs %s", r, c.name, f.signature, s));
2738 }
2739 v = c.staticoffset + f.value;
2740 }
2741 Rinvokeinterface =>
2742 if ((c.flags & ACC_INTERFACE) == 0) {
2743 loaderror(linkageerr, sys->sprint("%s is not an interface", c.name));
2744 break;
2745 }
2746 v = findmfsx(c.virtualmethods, r, s);
2747 if (v < 0)
2748 loaderror( nosuchmethod, sys->sprint("interface method %s '%s' not found in class %s", r, s, c.name));
2749 v |= c.interindex << 16;
2750 Rinvokespecial =>
2751 error("Rinvokespecial botch");
2752 Rinvokestatic =>
2753 f = c.findsmethod(r, s);
2754 if (f == nil)
2755 loaderror( nosuchmethod, sys->sprint("static method %s '%s' not found in class %s", r, s, c.name));
2756 else if (flags & Rstaticmp) {
2757 if (f.flags & ACC_NATIVE)
2758 return (VNP, 0);
2759 else
2760 return (VMP, 0);
2761 } else
2762 v = f.value;
2763 Rinvokevirtual =>
2764 v = c.findvmethod(r, s);
2765 if (v < 0)
2766 loaderror( nosuchmethod, sys->sprint("method %s '%s' not resolved in class %s", r, s, c.name));
2767 v = (METHODOFFSET + v * 2) * WORDZ;
2768 * =>
2769 if (r == OBJ)
2770 return (VOBJ, 0);
2771 error(sys->sprint("%s: bad Rmask", c.name));
2772 }
2773 return (VVAL, v);
2774}
2775
2776#
2777# Perform relocation for a referenced class.
2778#
2779Class.relocref(c: self ref Class, t: ref Class, inst: array of Loader->Inst, a: array of Reloc, x: int): int
2780{
2781 v, w: int;
2782 mp := -1;
2783 np := -1;
2784 n := len a;
2785 for (i := 0; i < n; i++) {
2786 f := a[i].field;
2787 if (f[0] != '@')
2788 break;
2789 case f {
2790 MP =>
2791 if (mp >= 0)
2792 error("repeat @mp");
2793 mp = x;
2794 v = x;
2795 x += WORDZ;
2796 NP =>
2797 if (np >= 0)
2798 error("repeat @np");
2799 np = x;
2800 v = x;
2801 x += WORDZ;
2802 ADT =>
2803 v = x;
2804 x += WORDZ;
2805 OBJ =>
2806 v = x;
2807 x += WORDZ;
2808 JEX =>
2809 error("@jex not in @Loader");
2810 SYS =>
2811 error("@sys not in @Loader");
2812 CLASS =>
2813 v = c.objtype;
2814 * =>
2815 error("@botch");
2816 }
2817 ipatch(inst, a[i].patch, v);
2818 }
2819 for (; i < n; i++) {
2820 if ((a[i].flags & Rmask) == Rinvokespecial) {
2821 if (a[i].flags & Rspecialmp) {
2822 v = x;
2823 x += WORDZ;
2824 } else
2825 (nil, nil, v) = t.special(a[i].field, a[i].signature, a[i].flags, c);
2826 } else {
2827 (w, v) = c.resolvereloc(a[i].field, a[i].signature, a[i].flags);
2828 if (w == VMP) {
2829 if (mp < 0)
2830 error("no @mp for Rstaticmp");
2831 v = mp;
2832 } else if (w == VNP) {
2833 if (np < 0)
2834 error("no @np for Rstaticmp");
2835 v = np;
2836 }
2837 }
2838 ipatch(inst, a[i].patch, v);
2839 }
2840 return x;
2841}
2842
2843#
2844# Record an interface and assign it an ordinal.
2845#
2846Class.addinterface(c: self ref Class)
2847{
2848 if (ninterfaces == linterfaces) {
2849 if (ninterfaces == 0) {
2850 linterfaces = INITINTER;
2851 interfaces = array[INITINTER] of ref Class;
2852 } else {
2853 n := linterfaces * 3 / 2;
2854 a := array[n] of ref Class;
2855 for (i := 0; i < linterfaces; i++)
2856 a[i] = interfaces[i];
2857 linterfaces = n;
2858 interfaces = a;
2859 }
2860 }
2861 c.interindex = ninterfaces;
2862 interfaces[ninterfaces++] = c;
2863}
2864
2865#
2866# Search for an interface implementation.
2867#
2868Class.interlook(c: self ref Class, a: array of Interface): array of int
2869{
2870 if (a == nil)
2871 return nil;
2872 n := len a;
2873 for (i := 0; i < n; i++) {
2874 d := a[i].class;
2875 do {
2876 if (d == c)
2877 return a[i].methods;
2878 d = d.super;
2879 } while (d != nil);
2880 }
2881 return nil;
2882}
2883
2884#
2885# Fetch interface table, possibly cached.
2886#
2887Class.getinterface(c: self ref Class, k: ref Class): array of int
2888{
2889 for (l := c.intercache; l != nil; l = tl l) {
2890 (d, m) := hd l;
2891 if (d == k)
2892 return m;
2893 }
2894 m: array of int;
2895 d := c;
2896 do {
2897 m = k.interlook(d.interfaces);
2898 d = d.super;
2899 } while (m == nil && d != nil);
2900 if (m != nil) {
2901 c.intercache = (k, m) :: c.intercache;
2902 return m;
2903 }
2904 return nil;
2905}
2906
2907#
2908# Call native module init function.
2909#
2910Class.initjni(c: self ref Class)
2911{
2912 trace(JVERBOSE, sys->sprint("%s->init()", c.name));
2913 l := c.info.nlinks;
2914 n := len l;
2915 for (i := 0; i < n; i++) {
2916 if (l[i].name == "init") {
2917 if (l[i].sig != jnisig)
2918 error(sys->sprint("init typecheck in class %s native", c.name));
2919 jassist->mcallm(c.native, i, jninil);
2920 trace(JDEBUG, "done");
2921 return;
2922 }
2923 }
2924 error(sys->sprint("no init function in class %s native", c.name));
2925}
2926
2927#
2928# @Loader relocation.
2929#
2930relocloader(inst: array of Loader->Inst, a: array of Reloc, x: int): int
2931{
2932 v: int;
2933 n := len a;
2934 for (i := 0; i < n; i++) {
2935 r := a[i].field;
2936 case r {
2937 MP or JEX or SYS =>
2938 v = x;
2939 x += WORDZ;
2940 CLASS =>
2941 error("@Loader @Class");
2942 ADT =>
2943 error("@Loader @adt");
2944 NP =>
2945 error("@Loader @np");
2946 OBJ =>
2947 error("@Loader @obj");
2948 * =>
2949 v = getloader(r);
2950 if (v < 0)
2951 error(sys->sprint("no ClassLoader/Sys entry %s", r));
2952 }
2953 ipatch(inst, a[i].patch, v);
2954 }
2955 return x;
2956}
2957
2958#
2959# @Loader and @Sys entries.
2960# This uses a magic hash which maps each loadkey to a unique index.
2961# If you add a loadkey you will need new magic.
2962#
2963
2964LDHASH: con 38;
2965
2966LoadMap: adt
2967{
2968 name: string;
2969 value: int;
2970};
2971
2972loadtable := array[LDHASH] of LoadMap;
2973
2974loadkeys := array[] of
2975{
2976 "aastorecheck",
2977 "acheckcast",
2978 "ainstanceof",
2979 "checkcast",
2980 "culprit",
2981 "d2i",
2982 "d2l",
2983 "dcmpg",
2984 "dcmpl",
2985 "drem",
2986 "getinterface",
2987 "instanceof",
2988 "lcmp",
2989 "monitorenter",
2990 "monitorexit",
2991 "multianewarray",
2992 "pcheckcast",
2993 "pinstanceof",
2994 "raise",
2995 "rescue",
2996 "rtload",
2997 "throw",
2998 "unrescue",
2999};
3000
3001#
3002# This function maps the above 23 strings to unique integers from 0 to 37.
3003#
3004loadhash(s: string): int
3005{
3006 return ((s[len s - 1] + 49) * len s + 19 * s[0]) % LDHASH;
3007}
3008
3009loadenter(s: string, x: int)
3010{
3011 n := loadhash(s);
3012 if (loadtable[n].name == s)
3013 loadtable[n].value = x;
3014}
3015
3016initloadhash()
3017{
3018 n := len loadkeys;
3019 for (i := 0; i < n; i++) {
3020 s := loadkeys[i];
3021 loadtable[loadhash(s)].name = s;
3022 }
3023 a := loadlinks;
3024 n = len a;
3025 for (i = 0; i < n; i++)
3026 loadenter(a[i].name, i);
3027 a = syslinks;
3028 n = len a;
3029 for (i = 0; i < n; i++)
3030 loadenter(a[i].name, i);
3031}
3032
3033#
3034# Map a string to a @Loader or @Sys index.
3035#
3036getloader(s: string): int
3037{
3038 n := loadhash(s);
3039 if (loadtable[n].name != s)
3040 error("getloader botch");
3041 return loadtable[n].value;
3042}
3043
3044#
3045# Get Class adt from an object.
3046#
3047Object.class(o: self ref Object): ref Class
3048{
3049 return getclassadt(o.mod, CLASSADTOFFSET);
3050}
3051
3052#
3053# Categorizers.
3054#
3055isdata(sig: string): int
3056{
3057 return sig[0] != '(';
3058}
3059
3060isspecial(field: string): int
3061{
3062 return field[0] == '<';
3063}
3064
3065ispointer(sig: string): int
3066{
3067 case sig[0] {
3068 'L' or '[' =>
3069 return 1;
3070 }
3071 return 0;
3072}
3073
3074isprivate(flags: int): int
3075{
3076 return flags & ACC_PRIVATE;
3077}
3078
3079isstatic(flags: int): int
3080{
3081 return flags & ACC_STATIC;
3082}
3083
3084isnative(flags: int): int
3085{
3086 return flags & ACC_NATIVE;
3087}
3088
3089isvirtual(flags: int): int
3090{
3091 return (flags & (ACC_PRIVATE | ACC_STATIC)) == 0;
3092}
3093
3094isabstract(flags: int): int
3095{
3096 return flags & ACC_ABSTRACT;
3097}
3098
3099#
3100# Type alignment.
3101#
3102alignto(sz: int, sig: string): int
3103{
3104 a: int;
3105 if (sig == nil)
3106 a = WORDZ;
3107 else {
3108 a = sizeof(sig);
3109 if (a == 1)
3110 return sz;
3111 }
3112 a--;
3113 return (sz + a) & ~a;
3114}
3115
3116#
3117# Type size.
3118#
3119sizeof(sig: string): int
3120{
3121 case sig[0] {
3122 'Z' or 'B' =>
3123 return 1;
3124 'D' or 'J' or 'F' =>
3125 return 2 * WORDZ;
3126 'C' or 'S' or 'I' or 'L' or '[' =>
3127 return WORDZ;
3128 }
3129 warning("unknown size: " + sig);
3130 return WORDZ;
3131}
3132
3133#
3134# Utilities.
3135#
3136
3137mkclarray(l: list of ref Class): array of ref Class
3138{
3139 n := len l;
3140 a := array[n] of ref Class;
3141 while (--n >= 0) {
3142 a[n] = hd l;
3143 l = tl l;
3144 }
3145 return a;
3146}
3147
3148mkfdarray(l: list of ref Field): array of ref Field
3149{
3150 n := len l;
3151 a := array[n] of ref Field;
3152 while (--n >= 0) {
3153 a[n] = hd l;
3154 l = tl l;
3155 }
3156 return a;
3157}
3158
3159findfield(l: list of ref Field, f: string): ref Field
3160{
3161 while (l != nil) {
3162 h := hd l;
3163 if (h.field == f)
3164 return h;
3165 l = tl l;
3166 }
3167 return nil;
3168}
3169
3170findsig(l: list of ref Field, s: string): ref Field
3171{
3172 while (l != nil) {
3173 h := hd l;
3174 if (h.signature == s)
3175 return h;
3176 l = tl l;
3177 }
3178 return nil;
3179}
3180
3181findfs(l: list of ref Field, f, s: string): ref Field
3182{
3183 while (l != nil) {
3184 h := hd l;
3185 if (h.field == f && h.signature == s)
3186 return h;
3187 l = tl l;
3188 }
3189 return nil;
3190}
3191
3192findafield(a: array of ref Field, f: string): ref Field
3193{
3194 n := len a;
3195 for (i := 0; i < n; i++) {
3196 if (a[i].field == f)
3197 return a[i];
3198 }
3199 return nil;
3200}
3201
3202findasig(a: array of ref Field, s: string): ref Field
3203{
3204 n := len a;
3205 for (i := 0; i < n; i++) {
3206 if (a[i].signature == s)
3207 return a[i];
3208 }
3209 return nil;
3210}
3211
3212findafs(a: array of ref Field, f, s: string): ref Field
3213{
3214 n := len a;
3215 for (i := 0; i < n; i++) {
3216 if (a[i].field == f && a[i].signature == s)
3217 return a[i];
3218 }
3219 return nil;
3220}
3221
3222findmfsx(a: array of Method, f, s: string): int
3223{
3224 n := len a;
3225 for (i := 0; i < n; i++) {
3226 t := a[i].field;
3227 if (t.field == f && t.signature == s)
3228 return i;
3229 }
3230 return -1;
3231}
3232
3233#
3234# Patch an instruction.
3235#
3236ipatch(inst: array of Loader->Inst, p: array of byte, d: int)
3237{
3238 v: int;
3239 l := len inst;
3240 n := len p;
3241 x := 0;
3242 if (fsindir) {
3243 for (i := 0; i < n; i++) {
3244 t := int p[i];
3245 if (t & RDELTA) {
3246 x += (256 - t) << 3;
3247 continue;
3248 }
3249 x += t >> ISHIFT;
3250 if (x < 0 || x >= l)
3251 error("bad inst index");
3252 if (inst[x].op == byte 57 && inst[x].mid == 0) {
3253 trace(JVERBOSE, sys->sprint("Skipping instruction %d", x));
3254 continue;
3255 }
3256 case t & (POP | PTYPE) {
3257 PSRC | PIMM or PSRC | PSIND =>
3258 inst[x].src += d;
3259 PSRC | PDIND1 =>
3260 v = inst[x].src;
3261 inst[x].src = (v & int 16rFFFF0000) | ((v & 16rFFFF) + d);
3262 PSRC | PDIND2 =>
3263 v = inst[x].src;
3264 inst[x].src = (v & 16rFFFF) | ((v & int 16rFFFF0000) + (d << 16));
3265 PMID | PIMM or PMID | PSIND =>
3266 inst[x].mid += d;
3267 PDST | PIMM or PDST | PSIND =>
3268 inst[x].dst += d;
3269 PDST | PDIND1 =>
3270 v = inst[x].dst;
3271 inst[x].dst = (v & int 16rFFFF0000) | ((v & 16rFFFF) + d);
3272 PDST | PDIND2 =>
3273 v = inst[x].dst;
3274 inst[x].dst = (v & 16rFFFF) | ((v & int 16rFFFF0000) + (d << 16));
3275 * =>
3276 error("bad reloc");
3277 }
3278 }
3279 } else {
3280 for (i := 0; i < n; i++) {
3281 t := int p[i];
3282 if (t & RDELTA) {
3283 x += (256 - t) << 3;
3284 continue;
3285 }
3286 x += t >> ISHIFT;
3287 if (x < 0 || x >= l)
3288 error("bad inst index");
3289 case t & (POP | PTYPE) {
3290 PSRC | PIMM or PSRC | PSIND =>
3291 inst[x].src += d;
3292 PSRC | PDIND1 =>
3293 v = inst[x].src;
3294 inst[x].src = (v & 16rFFFF) | ((v & int 16rFFFF0000) + (d << 16));
3295 PSRC | PDIND2 =>
3296 v = inst[x].src;
3297 inst[x].src = (v & int 16rFFFF0000) | ((v & 16rFFFF) + d);
3298 PMID | PIMM or PMID | PSIND =>
3299 inst[x].mid += d;
3300 PDST | PIMM or PDST | PSIND =>
3301 inst[x].dst += d;
3302 PDST | PDIND1 =>
3303 v = inst[x].dst;
3304 inst[x].dst = (v & 16rFFFF) | ((v & int 16rFFFF0000) + (d << 16));
3305 PDST | PDIND2 =>
3306 v = inst[x].dst;
3307 inst[x].dst = (v & int 16rFFFF0000) | ((v & 16rFFFF) + d);
3308 * =>
3309 error("bad POP");
3310 }
3311 }
3312 }
3313}
3314
3315#
3316# String concatenation.
3317#
3318concat(l: list of string, r: int): string
3319{
3320 n := len l;
3321 do {
3322 t: list of string;
3323 t = nil;
3324 do {
3325 if (n > 1) {
3326 s0, s1: string;
3327 if (r) {
3328 s1 = hd l;
3329 l = tl l;
3330 s0 = hd l;
3331 l = tl l;
3332 } else {
3333 s0 = hd l;
3334 l = tl l;
3335 s1 = hd l;
3336 l = tl l;
3337 }
3338 t = (s0 + s1) :: t;
3339 n -= 2;
3340 } else {
3341 t = (hd l) :: t;
3342 break;
3343 }
3344 } while (l != nil);
3345 l = t;
3346 n = len l;
3347 r = 1 - r;
3348 } while (n > 1);
3349 return hd l;
3350}
3351
3352#
3353# Native name mangling.
3354#
3355mangle(f, s: string): string
3356{
3357 l := f :: nil;
3358 _ := 1;
3359 a := 0;
3360 while (s != nil) {
3361 n := len s;
3362 i := 0;
3363 scan: for (;;) {
3364 if (i == n) {
3365 s = nil;
3366 break;
3367 }
3368 if (_)
3369 l = "_" :: l;
3370 case s[i] {
3371 '(' or ')' =>
3372 _ = 0;
3373 '[' =>
3374 l = "a" :: l;
3375 _ = 0;
3376 a = 1;
3377 'L' =>
3378 (c, r) := str->splitl(s[i + 1:], ";)");
3379 (nil, b) := str->splitr(c, "/");
3380 if (a)
3381 l = b :: l;
3382 else
3383 l = b :: "r" :: l;
3384 if (r == nil)
3385 s = nil;
3386 else
3387 s = r[1:];
3388 _ = 1;
3389 a = 0;
3390 break scan;
3391 * =>
3392 l = s[i:i + 1] :: l;
3393 _ = 1;
3394 a = 0;
3395 }
3396 i++;
3397 }
3398 }
3399 return concat(l, 1);
3400}
3401
3402handlejavaex(nil: string, obj: ref Object)
3403{
3404 class := obj.class();
3405 if (class != tdclass) {
3406 throwable := jassist->ObjecttoJT(obj);
3407 msg : string = nil;
3408 if ( throwable.msg != nil )
3409 msg = throwable.msg.str;
3410 sys->fprint(stderr, "%s: %s\n", class.name, msg);
3411 if (throwable.trace != nil)
3412 sys->fprint(stderr, "%s\n", string throwable.trace);
3413 }
3414 delthreaddata();
3415 exit;
3416}
3417
3418setflags( flags : list of (string,int) )
3419{
3420 if ( flags == nil ) return;
3421
3422 for((f,v):=hd flags; flags != nil; flags = tl flags )
3423 {
3424 case (f)
3425 {
3426 "debug" => loadtrace();
3427 jtrace->level = JDEBUG;
3428 "verbose" => loadtrace();
3429 jtrace->level = JVERBOSE;
3430 "warn" => warn = v;
3431 }
3432 }
3433}
3434
3435runmain( classloader : JavaClassLoader, classname : string, argv : list of string )
3436{
3437 {
3438 classloader->loader(classname).run(tl tl argv);
3439 }
3440 exception e
3441 {
3442 "*" =>
3443 m := sys->sprint("uncaught exception: %s", e);
3444 mesg(m);
3445 if ( (obj := culprit(e)) != nil)
3446 handlejavaex(e, obj);
3447 else {
3448 raise m; #just giveup
3449 }
3450 classloader->shutdown();
3451 }
3452}
java/appl/java/dump.b+216−0
@@ -0,0 +1,216 @@
1implement Dump;
2
3include "sys.m";
4include "draw.m";
5include "loader.m";
6include "classloader.m";
7
8Context: import Draw;
9
10Dump: module
11{
12 MP: con "@mp";
13 ADT: con "@adt";
14
15 JAVA: con ('J'<<24)|('a'<<16)|('v'<<8)|'a';
16
17 MAGIC, VERSION, NAME, SUPER, RELOC, DSIZE, DRELOC, CLASSREF:
18 con (iota * 4);
19 WORDZ: con 4;
20
21 init: fn(nil: ref Context, argv: list of string);
22
23 Reloc: adt
24 {
25 field: string;
26 signature: string;
27 flags: int;
28 patch: array of int;
29 };
30
31 Field: adt
32 {
33 field: string;
34 signature: string;
35 flags: int;
36 value: int;
37 class: cyclic ref Class;
38 };
39
40 Class: adt
41 {
42 state: int;
43 name: string;
44 ownname: string;
45 file: string;
46 version: int;
47 mod: Nilmod;
48 super: cyclic ref Class;
49 refs: cyclic array of ref Class;
50 objectdata: cyclic list of ref Field;
51 virtualmethod: cyclic list of ref Field;
52 staticdata: cyclic array of ref Field;
53 staticmethod: cyclic array of ref Field;
54 objectsize: int;
55 staticsize: int;
56 nextra: int;
57 datasize: int;
58 datareloc: int;
59 modsize: int;
60 modmap: array of byte;
61 objmap: array of byte;
62 objtype: int;
63 };
64
65};
66
67sys: Sys;
68jassist: JavaAssist;
69
70 getint, getptr, getreloc, getstring: import jassist;
71 putclass, putint, putmod, putptr: import jassist;
72 mnew: import jassist;
73
74stderr: ref Sys->FD;
75
76ident: con "Dump";
77
78mesg(s: string)
79{
80 sys->fprint(stderr, "%s: %s\n", ident, s);
81}
82
83error(s: string)
84{
85 mesg(s);
86 exit;
87}
88
89init(nil: ref Context, argv: list of string)
90{
91 s := "";
92 t: string;
93 a: array of byte;
94
95 sys = load Sys Sys->PATH;
96 stderr = sys->fildes(2);
97
98 jassist = load JavaAssist JavaAssist->PATH;
99 if (jassist == nil)
100 error(sys->sprint(
101 "could not load %s: %r", JavaAssist->PATH));
102
103 argv = tl argv;
104
105 if(argv == nil)
106 exit;
107
108 i := 0;
109 junk := array[10] of Nilmod;
110 while(argv != nil) {
111 s = hd argv;
112 t = "\n" + s + "\n";
113 a = array of byte t;
114 if(sys->write(sys->fildes(1), a, len a) != len a)
115 sys->fprint(sys->fildes(2), "load: write error: %r\n");
116 junk[i] = load Nilmod s;
117 dump(junk[i]);
118 if(junk == nil)
119 sys->fprint(sys->fildes(2), "load: error: %r\n");
120 argv = tl argv;
121 }
122}
123
124nextra(a: array of Reloc): int
125{
126 n := 0;
127 for (i := 0; i < len a; i++) {
128 case a[i].field {
129 MP or ADT =>
130 n++;
131 }
132 }
133 return n;
134}
135
136dump(m: Nilmod)
137{
138 ld := load Loader Loader->PATH;
139 if(ld == nil)
140 error(sys->sprint("could not load %s: %r", Loader->PATH));
141
142 if (getint(m, MAGIC) != JAVA){
143 sys->fprint(sys->fildes(2), "\tbad magic number\n");
144 return;
145 }
146
147 version := getint(m, VERSION) & 16rFF;
148 sys->fprint(sys->fildes(1),"\tversion: %d\n",version);
149 ownname := getstring(m, NAME);
150 a := array of byte ownname;
151 sys->fprint(sys->fildes(1),"\townname: ");
152 if(sys->write(sys->fildes(1), a, len a) != len a)
153 sys->fprint(sys->fildes(2), "load: write error: %r\n");
154
155 super := getstring(m, SUPER);
156 sys->fprint(sys->fildes(1),"\tsuper: %s\n",super);
157
158 r := getreloc(m, RELOC);
159 i := len r;
160 sys->fprint(sys->fildes(1),"\tlen r: %d\n",i);
161 for (j := 0; j < len r; j++) {
162 t := r[j];
163 sys->fprint(sys->fildes(1),"\t\t%s\t%s\n",t.field,t.signature);
164 }
165
166 datasize := getint(m, DSIZE);
167 sys->fprint(sys->fildes(1),"\tdatasize: %d\n",datasize);
168 dr := getint(m, DRELOC);
169 sys->fprint(sys->fildes(1), "\treloc: %d\n",dr);
170 i = CLASSREF;
171 n := 0;
172
173 sys->fprint(sys->fildes(1),"\tclassrefs:\n");
174 while ((s := getstring(m, i)) != nil) {
175 n += nextra(getreloc(m, i + WORDZ));
176 sys->fprint(sys->fildes(1),"\t\t%s %d\n",s,n);
177 i += 2 * WORDZ;
178 }
179
180# td := ld->tdesc(m);
181# z := 2 * WORDZ + n*WORDZ;
182# mod := array[z] of byte;
183# for (i = 1; i < z; i++)
184# mod[i] = byte 0;
185# # nil and ref Class
186# mod[0] = byte 16rC0;
187# md := ld->dnew(datasize,mod);
188# instructions := ld->ifetch(m);
189 links := ld->link(m);
190
191 R := ref Class;
192 S := ref Class;
193 classes: list of ref Class;
194 classes = S :: classes;
195 classes = R :: classes;
196
197 refs := mkclarray(classes);
198
199 sys->fprint(sys->fildes(1),"\n");
200}
201
202mkclarray(l: list of ref Class): array of ref Class
203{
204 n := len l;
205 sys->fprint(stderr, "mkclarray, len: %d\n",n);
206 a := array[n] of ref Class;
207 while (--n >= 0) {
208 sys->fprint(stderr, "mkclarray, len: %d\n",n);
209 a[n] = hd l;
210 l = tl l;
211 }
212 sys->fprint(stderr, "mkclarray, exitting\n");
213 return a;
214}
215
216
java/appl/java/javaassist.base+148−0
@@ -0,0 +1,148 @@
1#
2# Java Class Loader dis assist.
3#
4
5#0
6# getint:
7 addw 0(32(fp)),36(fp),40(fp)
8 movw 0(40(fp)),0(16(fp))
9 ret
10#3
11# getbytearray:
12# getintarray:
13# getreloc:
14# getstrarray:
15# getstring:
16 addw 0(32(fp)),36(fp),40(fp)
17 movp 0(40(fp)),0(16(fp))
18 ret
19#6
20# putint:
21 addw 32(fp),36(fp),44(fp)
22 movw 40(fp),0(44(fp))
23 ret
24#9
25# putclass:
26# putmod:
27# putobj:
28# putptr:
29# putstring:
30 addw 32(fp),36(fp),44(fp)
31 movp 40(fp),0(44(fp))
32 ret
33#12
34# little_endian:
35#
36 movw $0,0(16(fp))
37 movb 0(mp),0(16(fp))
38 ret
39#15
40# jclnilmod:
41# sysnilmod:
42# arrayof:
43# bytearraytoJS:
44# intarraytoJS:
45# bigarraytoJS:
46# realarraytoJS:
47# ArraytoJS:
48# JStoObject:
49# ObjecttoJT:
50 movp 32(fp),0(16(fp))
51 ret
52#17
53# new:
54 mnewz 32(fp),36(fp),0(16(fp))
55 ret
56#19
57# getobjclass:
58 movp 0(32(fp)),36(fp)
59 movp 4(36(fp)),0(16(fp))
60 ret
61#22
62# modhash:
63# objhash:
64 andw 32(fp),4(mp),0(16(fp))
65 ret
66#24
67# getrtreloc:
68# getclassadt:
69# getadtstring:
70 addw 32(fp),36(fp),40(fp)
71 movp 0(40(fp)),0(16(fp))
72 ret
73#27
74# getabsint
75 movw 0(32(fp)),0(16(fp))
76 ret
77#29
78# mcall0:
79 mframe 32(fp),36(fp),40(fp)
80 lea 0(16(fp)),16(40(fp))
81 mcall 40(fp),36(fp),32(fp)
82 ret
83#33
84# mcall1:
85# mcalla:
86# mcallm:
87 mframe 32(fp),36(fp),44(fp)
88 movp 40(fp),32(44(fp))
89 lea 0(16(fp)),16(44(fp))
90 mcall 44(fp),36(fp),32(fp)
91 ret
92#38
93# getmd:
94 movp 0(32(fp)),0(16(fp))
95 ret
96#40
97# makeadt:
98 movp 32(fp),0(16(fp))
99 ret
100 desc $0,8,""
101 desc $1,48,"0080"
102 desc $2,48,"00a0"
103 desc $3,32,""
104 desc $4,40,"0080"
105 desc $5,40,"00c0"
106 desc $6,40,""
107 var @mp,8
108 word @mp+0,1
109 word @mp+4,2147483647
110 module JavaAssist
111 link 1,0,0x9af56bb1,"getint"
112 link 1,3,0x480b7ac3,"getbytearray"
113 link 1,3,0x55e7e9b3,"getintarray"
114 link 1,3,0xd7e85087,"getptr"
115 link 1,3,0xbb4256c7,"getreloc"
116 link 1,3,0x67808576,"getstrarray"
117 link 1,3,0xe6647e4a,"getstring"
118 link 1,6,0x2de68727,"putint"
119 link 2,9,0xaa939019,"putclass"
120 link 2,9,0x66b5c780,"putmod"
121 link 2,9,0xa780c055,"putobj"
122 link 2,9,0x43ec4524,"putptr"
123 link 2,9,0x46bbe09a,"putstring"
124 link 3,12,0x616977e8,"little_endian"
125 link 4,15,0xfbfab1de,"jclnilmod"
126 link 4,15,0xa0d4011e,"sysnilmod"
127 link 4,15,0xafae2abc,"arrayof"
128 link 4,15,0x79238ebb,"bytearraytoJS"
129 link 4,15,0x9dfa2ee1,"intarraytoJS"
130 link 4,15,0x1ebcdfdd,"bigarraytoJS"
131 link 4,15,0xc8107991,"realarraytoJS"
132 link 4,15,0x464a7f42,"ArraytoJS"
133 link 4,15,0x76cd0754,"JStoObject"
134 link 4,15,0xaaaaaaaa,"ObjecttoJT"
135 link 1,17,0xbb2da06c,"new"
136 link 5,19,0x4e5bdbec,"getobjclass"
137 link 4,22,0x4e5d43e7,"modhash"
138 link 4,22,0x646cd7d0,"objhash"
139 link 1,24,0xa1fa7e52,"getrtreloc"
140 link 1,24,0x9d2938ae,"getclassadt"
141 link 1,24,0x3911b054,"getadtstring"
142 link 6,27,0xe67bf126,"getabsint"
143 link 1,29,0x9af56bb1,"mcall0"
144 link 2,33,0xcbd2cc54,"mcall1"
145 link 2,33,0x69095c2,"mcalla"
146 link 2,33,0x1fe62f91,"mcallm"
147 link 4,38,0x21126c42,"getmd"
148 link 6,40,0x2d805d,"makeadt"
java/appl/java/javaassist.s+148−0
@@ -0,0 +1,148 @@
1#
2# Java Class Loader dis assist.
3#
4
5#0
6# getint:
7 addw 0(32(fp)),36(fp),40(fp)
8 movw 0(40(fp)),0(16(fp))
9 ret
10#3
11# getbytearray:
12# getintarray:
13# getreloc:
14# getstrarray:
15# getstring:
16 addw 0(32(fp)),36(fp),40(fp)
17 movp 0(40(fp)),0(16(fp))
18 ret
19#6
20# putint:
21 addw 32(fp),36(fp),44(fp)
22 movw 40(fp),0(44(fp))
23 ret
24#9
25# putclass:
26# putmod:
27# putobj:
28# putptr:
29# putstring:
30 addw 32(fp),36(fp),44(fp)
31 movp 40(fp),0(44(fp))
32 ret
33#12
34# little_endian:
35#
36 movw $0,0(16(fp))
37 movb 0(mp),0(16(fp))
38 ret
39#15
40# jclnilmod:
41# sysnilmod:
42# arrayof:
43# bytearraytoJS:
44# intarraytoJS:
45# bigarraytoJS:
46# realarraytoJS:
47# ArraytoJS:
48# JStoObject:
49# ObjecttoJT:
50 movp 32(fp),0(16(fp))
51 ret
52#17
53# new:
54 mnewz 32(fp),36(fp),0(16(fp))
55 ret
56#19
57# getobjclass:
58 movp 0(32(fp)),36(fp)
59 movp 4(36(fp)),0(16(fp))
60 ret
61#22
62# modhash:
63# objhash:
64 andw 32(fp),4(mp),0(16(fp))
65 ret
66#24
67# getrtreloc:
68# getclassadt:
69# getadtstring:
70 addw 32(fp),36(fp),40(fp)
71 movp 0(40(fp)),0(16(fp))
72 ret
73#27
74# getabsint
75 movw 0(32(fp)),0(16(fp))
76 ret
77#29
78# mcall0:
79 mframe 32(fp),36(fp),40(fp)
80 lea 0(16(fp)),16(40(fp))
81 mcall 40(fp),36(fp),32(fp)
82 ret
83#33
84# mcall1:
85# mcalla:
86# mcallm:
87 mframe 32(fp),36(fp),44(fp)
88 movp 40(fp),32(44(fp))
89 lea 0(16(fp)),16(44(fp))
90 mcall 44(fp),36(fp),32(fp)
91 ret
92#38
93# getmd:
94 movp 0(32(fp)),0(16(fp))
95 ret
96#40
97# makeadt:
98 movp 32(fp),0(16(fp))
99 ret
100 desc $0,8,""
101 desc $1,48,"0080"
102 desc $2,48,"00a0"
103 desc $3,32,""
104 desc $4,40,"0080"
105 desc $5,40,"00c0"
106 desc $6,40,""
107 var @mp,8
108 word @mp+0,1
109 word @mp+4,2147483647
110 module JavaAssist
111 link 1,0,0x9af56bb1,"getint"
112 link 1,3,0x480b7ac3,"getbytearray"
113 link 1,3,0x55e7e9b3,"getintarray"
114 link 1,3,0xd7e85087,"getptr"
115 link 1,3,0xbb4256c7,"getreloc"
116 link 1,3,0x67808576,"getstrarray"
117 link 1,3,0xe6647e4a,"getstring"
118 link 1,6,0x2de68727,"putint"
119 link 2,9,0x8f05c931,"putclass"
120 link 2,9,0x66b5c780,"putmod"
121 link 2,9,0x4f9a2948,"putobj"
122 link 2,9,0x43ec4524,"putptr"
123 link 2,9,0x46bbe09a,"putstring"
124 link 3,12,0x616977e8,"little_endian"
125 link 4,15,0x18138a11,"jclnilmod"
126 link 4,15,0x8cdb1059,"sysnilmod"
127 link 4,15,0x6d675ef6,"arrayof"
128 link 4,15,0x79238ebb,"bytearraytoJS"
129 link 4,15,0x9dfa2ee1,"intarraytoJS"
130 link 4,15,0x1ebcdfdd,"bigarraytoJS"
131 link 4,15,0xc8107991,"realarraytoJS"
132 link 4,15,0xfb08d2ba,"ArraytoJS"
133 link 4,15,0x76cd0754,"JStoObject"
134 link 4,15,0xae823704,"ObjecttoJT"
135 link 1,17,0xbb2da06c,"new"
136 link 5,19,0x7e47f344,"getobjclass"
137 link 4,22,0x4e5d43e7,"modhash"
138 link 4,22,0x646cd7d0,"objhash"
139 link 1,24,0xa1fa7e52,"getrtreloc"
140 link 1,24,0x45af8037,"getclassadt"
141 link 1,24,0x3911b054,"getadtstring"
142 link 6,27,0xe67bf126,"getabsint"
143 link 1,29,0x9af56bb1,"mcall0"
144 link 2,33,0xcbd2cc54,"mcall1"
145 link 2,33,0x2c8f47,"mcalla"
146 link 2,33,0x1fe62f91,"mcallm"
147 link 4,38,0x21126c42,"getmd"
148 link 6,40,0x2d805d,"makeadt"
java/appl/java/javaassistproto.b+261−0
@@ -0,0 +1,261 @@
1implement JavaAssist;
2
3include "sys.m";
4
5include "loader.m";
6include "classloader.m";
7
8i: int = 23;
9r: array of JavaClassLoader->Reloc;
10s: string = "23";
11c: ref JavaClassLoader->Class;
12p: ref Loader->Niladt;
13x: int;
14j: JavaAssist;
15
16plus(a, b: int): int
17{
18 return a + b;
19}
20
21getint(mod: Nilmod, index: int): int
22{
23 modref(mod);
24 x = index;
25 return plus(1, 3);
26}
27
28getbytearray(mod: Nilmod, index: int): array of byte
29{
30 modref(mod);
31 x = index;
32 return array[1] of byte;
33}
34
35getintarray(mod: Nilmod, index: int): array of int
36{
37 modref(mod);
38 x = index;
39 return array[1] of int;
40}
41
42getptr(mod: Nilmod, index: int): ref Loader->Niladt
43{
44 modref(mod);
45 x = index;
46 return p;
47}
48
49getreloc(mod: Nilmod, index: int): array of JavaClassLoader->Reloc
50{
51 modref(mod);
52 x = index;
53 return r;
54}
55
56getrtreloc(data: ref Loader->Niladt, index: int): array of JavaClassLoader->RTReloc
57{
58 p = data;
59 x = index;
60 return nil;
61}
62
63getclassadt(data: ref Loader->Niladt, index: int): ref JavaClassLoader->Class
64{
65 p = data;
66 x = index;
67 return nil;
68}
69
70getabsint(addr: int): int
71{
72 return 0;
73}
74
75getadtstring(data: ref Loader->Niladt, index: int): string
76{
77 p = data;
78 x = index;
79 return nil;
80}
81
82getstring(mod: Nilmod, index: int): string
83{
84 modref(mod);
85 x = index;
86 return s;
87}
88
89mnew(mod: Nilmod, index: int): ref Loader->Niladt
90{
91 modref(mod);
92 x = index;
93 return p;
94}
95
96putclass(data: ref Loader->Niladt, index: int, value: ref JavaClassLoader->Class)
97{
98 p = data;
99 x = index;
100 c = value;
101}
102
103putint(data: ref Loader->Niladt, index: int, value: int)
104{
105 p = data;
106 x = index;
107 x = value;
108}
109
110putmod(data: ref Loader->Niladt, index: int, value: Nilmod)
111{
112 p = data;
113 x = index;
114 modref(value);
115}
116
117putobj(data: ref Loader->Niladt, index: int, value: ref JavaClassLoader->ClassObject)
118{
119 p = data;
120 x = index;
121 o := value;
122}
123
124putptr(data: ref Loader->Niladt, index: int, value: ref Loader->Niladt)
125{
126 p = data;
127 x = index;
128 p = value;
129}
130
131putstring(data: ref Loader->Niladt, index: int, value: string)
132{
133 p = data;
134 x = index;
135 s = value;
136}
137
138modref(nil: Nilmod)
139{
140}
141
142modref2(nil, nil: Nilmod)
143{
144}
145
146little_endian(): int
147{
148 return 1;
149}
150
151jclnilmod(nil: JavaClassLoader): Nilmod
152{
153 return nil;
154}
155
156sysnilmod(nil: Sys): Nilmod
157{
158 return nil;
159}
160
161new(mod: Nilmod, index: int): ref JavaClassLoader->Object
162{
163 modref(mod);
164 x = index;
165 return nil;
166}
167
168getobjclass(j: ref JavaClassLoader->Object): ref JavaClassLoader->Class
169{
170 a := j.mod;
171 return nil;
172}
173
174modhash(mod: Nilmod): int
175{
176 modref(mod);
177 return i & 16r7FFFFFFF;
178}
179
180objhash(nil: ref JavaClassLoader->Object): int
181{
182 return 0;
183}
184
185mcall0(nil: Nilmod, nil: int): int
186{
187 return j->little_endian();
188}
189
190mcall1(nil: Nilmod, nil: int, nil: ref JavaClassLoader->Object): ref JavaClassLoader->Object
191{
192 return j->JStoObject(nil);
193}
194
195mcalla(nil: Nilmod, nil: int, nil: ref JavaClassLoader->Array): int
196{
197 return 0;
198}
199
200mcallm(nil: Nilmod, nil: int, arg: Nilmod): int
201{
202 return j->modhash(arg);
203}
204
205getstrarray(mod: Nilmod, index: int): array of string
206{
207 modref(mod);
208 x = index;
209 return array[1] of string;
210}
211
212arrayof(nil: ref JavaClassLoader->Object): ref JavaClassLoader->Array
213{
214 return nil;
215}
216
217bytearraytoJS(nil: array of byte): array of ref JavaClassLoader->JavaString
218{
219 return nil;
220}
221
222intarraytoJS(nil: array of int): array of ref JavaClassLoader->JavaString
223{
224 return nil;
225}
226
227bigarraytoJS(nil: array of big): array of ref JavaClassLoader->JavaString
228{
229 return nil;
230}
231
232realarraytoJS(nil: array of real): array of ref JavaClassLoader->JavaString
233{
234 return nil;
235}
236
237ArraytoJS(nil: ref JavaClassLoader->Array): ref JavaClassLoader->JavaString
238{
239 return nil;
240}
241
242JStoObject(nil: ref JavaClassLoader->JavaString): ref JavaClassLoader->Object
243{
244 return nil;
245}
246
247ObjecttoJT(nil: ref JavaClassLoader->Object): ref JavaClassLoader->JavaThrowable
248{
249 return nil;
250}
251
252getmd(nil: Nilmod): ref Loader->Niladt
253{
254 return nil;
255}
256
257makeadt(addr: int): ref Loader->Niladt
258{
259 x = addr;
260 return nil;
261}
java/appl/java/javanative.b+32−0
@@ -0,0 +1,32 @@
1implement JavaNative;
2
3include "jni.m";
4
5#
6# This is to isolate jni from the classloader.
7#
8
9init(sys: Sys, ld: Loader, jldr: JavaClassLoader, jass: JavaAssist): string
10{
11 j := load JNI JNI->PATH;
12 if (j == nil)
13 return sys->sprint("could not load %s: %r", JNI->PATH);
14 (m, s) := j->Self(sys, j);
15 if (s != nil)
16 return s;
17 l := ld->link(m);
18 if (l == nil)
19 return sys->sprint("link failed: %r");
20 n := len l;
21 t := -1;
22 for (i := 0; i < n; i++) {
23 if (l[i].name == "init")
24 t = i;
25 }
26 if (t == -1)
27 return sys->sprint("%s: not signed", JNI->PATH);
28 jldr->jninil = m;
29 jldr->jnisig = l[t].sig;
30 j->jinit(jldr, jass);
31 return nil;
32}
java/appl/java/javatrace.b+66−0
@@ -0,0 +1,66 @@
1implement JavaTrace;
2
3include "sys.m";
4 sys: Sys;
5
6include "loader.m";
7include "classloader.m";
8
9Class, Reloc: import JavaClassLoader;
10RELOC, CLASSREF, WORDZ: import JavaClassLoader;
11
12jassist: JavaAssist;
13
14 getint, getintarray, getptr, getreloc, getstring: import jassist;
15
16init(a: JavaAssist)
17{
18 if (sys == nil)
19 sys = load Sys Sys->PATH;
20 jassist = a;
21 level = -1;
22 outfd = sys->fildes(2);
23}
24
25trace(c: int, s: string)
26{
27 if (c <= level)
28 sys->fprint(outfd, "%s\n", s);
29}
30
31info(c: ref Class)
32{
33 sys->fprint(outfd, "Class: %s [%s]\n", c.name, c.file);
34 sys->fprint(outfd, "--- Relocs ---\n");
35 pr_relocs(getreloc(c.mod, RELOC));
36 i := CLASSREF;
37 while ((s := getstring(c.mod, i)) != nil) {
38 sys->fprint(outfd, "--- %s ---\n", s);
39 pr_relocs(getreloc(c.mod, i + WORDZ));
40 i += 2 * WORDZ;
41 }
42}
43
44pr_reloc(r: Reloc)
45{
46 f := r.field;
47 if (f == nil)
48 f = "@";
49 s := r.signature;
50 if (s == nil)
51 s = "@";
52 n: int;
53 if (r.patch == nil)
54 n = -1;
55 else
56 n = len r.patch;
57 sys->fprint(outfd, "%s %s %d %d\n", f, s, r.flags, n);
58}
59
60pr_relocs(r: array of JavaClassLoader->Reloc)
61{
62 n := len r;
63 for (i := 0; i < n; i++)
64 pr_reloc(r[i]);
65}
66
java/appl/java/jinfo.b+25−0
@@ -0,0 +1,25 @@
1implement JInfo;
2
3include "sys.m";
4include "loader.m";
5include "classloader.m";
6
7JInfo: module
8{
9 init: fn(ctxt: ref Draw->Context, argv: list of string);
10};
11
12sys: Sys;
13
14init(ctxt: ref Draw->Context, args: list of string)
15{
16 sys = load Sys Sys->PATH;
17 cl := load JavaClassLoader JavaClassLoader->PATH;
18 if (cl == nil) {
19 sys->print("could not load %s: %r\n", JavaClassLoader->PATH);
20 exit;
21 }
22 cl->init(cl, ctxt);
23 for (l := tl args; l != nil; l = tl l)
24 cl->info(hd l);
25}
java/appl/java/jni.b+1735−0
@@ -0,0 +1,1735 @@
1implement JNI;
2
3include "jni.m";
4include "hash.m";
5
6cast : Cast;
7low : Low;
8hash : Hash;
9
10JNI_VER := 16r00010001;
11
12#
13# use the access functions at the bottom to
14# retrive the values stored here. thease vars
15# are initialized as late as possible.
16#
17string_class, # class data for java.lang.String
18array_class, # for inferno.vm.Array
19class_class, # for java.lang.Class
20throwable_class, # for java.lang.Throwable
21thread_class # for java.lang.Thread
22 : ClassData;
23
24# cache the main thread group
25mainthreadgroup : JObject;
26
27GetVersion() : int
28{
29 return( JNI_VER );
30}
31
32
33FindClass( name : string ) : ClassData
34{
35 # return class data adt used by the Java Loader
36 # which stores all the class information.
37
38 # replace all ocurrences of "." with "/" in name
39 newname : string;
40 for(x:=0;x<len name; x++)
41 {
42 if (name[x]=='.')
43 newname[x] = '/';
44 else
45 newname[x] = name[x];
46 }
47 cl_data : ClassData;
48 if ( newname != nil && newname[0] == '[' ) {
49 class := LookupArrayClass(newname);
50 cl_data = class.class;
51 } else {
52 cl_data = jldr->loader(newname);
53 }
54 return cl_data;
55}
56
57getContext(): ref Draw->Context
58{
59 return(jldr->getcontext());
60}
61
62
63GetSuperclass( cl_data : ClassData ) : ClassData
64{
65 # we need the superclass of this
66 # class.
67 if ( cl_data == nil )
68 return(nil);
69 return( cl_data.super );
70}
71
72
73#
74# Return the java.lang.Class instance associated
75# with this instance.
76#
77GetObjectClass( obj : JObject ) : JClass
78{
79 if ( obj == nil )
80 return( nil );
81 # return the class of this obj
82 Object : import jldr;
83 cldata := obj.class();
84 if ( cldata == nil )
85 ThrowException( "java/lang/InternalError", "could not get objects class data" );
86 if ( cldata.name == "inferno/vm/Array" )
87 {
88 # handle arrays specially synthesize a unique class object
89 # for each type of array, and cache it for future use.
90 # this blows memory, but java requires a unique class object
91 # so two [[I's must result in the same class
92 return( ArrayClassObject( cast->ToJArray(obj) ) );
93 }
94 return( GetClassObject( cldata ) );
95}
96
97#
98# Return the internal Class Data information
99# associated with this instance
100#
101GetObjectClassData( obj : JObject ) : ClassData
102{
103 if ( obj == nil )
104 return( nil );
105 # return the class of this obj
106 Object : import jldr;
107 return( obj.class() );
108}
109
110
111
112#
113# return the associated java.lang.Class instance
114# associated with the given internal Class
115# Data.
116#
117GetClassObject( cl_data : ClassData ) : JClass
118{
119 if ( cl_data == nil )
120 return( nil );
121 # return the stored java.lang.Class instance
122 classobj := cl_data.this;
123
124 if ( classobj.mod == nil )
125 {
126 # first time, we used this object, we
127 # must patch the objects's 'mod' field.
128 classobj.mod = classclass().moddata;
129 }
130
131 return( classobj );
132}
133
134
135SetStaticField( class : ClassData, name : string, val : ref Value ) : int
136{
137 # get field info
138 Class : import jldr;
139
140 if ( (class == nil) || (val == nil) )
141 return( ERR );
142
143 field := class.findsfield( name );
144
145 if ( ! CheckField( field, val ) )
146 return( ERR );
147
148 # static data is located in the "module data"
149 # of the module wich corresponds to the class.
150 # we can get this from the class.mod field and
151 # then we must convert it to a "generic" Niladt
152 ptr := jassist->getmd( class.mod );
153
154 # check offset and compute absolute offset
155 if ( field.value >= class.staticsize )
156 return( ERR );
157
158 off := class.staticoffset + field.value;
159
160 return( SetField( ptr, off, val ) );
161}
162
163
164
165GetStaticField( class : ClassData, name : string, typsig : string ) : ref Value
166{
167 # get field info
168 Class : import jldr;
169
170 if ( class == nil )
171 return( nil );
172
173 field := class.findsfield( name );
174
175 if ( (field == nil) || (field.signature != typsig) )
176 return( nil );
177
178 # Static data is located in the "module data"
179 # of the module which corresponds to the class.
180 # We can get this from the class.mod field and
181 # then we must convert it to a "generic" Niladt
182 ptr := jassist->getmd( class.mod );
183
184 # check offset and compute absolute offset
185 if ( field.value >= class.staticsize )
186 return( nil );
187
188 off := class.staticoffset + field.value;
189
190 return( GetField( ptr, off, typsig[0] ) );
191}
192
193
194SetObjField( object : JObject, name : string, val : ref Value ) : int
195{
196 # get field info
197 Object : import jldr;
198 Class : import jldr;
199
200 if ( (object == nil) || (val == nil) )
201 return( ERR );
202
203 class := object.class();
204 field := class.findofield( name );
205
206 if ( ! CheckField( field, val ) )
207 return( ERR );
208
209 # convert the object to a "generic" Niladt
210 ptr := cast->Obj2Niladt(object);
211
212 # check offset and compute absolute offset
213 if ( field.value >= class.objectsize )
214 return( ERR );
215
216 SetField( ptr, field.value, val );
217
218 return( OK );
219}
220
221
222GetObjField( object : JObject, name : string, typsig : string ) : ref Value
223{
224 # get field info
225 Object : import jldr;
226 Class : import jldr;
227
228 if ( object == nil )
229 return( nil );
230
231 class := object.class();
232 field := class.findofield( name );
233
234 if ( (field == nil) || (field.signature != typsig) )
235 return( nil );
236
237 # convert the object to a "generic" Niladt
238 ptr := cast->Obj2Niladt(object);
239
240 # check offset and compute absolute offset
241 if ( field.value >= class.objectsize )
242 return( nil );
243
244 return( GetField( ptr, field.value, typsig[0] ) );
245}
246
247
248CallStatic( cldata : ClassData, meth : string, sig : string, args : array of ref Value ) : (ref Value,int)
249{
250 # lookup method first
251 (mod,idx) := FindMethod( cldata, meth, sig, METH_STATIC );
252
253 if ( mod == nil )
254 return( nil, CALLERR_NOMETHOD );
255
256 # check args against sig
257 (fctdesc, err) := CheckMethodArgs( sig, args );
258 if ( err )
259 return( nil, err );
260
261 retval : ref Value;
262 if ( fctdesc != nil )
263 {
264 # create a Value to hold function result
265 if ( fctdesc.class != nil )
266 retval = ref Value.TObject;
267 else
268 case fctdesc.prim
269 {
270 T_BOOLEAN => retval = ref Value.TBoolean;
271 T_CHAR => retval = ref Value.TChar;
272 T_FLOAT => retval = ref Value.TFloat;
273 T_DOUBLE => retval = ref Value.TDouble;
274 T_BYTE => retval = ref Value.TByte;
275 T_SHORT => retval = ref Value.TShort;
276 T_INT => retval = ref Value.TInt;
277 T_LONG => retval = ref Value.TLong;
278 * => return( nil, ERR );
279 }
280 }
281
282 low->CallMethod( mod, idx, nil, args, retval );
283 return( retval, OK );
284
285}
286
287CallMethod( obj : JObject, meth : string, sig : string, args : array of ref Value ) : (ref Value,int)
288{
289 # lookup method first
290 cldata := GetObjectClassData(obj);
291 (mod,idx) := FindMethod( cldata, meth, sig, (METH_VIRTUAL|METH_PRIVATE|METH_INIT) );
292
293 if ( mod == nil )
294 return( nil, CALLERR_NOMETHOD );
295
296 # check args against sig -- sig can be assumed to be a
297 # valid meth sig, since a matching meth was found above
298 (fctdesc, err) := CheckMethodArgs( sig, args );
299 if ( err )
300 return( nil, err );
301
302 retval : ref Value;
303 if ( fctdesc != nil )
304 {
305 # create a Value to hold function result
306 if ( fctdesc.class != nil )
307 retval = ref Value.TObject;
308 else
309 case fctdesc.prim
310 {
311 T_BOOLEAN => retval = ref Value.TBoolean;
312 T_CHAR => retval = ref Value.TChar;
313 T_FLOAT => retval = ref Value.TFloat;
314 T_DOUBLE => retval = ref Value.TDouble;
315 T_BYTE => retval = ref Value.TByte;
316 T_SHORT => retval = ref Value.TShort;
317 T_INT => retval = ref Value.TInt;
318 T_LONG => retval = ref Value.TLong;
319 * => return( nil, ERR );
320 }
321 }
322
323 low->CallMethod( mod, idx, obj, args, retval );
324 return( retval, OK );
325}
326
327
328LowCall( mod : Nilmod, idx : int, this : JNI->JObject, args : array of ref JNI->Value, retval : ref JNI->Value )
329{
330 low->CallMethod( mod, idx, this, args, retval );
331}
332
333
334# return modifiers
335
336GetClassFlags(jcl : JClass) : int
337{
338 if ( jcl == nil )
339 return 0;
340 return jcl.class.flags;
341}
342
343GetFieldFlags(jcl : JClass, namesig : string) : int
344{
345 Class : import jldr;
346
347 if ( jcl == nil || len namesig == 0 )
348 return 0;
349 (name, sig) := str->splitl(namesig, " ");
350 if ( len sig == 0 )
351 return 0;
352 sig = sig[1:];
353
354 field := jcl.class.findsfield(name);
355 if ( field != nil && field.signature == sig )
356 return field.flags;
357
358 object := jcl.class.objectdata;
359 super := GetSuperclass(jcl.class);
360 while ( object != nil && object != super.objectdata ) {
361 field = hd object;
362 if ( field.field == name && field.signature == sig )
363 return field.flags;
364 object = tl object;
365 }
366 return 0;
367}
368
369GetMethodFlags(jcl : JClass, namesig : string) : int
370{
371 Class : import jldr;
372
373 if ( jcl == nil || len namesig == 0 )
374 return 0;
375 (name, sig) := str->splitl(namesig, " ");
376 if ( len sig == 0 )
377 return 0;
378 sig = sig[1:];
379
380 method := jcl.class.findsmethod(name, sig);
381 if ( method != nil )
382 return method.flags;
383
384 method = jcl.class.findpmethod(name, sig);
385 if ( method != nil )
386 return method.flags;
387
388 method = jcl.class.findimethod(sig);
389 if ( method != nil )
390 return method.flags;
391
392 vindex := jcl.class.findvmethod(name, sig);
393 if ( vindex > -1 ) {
394 vmethod := jcl.class.virtualmethods[vindex];
395 if ( vmethod.class == jcl.class )
396 return vmethod.field.flags;
397 }
398 return 0;
399}
400
401# Return array of names combined with signatures.
402
403GetFieldSignatures(jcl : JClass, excl : int) : JArrayJString
404{
405 Class : import jldr;
406
407 jary := array[0] of string;
408 if ( jcl == nil )
409 return MkAString(jary);
410 class := jcl.class;
411 static := class.staticdata;
412 object := class.objectdata;
413 jary = array[len static + len object] of string;
414 l := len static;
415 i := 0;
416 for ( j := 0; j < l; j++ ) {
417 field := static[j];
418 tmpf := field.flags & ACC_WRITTEN_FLAGS;
419 if ( (tmpf & excl) != 0 )
420 continue;
421 jary[i++] = field.field + " " + field.signature;
422 }
423 for ( ; object != nil && object != class.super.objectdata; object = tl object ) {
424 field := hd object;
425 tmpf := field.flags & ACC_WRITTEN_FLAGS;
426 if ( (tmpf & excl) != 0 )
427 continue;
428 jary[i++] = field.field + " " + field.signature;
429 }
430 if ( i < len jary ) {
431 newj := array[i] of string;
432 for ( j = 0; j < i; j++ )
433 newj[j] = jary[j];
434 jary = newj;
435 }
436 return MkAString(jary);
437}
438
439GetMethodSignatures(jcl : JClass, excl : int) : JArrayJString
440{
441 Class : import jldr;
442
443 jary := array[0] of string;
444 if ( jcl == nil )
445 return MkAString(jary);
446 class := jcl.class;
447 static := class.staticmethods;
448 virtual := class.virtualmethods;
449 private := class.privatemethods;
450 construct := class.initmethods;
451 l := len static;
452 jary = array[l + len virtual + len private + len construct + 1] of string;
453
454 i := 0;
455 if ( class.classinit != nil )
456 jary[i++] = class.classinit.field + " " + class.classinit.signature;
457
458 for ( j := 0; j < l; j++ ) {
459 method := static[j];
460 tmpf := method.flags & ACC_WRITTEN_FLAGS;
461 if ( (tmpf & excl) != 0 )
462 continue;
463 jary[i++] = method.field + " " + method.signature;
464 }
465 l = len virtual;
466 for ( j = 0; j < l; j++ ) {
467 vmethod := virtual[j];
468 if ( vmethod.class != class )
469 continue;
470 method := vmethod.field;
471 tmpf := method.flags & ACC_WRITTEN_FLAGS;
472 if ( (tmpf & excl) != 0 )
473 continue;
474 jary[i++] = method.field + " " + method.signature;
475 }
476 l = len private;
477 for ( j = 0; j < l; j++ ) {
478 method := private[j];
479 tmpf := method.flags & ACC_WRITTEN_FLAGS;
480 if ( (tmpf & excl) != 0 )
481 continue;
482 jary[i++] = method.field + " " + method.signature;
483 }
484 l = len construct;
485 for ( j = 0; j < l; j++ ) {
486 method := construct[j];
487 tmpf := method.flags & ACC_WRITTEN_FLAGS;
488 if ( (tmpf & excl) != 0 )
489 continue;
490 jary[i++] = method.field + " " + method.signature;
491 }
492 if ( i < len jary ) {
493 newj := array[i] of string;
494 for ( j = 0; j < i; j++ )
495 newj[j] = jary[j];
496 jary = newj;
497 }
498 return MkAString(jary);
499}
500
501# make a temporary JArray for IsAssignable()
502tmpJArray( c : JClass ) : JArray
503{
504 desc := JSigToDescriptor( c.aryname );
505 return JArray(arrayclass().moddata, nil, desc.dims, desc.class, desc.prim);
506}
507
508# can src be assigned to dst?
509IsAssignable( src, dst : JClass ) : JBoolean
510{
511 if ( (src==nil) || (dst==nil) )
512 return( FALSE );
513
514 if ( dst.aryname != nil ) {
515 if ( src.aryname == nil )
516 return( FALSE );
517 jasrc := tmpJArray(src);
518 jadst := tmpJArray(dst);
519 if ( jadst.class == nil )
520 return jldr->pinstanceof(jasrc, jadst.primitive, jadst.dims);
521 else
522 return jldr->ainstanceof(jasrc, jadst.class, jadst.dims);
523 }
524
525 return( jldr->compatclass(src.class, dst.class) );
526}
527
528IsInstanceOf( obj : JObject, cl_data : ClassData ) : JBoolean
529{
530 if ( cl_data == nil )
531 return( FALSE );
532 return( jldr->instanceof( obj, cl_data ) );
533}
534
535
536ArrayInstanceOf( ary : JArray, desc : ref Descriptor ) : JBoolean
537{
538 if ( (ary != nil) && (desc != nil) )
539 {
540 # is it a array of ref or array of primitive
541 if ( ary.class != nil )
542 return( jldr->ainstanceof(ary, desc.class, desc.dims) );
543 else
544 return( jldr->pinstanceof(ary, desc.prim, desc.dims) );
545 }
546 # not an array or not expected instance
547 return( FALSE );
548}
549
550
551IsArray( obj : JObject ) : JBoolean
552{
553 if ( obj == nil )
554 return( FALSE );
555
556 return( IsInstanceOf( obj, arrayclass() ) );
557}
558
559
560# are obj1 and obj2 the same object
561IsSameObject( obj1, obj2 : JObject ) : JBoolean
562{
563 return( obj1 == obj2 );
564}
565
566# Return T_BOOLEAN..T_LONG, T_VOID or 0 according to whether c represents
567# a Java primitive type. If ignorevoid != 0, return 0 for 'void';
568# refection code generally wants to ignore void.
569
570PrimitiveIndex(c : JClass, ignorevoid : int) : int
571{
572 clname := c.class.name; # name of class
573 prefix : con "inferno/vm/"; # will begin with this if primitive
574 prefix_len : con len prefix;
575 ret := 0;
576 if ( len clname > prefix_len && prefix == clname[:prefix_len] )
577 {
578 # check rest of name
579 suffix := clname[prefix_len:];
580 case ( suffix )
581 {
582 # primitive class names
583 "boolean_p" =>
584 ret = T_BOOLEAN;
585 "byte_p" =>
586 ret = T_BYTE;
587 "char_p" =>
588 ret = T_CHAR;
589 "short_p" =>
590 ret = T_SHORT;
591 "int_p" =>
592 ret = T_INT;
593 "long_p" =>
594 ret = T_LONG;
595 "float_p" =>
596 ret = T_FLOAT;
597 "double_p" =>
598 ret = T_DOUBLE;
599 "void_p" =>
600 if ( ! ignorevoid )
601 ret = T_VOID;
602 }
603 }
604 return ret;
605}
606
607#
608# throw the object
609#
610Throw( throwable : JObject )
611{
612 if ( jldr->instanceof( throwable, throwableclass() ) )
613 jldr->throw( throwable );
614
615 FatalError( "JNI Error: attempt to throw a non-throwable object" );
616}
617
618
619#
620# create an instance of the throwable class 'name'
621# fill it with 'msg' and throw it
622#
623ThrowException( name : string, msg : string )
624{
625 class := FindClass( name );
626 if ( (class != nil) && (jldr->compatclass( class, throwableclass() )) )
627 {
628 obj := AllocObject( class );
629
630 # put msg into the object and throw the object
631 args := array [1] of ref Value;
632 args[0] = ref Value.TObject(cast->FromJString(NewString(msg)));
633 #if ( SetObjField( obj, "detailMessage", val ) == OK )
634 (val,err) := CallMethod( obj, "<init>", "(Ljava/lang/String;)V", args );
635
636 # throw regardless of constructor call
637 jldr->throw( obj );
638 }
639
640 FatalError( sys->sprint("JNI Error: while throwing an Exception[%s:%s]",
641 name, msg ) );
642}
643
644#
645# return a Java Exception
646#
647JavaException( ex : string ) : JObject
648{
649 # grab any Java object currently being thrown.
650 jthrow := jldr->getthreaddata().culprit;
651
652 # if ex is nil then the caller is just querying for
653 # the current java throwable so just return 'jthrow'
654
655 # if jthrow is non-nil then return it and ignore ex
656
657 if ( (jthrow != nil) || (ex == nil) )
658 return( jthrow );
659
660 # if no java throwable but we have a non-nil ex then
661 # convert the Inferno exception to an appropriate Java ex.
662 # this will always produce a Java throwable object
663 return( jldr->sysexception(ex) );
664
665}
666
667#
668# clear the exception of the current thread.
669#
670ExceptionClear()
671{
672 thd := jldr->getthreaddata();
673 thd.culprit = nil;
674}
675
676
677
678# allocate a new instance of the class; no constructor called
679AllocObject( cl_data : ClassData ) : JObject
680{
681 Class : import jldr;
682
683 if ( cl_data == nil )
684 return( nil );
685
686 obj := jassist->new(cl_data.mod, cl_data.objtype);
687 obj.mod = cl_data.moddata;
688 return( obj );
689}
690
691
692# allocate a new instance of the class; call default constructor
693NewObject( cl_data : ClassData ) : JObject
694{
695 Class : import jldr;
696
697 if ( cl_data == nil )
698 return( nil );
699
700 return( cl_data.new() );
701}
702
703
704#
705# Create an instance of java.lang.Class which
706# represents a specific java class. This
707# instance contains a ptr to its own class
708# information, as well as a ptr to the class
709# it represents.
710#
711NewClassObject( targ_class : ClassData ) : JClass
712{
713 # create an instance of java.lang.Class
714 cl_data := classclass();
715 return( JClass(classclass().moddata, targ_class, nil) );
716}
717
718
719NewString( val : string ) : JString
720{
721 return( JString( stringclass().moddata, val ) );
722}
723
724#
725# just like above but return as a
726# JObject type, rather then JString
727#
728NewStringObject( val : string ) : JObject
729{
730 # create a java string instance
731 jstr := JString( stringclass().moddata, val );
732
733 return( cast->FromJString(jstr) );
734}
735
736# duplicate the object
737DupObject( src : JObject ) : JObject
738{
739 Object : import jldr;
740 Class : import jldr;
741 newobj : JObject;
742
743 if ( src == nil )
744 return( nil );
745
746 class := src.class();
747 if ( class != arrayclass() )
748 {
749 # safe-copy memory contents
750 # this calls a j2d generated <clone> method
751 newobj = class.clone( src );
752 }
753 else
754 {
755 # handle arrays
756
757 # create object wrapper fro the array
758 newobj = AllocObject( class );
759 asrc := cast->ToJArray(src);
760 adst := cast->ToJArray(newobj);
761 # copy array description
762 adst.dims = asrc.dims;
763 adst.class = asrc.class;
764 adst.primitive = asrc.primitive;
765
766 # copy array data
767
768 # first create the appropriate "kind" of array
769
770 length := len asrc.holder;
771 etype := asrc.primitive;
772
773 if ( etype == 0 || asrc.dims > 1 )
774 adst.holder = array[length] of JString; #any reference type
775 else
776 {
777 case asrc.primitive
778 {
779 T_BOOLEAN or T_BYTE =>
780 adst.holder = jassist->bytearraytoJS(array[length] of byte);
781 T_CHAR or T_SHORT or T_INT =>
782 adst.holder = jassist->intarraytoJS(array[length] of int);
783 T_LONG =>
784 adst.holder = jassist->bigarraytoJS(array[length] of big);
785 T_FLOAT or T_DOUBLE =>
786 adst.holder = jassist->realarraytoJS(array[length] of real);
787 }
788 }
789
790 # copy the contents
791 adst.holder[:] = asrc.holder[:];
792
793 }
794 return( newobj );
795}
796
797
798IdentityHash( obj : JObject ) : int
799{
800 return( jassist->objhash(obj) );
801}
802
803
804GetArrayLength ( ary : JArray ) : int
805{
806 return( len ary.holder );
807}
808
809#
810# grab the lock associated with the object
811#
812MonitorEnter( obj : JObject )
813{
814 if ( obj == nil )
815 ThrowException( "java.lang.NullPointerException", "JNI Error: nil passed to MonitorEnter()" );
816
817 jldr->monitorenter( obj );
818}
819
820
821#
822# release the lock associated with the object
823#
824MonitorExit( obj :JObject )
825{
826 if ( obj == nil )
827 ThrowException( "java.lang.NullPointerException", "JNI Error: nil passed to MonitorExit()" );
828 jldr->monitorexit( obj );
829}
830
831#
832# Notify any waiters
833# all==1 => notify all
834#
835MonitorLockNotify( obj : JObject, all : int )
836{
837 if ( obj == nil )
838 ThrowException( "java.lang.NullPointerException", "JNI Error: nil passed to MonitorNotify()" );
839 jldr->monitorenter(obj);
840 jldr->monitornotify(obj,(all==1));
841 jldr->monitorexit(obj);
842}
843
844#
845# Same as above but don't do the monitor-enter/exit
846#
847MonitorNotify( obj : JObject, all : int )
848{
849 if ( obj == nil )
850 ThrowException( "java.lang.NullPointerException", "JNI Error: nil passed to MonitorNotify()" );
851 jldr->monitornotify(obj,(all==1));
852}
853
854#
855# attach/detach a Limbo thread
856#
857
858thdcnt := 0; #use to number threads
859
860AttachCurrentThread( arg : ref ThreadAttachArgs ) : int
861{
862 # grab/create a thread struct for this thread
863 thd := jldr->getthreaddata();
864
865 # if no java obj then create and install one
866 if ( thd.this == nil )
867 {
868 jobj := AllocObject( threadclass() );
869 if (jobj == nil )
870 return( -1 );
871 jthd := cast->JObjToJThd(jobj);
872 jthd.PrivateInfo = thd;
873 jthd.daemon = arg.daemon;
874 if ( arg.daemon == byte 1)
875 jldr->daemonize();
876
877 if ( arg.group == nil )
878 jthd.group = MainThreadGroup();
879 else
880 jthd.group = arg.group;
881
882 thdname : string;
883 if ( arg.name == nil )
884 thdname = "nativethd-"+ string thdcnt++;
885 else
886 thdname = arg.name;
887 jthd.name = StringToAChar( thdname );
888
889 # set rest to defaults
890 jthd.priority = 5; #fake; not used
891 jthd.was_interrupted = byte 0;
892 jthd.stillborn = byte 0;
893 jthd.target = nil;
894
895 # put thread object into thread data struct
896 thd.this = jobj;
897 }
898
899 return( 0 ); #no error
900}
901
902
903DetachCurrentThread() : int
904{
905 # get the low-thread struct
906 thd := jldr->getthreaddata();
907
908 jobj := thd.this; # grab the java Thread obj
909
910 if ( jobj != nil )
911 {
912 #notify all waiters
913 MonitorLockNotify(jobj,1);
914
915 # do some cleanup -- break circularity
916 jthd := cast->JObjToJThd(jobj);
917 jthd.PrivateInfo = nil;
918 thd.this = nil;
919 }
920
921 # remove calling thd from the internal list
922 jldr->delthreaddata();
923
924 return( 0 );
925}
926
927
928MainThreadGroup() : JObject
929{
930 if ( mainthreadgroup == nil )
931 {
932 thd_grp_cl := FindClass( "java.lang.ThreadGroup" );
933 if ( thd_grp_cl == nil )
934 FatalError( "could not obtain ThreadGroup class" );
935
936 mainthreadgroup = NewObject( thd_grp_cl );
937 if ( mainthreadgroup == nil )
938 FatalError( "could not create root threadgroup" );
939 }
940
941 return( mainthreadgroup );
942}
943
944
945FatalError( msg : string )
946{
947 ThrowException( "java/lang/InternalError", msg );
948}
949
950
951InitError( msg : string )
952{
953 # prepend string to insure msg is not nil
954 # nil passed to error forces reporting which
955 # we will leave to the loader to determine
956 jldr->error( "JNI: "+ msg );
957}
958
959
960#
961# functions to make "java" arrays from limbo arrays
962#
963MkAByte( bary : array of byte ) : JArrayB
964{
965 # create Array object
966 cl_data := arrayclass();
967 jbary := cast->ToJArrayB( AllocObject( cl_data ) );
968
969 jbary.ary = bary;
970 jbary.dims = 1;
971 jbary.class = nil;
972 jbary.primitive = T_BYTE;
973
974 return( jbary );
975}
976
977MkAChar( ary : array of int ) : JArrayC
978{
979 # create Array object
980 jary := cast->ToJArrayC( AllocObject( arrayclass() ) );
981
982 jary.ary = ary;
983 jary.dims = 1;
984 jary.class = nil;
985 jary.primitive = T_CHAR;
986
987 return( jary );
988}
989
990MkAShort( ary : array of int ) : JArrayS
991{
992 # create Array object
993 jary := cast->ToJArrayC( AllocObject( arrayclass() ) );
994
995 jary.ary = ary;
996 jary.dims = 1;
997 jary.class = nil;
998 jary.primitive = T_SHORT;
999
1000 return( jary );
1001}
1002
1003MkAInt( iary : array of int ) : JArrayI
1004{
1005 # create Array object
1006 jiary := cast->ToJArrayI( AllocObject( arrayclass() ) );
1007
1008 jiary.ary = iary;
1009 jiary.dims = 1;
1010 jiary.class = nil;
1011 jiary.primitive = T_INT;
1012
1013 return( jiary );
1014}
1015
1016MkALong( ary : array of big ) : JArrayJ
1017{
1018 # create Array object
1019 jary := cast->ToJArrayJ( AllocObject( arrayclass() ) );
1020
1021 jary.ary = ary;
1022 jary.dims = 1;
1023 jary.class = nil;
1024 jary.primitive = T_LONG;
1025
1026 return( jary );
1027}
1028
1029MkAFloat( ary : array of real ) : JArrayF
1030{
1031 # create Array object
1032 jary := cast->ToJArrayF( AllocObject( arrayclass() ) );
1033
1034 jary.ary = ary;
1035 jary.dims = 1;
1036 jary.class = nil;
1037 jary.primitive = T_FLOAT;
1038
1039 return( jary );
1040}
1041
1042MkADouble( ary : array of real ) : JArrayD
1043{
1044 # create Array object
1045 jary := cast->ToJArrayD( AllocObject( arrayclass() ) );
1046
1047 jary.ary = ary;
1048 jary.dims = 1;
1049 jary.class = nil;
1050 jary.primitive = T_DOUBLE;
1051
1052 return( jary );
1053}
1054
1055MkABoolean( ary : array of byte ) : JArrayZ
1056{
1057 # create Array object
1058 jary := cast->ToJArrayZ( AllocObject( arrayclass() ) );
1059
1060 jary.ary = ary;
1061 jary.dims = 1;
1062 jary.class = nil;
1063 jary.primitive = T_BOOLEAN;
1064
1065 return( jary );
1066}
1067
1068
1069MkAString( sary : array of string ) : JArrayJString
1070{
1071 # create Array object
1072 jstrary := cast->ToJArrayJString( AllocObject( arrayclass() ) );
1073
1074 # fill it with the real dis array
1075 jstrary.ary = array[len sary] of JString;
1076
1077 # now fill the dis array
1078 for( x:=0; x < len sary; x++ )
1079 jstrary.ary[x] = NewString( sary[x] );
1080
1081 jstrary.dims = 1;
1082 jstrary.class = stringclass();
1083 jstrary.primitive = 0;
1084
1085 return( jstrary );
1086}
1087
1088MkAObject( ary : array of JObject ) : JArrayJObject
1089{
1090 # create Array object
1091 jary := cast->ToJArrayJObject( AllocObject( arrayclass() ) );
1092
1093 jary.ary = ary;
1094 jary.dims = 1;
1095 jary.class = stringclass();
1096 if ( len ary > 0 )
1097 jary.class = GetObjectClassData(ary[0]);
1098 jary.primitive = 0;
1099
1100 return( jary );
1101}
1102
1103
1104MkAJArray( jaary : array of JArray ) : JArray
1105{
1106 # create Array object
1107 jary := cast->ToJArray( AllocObject( arrayclass() ) );
1108
1109 # fill it with the real dis array
1110 jary.holder = cast->JArrayToHolder( jaary );
1111 jary.dims = jaary[0].dims + 1;
1112 jary.class = arrayclass();
1113 jary.primitive = 0;
1114 return( jary );
1115}
1116
1117
1118MkAAByte( aabyte : array of array of byte ) : JArray
1119{
1120 # create array of JArray
1121 contents := array[len aabyte] of JArray;
1122
1123 # fill contents with converted byte array
1124 for( x:=0; x<len aabyte; x++ )
1125 {
1126 contents[x] = cast->ByteToJArray( MkAByte( aabyte[x] ) );
1127 }
1128
1129 # wrap up in an array of its own and return
1130 return( MkAJArray( contents ) );
1131}
1132
1133MkAAInt( aary : array of array of int ) : JArray
1134{
1135 # create array of JArray
1136 contents := array[len aary] of JArray;
1137
1138 # fill contents with converted byte array
1139 for( x:=0; x<len aary; x++ )
1140 {
1141 contents[x] = cast->IntToJArray( MkAInt( aary[x] ) );
1142 }
1143
1144 # wrap up in an array of its own and return
1145 return( MkAJArray( contents ) );
1146}
1147
1148
1149#
1150# Value adt
1151#
1152
1153Value.Boolean( this : self ref Value ) : JBoolean
1154{
1155 pick sw := this
1156 {
1157 TBoolean => return( sw.jboolean );
1158 * => FatalError( "Value: bad pick access" );
1159 }
1160 return( 0);
1161}
1162
1163Value.Byte( this : self ref Value ) : int
1164{
1165 pick sw := this
1166 {
1167 TByte => return( sw.jbyte );
1168 * => FatalError( "Value: bad pick access" );
1169 }
1170 return(0);
1171}
1172
1173Value.Short( this : self ref Value ) : int
1174{
1175 pick sw := this
1176 {
1177 TShort => return( sw.jshort );
1178 * => FatalError( "Value: bad pick access" );
1179 }
1180 return(0);
1181}
1182
1183Value.Int( this : self ref Value ) : int
1184{
1185 pick sw := this
1186 {
1187 TInt => return( sw.jint );
1188 * => FatalError( "Value: bad pick access" );
1189 }
1190 return(0);
1191}
1192
1193Value.Long( this : self ref Value ) : big
1194{
1195 pick sw := this
1196 {
1197 TLong => return( sw.jlong );
1198 * => FatalError( "Value: bad pick access" );
1199 }
1200 return(big 0);
1201}
1202
1203Value.Float( this : self ref Value ) : real
1204{
1205 pick sw := this
1206 {
1207 TFloat => return( sw.jfloat );
1208 * => FatalError( "Value: bad pick access" );
1209 }
1210 return(0.0);
1211}
1212
1213Value.Double( this : self ref Value ) : real
1214{
1215 pick sw := this
1216 {
1217 TDouble => return( sw.jdouble );
1218 * => FatalError( "Value: bad pick access" );
1219 }
1220 return(0.0);
1221}
1222
1223Value.Char( this : self ref Value ) : int
1224{
1225 pick sw := this
1226 {
1227 TChar => return( sw.jchar );
1228 * => FatalError( "Value: bad pick access" );
1229 }
1230 return(0);
1231}
1232
1233Value.Object( this : self ref Value ) : JObject
1234{
1235 pick sw := this
1236 {
1237 TObject => return( sw.jobj);
1238 * => FatalError( "Value: bad pick access" );
1239 }
1240 return(nil);
1241}
1242
1243
1244#
1245# Take a "java vm" signagure string and
1246# return a structure which describes the
1247# type represented by the sig.
1248# SEE: declaration of 'Descriptor'
1249#
1250JSigToDescriptor( sig : string ) : ref Descriptor
1251{
1252 desc := ref Descriptor(nil,0,0,nil,nil);
1253 siglen := len sig;
1254 if ( sig[0] == '(' ) # method
1255 {
1256 methsig := sig[1:];
1257 sigsize := 2; #account for '(' and ')' in method sig
1258 while ( methsig[0] != ')' )
1259 {
1260 # get descriptor for current param
1261 paramdesc := JSigToDescriptor(methsig);
1262 if ( paramdesc == nil )
1263 return( nil ); #error
1264
1265 # add the param to the list
1266 desc.params = paramdesc :: desc.params;
1267
1268 # advance to next param
1269 tmp := len paramdesc.sig;
1270 if ( tmp >= len methsig )
1271 return( nil ); #error in signature
1272 methsig = methsig[tmp:];
1273 sigsize += tmp;
1274 }
1275
1276 if ( len methsig <= 1 )
1277 return( nil ); #error expected a return type
1278
1279 rettyp := JSigToDescriptor( methsig[1:] );
1280 if ( rettyp == nil )
1281 return( nil ); #error
1282 # save the return type information in the current desc
1283 desc.class = rettyp.class;
1284 desc.prim = rettyp.prim;
1285 desc.dims = rettyp.dims;
1286
1287 # set sig for method
1288 desc.sig = sig[0:sigsize+len rettyp.sig];
1289
1290 }
1291 else if ( sig[0] == 'L' ) # object (non-array)
1292 {
1293 # find ';' indicating end of class name or
1294 # the end of the str
1295 for( last := 1; last<siglen; last++ )
1296 if ( sig[last] == ';' )
1297 break;
1298 desc.class = FindClass( sig[1:last] );
1299 desc.sig = sig[:last] + ";";
1300 }
1301 else if ( sig[0] == '[' ) # array
1302 {
1303 # count dimensions
1304 last := siglen;
1305 for(x:=1; x<last; x++)
1306 {
1307 if ( sig[x] != '[' )
1308 break;
1309 }
1310 if ( x >= last )
1311 return nil; #error expect at least 1 char following ['s
1312 desc = JSigToDescriptor( sig[x:] );
1313 if ( desc == nil )
1314 return nil;
1315
1316 # else just set dimensions and sig
1317 desc.dims = x;
1318 tmp := x + len desc.sig;
1319 desc.sig = sig[:tmp];
1320 }
1321 else # primitive type
1322 {
1323 case sig[0]
1324 {
1325 'B' => desc.prim = T_BYTE;
1326 'Z' => desc.prim = T_BOOLEAN;
1327 'S' => desc.prim = T_SHORT;
1328 'C' => desc.prim = T_CHAR;
1329 'I' => desc.prim = T_INT;
1330 'J' => desc.prim = T_LONG;
1331 'F' => desc.prim = T_FLOAT;
1332 'D' => desc.prim = T_DOUBLE;
1333 'V' => desc.prim = T_VOID;
1334 * => return( nil ); #unknown signature
1335 }
1336 desc.sig = sig[0:1];
1337 }
1338
1339 return desc;
1340}
1341
1342
1343IsNative( flags : int ) : int
1344{
1345 return( flags & ACC_NATIVE );
1346}
1347
1348
1349#
1350# Search for a method. Flags indicates which methods to
1351# search for, and we may try to find in more than one
1352# group, so cascade down.
1353#
1354FindMethod( class : ClassData, name : string, sig : string, flags : int ) : (Nilmod,int)
1355{
1356 Class : import jldr;
1357
1358 if ( class == nil )
1359 return( nil, 0 );
1360
1361 if ( flags & METH_PRIVATE )
1362 {
1363 f := class.findpmethod( name, sig );
1364 if ( f != nil )
1365 {
1366 mod : Nilmod;
1367 if ( IsNative(f.flags) )
1368 mod = class.native;
1369 else
1370 mod = class.mod;
1371
1372 return ( mod, f.value );
1373 }
1374 }
1375
1376 if ( flags & METH_VIRTUAL )
1377 {
1378 idx := class.findvmethod( name, sig );
1379 if ( idx != -1 )
1380 {
1381 m := class.virtualmethods[idx];
1382 return( m.class.mod, m.field.value );
1383 }
1384 }
1385
1386 if ( flags & METH_STATIC )
1387 {
1388 f := class.findsmethod( name, sig );
1389 if ( f != nil )
1390 {
1391 mod : Nilmod;
1392 if ( IsNative(f.flags) )
1393 mod = class.native;
1394 else
1395 mod = class.mod;
1396
1397 return ( mod, f.value );
1398 }
1399 }
1400
1401 if ( flags & METH_INIT )
1402 {
1403 f := class.findimethod( sig );
1404 if ( f != nil )
1405 {
1406 mod := class.mod; #constructors can't be native
1407 return ( mod, f.value );
1408 }
1409 }
1410
1411 return (nil,0);
1412}
1413
1414CastMod() : Cast
1415{
1416 return( cast );
1417}
1418
1419LowMod() : Low
1420{
1421 return( low );
1422}
1423
1424########## functions called by JavaClassLoader
1425
1426jinit( ldr : JavaClassLoader, jass : JavaAssist )
1427{
1428 jldr = ldr;
1429 jassist = jass;
1430}
1431
1432Self(s: Sys, j: JNI): (Nilmod, string)
1433{
1434 sys = s;
1435 math = load Math Math->PATH;
1436 if ( math == nil )
1437 return (nil, sys->sprint("could not load %s: %r", Math->PATH));
1438
1439 str = load String String->PATH;
1440 if ( str == nil )
1441 return (nil, sys->sprint("could not load %s: %r", String->PATH));
1442
1443 cast = load Cast Cast->PATH;
1444 if (cast == nil)
1445 return (nil, sys->sprint("could not load %s: %r", Cast->PATH));
1446 low = load Low Low->PATH;
1447 if (low == nil)
1448 return (nil, sys->sprint("could not load %s: %r", Low->PATH));
1449 return (cast->JNI2Nilmod(j), nil);
1450}
1451
1452init(nil: JNI)
1453{
1454}
1455
1456########## private functions
1457
1458#
1459# private fct to create an instance of java.lang.Class
1460# for a specific array type. each class instance is
1461# cached in a hash table so future queries for the same
1462# class will get the same object back.
1463ArrayClassObject( ary : JArray ) : JClass
1464{
1465 arycodes := "[[[[[[[[[[";
1466 if ( ary.dims >= len arycodes )
1467 while ( ary.dims >= len arycodes )
1468 arycodes += arycodes;
1469 sig := arycodes[:ary.dims];
1470 if ( ary.primitive == 0 )
1471 {
1472 clname := ary.class.name;
1473 for(x:=0;x<len clname; x++ )
1474 if ( clname[x] == '.' )
1475 clname[x] = '/';
1476 sig += "L"+ clname +";";
1477 }
1478 else
1479 {
1480 typ := ary.primitive;
1481 if ( (typ >= T_BOOLEAN) || (typ <= T_LONG) )
1482 {
1483 typcode := "ZCFDBSIJ";
1484 sig[len sig] = typcode[typ-T_BOOLEAN];
1485 }
1486 }
1487 clobj := LookupArrayClass( sig );
1488
1489 return( clobj );
1490}
1491
1492#
1493# maintain a hash table of array class objects
1494# order based on the array signature string.
1495#
1496ACSZ : con 31;
1497actable := array[ACSZ] of list of JClass;
1498
1499LookupArrayClass( sig : string ) : JClass
1500{
1501 if ( hash == nil )
1502 {
1503 hash = load Hash Hash->PATH;
1504 if ( hash == nil )
1505 FatalError( sys->sprint( "could not load %s:%r", Hash->PATH ) );
1506 }
1507
1508 # search for an existing class object with same name
1509 for( l := actable[hash->fun1(sig,ACSZ)]; l != nil; l = tl l )
1510 {
1511 class := hd l;
1512 if (class.aryname == sig)
1513 return( class );
1514 }
1515
1516 # could not find so add this class
1517 class := NewClassObject( arrayclass() );
1518 class.aryname = sig;
1519 idx := hash->fun1(sig,ACSZ);
1520 actable[idx] = class :: actable[idx];
1521 return( class );
1522}
1523
1524
1525#
1526# check argument array against method signature. It is assumed
1527# that 'sig' is a well-formed method signature. This fct verifies
1528# that the arguments match the signature (no widening of primtive
1529# types is performed. It returns a tuple specifiying if the method
1530# is a function and an error flag
1531# RETURN: (isfct,err)
1532# (desc,0) -- function; no error
1533# (nil,0) -- procedure; no error
1534# (nil,ERR) -- error; params did not match
1535#
1536CheckMethodArgs( sig : string, args : array of ref Value ) : (ref Descriptor,int)
1537{
1538 desc := JSigToDescriptor( sig ); # description of method
1539 if ( desc == nil )
1540 return( nil,ERR ); # error
1541
1542 # determine if the method returns a value
1543 isfct : ref Descriptor;
1544 if ((desc.class!=nil) || (desc.prim!=T_VOID))
1545 isfct = desc;
1546
1547 count := len args;
1548 if ( count != len desc.params )
1549 return(nil,CALLERR_BADARGCNT); #argument count mismatch
1550
1551 if ( count == 0 )
1552 return(isfct,OK); # no params to compare
1553
1554 for( params := desc.params; params!=nil; params = tl params )
1555 {
1556 param := hd params;
1557 count--;
1558 valid := 0; #assume bad arg
1559 pick sw := args[count]
1560 {
1561 TObject =>
1562 # check if actual ref arg compatible with formal
1563 if ( ( sw.jobj == nil )
1564 || ( IsArray(sw.jobj) && (ArrayInstanceOf(cast->ToJArray(sw.jobj), param) ) )
1565 || ( IsInstanceOf( sw.jobj, param.class ) ) )
1566 valid = 1;
1567 TByte => valid = (param.prim == T_BYTE);
1568 TBoolean => valid = (param.prim == T_BOOLEAN);
1569 TChar => valid = (param.prim == T_CHAR);
1570 TShort => valid = (param.prim == T_SHORT);
1571 TInt => valid = (param.prim == T_INT);
1572 TLong => valid = (param.prim == T_LONG);
1573 TFloat => valid = (param.prim == T_FLOAT);
1574 TDouble => valid = (param.prim == T_DOUBLE);
1575 }
1576
1577 if ( ! valid )
1578 return(nil,CALLERR_BADARG+count); #class mismatch
1579 }
1580
1581 # if we survived then all args matched
1582 return(isfct,OK);
1583}
1584
1585# verify that 'val' matches 'field'
1586# RETURN: 0 => no match
1587# 1 => match
1588#
1589CheckField( field : ref jldr->Field, val : ref Value ) : int
1590{
1591 # check we have the right one
1592 if ( field == nil )
1593 return( 0 );
1594
1595 valid := 0;
1596
1597 pick sw := val
1598 {
1599 TObject =>
1600 {
1601 # check reference type: object or array
1602 desc := JSigToDescriptor( field.signature );
1603
1604 if ( (field.signature[0] == 'L') && (desc.class != nil) )
1605 {
1606 if ( sw.jobj != nil && IsInstanceOf( sw.jobj, desc.class ) == FALSE )
1607 return( 0 );
1608 }
1609 else if ( (field.signature[0] == '[') && (desc.dims>0) )
1610 {
1611 # array ref type
1612 if ( sw.jobj != nil && ArrayInstanceOf( cast->ToJArray(sw.jobj), desc ) == FALSE )
1613 return( 0 );
1614 }
1615 else
1616 return( 0 );
1617 valid = 1; # ref field is ok
1618 }
1619 TByte => valid = (field.signature[0] == 'B');
1620 TBoolean => valid = (field.signature[0] == 'Z');
1621 TChar => valid = (field.signature[0] == 'C');
1622 TShort => valid = (field.signature[0] == 'S');
1623 TInt => valid = (field.signature[0] == 'I');
1624 TLong => valid = (field.signature[0] == 'J');
1625 TFloat => valid = (field.signature[0] == 'F');
1626 TDouble => valid = (field.signature[0] == 'D');
1627 }
1628
1629 return( valid );
1630}
1631
1632#
1633# Set a field at the given refernce and offset.
1634#
1635SetField( ptr : ref Loader->Niladt, off : int, val : ref Value ) : int
1636{
1637 # must be good, set the field to the provided value
1638 pick sw := val
1639 {
1640 TByte => low->SetByte( ptr, off, byte sw.jbyte );
1641 TBoolean => low->SetByte( ptr, off, byte sw.jboolean );
1642 TShort => low->SetInt( ptr, off, sw.jshort );
1643 TChar => low->SetInt( ptr, off, sw.jchar );
1644 TInt => low->SetInt( ptr, off, sw.jint );
1645 TLong => low->SetBig( ptr, off, sw.jlong );
1646 TFloat => low->SetReal( ptr, off, sw.jfloat );
1647 TDouble => low->SetReal( ptr, off, sw.jdouble );
1648 TObject => low->SetObj( ptr, off, sw.jobj );
1649 * => return( ERR );
1650 }
1651
1652 return( OK );
1653}
1654
1655
1656#
1657# grab a given field from the reference and offset given
1658#
1659GetField( ptr : ref Loader->Niladt, off : int, typ : int ) : ref Value
1660{
1661 val : ref Value;
1662
1663 if ( (ptr==nil) || (off < 0) )
1664 return( nil );
1665
1666 # use typ char to determine type we are after
1667 case typ
1668 {
1669 'B' => val = ref Value.TByte(int low->GetByte( ptr, off ));
1670 'C' => val = ref Value.TChar(low->GetInt( ptr, off ));
1671 'S' => val = ref Value.TShort(low->GetInt( ptr, off ));
1672 'I' => val = ref Value.TInt(low->GetInt( ptr, off ));
1673 'Z' => val = ref Value.TBoolean(int low->GetByte( ptr, off ));
1674 'J' => val = ref Value.TLong(low->GetBig( ptr, off ));
1675 'F' => val = ref Value.TFloat(low->GetReal( ptr, off ));
1676 'D' => val = ref Value.TDouble(low->GetReal( ptr, off ));
1677 'L' or
1678 '[' => val = ref Value.TObject(low->GetObj( ptr, off ));
1679 * => return(nil);
1680 }
1681
1682 return( val );
1683}
1684
1685
1686#
1687# The following functions will load specific java
1688# classes on demand. The classes are loaded as late
1689# as possible
1690#
1691stringclass() : ClassData
1692{
1693 if ( string_class == nil )
1694 string_class = jldr->loader( "java/lang/String" );
1695 return( string_class );
1696}
1697
1698arrayclass() : ClassData
1699{
1700 if ( array_class == nil )
1701 array_class = jldr->loader( "inferno/vm/Array" );
1702 return( array_class );
1703}
1704
1705classclass() : ClassData
1706{
1707 if ( class_class == nil )
1708 class_class = jldr->loader( "java/lang/Class" );
1709 return( class_class );
1710}
1711
1712throwableclass() : ClassData
1713{
1714 if (throwable_class == nil)
1715 throwable_class = jldr->loader("java/lang/Throwable");
1716 return( throwable_class );
1717}
1718
1719threadclass() : ClassData
1720{
1721 if (thread_class == nil)
1722 thread_class = jldr->loader("java/lang/Thread");
1723 return( thread_class );
1724}
1725
1726StringToAChar( s : string ) : JArrayC
1727{
1728 l := len s;
1729 ac := array[l] of int;
1730
1731 for( x:=0; x<l; x++ )
1732 ac[x] = s[x];
1733
1734 return( MkAChar(ac) );
1735}
java/appl/java/jvm.b+142−0
@@ -0,0 +1,142 @@
1implement jvm;
2
3include "sys.m";
4 FD: import Sys;
5
6include "loader.m";
7include "classloader.m";
8Context: import Draw;
9
10jvm: module
11{
12 init: fn(ctxt: ref Context, argv: list of string);
13};
14
15PJAVAVER : con "v1.0"; #javasoft pjava we are based on
16
17sys: Sys;
18stderr: ref FD;
19classloader: JavaClassLoader;
20Class: import classloader;
21
22init(ctxt: ref Context, argv: list of string)
23{
24 sys = load Sys Sys->PATH;
25 stderr = sys->fildes(2);
26
27 # split args into classloader options and java app args
28 (opts,args) := processargs(argv);
29
30 classloader = load JavaClassLoader JavaClassLoader->PATH;
31 if (classloader == nil) {
32 sys->fprint(stderr, "could not load %s: %r\n", JavaClassLoader->PATH);
33 exit;
34 }
35 s := classname(hd tl args);
36 sys->pctl(sys->NEWPGRP, nil);
37
38 classloader->init(classloader,ctxt);
39
40 if ( opts != nil )
41 classloader->setflags(opts);
42
43 classloader->runmain(classloader, s, args);
44}
45
46classname(s: string): string
47{
48 d: string;
49 n := len s;
50 for (i := 0; i < n; i++) {
51 c := s[i];
52 if (c == '.')
53 d[i] = '/';
54 else
55 d[i] = c;
56 }
57 return d;
58}
59
60#
61# process the argv of 'jvm' and handle any 'jvm' flags here
62# and return:
63# classloader options in the form of 'list of (string,val)'
64# java class args in the form of 'list of string'
65# valid classloader options are:
66# ("debug",1|0) -- debug messages on==1
67# ("verbose",1|0) -- verbose messages on==1
68# ("warn",1|0) -- warning messages on==1
69# valid local jvm options are:
70# i == version information
71# h == jvm help
72#
73processargs( argv : list of string ) : (list of (string,int), list of string)
74{
75 if ( argv == nil )
76 {
77 mesg("error: invalid parameters");
78 showhelp("jvm"); #exits
79 }
80
81 # cmd ::= 'jvm' [flags] javastuff
82 # flags ::= '-' CHAR+
83 jvmcmd := hd argv;
84 stuff := tl argv;
85 flags : string;
86 if ( (stuff != nil) && (hd stuff)[0] == '-' )
87 {
88 flags = hd stuff;
89 stuff = tl stuff;
90 }
91
92 # process flags
93 opts : list of (string,int);
94 for(x:=1;x<len flags; x++)
95 {
96 case flags[x]
97 {
98 'v' => opts = ("verbose",1)::opts;
99 'd' => opts = ("debug",1)::opts;
100 'w' => opts = ("warn",1)::opts;
101 'i' => showinfo(); #exits
102 'h' => showhelp(jvmcmd); #exits
103 * => mesg(sys->sprint( "error: %c is an invalid option\n", flags[x] ));
104 showhelp(jvmcmd);
105
106 }
107 }
108
109 if ( stuff == nil )
110 {
111 mesg("error: missing classname");
112 showhelp(jvmcmd); #exits
113 }
114
115 return(opts,jvmcmd::stuff);
116}
117
118
119mesg(s:string)
120{
121 sys->fprint(stderr,"%s\n", s);
122}
123
124showinfo()
125{
126 mesg(sys->sprint("Inferno PJava v%c [PJava %s]\n", JavaClassLoader->SUXV, PJAVAVER ));
127 exit;
128}
129
130showhelp(cmd:string)
131{
132 mesg(sys->sprint( "usage:\t%s [-vdwih] classname classargs", cmd ));
133 mesg(sys->sprint( "\tv=verbose; d=debug; w=warnings; i=version; h=help" ));
134 exit;
135}
136
137badopt(opt : int)
138{
139}
140
141
142
java/appl/java/low.base+140−0
@@ -0,0 +1,140 @@
1#0
2# SetByte
3 addw 32(fp),36(fp),44(fp)
4 movb 40(fp),0(44(fp))
5 ret
6#3
7# SetInt
8 addw 32(fp),36(fp),44(fp)
9 movw 40(fp),0(44(fp))
10 ret
11#6
12# SetBig
13 addw 32(fp),36(fp),48(fp)
14 movl 40(fp),0(48(fp))
15 ret
16#9
17# SetReal
18 addw 32(fp),36(fp),48(fp)
19 movf 40(fp),0(48(fp))
20 ret
21#12
22# SetObj
23 addw 32(fp),36(fp),44(fp)
24 movp 40(fp),0(44(fp))
25 ret
26#15
27# GetByte
28 addw 32(fp),36(fp),40(fp)
29 movb 0(40(fp)),0(16(fp))
30 ret
31#18
32# GetInt
33 addw 32(fp),36(fp),40(fp)
34 movw 0(40(fp)),0(16(fp))
35 ret
36#21
37# GetBig
38 addw 32(fp),36(fp),40(fp)
39 movl 0(40(fp)),0(16(fp))
40 ret
41#24
42# GetReal
43 addw 32(fp),36(fp),40(fp)
44 movf 0(40(fp)),0(16(fp))
45 ret
46#27
47# GetObj
48 addw 32(fp),36(fp),40(fp)
49 movp 0(40(fp)),0(16(fp))
50 ret
51#30
52#CallMethod: frame size==80 map==0x00b840
53# params
54# module ptr: 32(fp) ptr
55# method idx: 36(fp)
56# this ptr: 40(fp) ptr
57# args: 44(fp) ptr
58# ret-val: 48(fp) ptr
59# local vars used:
60# frame: 52(fp) not-marked
61# frame-slot: 56(fp)
62# loop index: 60(fp)
63# tmp: 64(fp) -- used for array idexing & alignment ck
64# pick-tmp: 68(fp) ptr
65# array len: 72(fp)
66#
67 mframe 32(fp),36(fp),52(fp)
68 addw 52(fp),$32,56(fp) #compute slot address for arg
69 beqw 0(mp),40(fp),$35 #if static then 'this' is nil
70 movp 40(fp),0(56(fp)) #move 'this' into frame
71 addw $4,56(fp) #next slot
72#35
73 # move args into frame
74 # for(idx:=0; idx <len args; idx++ )
75 movw $0,60(fp) #initialize loop idx
76 lena 44(fp),72(fp) #length of array
77#37
78 blew 72(fp),60(fp),$60 #loop condition
79 indw 44(fp),64(fp),60(fp) #index the array
80 movp 0(64(fp)),68(fp) #grab the array element; its a ref pick-adt
81 case 0(68(fp)),4(mp) #switch off of the 'pick' id
82#41
83 movp 4(68(fp)),0(56(fp)) # object param
84 jmp $57
85#43
86 movw 4(68(fp)),0(56(fp)) # word param (byte,short,char,boolean,int)
87 jmp $57
88#45
89 andw 56(fp),$7,64(fp) # check for 8-byte alignment
90 beqw 64(fp),$0,$48 # branch if already aligned
91 addw $4,56(fp) # next slot is aligned
92 movl 8(68(fp)),0(56(fp)) # big param (long)
93 addw $8,56(fp) # next param slot
94 jmp $58
95#51
96 andw 56(fp),$7,64(fp) # check for 8-byte alignment
97 beqw 64(fp),$0,$54 # branch if already aligned
98 addw $4,56(fp) # next slot is aligned
99 movf 8(68(fp)),0(56(fp)) # real param (float,double)
100 addw $8,56(fp) # next param slot
101 jmp $58
102#57
103 addw $4,56(fp) # next slot
104#58
105 addw $1,60(fp) #inc loop index
106 jmp $37 #end-for
107#60
108 # setup return value if one exists
109 beqw 0(mp),48(fp),$65 #if nil then no functional return
110 case 0(48(fp)),60(mp) #switch off pick field of ret-value
111#62
112 lea 4(48(fp)),16(52(fp)) #4-byte aligned return addr
113 jmp $65
114 lea 8(48(fp)),16(52(fp)) #8-byte aligned return addr
115#65
116 mcall 52(fp),36(fp),32(fp)
117 ret
118#
119# change the following with care
120#
121 desc $0,92,"80"
122 desc $1,48,"00a0"
123 desc $2,40,"0080"
124 desc $3,48,"0080"
125 desc $4,80,"00b840"
126 var @mp,92
127 word @mp+4,4,0,1,41,1,6,43,6,7,45,7,9,51,66
128 word @mp+60,2,0,6,62,6,9,64,66
129 module Low
130 link 3,0, 0xaaaaaaaa,"SetByte"
131 link 3,3, 0xaaaaaaaa,"SetInt"
132 link 3,6, 0xaaaaaaaa,"SetBig"
133 link 3,9 ,0xaaaaaaaa,"SetReal"
134 link 1,12,0xaaaaaaaa,"SetObj"
135 link 2,15,0xaaaaaaaa,"GetByte"
136 link 2,18,0xaaaaaaaa,"GetInt"
137 link 2,21,0xaaaaaaaa,"GetBig"
138 link 2,24,0xaaaaaaaa,"GetReal"
139 link 2,27,0xaaaaaaaa,"GetObj"
140 link 4,30,0xaaaaaaaa,"CallMethod"
java/appl/java/low.s+140−0
@@ -0,0 +1,140 @@
1#0
2# SetByte
3 addw 32(fp),36(fp),44(fp)
4 movb 40(fp),0(44(fp))
5 ret
6#3
7# SetInt
8 addw 32(fp),36(fp),44(fp)
9 movw 40(fp),0(44(fp))
10 ret
11#6
12# SetBig
13 addw 32(fp),36(fp),48(fp)
14 movl 40(fp),0(48(fp))
15 ret
16#9
17# SetReal
18 addw 32(fp),36(fp),48(fp)
19 movf 40(fp),0(48(fp))
20 ret
21#12
22# SetObj
23 addw 32(fp),36(fp),44(fp)
24 movp 40(fp),0(44(fp))
25 ret
26#15
27# GetByte
28 addw 32(fp),36(fp),40(fp)
29 movb 0(40(fp)),0(16(fp))
30 ret
31#18
32# GetInt
33 addw 32(fp),36(fp),40(fp)
34 movw 0(40(fp)),0(16(fp))
35 ret
36#21
37# GetBig
38 addw 32(fp),36(fp),40(fp)
39 movl 0(40(fp)),0(16(fp))
40 ret
41#24
42# GetReal
43 addw 32(fp),36(fp),40(fp)
44 movf 0(40(fp)),0(16(fp))
45 ret
46#27
47# GetObj
48 addw 32(fp),36(fp),40(fp)
49 movp 0(40(fp)),0(16(fp))
50 ret
51#30
52#CallMethod: frame size==80 map==0x00b840
53# params
54# module ptr: 32(fp) ptr
55# method idx: 36(fp)
56# this ptr: 40(fp) ptr
57# args: 44(fp) ptr
58# ret-val: 48(fp) ptr
59# local vars used:
60# frame: 52(fp) not-marked
61# frame-slot: 56(fp)
62# loop index: 60(fp)
63# tmp: 64(fp) -- used for array idexing & alignment ck
64# pick-tmp: 68(fp) ptr
65# array len: 72(fp)
66#
67 mframe 32(fp),36(fp),52(fp)
68 addw 52(fp),$32,56(fp) #compute slot address for arg
69 beqw 0(mp),40(fp),$35 #if static then 'this' is nil
70 movp 40(fp),0(56(fp)) #move 'this' into frame
71 addw $4,56(fp) #next slot
72#35
73 # move args into frame
74 # for(idx:=0; idx <len args; idx++ )
75 movw $0,60(fp) #initialize loop idx
76 lena 44(fp),72(fp) #length of array
77#37
78 blew 72(fp),60(fp),$60 #loop condition
79 indw 44(fp),64(fp),60(fp) #index the array
80 movp 0(64(fp)),68(fp) #grab the array element; its a ref pick-adt
81 case 0(68(fp)),4(mp) #switch off of the 'pick' id
82#41
83 movp 4(68(fp)),0(56(fp)) # object param
84 jmp $57
85#43
86 movw 4(68(fp)),0(56(fp)) # word param (byte,short,char,boolean,int)
87 jmp $57
88#45
89 andw 56(fp),$7,64(fp) # check for 8-byte alignment
90 beqw 64(fp),$0,$48 # branch if already aligned
91 addw $4,56(fp) # next slot is aligned
92 movl 8(68(fp)),0(56(fp)) # big param (long)
93 addw $8,56(fp) # next param slot
94 jmp $58
95#51
96 andw 56(fp),$7,64(fp) # check for 8-byte alignment
97 beqw 64(fp),$0,$54 # branch if already aligned
98 addw $4,56(fp) # next slot is aligned
99 movf 8(68(fp)),0(56(fp)) # real param (float,double)
100 addw $8,56(fp) # next param slot
101 jmp $58
102#57
103 addw $4,56(fp) # next slot
104#58
105 addw $1,60(fp) #inc loop index
106 jmp $37 #end-for
107#60
108 # setup return value if one exists
109 beqw 0(mp),48(fp),$65 #if nil then no functional return
110 case 0(48(fp)),60(mp) #switch off pick field of ret-value
111#62
112 lea 4(48(fp)),16(52(fp)) #4-byte aligned return addr
113 jmp $65
114 lea 8(48(fp)),16(52(fp)) #8-byte aligned return addr
115#65
116 mcall 52(fp),36(fp),32(fp)
117 ret
118#
119# change the following with care
120#
121 desc $0,92,"80"
122 desc $1,48,"00a0"
123 desc $2,40,"0080"
124 desc $3,48,"0080"
125 desc $4,80,"00b840"
126 var @mp,92
127 word @mp+4,4,0,1,41,1,6,43,6,7,45,7,9,51,66
128 word @mp+60,2,0,6,62,6,9,64,66
129 module Low
130 link 3,0, 0x349a7796,"SetByte"
131 link 3,3, 0x2de68727,"SetInt"
132 link 3,6, 0xd7e9f417,"SetBig"
133 link 3,9 ,0xa51f3c84,"SetReal"
134 link 1,12,0x2ada273,"SetObj"
135 link 2,15,0x65a049aa,"GetByte"
136 link 2,18,0x7060ebba,"GetInt"
137 link 2,21,0x9f04ed0,"GetBig"
138 link 2,24,0x553990fb,"GetReal"
139 link 2,27,0x30af57fd,"GetObj"
140 link 4,30,0x2943aeae,"CallMethod"
java/appl/java/lowproto.b+65−0
@@ -0,0 +1,65 @@
1# proto file will be replaced with low.s
2implement Low;
3
4include "jni.m";
5
6SetByte( ptr : ref Loader->Niladt, off : int, val : byte )
7{
8 junk := (ptr,off,val);
9}
10
11SetInt( ptr : ref Loader->Niladt, off : int, val : int )
12{
13 junk := (ptr,off,val);
14}
15
16SetBig( ptr : ref Loader->Niladt, off : int, val : big )
17{
18 junk := (ptr,off,val);
19}
20
21SetReal( ptr : ref Loader->Niladt, off : int, val : real )
22{
23 junk := (ptr,off,val);
24}
25
26SetObj( ptr : ref Loader->Niladt, off : int, val : JNI->JObject )
27{
28 junk := (ptr,off,val);
29}
30
31GetByte( ptr : ref Loader->Niladt, off : int ) : byte
32{
33 junk := (ptr,off);
34 return( byte 0 );
35}
36
37GetInt( ptr : ref Loader->Niladt, off : int ) : int
38{
39 junk := (ptr,off);
40 return( 0 );
41}
42
43GetBig( ptr : ref Loader->Niladt, off : int ) : big
44{
45 junk := (ptr,off);
46 return( big 0 );
47}
48
49GetReal( ptr : ref Loader->Niladt, off : int ) : real
50{
51 junk := (ptr,off);
52 return( 0.0 );
53}
54
55GetObj( ptr : ref Loader->Niladt, off : int ) : JNI->JObject
56{
57 junk := (ptr,off);
58 return( nil );
59}
60
61CallMethod( mod : Nilmod, idx : int, this : JNI->JObject, args : array of ref JNI->Value, retval : ref JNI->Value )
62{
63 junk := (mod,idx,this,args,retval);
64}
65
java/appl/java/mkfile+45−0
@@ -0,0 +1,45 @@
1<../../../mkconfig
2
3TARG=\
4 cast.dis\
5 low.dis\
6 jni.dis\
7 classloader.dis\
8 javaassist.dis\
9 javatrace.dis\
10 javanative.dis\
11 jvm.dis\
12 jinfo.dis\
13
14MODULES=\
15 $ROOT/java/module/classloader.m\
16 $ROOT/java/module/jni.m\
17 $ROOT/java/module/cast.m\
18
19SYSMODULES=\
20 draw.m\
21 hash.m\
22 keyring.m\
23 loader.m\
24 math.m\
25 string.m\
26 sys.m\
27
28DISBIN=$ROOT/java/dis/java
29
30<$ROOT/mkfiles/mkdis
31
32LIMBOFLAGS=-I$MODDIR\
33 -I$ROOT/java/module\
34
35%.dis: sign.sh
36
37%.dis: %.base
38 chmod +x sign.sh
39 sh sign.sh ${stem}proto $stem
40
41classloader.dis: classloader.b
42 limbo -z $LIMBOFLAGS -gw classloader.b
43
44clean-std:V:
45 rm -f *.dis *.sbl *.s sign.sed
java/appl/java/sign.sed+38−0
@@ -0,0 +1,38 @@
1/^ link.*"ArraytoJS"$/s/0x[^,]*/0xfb08d2ba/
2/^ link.*"JStoObject"$/s/0x[^,]*/0x76cd0754/
3/^ link.*"ObjecttoJT"$/s/0x[^,]*/0xae823704/
4/^ link.*"arrayof"$/s/0x[^,]*/0x6d675ef6/
5/^ link.*"bigarraytoJS"$/s/0x[^,]*/0x1ebcdfdd/
6/^ link.*"bytearraytoJS"$/s/0x[^,]*/0x79238ebb/
7/^ link.*"getabsint"$/s/0x[^,]*/0xe67bf126/
8/^ link.*"getadtstring"$/s/0x[^,]*/0x3911b054/
9/^ link.*"getbytearray"$/s/0x[^,]*/0x480b7ac3/
10/^ link.*"getclassadt"$/s/0x[^,]*/0x45af8037/
11/^ link.*"getint"$/s/0x[^,]*/0x9af56bb1/
12/^ link.*"getintarray"$/s/0x[^,]*/0x55e7e9b3/
13/^ link.*"getmd"$/s/0x[^,]*/0x21126c42/
14/^ link.*"getobjclass"$/s/0x[^,]*/0x7e47f344/
15/^ link.*"getptr"$/s/0x[^,]*/0xd7e85087/
16/^ link.*"getreloc"$/s/0x[^,]*/0xbb4256c7/
17/^ link.*"getrtreloc"$/s/0x[^,]*/0xa1fa7e52/
18/^ link.*"getstrarray"$/s/0x[^,]*/0x67808576/
19/^ link.*"getstring"$/s/0x[^,]*/0xe6647e4a/
20/^ link.*"intarraytoJS"$/s/0x[^,]*/0x9dfa2ee1/
21/^ link.*"jclnilmod"$/s/0x[^,]*/0x18138a11/
22/^ link.*"little_endian"$/s/0x[^,]*/0x616977e8/
23/^ link.*"makeadt"$/s/0x[^,]*/0x2d805d/
24/^ link.*"mcall0"$/s/0x[^,]*/0x9af56bb1/
25/^ link.*"mcall1"$/s/0x[^,]*/0xcbd2cc54/
26/^ link.*"mcalla"$/s/0x[^,]*/0x2c8f47/
27/^ link.*"mcallm"$/s/0x[^,]*/0x1fe62f91/
28/^ link.*"modhash"$/s/0x[^,]*/0x4e5d43e7/
29/^ link.*"new"$/s/0x[^,]*/0xbb2da06c/
30/^ link.*"objhash"$/s/0x[^,]*/0x646cd7d0/
31/^ link.*"putclass"$/s/0x[^,]*/0x8f05c931/
32/^ link.*"putint"$/s/0x[^,]*/0x2de68727/
33/^ link.*"putmod"$/s/0x[^,]*/0x66b5c780/
34/^ link.*"putobj"$/s/0x[^,]*/0x4f9a2948/
35/^ link.*"putptr"$/s/0x[^,]*/0x43ec4524/
36/^ link.*"putstring"$/s/0x[^,]*/0x46bbe09a/
37/^ link.*"realarraytoJS"$/s/0x[^,]*/0xc8107991/
38/^ link.*"sysnilmod"$/s/0x[^,]*/0x8cdb1059/
java/appl/java/sign.sh+6−0
@@ -0,0 +1,6 @@
1set -e
2limbo -I../../module -GS $1.b
3sed -n '/^ link/s;.*,\(0x[^,]*\),"\(.*\)"$;/^ link.*"\2"$/s/0x[^,]*/\1/;p' $1.s > sign.sed
4sed -f sign.sed $2.base | tr -d '\15' > $2.s
5asm $2.s
6rm $1.s
java/appl/mkfile+7−0
@@ -0,0 +1,7 @@
1<../../mkconfig
2
3DIRS=\
4 j2d\
5 java\
6
7<$ROOT/mkfiles/mksubdirs
java/mkfile+8−0
@@ -0,0 +1,8 @@
1<../mkconfig
2
3DIRS=\
4# tools\
5# pkg\
6 appl\
7
8<$ROOT/mkfiles/mksubdirs
java/module/cast.m+80−0
@@ -0,0 +1,80 @@
1#
2# cast.m
3#
4# cast from JNI types to generic JNI types
5#
6Cast : module
7{
8 PATH : con "/dis/java/cast.dis";
9
10 # cast to JObject
11 FromJArray : fn( ary : JNI->JArray ) : (JNI->JObject);
12 FromJClass : fn( cl : JNI->JClass ) : (JNI->JObject);
13 FromJString : fn( str : JNI->JString ) : (JNI->JObject);
14
15 # cast JArray* to JArray
16 ByteToJArray : fn( ptr : ref JNI->ByteArray ) : (JNI->JArray);
17 IntToJArray : fn( ptr : ref JNI->IntArray ) : (JNI->JArray);
18 BigToJArray : fn( ptr : ref JNI->BigArray ) : (JNI->JArray);
19 RealToJArray : fn( ptr : ref JNI->RealArray ) : (JNI->JArray);
20 ClassToJArray : fn( ptr : ref JNI->ClassArray ) : (JNI->JArray);
21 StringToJArray : fn( ptr : ref JNI->StringArray ) : (JNI->JArray);
22 ObjectToJArray : fn( ptr : ref JNI->ObjectArray ) : (JNI->JArray);
23
24 # cast JArray to JArray*
25 JArrayToByte : fn( ptr : JNI->JArray ) : ref JNI->ByteArray;
26 JArrayToInt : fn( ptr : JNI->JArray ) : ref JNI->IntArray;
27 JArrayToBig : fn( ptr : JNI->JArray ) : ref JNI->BigArray;
28 JArrayToReal : fn( ptr : JNI->JArray ) : ref JNI->RealArray;
29 JArrayToClass : fn( ptr : JNI->JArray ) : ref JNI->ClassArray;
30 JArrayToString : fn( ptr : JNI->JArray ) : ref JNI->StringArray;
31 JArrayToObject : fn( ptr : JNI->JArray ) : ref JNI->ObjectArray;
32
33 # cast from JObjects
34 ToJClass : fn( obj : JNI->JObject ) : (JNI->JClass);
35 ToJString : fn( obj : JNI->JObject ) : (JNI->JString);
36 ToJArray : fn( obj : JNI->JObject ) : (JNI->JArray);
37 ToJArrayB : fn( obj : JNI->JObject ) : (JNI->JArrayB);
38 ToJArrayC : fn( obj : JNI->JObject ) : (JNI->JArrayC);
39 ToJArrayS : fn( obj : JNI->JObject ) : (JNI->JArrayS);
40 ToJArrayI : fn( obj : JNI->JObject ) : (JNI->JArrayI);
41 ToJArrayJ : fn( obj : JNI->JObject ) : (JNI->JArrayJ);
42 ToJArrayF : fn( obj : JNI->JObject ) : (JNI->JArrayF);
43 ToJArrayD : fn( obj : JNI->JObject ) : (JNI->JArrayD);
44 ToJArrayZ : fn( obj : JNI->JObject ) : (JNI->JArrayZ);
45 ToJArrayJObject : fn( obj : JNI->JObject ) : (JNI->JArrayJObject);
46 ToJArrayJString : fn( obj : JNI->JObject ) : (JNI->JArrayJString);
47
48 # cast for thread data
49 JObjToJThd : fn( obj : JNI->JObject ) : (JNI->JThread);
50 JThdToJObj : fn( jthd : JNI->JThread ) : (JNI->JObject);
51
52 # cast to a niladt
53 Class2Niladt : fn( cl : JNI->ClassData ) : ref Loader->Niladt;
54 Obj2Niladt : fn( cl : JNI->JObject ) : ref Loader->Niladt;
55
56 # utility
57 JNI2Nilmod : fn( j : JNI ) : Nilmod;
58 JArrayToHolder : fn( ary : array of JNI->JArray ) : array of JNI->JString;
59
60};
61
62Low : module
63{
64 PATH : con "/dis/java/low.dis";
65
66 SetByte : fn( ptr : ref Loader->Niladt, off : int, val : byte );
67 SetInt : fn( ptr : ref Loader->Niladt, off : int, val : int );
68 SetBig : fn( ptr : ref Loader->Niladt, off : int, val : big );
69 SetReal : fn( ptr : ref Loader->Niladt, off : int, val : real );
70 SetObj : fn( ptr : ref Loader->Niladt, off : int, val : JNI->JObject );
71
72 GetByte : fn( ptr : ref Loader->Niladt, off : int ) : byte;
73 GetInt : fn( ptr : ref Loader->Niladt, off : int ) : int;
74 GetBig : fn( ptr : ref Loader->Niladt, off : int ) : big;
75 GetReal : fn( ptr : ref Loader->Niladt, off : int ) : real;
76 GetObj : fn( ptr : ref Loader->Niladt, off : int ) : (JNI->JObject);
77
78 CallMethod : fn( mod : Nilmod, idx : int, this : JNI->JObject, args : array of ref JNI->Value, retval : ref JNI->Value );
79
80};
java/module/classloader.m+420−0
@@ -0,0 +1,420 @@
1include "draw.m";
2#
3# Java Class Loader.
4#
5
6JavaClassLoader: module
7{
8 PATH: con "/dis/java/classloader.dis";
9 ROOT: con "/dis/java/java/";
10 PROG: con "#p";
11 LOADER: con "@Loader";
12 CLASS: con "@Class";
13 MP: con "@mp";
14 ADT: con "@adt";
15 NP: con "@np";
16 OBJ: con "@obj";
17 JEX: con "@jex";
18 SYS: con "@sys";
19 EXIST: con "does not exist";
20 MAINFIELD: con "main";
21 MAINSIGNATURE: con "([Ljava/lang/String;)V";
22 VOIDSIGNATURE: con "()V";
23 ARRAYCLASS: con "inferno/vm/Array";
24 STRINGCLASS: con "java/lang/String";
25 EXCEPTIONPATH: con "java/lang/";
26 JAVAEXCEPTION: con "java ex";
27 SPECIALINIT: con "<init>";
28 SPECIALCLINIT: con "<clinit>";
29 SPECIALCLONE: con "<clone>";
30 SUXV: con '4';
31 JAVA: con ('J'<<24)|('a'<<16)|('v'<<8)|'a';
32 SUX: con ('S'<<24)|('u'<<16)|('x'<<8)|SUXV;
33 NEW, HIER, RESOLVE, LOADED, INITED:
34 con iota;
35 MAGIC, VERSION, NAME, SUPER, INTERFACES, RELOC, DSIZE, DRELOC, CLASSREF:
36 con (iota * 4);
37 CMP, CADT, CNP, COBJ, CJEX, CSYS:
38 con iota;
39 VVAL, VMP, VNP, VOBJ: con iota;
40 PVALUE, PEXTRA, PMETHOD, PSTATIC:
41 con iota;
42 WORDZ: con 4;
43 BIGZ: con 8;
44 MAPZ: con WORDZ * 8;
45 STACKSIZE: con 1024;
46 METHODOFFSET: con 2;
47 RTCLASSOFFSET: con 1 * WORDZ;
48 RTRELOCOFFSET: con 2 * WORDZ;
49 RTTHISOFFSET: con 3 * WORDZ;
50 RTFIRSTRELOC: con 4 * WORDZ;
51 CLASSADTOFFSET: con 1 * WORDZ;
52 MAXUNENCODED: con Sys->NAMEMAX - 7;
53 ENCODEDLEN: con 21;
54 RDELTA: con 16r80;
55
56 T_BOOLEAN: con 4;
57 T_CHAR: con 5;
58 T_FLOAT: con 6;
59 T_DOUBLE: con 7;
60 T_BYTE: con 8;
61 T_SHORT: con 9;
62 T_INT: con 10;
63 T_LONG: con 11;
64 T_OBJECT: con 12;
65 T_ARRAY: con 13;
66
67 ACC_PUBLIC: con 16r0001;
68 ACC_PRIVATE: con 16r0002;
69 ACC_PROTECTED: con 16r0004;
70 ACC_STATIC: con 16r0008;
71 ACC_FINAL: con 16r0010;
72 ACC_SUPER: con 16r0020;
73 ACC_SYNCHRONIZED: con 16r0020;
74 ACC_VOLATILE: con 16r0040;
75 ACC_TRANSIENT: con 16r0080;
76 ACC_NATIVE: con 16r0100;
77 ACC_INTERFACE: con 16r0200;
78 ACC_ABSTRACT: con 16r0400;
79
80 JCL_INTEREXT: con 16r4000;
81 JCL_INTERWORK: con 16r8000;
82
83 MUSTCOMPILE: con 16r10000;
84 DONTCOMPILE: con 16r20000;
85
86 Rgetputfield: con 16r1 << 16;
87 Rgetputstatic: con 16r2 << 16;
88 Rinvokeinterface: con 16r3 << 16;
89 Rinvokespecial: con 16r4 << 16;
90 Rinvokestatic: con 16r5 << 16;
91 Rinvokevirtual: con 16r6 << 16;
92 Rmask: con 16r7 << 16;
93
94 Rstaticmp: con 16r08 << 16;
95 Rspecialmp: con 16r10 << 16;
96
97 POP: con 16r3 << 2; # operand
98 PSRC: con 16r1 << 2; # patch source operand
99 PDST: con 16r2 << 2; # destination
100 PMID: con 16r3 << 2; # middle
101
102 PTYPE: con 16r3; # Operand type
103 PIMM: con 16r0; # patch immediate operand
104 PSIND: con 16r1; # single indirect offset
105 PDIND1: con 16r2; # first offset of double indirect
106 PDIND2: con 16r3; # second offset of double indirect
107
108 ISHIFT: con 4; # instr index shift
109
110 jninil: Nilmod;
111 jnisig: int;
112
113 Extra: adt
114 {
115 what: int;
116 class: cyclic ref Class;
117 };
118
119 Field: adt
120 {
121 field: string;
122 signature: string;
123 flags: int;
124 value: int;
125 };
126
127 Method: adt
128 {
129 field: ref Field;
130 class: cyclic ref Class;
131 };
132
133 Patch: adt
134 {
135 what: int;
136 value: int;
137 };
138
139 Reloc: adt
140 {
141 field: string;
142 signature: string;
143 flags: int;
144 patch: array of byte;
145 };
146
147 RTReloc: adt
148 {
149 field: string;
150 signature: string;
151 flags: int;
152 };
153
154 Interface: adt
155 {
156 class: cyclic ref Class;
157 methods: array of int;
158 };
159
160 Ldinfo: adt
161 {
162 links: array of Loader->Link;
163 nlinks: array of Loader->Link;
164 types: array of Loader->Typedesc;
165 extraoffset: int;
166 extrabase: int;
167 extras: cyclic array of Extra;
168 reloc: array of Patch;
169 };
170
171 ClassObject: adt
172 {
173 mod: ref Loader->Niladt;
174 class: cyclic ref Class;
175 aryname: string;
176 };
177
178 Object: adt
179 {
180 mod: ref Loader->Niladt;
181
182 class: fn(o: self ref Object): ref Class;
183 };
184
185 Array: adt
186 {
187 mod: ref Loader->Niladt;
188 holder: array of ref JavaString;
189 dims: int;
190 class: ref Class;
191 primitive: int;
192 };
193
194 JavaString: adt
195 {
196 mod: ref Loader->Niladt;
197 str: string;
198 };
199
200 JavaThrowable: adt
201 {
202 mod: ref Loader->Niladt;
203 trace: array of byte;
204 msg: ref JavaString;
205 };
206
207 ThreadData: adt
208 {
209 BLOCKED, SUSPENDED, ACKSUSP, WAITSUSP, WAITSTOP, INTERRUPTED, EXITED, DAEMON:
210 con (1 << iota);
211 SHUTDOWN, BLOCK, UNBLOCK, SUSPEND, RESUME, STOP:
212 con iota;
213
214 pid: int;
215 wchan: chan of int;
216 flags: int;
217 ctlfile: string;
218 control: ref Sys->FD;
219 culprit: ref Object;
220 this: ref Object;
221 };
222
223 Class: adt
224 {
225 state: int;
226 name: string;
227 encoding: string;
228 ownname: string;
229 file: string;
230 version: int;
231 flags: int;
232 mod: Nilmod;
233 native: Nilmod;
234 super: cyclic ref Class;
235 this: cyclic ref ClassObject;
236 info: cyclic ref Ldinfo;
237 refs: cyclic array of ref Class;
238 staticdata: array of ref Field;
239 objectdata: list of ref Field;
240 privatemethods: array of ref Field;
241 staticmethods: array of ref Field;
242 virtualmethods: cyclic array of Method;
243 initmethods: array of ref Field;
244 classinit: ref Field;
245 cloneindex: int;
246 interfaces: cyclic array of Interface;
247 interindex: int;
248 intercache: cyclic list of (ref Class, array of int);
249 interextends: cyclic list of ref Class;
250 interdirect: cyclic list of ref Class;
251 objectsize: int;
252 staticoffset: int;
253 staticsize: int;
254 nextra: int;
255 dataoffset: int;
256 datasize: int;
257 datareloc: int;
258 moddata: ref Loader->Niladt;
259 modsize: int;
260 modmap: array of byte;
261 objmap: array of byte;
262 objtype: int;
263 mlinks: int;
264
265 loadclass: fn(c: self ref Class);
266 resolve: fn(c: self ref Class);
267 loadinterfaces: fn(c: self ref Class);
268 extinterfaces: fn(c: self ref Class);
269 linkinterfaces: fn(c: self ref Class);
270 makeobjtype: fn(c: self ref Class);
271 makevmtable: fn(c: self ref Class, m: list of ref Field, z: int): array of Method;
272 relocate: fn(c: self ref Class);
273 instrpatch: fn(c: self ref Class, i: array of Loader->Inst);
274 modpatch: fn(c: self ref Class);
275 getmethod: fn(c: self ref Class, f, s: string, flag: int): int;
276 override: fn(c: self ref Class, f, s: string): int;
277 findimethod: fn(c: self ref Class, s: string): ref Field;
278 findpmethod: fn(c: self ref Class, f, s: string): ref Field;
279 findsfield: fn(c: self ref Class, f: string): ref Field;
280 findsmethod: fn(c: self ref Class, f, s: string): ref Field;
281 findofield: fn(c: self ref Class, f: string): ref Field;
282 findvmethod: fn(c: self ref Class, f, s: string): int;
283 extra: fn(c: self ref Class, w, n: int, r: ref Class);
284 extras: fn(c: self ref Class, a: array of Reloc, n: int, r: ref Class): int;
285 special: fn(c: self ref Class, f, s: string, flags: int, r: ref Class): (int, ref Class, int);
286 copymap: fn(c: self ref Class, m: array of byte, dr: int);
287 copymd: fn(c: self ref Class, md: ref Loader->Niladt, dr: int, om: Nilmod);
288 relocref: fn(c: self ref Class, t: ref Class, i: array of Loader->Inst, a: array of Reloc, x: int): int;
289 resolvereloc: fn(c: self ref Class, r, s: string, flags: int): (int, int);
290 addinterface: fn(c: self ref Class);
291 getinterface: fn(c: self ref Class, k: ref Class): array of int;
292 interlook: fn(c: self ref Class, a: array of Interface): array of int;
293 initjni: fn(c: self ref Class);
294 loadnative: fn(c: self ref Class);
295
296 # runtime entry points
297 run: fn(c: self ref Class, args: list of string);
298 new: fn(c: self ref Class): ref Object;
299 call: fn(c: self ref Class, x: int, a: ref Object): ref Object;
300 clone: fn(c: self ref Class, o: ref Object): ref Object;
301 };
302
303 init: fn(j: JavaClassLoader, ctxt: ref Draw->Context);
304 shutdown: fn();
305 info: fn(name: string);
306 loader: fn(name: string): ref Class;
307 encodename: fn(name: string): string;
308 getclass: fn(name: string): ref Class;
309 getmodclass: fn(mod: Nilmod): ref Class;
310 runmain: fn( j: JavaClassLoader, classname : string, argv : list of string );
311 sysexception: fn( ex : string ) : ref Object;
312 setflags: fn( flags : list of (string,int) );
313
314 # runtime entry points
315 compatclass: fn(who, what: ref Class): int;
316 checkcast: fn(who: ref Object, what: ref Class);
317 instanceof: fn(who: ref Object, what: ref Class): int;
318 acheckcast: fn(who: ref Array, what: ref Class, dims: int);
319 ainstanceof: fn(who: ref Array, what: ref Class, dims: int): int;
320 pcheckcast: fn(who: ref Array, what, dims: int);
321 pinstanceof: fn(who: ref Array, what, dims: int): int;
322 aastorecheck: fn(who: ref Object, what: ref Array);
323 arraycopy: fn(src: ref Array, sx: int, dst: ref Array, dx: int, n: int);
324 multianewarray: fn(ndim: int, c: ref Class, etype: int, bounds: array of int): ref Array;
325 error: fn(s: string);
326 delthreaddata: fn();
327 getthreaddata: fn(): ref ThreadData;
328 getcontext: fn(): ref Draw->Context;
329 daemonize: fn();
330 culprit: fn(e: string): ref Object;
331 throw: fn(c: ref Object);
332 rtload: fn(addr: int);
333 getinterface: fn(c: ref Class, cookie: int): int;
334 monitorenter: fn(o: ref Object);
335 monitorexit: fn(o: ref Object);
336 monitorwait: fn(o: ref Object, l: int);
337 monitornotify: fn(o: ref Object, f: int);
338 sleep: fn(l: int);
339 interrupt: fn(t: ref ThreadData);
340 suspend: fn(t: ref ThreadData);
341 resume: fn(t: ref ThreadData);
342 stop: fn(t: ref ThreadData, o: ref Object);
343
344 # math
345 lcmp: fn(x: big, y: big): int;
346
347 d2i: fn(x: real): int;
348 d2l: fn(x: real): big;
349 dcmpg: fn(x, y: real): int;
350 dcmpl: fn(x, y: real): int;
351 drem: fn(x, y: real): real;
352};
353
354JavaNative: module
355{
356 PATH: con "/dis/java/javanative.dis";
357
358 init: fn(sys: Sys, ld: Loader, jldr: JavaClassLoader, jass: JavaAssist): string;
359};
360
361JavaAssist: module
362{
363 PATH: con "/dis/java/javaassist.dis";
364
365 getint: fn(mod: Nilmod, index: int): int;
366 getbytearray: fn(mod: Nilmod, index: int): array of byte;
367 getintarray: fn(mod: Nilmod, index: int): array of int;
368 getstrarray: fn(mod: Nilmod, index: int): array of string;
369 getptr: fn(mod: Nilmod, index: int): ref Loader->Niladt;
370 getreloc: fn(mod: Nilmod, index: int): array of JavaClassLoader->Reloc;
371 getrtreloc: fn(data: ref Loader->Niladt, index: int): array of JavaClassLoader->RTReloc;
372 getclassadt: fn(data: ref Loader->Niladt, index: int): ref JavaClassLoader->Class;
373 getabsint: fn(addr: int): int;
374 getadtstring: fn(data: ref Loader->Niladt, index: int): string;
375 getstring: fn(mod: Nilmod, index: int): string;
376 putclass: fn(data: ref Loader->Niladt, index: int, value: ref JavaClassLoader->Class);
377 putint: fn(data: ref Loader->Niladt, index: int, value: int);
378 putmod: fn(data: ref Loader->Niladt, index: int, value: Nilmod);
379 putobj: fn(data: ref Loader->Niladt, index: int, value: ref JavaClassLoader->ClassObject);
380 putptr: fn(data: ref Loader->Niladt, index: int, value: ref Loader->Niladt);
381 putstring: fn(data: ref Loader->Niladt, index: int, value: string);
382 little_endian: fn(): int;
383 jclnilmod: fn(j: JavaClassLoader): Nilmod;
384 sysnilmod: fn(s: Sys): Nilmod;
385 new: fn(mod: Nilmod, index: int): ref JavaClassLoader->Object;
386 getobjclass: fn(j: ref JavaClassLoader->Object): ref JavaClassLoader->Class;
387 modhash: fn(mod: Nilmod): int;
388 objhash: fn(j: ref JavaClassLoader->Object): int;
389 mcall0: fn(mod: Nilmod, index: int): int;
390 mcall1: fn(mod: Nilmod, index: int, arg: ref JavaClassLoader->Object): ref JavaClassLoader->Object;
391 mcalla: fn(mod: Nilmod, index: int, arg: ref JavaClassLoader->Array): int;
392 mcallm: fn(mod: Nilmod, index: int, arg: Nilmod): int;
393 getmd: fn(mod: Nilmod): ref Loader->Niladt;
394 arrayof: fn(o: ref JavaClassLoader->Object): ref JavaClassLoader->Array;
395 bytearraytoJS: fn(a: array of byte): array of ref JavaClassLoader->JavaString;
396 intarraytoJS: fn(a: array of int): array of ref JavaClassLoader->JavaString;
397 bigarraytoJS: fn(a: array of big): array of ref JavaClassLoader->JavaString;
398 realarraytoJS: fn(a: array of real): array of ref JavaClassLoader->JavaString;
399 ArraytoJS: fn(a: ref JavaClassLoader->Array): ref JavaClassLoader->JavaString;
400 JStoObject: fn(j: ref JavaClassLoader->JavaString): ref JavaClassLoader->Object;
401 ObjecttoJT: fn(o: ref JavaClassLoader->Object): ref JavaClassLoader->JavaThrowable;
402 makeadt: fn(addr: int): ref Loader->Niladt;
403};
404
405JavaTrace: module
406{
407 PATH: con "/dis/java/javatrace.dis";
408
409 JVERBOSE,
410 JDEBUG: con iota;
411
412 init: fn(a: JavaAssist);
413 info: fn(c: ref JavaClassLoader->Class);
414 pr_reloc: fn(r: JavaClassLoader->Reloc);
415 pr_relocs: fn(r: array of JavaClassLoader->Reloc);
416 trace: fn(c: int, s: string);
417
418 level: int;
419 outfd: ref Sys->FD;
420};
java/module/jni.m+690−0
@@ -0,0 +1,690 @@
1#
2# jni -- java native interface
3#
4# this module defines the limbo helper
5# functions for java class library
6# native methods (limbo).
7#
8# This module is based on the JNI
9# specification from JavaSoft for
10# VM implementations supporting a C/C++
11# interface.
12#
13
14include "sys.m";
15include "math.m";
16include "string.m";
17include "loader.m";
18include "classloader.m";
19include "cast.m";
20
21JNI : module
22{
23 # where to find jni.dis
24 PATH : con "/dis/java/jni.dis";
25
26 #
27 # exported read-only vars
28 # upon JNI initialization the following
29 # variables are assigned. Native method modules
30 # can use the following instances rather than
31 # loading their own copies. These variables
32 # should never be assigned.
33 sys : Sys; # std inferno sys module
34 math : Math; # std inferno math module
35 str : String; # std inferno string module
36 jldr : JavaClassLoader; # primary java class loader
37 jassist : JavaAssist; # java assist module
38
39 # boolean constants
40 FALSE : con 0;
41 TRUE : con 1;
42 BFALSE : con byte 0;
43 BTRUE : con byte 1;
44
45 # return error flags for JNI functions
46 OK : con 0;
47 ERR : con -1;
48
49 # JVM Type Constants: used for identifying Java primitive types.
50 T_JVMSTART : con 4;
51 T_BOOLEAN, T_CHAR, T_FLOAT, T_DOUBLE, T_BYTE, T_SHORT,
52 T_INT, T_LONG, T_OBJECT, T_ARRAY, T_VOID,
53 T_JVMLAST
54 : con (iota + T_JVMSTART);
55
56 # JVM class flags constants
57 ACC_PUBLIC: con 16r0001;
58 ACC_PRIVATE: con 16r0002;
59 ACC_PROTECTED: con 16r0004;
60 ACC_STATIC: con 16r0008;
61 ACC_FINAL: con 16r0010;
62 ACC_SUPER: con 16r0020;
63 ACC_SYNCHRONIZED: con 16r0020;
64 ACC_VOLATILE: con 16r0040;
65 ACC_TRANSIENT: con 16r0080;
66 ACC_NATIVE: con 16r0100;
67 ACC_INTERFACE: con 16r0200;
68 ACC_ABSTRACT: con 16r0400;
69
70 ACC_WRITTEN_FLAGS: con 16r0fff;
71
72
73 # common java types
74
75 #
76 # The following two types are used to represent
77 # Java classes. The 'ClassData' type contains all
78 # of the information pertaining to a class and is
79 # used to obtain class information and instantiate
80 # objects. Although there is information in the
81 # structure it should normally be treated as an
82 # opaque type by client native method modules.
83 #
84 ClassModule : type ref Loader->Niladt;
85 ClassData : type ref JavaClassLoader->Class;
86
87 #
88 # This is the "generic" type of any Java instance.
89 # Operations on the object can be performed via this
90 # generic handle.
91 #
92 JObject : type ref JavaClassLoader->Object;
93
94 #
95 # This represents an instance of java.lang.Class
96 # It is an object which contains a ptr to the
97 # actual class data it represents.
98 #
99 JClass : type ref JavaClassLoader->ClassObject;
100
101 #
102 # This is an instance of java.lang.String.
103 # This class is a wrapper of a Dis string.
104 #
105 JString : type ref JavaClassLoader->JavaString;
106
107 JBoolean : type int;
108
109 # Java arrays are actually classes
110 # which wrap a Dis array. The array
111 # class matches the adt 'Array' defined
112 # in JavaClassLoader. The following arrays
113 # should mirror that adt and are used by
114 # limbo modules to access the array contents
115 # directly. Java Arrays should only be created
116 # in Java code or via the Array functions
117 # below. A simple limbo instance of the
118 # array adt's is not good enough.
119
120 # JArray is used as a "generic" array and to represent
121 # multi-dimensional arrays.
122 JArray : type ref JavaClassLoader->Array; # x[][]..
123
124 IntArray : adt
125 {
126 cl_mod: ref Loader->Niladt; # object's class data
127 ary: array of int; # actual dis array
128 dims: int; # number of dimensions
129 class: ClassData; # class data of base type
130 primitive: int; # set if base type is primitive
131 };
132
133 ByteArray : adt
134 {
135 cl_mod: ref Loader->Niladt; # object's class data
136 ary: array of byte; # actual dis array
137 dims: int; # number of dimensions
138 class: ClassData; # class data of base type
139 primitive: int; # set if base type is primitive
140 };
141
142 BigArray : adt
143 {
144 cl_mod: ref Loader->Niladt; # object's class data
145 ary: array of big; # actual dis array
146 dims: int; # number of dimensions
147 class: ClassData; # class data of base type
148 primitive: int; # set if base type is primitive
149 };
150
151 RealArray : adt
152 {
153 cl_mod: ref Loader->Niladt; # object's class data
154 ary: array of real; # actual dis array
155 dims: int; # number of dimensions
156 class: ClassData; # class data of base type
157 primitive: int; # set if base type is primitive
158 };
159
160 StringArray : adt
161 {
162 cl_mod: ref Loader->Niladt; # object's class data
163 ary: array of JString; # actual dis array
164 dims: int; # number of dimensions
165 class: ClassData; # class data of base type
166 primitive: int; # set if base type is primitive
167 };
168
169 ClassArray : adt
170 {
171 cl_mod: ref Loader->Niladt; # object's class data
172 ary: array of JClass; # actual dis array
173 dims: int; # number of dimensions
174 class: ClassData; # class data of base type
175 primitive: int; # set if base type is primitive
176 };
177
178 ObjectArray : adt
179 {
180 cl_mod: ref Loader->Niladt; # object's class data
181 ary: array of JObject; # actual dis array
182 dims: int; # number of dimensions
183 class: ClassData; # class data of base type
184 primitive: int; # set if base type is primitive
185 };
186
187 ArrayArray : adt
188 {
189 cl_mod: ref Loader->Niladt; # object's class data
190 ary: array of JArray; # actual dis array
191 dims: int; # number of dimensions
192 class: ClassData; # class data of base type
193 primitive: int; # set if base type is primitive
194 };
195
196 #
197 # Common type names emitted by 'javal'.
198 #
199 JArrayI : type ref IntArray; # int[]
200 JArrayC : type ref IntArray; # char[]
201 JArrayB : type ref ByteArray; # byte[]
202 JArrayS : type ref IntArray; # short[]
203 JArrayJ : type ref BigArray; # long[]
204 JArrayF : type ref RealArray; # float[]
205 JArrayD : type ref RealArray; # double[]
206 JArrayZ : type ref ByteArray; # boolean[]
207
208 JArrayJClass : type ref ClassArray; # Class[]
209 JArrayJString : type ref StringArray; # String[]
210 JArrayJObject : type ref ObjectArray; # Object[]
211
212 ThreadObject : adt
213 {
214 cl_mod : ClassModule;
215 name : JArrayC;
216 priority : int;
217 #threadQ : cyclic ref ThreadObject;
218 PrivateInfo : ref JavaClassLoader->ThreadData;
219 was_interrupted : byte; #boolean
220 #eetop : int;
221 #single_step : byte; #boolean
222 daemon : byte; #boolean
223 stillborn : byte; #boolean
224 target : JObject;
225 group : JObject;
226 #initial_stack_memory : int;
227 };
228 JThread : type ref ThreadObject;
229
230
231 #
232 # This union type is used for setting/getting fields
233 # of an arbitrary Java object/class, and also for
234 # calling arbitrary object/class methods.
235 # To set Java reference types (i.e. objects, arrays)
236 # they must be converted to a JObject (i.e. use TObject).
237 #
238 # One way to create an instance of this type is:
239 # val := ref Value.TObject(obj);
240 #
241 # To retrieve a value use a 'pick' statement or one
242 # of the "getter" functions below.
243 #
244 # NOTE: the Low module is aware of the order of the "pick" tags
245 #
246 Value :adt
247 {
248 pick
249 {
250 TObject => jobj : JObject;
251 TByte => jbyte : int;
252 TBoolean => jboolean: int;
253 TChar => jchar : int;
254 TShort => jshort : int;
255 TInt => jint : int;
256 TLong => jlong : big;
257 TFloat => jfloat : real;
258 TDouble => jdouble : real;
259 }
260
261 #
262 # Get a value of the expected type. If the
263 # actual type is not the expected type then
264 # a FatalError() is called.
265 #
266 Boolean : fn( this : self ref Value ) : JBoolean;
267 Byte : fn( this : self ref Value ) : int;
268 Short : fn( this : self ref Value ) : int;
269 Int : fn( this : self ref Value ) : int;
270 Long : fn( this : self ref Value ) : big;
271 Float : fn( this : self ref Value ) : real;
272 Double : fn( this : self ref Value ) : real;
273 Char : fn( this : self ref Value ) : int;
274 Object : fn( this : self ref Value ) : JObject;
275
276
277 };
278
279 #
280 # This structure is used to "describe" a Java type. A Java signature
281 # stored as a string is converted into this ADT for better comparisons.
282 # Depending on the actual type vairous parts of the ADT will be filled
283 # in. The 'sig' field will contain the appropriate java signagure string
284 # associated with the type. The following details how to distinguish the
285 # type:
286 # non-array ref:
287 # 'class' represents the class info; other fields are 0/nil
288 # array ref:
289 # "class" is nil for primitive array and 'prim' contains one of
290 # the "Java Type Constants" representing the array's base type.
291 # for non-primitive arrays 'class' is the ClassData for the base
292 # type; 'prim' is 0; 'dims' contains the number of dimensions
293 # primitive:
294 # 'class' is nil; 'dims' is 0; 'prim' is one of Java Type Consts
295 # method:
296 # 'params' is a list of Descriptor's for each param -- nil if the
297 # method has no parameters. The method return value is represented
298 # by the other fields as described above; a method w/ no return
299 # value will have (nil,T_VOID,0,"V",nil) descriptor. NOTE: the param
300 # list is in (Right-to-Left order -- i.e right most param is the
301 # list-head).
302 #
303 Descriptor : adt
304 {
305 class : ClassData;
306 prim : int;
307 dims : int;
308 sig : string; #type's java signature
309 params : cyclic list of ref Descriptor;
310 };
311
312
313 #
314 # argument passed to AttachCurrentThread
315 #
316 ThreadAttachArgs : adt
317 {
318 name : string; #can be nil
319 daemon : byte; #1=true
320 group : JObject; #nil ==> main group
321 };
322
323
324 #
325 # JNI Functions
326 #
327
328 #
329 # Return JNI version number in the form
330 # of 0xVVVVIIII where VVVV=major version
331 # and IIII= minor version
332 #
333 GetVersion : fn() : int;
334
335
336 ##
337 ## Class/Object access
338 ##
339
340 #
341 # Find the class data for a given class name.
342 # Will cause a load of the class if necessary.
343 # NOTE: this does not return a java.lang.Class
344 # object, but rather the internal structure.
345 #
346 FindClass : fn( name : string ) : ClassData;
347
348 #
349 # Return the class's superclass data.
350 #
351 GetSuperclass : fn( cl_data : ClassData ) : ClassData;
352
353 #
354 # Return the java.lang.Class instance associated
355 # with this instance.
356 #
357 GetObjectClass : fn( obj : JObject ) : JClass;
358
359 #
360 # Return the internal Class Data information
361 # associated with this instance
362 #
363 GetObjectClassData : fn( obj : JObject ) : ClassData;
364
365 #
366 # return the associated java.lang.Class instance
367 # associated with the given internal Class
368 # Data.
369 #
370 GetClassObject : fn( cl_data : ClassData ) : JClass;
371
372 #
373 # return the java.lang.Class instance associated
374 # with the array class that has signature 'sig'.
375 #
376 LookupArrayClass : fn( sig : string ) : JClass;
377
378 #
379 # Allocate an instance of java.lang.Class that
380 # represents the class indicated by 'cl_data'.
381 # The 'cl_data' can be obtained via the functions above.
382 #
383 NewClassObject : fn( cl_data : ClassData ) : JClass;
384
385 #
386 # Allocate a new instance of the class; no constructor called.
387 #
388 AllocObject : fn( cl_data : ClassData ) : JObject;
389
390 #
391 # Allocate a new instance of the class and
392 # attempt to call the "default" constructor.
393 # NOTE: this routine should be used with care,
394 # because not all classes have default constructors.
395 #
396 NewObject : fn( cl_data : ClassData ) : JObject;
397
398 #
399 # Duplicate the object. This function will create
400 # a new instance of the object's class and perform
401 # a shallow copy of the the objects data contents
402 # into the new instance.
403 # NOTE: the constructor of the new object is not invoked
404 #
405 DupObject : fn( obj : JObject ) : JObject;
406
407 #
408 # Return a hash code based on the object's reference,
409 # not its contents. This is called by
410 # java.lang.Object.hashCode() as well as
411 # System.identityHashCode().
412 #
413 IdentityHash : fn( obj : JObject ) : int;
414
415 #
416 # Allocate a java string object and place the
417 # dis string as its contents.
418 #
419 NewString : fn( val : string ) : JString;
420
421 #
422 # Just like NewString but return as a
423 # JObject type, rather then JString
424 #
425 NewStringObject : fn( val : string ) : JObject;
426
427 #
428 # Set object/class data fields.
429 # Must pass the "object instance"/"class data" along with the
430 # field name and the value it should be set to. The contents of
431 # the 'val' union type is used to determine the field type and if
432 # they are not compatable the function fails.
433 #
434 # RETURN: JNI->OK=> success;
435 # JNI->ERR=> failure
436 #
437 SetStaticField : fn( cl_data : ClassData, name : string, val : ref Value ) : int;
438 SetObjField : fn( obj : JObject, name : string, val : ref Value ) : int;
439
440 # Get object/class data fields.
441 # Must pass the "object instance"/"class data" along with the field
442 # name and a "type signature" (see JVM reference). The type sig must
443 # match the actual field sig exactly.
444 #
445 # RETURN: nil=> failure;
446 # non-nil=> a 'Value' union type with the field contents
447 #
448 GetStaticField : fn( cl_data : ClassData, name : string, typ : string ) : ref Value;
449 GetObjField : fn( obj : JObject, name : string, typ : string ) : ref Value;
450
451
452 #
453 # Call a method:
454 # cl_data/obj : the class or object being called
455 # meth : name of method to call
456 # sig : signature of method being called
457 # args : array of args to pass (nil==void) 'this' is implicitly
458 # passed for dynamic (object) method calls
459 # return : tuple: value of method call (nil==void), error code
460 #
461 # example:
462 # v := Value.Int(99);
463 # args := array[] of {v};
464 # (val,err) := CallMeth( o, "foo", "(I)I", args );
465 # if ( err == JNI->OK )
466 # sys->print( "return: %d\n", val.Int() );
467 #
468 CallStatic : fn( cl_data : ClassData, meth : string, sig : string, args : array of ref Value ) : (ref Value,int);
469 CallMethod : fn( obj : JObject, meth : string, sig : string, args : array of ref Value ) : (ref Value,int);
470
471
472 #
473 # Method call error codes
474 #
475 CALLERR_NOMETHOD, # method not found
476 CALLERR_BADSIG, # bad signature
477 CALLERR_BADARGCNT, # arg count mismatch
478 CALLERR_BADARG # argument mismatch: errcode-CALLERR_BADARG==argument position
479 # 'badarg' must be last.
480 : con (iota+1);
481
482
483 ##
484 ## Object/Class comparison functions
485 ##
486
487 IsInstanceOf : fn( obj : JObject, cl_data : ClassData ) : JBoolean;
488 IsAssignable : fn( assignee, assignTo : JClass ) : JBoolean;
489 IsSameObject : fn( obj1, obj2 : JObject ) : JBoolean;
490
491 # Check if 'ary' can be assigned to an instance with matching 'desc'.
492 # If 'ary' or 'desc' are nil then return FALSE.
493 ArrayInstanceOf : fn( ary : JArray, desc : ref Descriptor ) : JBoolean;
494
495 # Is the object an array? (nil==FALSE)
496 IsArray : fn( obj : JObject ) : JBoolean;
497
498 ##
499 ## Support for Serializable
500 ##
501
502 # Return the modifiers for the item.
503 # Return 0 if field or method not found in class.
504 # Do not search for fields/methods in superclass.
505 # string args are same format as strings returned
506 # by GetFieldSignatures and GetMethodSignatures.
507 #
508 GetClassFlags : fn(jcl : JClass) : int;
509 GetFieldFlags : fn(jcl : JClass, fieldsignature : string) : int;
510 GetMethodFlags : fn(jcl : JClass, methodsignature : string) : int;
511
512 # Return array of Fields/Methods plus signatures as strings.
513 # Should be limited Fields/methods in this class, not superclass.
514 # Returned value strings are "fieldormethodname signature".
515 #
516 GetFieldSignatures : fn(jcl: JClass, excl : int) : JArrayJString;
517 GetMethodSignatures : fn(jcl: JClass, excl : int) : JArrayJString;
518
519 ##
520 ## Throwing Exceptions
521 ##
522
523 #
524 # Throw the pre-created 'throwable' object. The
525 # 'throwable' object must be an instance of
526 # "java.lang.Throwable", else failure.
527 #
528 Throw : fn( throwable : JObject );
529 ThrowException : fn( name : string, msg : string );
530
531 #
532 # return the current Java Exception. The object
533 # returned can be used by "Throw" to re-throw it.
534 #
535 # ex is the current Inferno exception if in a rescue.
536 # if ex is nil then the current value of culprit() is
537 # returned (that may be nil). If ex is non nil and
538 # culprit() is nil then ex is converted to the appropriate
539 # Java throwable and returned.
540 #
541 JavaException: fn( ex : string ) : JObject;
542
543 #
544 # Clear any current Exception for the calling thread.
545 #
546 ExceptionClear : fn();
547
548 ##
549 ## Array functions
550 ##
551
552 GetArrayLength : fn( ary : JArray ) : int;
553
554 #
555 # functions to make "java" arrays from limbo arrays
556 #
557 MkAByte : fn( ary : array of byte ) : JArrayB;
558 MkAChar : fn( ary : array of int ) : JArrayC;
559 MkAShort : fn( ary : array of int ) : JArrayS;
560 MkAInt : fn( ary : array of int ) : JArrayI;
561 MkALong : fn( ary : array of big ) : JArrayJ;
562 MkAFloat : fn( ary : array of real ) : JArrayF;
563 MkADouble : fn( ary : array of real ) : JArrayD;
564 MkABoolean : fn( ary : array of byte ) : JArrayZ;
565 MkAObject : fn( ary : array of JObject ) : JArrayJObject;
566 MkAString : fn( ary : array of string ) : JArrayJString;
567
568 MkAAByte : fn( aary : array of array of byte ) : JArray;
569 MkAAInt : fn( aary : array of array of int ) : JArray;
570
571 # This can be used to create arrays of arbitrary dimensions.
572 MkAJArray : fn( ary : array of JArray ) : JArray;
573
574 # make a JArrayC from a Dis string
575 StringToAChar : fn( s : string ) : JArrayC;
576
577 ##
578 ## Monitor, locking, and Thread functions
579 ##
580
581 #
582 # Lock or unlock the object's associated
583 # lock. Block until the operation is complete.
584 # Upon an error: FatalError() is called
585 #
586 MonitorEnter : fn( obj : JObject );
587 MonitorExit : fn( obj :JObject );
588
589 #
590 # Notify any waiters.
591 # all==1 => notify all
592 # *Lock* version will do a enter/exit.
593 #
594 MonitorLockNotify : fn( obj : JObject, all : int );
595 MonitorNotify : fn( obj : JObject, all : int );
596
597 #
598 # Attach a "Limbo thread" to the "Java vm".
599 # This allows a Limbo "spawned" thread to
600 # look like a "Java thread" to the Java Classes.
601 #
602 # return 0=>success; <0=>fail
603 #
604 AttachCurrentThread : fn( arg : ref ThreadAttachArgs ) : int;
605
606 #
607 # Detach a thread from the "java VM".
608 #
609 DetachCurrentThread : fn() : int;
610
611 #
612 # returns the Main thread group.
613 #
614 MainThreadGroup : fn() : JObject;
615
616 ##
617 ## Utility Functions
618 ##
619
620 # flags indicating which methods to find
621 METH_PRIVATE, # private methods
622 METH_VIRTUAL, # virtual methods
623 METH_STATIC, # static methods
624 METH_INIT # constructors
625 : con ( 1 << iota );
626
627 #
628 # look up a method based on its name and signature.
629 #
630 # class : class descritpor to look in
631 # name : method name to look up
632 # sig : method signature
633 # flags : specifies what type of method to find and
634 # can be any of the above flags or'ed togeather.
635 #
636 # return: the (module,index) of the method
637 #
638 FindMethod : fn( class : ClassData,
639 name : string,
640 sig : string,
641 flags : int ) : (Nilmod,int);
642
643 #
644 # If c represents a Java primitive type, return
645 # T_BOOLEAN..T_LONG or T_VOID; otherwise, return 0.
646 # Also return 0 if T_VOID applies, but ignorevoid != 0.
647 #
648 PrimitiveIndex: fn(c : JClass, ignorevoid : int) : int;
649
650 #
651 # Convert a Java type signature string into
652 # a type descriptor structure. The signature
653 # passed in can represent any single type (including
654 # a method). Extra characters on the end are ignored.
655 #
656 JSigToDescriptor : fn( sig : string ) : ref Descriptor;
657
658 #
659 # Throw a java.lang.InternalError
660 #
661 FatalError : fn( msg : string );
662
663 #
664 # Indicate to loader a native module init()
665 # function has failed.
666 #
667 InitError : fn( msg : string );
668
669 #
670 # Return an instance of the Cast module.
671 #
672 CastMod : fn() : Cast;
673
674 #
675 # Return an instance of the Low module.
676 #
677 LowMod : fn() : Low;
678
679 # return the current draw context
680 getContext:fn(): ref Draw->Context;
681
682 #
683 # The following routines are called by the JavaClassLoader
684 # module to initialize JNI. Native method modules must not
685 # call thease routines.
686 #
687 jinit : fn( jldr : JavaClassLoader, jass : JavaAssist );
688 Self: fn(s: Sys, j: JNI): (Nilmod, string);
689 init: fn(j: JNI);
690};
java/pkg/NOTICE+1−0
@@ -0,0 +1 @@
1All the *.java files here belong to OpenJDK version 1.7, see http://openjdk.java.net/
java/pkg/awt/awt_Color.b+338−0
@@ -0,0 +1,338 @@
1#
2# %W% - %E%
3#
4
5implement AwtColor;
6
7include "jni.m";
8 jni : JNI;
9 ClassModule,
10 JString,
11 JArray,
12 JArrayI,
13 JArrayC,
14 JArrayB,
15 JArrayS,
16 JArrayJ,
17 JArrayF,
18 JArrayD,
19 JArrayZ,
20 JArrayJObject,
21 JArrayJClass,
22 JArrayJString,
23 JClass,
24 JThread,
25 Value,
26 sys,
27 FALSE,
28 JObject : import jni;
29
30 draw: Draw;
31 Context, Display, Image: import draw;
32
33include "java/lang/ClassLoader_L.m";
34include "awt_Color.m";
35
36ctxt : ref Context;
37systemcolors_file := "/java/lib/systemcolor.properties";
38
39rgbvmap := array[3*256] of {
40 byte 255,byte 255,byte 255, byte 255,byte 255,byte 170,
41 byte 255,byte 255,byte 85, byte 255,byte 255,byte 0,
42 byte 255,byte 170,byte 255, byte 255,byte 170,byte 170,
43 byte 255,byte 170,byte 85, byte 255,byte 170,byte 0,
44 byte 255,byte 85,byte 255, byte 255,byte 85,byte 170,
45 byte 255,byte 85,byte 85, byte 255,byte 85,byte 0,
46 byte 255,byte 0,byte 255, byte 255,byte 0,byte 170,
47 byte 255,byte 0,byte 85, byte 255,byte 0,byte 0,
48 byte 238,byte 0,byte 0, byte 238,byte 238,byte 238,
49 byte 238,byte 238,byte 158, byte 238,byte 238,byte 79,
50 byte 238,byte 238,byte 0, byte 238,byte 158,byte 238,
51 byte 238,byte 158,byte 158, byte 238,byte 158,byte 79,
52 byte 238,byte 158,byte 0, byte 238,byte 79,byte 238,
53 byte 238,byte 79,byte 158, byte 238,byte 79,byte 79,
54 byte 238,byte 79,byte 0, byte 238,byte 0,byte 238,
55 byte 238,byte 0,byte 158, byte 238,byte 0,byte 79,
56 byte 221,byte 0,byte 73, byte 221,byte 0,byte 0,
57 byte 221,byte 221,byte 221, byte 221,byte 221,byte 147,
58 byte 221,byte 221,byte 73, byte 221,byte 221,byte 0,
59 byte 221,byte 147,byte 221, byte 221,byte 147,byte 147,
60 byte 221,byte 147,byte 73, byte 221,byte 147,byte 0,
61 byte 221,byte 73,byte 221, byte 221,byte 73,byte 147,
62 byte 221,byte 73,byte 73, byte 221,byte 73,byte 0,
63 byte 221,byte 0,byte 221, byte 221,byte 0,byte 147,
64 byte 204,byte 0,byte 136, byte 204,byte 0,byte 68,
65 byte 204,byte 0,byte 0, byte 204,byte 204,byte 204,
66 byte 204,byte 204,byte 136, byte 204,byte 204,byte 68,
67 byte 204,byte 204,byte 0, byte 204,byte 136,byte 204,
68 byte 204,byte 136,byte 136, byte 204,byte 136,byte 68,
69 byte 204,byte 136,byte 0, byte 204,byte 68,byte 204,
70 byte 204,byte 68,byte 136, byte 204,byte 68,byte 68,
71 byte 204,byte 68,byte 0, byte 204,byte 0,byte 204,
72 byte 170,byte 255,byte 170, byte 170,byte 255,byte 85,
73 byte 170,byte 255,byte 0, byte 170,byte 170,byte 255,
74 byte 187,byte 187,byte 187, byte 187,byte 187,byte 93,
75 byte 187,byte 187,byte 0, byte 170,byte 85,byte 255,
76 byte 187,byte 93,byte 187, byte 187,byte 93,byte 93,
77 byte 187,byte 93,byte 0, byte 170,byte 0,byte 255,
78 byte 187,byte 0,byte 187, byte 187,byte 0,byte 93,
79 byte 187,byte 0,byte 0, byte 170,byte 255,byte 255,
80 byte 158,byte 238,byte 238, byte 158,byte 238,byte 158,
81 byte 158,byte 238,byte 79, byte 158,byte 238,byte 0,
82 byte 158,byte 158,byte 238, byte 170,byte 170,byte 170,
83 byte 170,byte 170,byte 85, byte 170,byte 170,byte 0,
84 byte 158,byte 79,byte 238, byte 170,byte 85,byte 170,
85 byte 170,byte 85,byte 85, byte 170,byte 85,byte 0,
86 byte 158,byte 0,byte 238, byte 170,byte 0,byte 170,
87 byte 170,byte 0,byte 85, byte 170,byte 0,byte 0,
88 byte 153,byte 0,byte 0, byte 147,byte 221,byte 221,
89 byte 147,byte 221,byte 147, byte 147,byte 221,byte 73,
90 byte 147,byte 221,byte 0, byte 147,byte 147,byte 221,
91 byte 153,byte 153,byte 153, byte 153,byte 153,byte 76,
92 byte 153,byte 153,byte 0, byte 147,byte 73,byte 221,
93 byte 153,byte 76,byte 153, byte 153,byte 76,byte 76,
94 byte 153,byte 76,byte 0, byte 147,byte 0,byte 221,
95 byte 153,byte 0,byte 153, byte 153,byte 0,byte 76,
96 byte 136,byte 0,byte 68, byte 136,byte 0,byte 0,
97 byte 136,byte 204,byte 204, byte 136,byte 204,byte 136,
98 byte 136,byte 204,byte 68, byte 136,byte 204,byte 0,
99 byte 136,byte 136,byte 204, byte 136,byte 136,byte 136,
100 byte 136,byte 136,byte 68, byte 136,byte 136,byte 0,
101 byte 136,byte 68,byte 204, byte 136,byte 68,byte 136,
102 byte 136,byte 68,byte 68, byte 136,byte 68,byte 0,
103 byte 136,byte 0,byte 204, byte 136,byte 0,byte 136,
104 byte 85,byte 255,byte 85, byte 85,byte 255,byte 0,
105 byte 85,byte 170,byte 255, byte 93,byte 187,byte 187,
106 byte 93,byte 187,byte 93, byte 93,byte 187,byte 0,
107 byte 85,byte 85,byte 255, byte 93,byte 93,byte 187,
108 byte 119,byte 119,byte 119, byte 119,byte 119,byte 0,
109 byte 85,byte 0,byte 255, byte 93,byte 0,byte 187,
110 byte 119,byte 0,byte 119, byte 119,byte 0,byte 0,
111 byte 85,byte 255,byte 255, byte 85,byte 255,byte 170,
112 byte 79,byte 238,byte 158, byte 79,byte 238,byte 79,
113 byte 79,byte 238,byte 0, byte 79,byte 158,byte 238,
114 byte 85,byte 170,byte 170, byte 85,byte 170,byte 85,
115 byte 85,byte 170,byte 0, byte 79,byte 79,byte 238,
116 byte 85,byte 85,byte 170, byte 102,byte 102,byte 102,
117 byte 102,byte 102,byte 0, byte 79,byte 0,byte 238,
118 byte 85,byte 0,byte 170, byte 102,byte 0,byte 102,
119 byte 102,byte 0,byte 0, byte 79,byte 238,byte 238,
120 byte 73,byte 221,byte 221, byte 73,byte 221,byte 147,
121 byte 73,byte 221,byte 73, byte 73,byte 221,byte 0,
122 byte 73,byte 147,byte 221, byte 76,byte 153,byte 153,
123 byte 76,byte 153,byte 76, byte 76,byte 153,byte 0,
124 byte 73,byte 73,byte 221, byte 76,byte 76,byte 153,
125 byte 85,byte 85,byte 85, byte 85,byte 85,byte 0,
126 byte 73,byte 0,byte 221, byte 76,byte 0,byte 153,
127 byte 85,byte 0,byte 85, byte 85,byte 0,byte 0,
128 byte 68,byte 0,byte 0, byte 68,byte 204,byte 204,
129 byte 68,byte 204,byte 136, byte 68,byte 204,byte 68,
130 byte 68,byte 204,byte 0, byte 68,byte 136,byte 204,
131 byte 68,byte 136,byte 136, byte 68,byte 136,byte 68,
132 byte 68,byte 136,byte 0, byte 68,byte 68,byte 204,
133 byte 68,byte 68,byte 136, byte 68,byte 68,byte 68,
134 byte 68,byte 68,byte 0, byte 68,byte 0,byte 204,
135 byte 68,byte 0,byte 136, byte 68,byte 0,byte 68,
136 byte 0,byte 255,byte 0, byte 0,byte 170,byte 255,
137 byte 0,byte 187,byte 187, byte 0,byte 187,byte 93,
138 byte 0,byte 187,byte 0, byte 0,byte 85,byte 255,
139 byte 0,byte 93,byte 187, byte 0,byte 119,byte 119,
140 byte 0,byte 119,byte 0, byte 0,byte 0,byte 255,
141 byte 0,byte 0,byte 187, byte 0,byte 0,byte 119,
142 byte 51,byte 51,byte 51, byte 0,byte 255,byte 255,
143 byte 0,byte 255,byte 170, byte 0,byte 255,byte 85,
144 byte 0,byte 238,byte 79, byte 0,byte 238,byte 0,
145 byte 0,byte 158,byte 238, byte 0,byte 170,byte 170,
146 byte 0,byte 170,byte 85, byte 0,byte 170,byte 0,
147 byte 0,byte 79,byte 238, byte 0,byte 85,byte 170,
148 byte 0,byte 102,byte 102, byte 0,byte 102,byte 0,
149 byte 0,byte 0,byte 238, byte 0,byte 0,byte 170,
150 byte 0,byte 0,byte 102, byte 34,byte 34,byte 34,
151 byte 0,byte 238,byte 238, byte 0,byte 238,byte 158,
152 byte 0,byte 221,byte 147, byte 0,byte 221,byte 73,
153 byte 0,byte 221,byte 0, byte 0,byte 147,byte 221,
154 byte 0,byte 153,byte 153, byte 0,byte 153,byte 76,
155 byte 0,byte 153,byte 0, byte 0,byte 73,byte 221,
156 byte 0,byte 76,byte 153, byte 0,byte 85,byte 85,
157 byte 0,byte 85,byte 0, byte 0,byte 0,byte 221,
158 byte 0,byte 0,byte 153, byte 0,byte 0,byte 85,
159 byte 17,byte 17,byte 17, byte 0,byte 221,byte 221,
160 byte 0,byte 204,byte 204, byte 0,byte 204,byte 136,
161 byte 0,byte 204,byte 68, byte 0,byte 204,byte 0,
162 byte 0,byte 136,byte 204, byte 0,byte 136,byte 136,
163 byte 0,byte 136,byte 68, byte 0,byte 136,byte 0,
164 byte 0,byte 68,byte 204, byte 0,byte 68,byte 136,
165 byte 0,byte 68,byte 68, byte 0,byte 68,byte 0,
166 byte 0,byte 0,byte 204, byte 0,byte 0,byte 136,
167 byte 0,byte 0,byte 68, byte 0,byte 0,byte 0,
168};
169
170modinit(jni_p : JNI)
171{
172 if (ctxt != nil)
173 return;
174
175 jni = jni_p;
176 sys = jni->sys;
177 ctxt = jni->getContext();
178 if (ctxt == nil)
179 jni->ThrowException("java.awt.AWTError", "can't get Draw Context");
180 draw = load Draw Draw->PATH;
181
182}
183
184getColor(jni_p: JNI, c: JObject) : ref Image
185{
186 modinit(jni_p);
187
188 cm_index := getColorIndex(jni_p, c);
189 # (red, green, blue) := ctxt.display.cmap2rgb(cm_index);
190 # sys->print("Inferno color: red=%d, green=%d, blue=%d\n", red, green, blue);
191 col := ctxt.display.color(cm_index);
192 return col;
193}
194
195getColorIndex(jni_p: JNI, c: JObject) : int
196{
197 modinit(jni_p);
198
199 if (c == nil) {
200 sys->print("getColorIndex: null Color object\n");
201 return 0;
202 }
203
204 val := jni->GetObjField( c, "pData", "I" );
205 if ( val == nil )
206 sys->print( "getColorIndex: Couldn't get pData field from color object.\n" );
207 else {
208 pdata := val.Int();
209 if (pdata != 0) {
210 # sys->print("Using pData. pData = %d\n", pdata);
211 return pdata - 1;
212 }
213 }
214
215 (ret, err) := jni->CallMethod(c, "getRGB", "()I", nil);
216 if (err != jni->OK)
217 jni->FatalError("awt_Color couldn't get RGB values of color");
218
219 rgb := ret.Int();
220 r := (rgb >> 16) & 255;
221 g := (rgb >> 8) & 255;
222 b := (rgb >> 0) & 255;
223 cm_index := ctxt.display.rgb2cmap(r,g,b);
224 # sys->print( "rgb: %d\n", rgb);
225 # sys->print( "red: %d; green: %d; blue %d\n", r, g, b);
226 # sys->print("Color map index is %d.\n", cm_index);
227
228 # sys->print("Setting pData to %d\n", cm_index+1);
229 val = ref Value.TInt(cm_index+1);
230 err = jni->SetObjField( c, "pData", val );
231 if (err != jni->OK)
232 sys->print("getColorIndex: Couldn't set Color pData field\n");
233
234 return cm_index;
235}
236
237makeColorModel(jni_p: JNI, bits: int) : JObject
238{
239 modinit(jni_p);
240
241 cast := jni->CastMod();
242 jbary := jni->MkAByte(rgbvmap);
243 arraylen := len jbary.ary;
244 # sys->print("makeColorModel: Array length is %d.\n", arraylen);
245
246 args := array[5] of ref Value;
247 args[0] = ref Value.TInt(bits);
248 args[1] = ref Value.TInt(256);
249 args[2] = ref Value.TObject(cast->FromJArray(cast->ByteToJArray(jbary)));
250 args[3] = ref Value.TInt(0);
251 args[4] = ref Value.TBoolean(jni->FALSE);
252
253 cl_data := jni->FindClass("java/awt/image/IndexColorModel");
254 if (cl_data == nil)
255 jni->FatalError("awt_Color couldn't load java/awt/image/IndexColorModel");
256 jobj := jni->AllocObject(cl_data);
257 (ret, err) := jni->CallMethod(jobj, "<init>", "(II[BIZ)V", args);
258
259 if (err != jni->OK)
260 jni->FatalError("awt_Color couldn't create IndexColorModel");
261
262 system_flag := ref Value.TInt(1);
263 err = jni->SetObjField( jobj, "pData", system_flag );
264 if (err != jni->OK)
265 sys->print("makeColorModel: Couldn't set ColorModel pData field to 1\n");
266
267 return jobj;
268}
269
270
271loadSystemColors(jni_p: JNI, systemColors: JArrayI)
272{
273 val : ref Value;
274
275 modinit(jni_p);
276
277 cl := jni->GetClassObject(jni->FindClass("java/awt/SystemColor"));
278 if (cl == nil)
279 jni->FatalError("iToolkit_L couldn't load java/awt/SystemColor");
280 val = jni->GetStaticField( cl.class, "NUM_COLORS", "I" );
281 if ( val == nil ) {
282 sys->print( "loadSystemColors: Couldn't get NUM_COLORS field from SystemColor class.\n" );
283 return;
284 }
285
286 num_colors := val.Int();
287 # sys->print("Using GetStaticField: NUM_COLORS = %d\n", num_colors);
288
289 lines := readfile(systemcolors_file);
290 if (lines == nil) {
291 sys->print( "loadSystemColors: Couldn't read %s\n", systemcolors_file);
292 return;
293 }
294 for(; lines != nil; lines = tl lines) {
295 line := hd lines;
296 (n, l) := sys->tokenize(line, " \t=");
297 if (n < 2 || line[0] == '#')
298 continue;
299 key := hd l;
300 line = hd tl l;
301 (n, l) = sys->tokenize(line, ";");
302 if (n != 3)
303 continue;
304 r := int hd l;
305 g := int hd tl l;
306 b := int hd tl tl l;
307 # sys->print(" key = %s: r = %d; g = %d; b = %d\n", key, r, g, b);
308 val = jni->GetStaticField( cl.class, key, "I" );
309 if ( val == nil )
310 continue;
311 index := val.Int();
312 color := (255 << 24) | ((r & 255) << 16) | ((g & 255) << 8) | ((b & 255) << 0);
313 systemColors.ary[index] = color;
314 }
315
316 return;
317}
318
319
320# read a file and return its lines as a list of strings
321readfile(filename: string) : list of string
322{
323 fd := sys->open(filename, sys->OREAD);
324 if(fd != nil) {
325 (n, dir) := sys->fstat(fd);
326 if(n < 0)
327 return nil; # shouldn't happen
328 buf := array[dir.length] of byte;
329 n = sys->read(fd, buf, dir.length);
330 if(n == dir.length) {
331 (nil, linelist) := sys->tokenize(string buf[0:n], "\r\n");
332 return linelist;
333 }
334 }
335 return nil;
336}
337
338
java/pkg/awt/awt_Color.m+13−0
@@ -0,0 +1,13 @@
1#
2# %W% - %E%
3#
4
5AwtColor : module
6{
7 PATH : con "/dis/java/inferno/awt/awt_Color.dis";
8
9 getColor : fn(jni: JNI, c: JObject) : ref Image;
10 getColorIndex : fn(jni: JNI, c: JObject) : int;
11 makeColorModel : fn(jni: JNI, bits: int) : JObject;
12 loadSystemColors : fn(jni: JNI, systemColors: JArrayI);
13};
java/pkg/awt/awt_Frame.b+250−0
@@ -0,0 +1,250 @@
1#
2# %W% - %E%
3#
4
5implement FrameManager;
6
7include "sys.m";
8 sys: Sys;
9
10include "string.m";
11 str: String;
12
13include "draw.m";
14 draw: Draw;
15 Context, Display, Point, Rect, Image, Screen: import draw;
16
17include "tk.m";
18 tk: Tk;
19 Toplevel: import tk;
20
21include "wmlib.m";
22 wmlib: Wmlib;
23
24include "awt_Frame.m";
25
26screen: ref Screen;
27display: ref Display;
28ones: ref Image;
29white: ref Image;
30nochan: chan of string;
31tHeight : int;
32bWidth: int;
33
34win_cfg := array[] of {
35 "canvas .c -height 306 -width 406",
36 "pack .c -side bottom -fill both -expand 1",
37# ".c configure -side bottom -fill both -expand 1",
38 "pack propagate . 0",
39};
40
41win_bind := array[] of {
42 "bind # <Motion> {send butt m %b %X %Y}",
43 "bind # <Leave> {send butt Leave}",
44# "bind # <ButtonPress> {focus #; send foc focus; send butt p %b %X %Y}",
45 "bind # <ButtonPress> {focus #; send butt p %b %X %Y}",
46 "bind # <ButtonRelease> {send butt r %b %X %Y}",
47 "bind # <Double-Button> {send butt d %b %X %Y}",
48 "bind # <Enter> {send butt Enter}",
49 "bind # <KeyPress> {send key %K}",
50# "bind . <FocusIn> {send foc focus}",
51# "bind .Wm_t <Button-1> +{focus #; send foc focus}",
52 "bind .Wm_t <Button-1> +{focus #}",
53# "bind .Wm_t.title <Button-1> +{focus #; send foc focus}",
54 "bind .Wm_t.title <Button-1> +{focus #}",
55};
56
57modinit(ctxt: ref Context)
58{
59 if (sys != nil)
60 return;
61
62 sys = load Sys Sys->PATH;
63 str = load String String->PATH;
64 draw = load Draw Draw->PATH;
65 tk = load Tk Tk->PATH;
66 wmlib = load Wmlib Wmlib->PATH;
67 nochan = chan of string;
68
69 display = ctxt.display;
70 screen = ctxt.screen;
71 ones = display.ones;
72 white = display.color(Draw->White);
73
74 wmlib->init();
75}
76showwin(cv : ref Canvas)
77{
78 tk->cmd(cv.top, "pack " + cv.canvas);
79}
80makewin(ctxt: ref Context, title: string, x, y, width, height: int): ref Canvas
81{
82 modinit(ctxt);
83 where := "-x " + string x + " -y " + string y;
84 (t, menu) := wmlib->titlebar(screen, where, title, Wmlib->Appl);
85
86# calculate topInset and boardwidth
87 bWidth = int tk->cmd(t, ". cget -bd");
88 tHeight = int tk->cmd(t, ". cget -height");
89
90
91
92 if (width > 0 && height > 0)
93 win_cfg[0] = "canvas .c -height " + string (height - tHeight - bWidth) +
94 " -width " + string (width - 2*bWidth);
95
96# win_cfg[0] = "canvas .c -height " + string height + " -width " + string width;
97
98 wmlib->tkcmds(t, win_cfg);
99 return alloccanvas(t, ctxt, ".c", menu);
100}
101
102resizewin(cv: ref Canvas, x, y, width, height : int)
103{
104}
105
106alloccanvas(t: ref Toplevel, ctxt: ref Draw->Context, canvas: string, menu: chan of string): ref Canvas
107{
108 cmd := chan of string;
109 tk->namechan(t, cmd, "cmd");
110 butt := chan of string;
111 tk->namechan(t, butt, "butt");
112# mouse := chan of string;
113# tk->namechan(t, mouse, "mouse");
114
115 key := chan of string;
116 tk->namechan(t, key, "key");
117
118 foc := chan of string;
119 tk->namechan(t, foc, "foc");
120
121 tk->cmd(t, "bind . <Configure> {send cmd resize}");
122 tk->cmd(t, "bind . <Map> {send cmd map}");
123
124 for (i := 0; i < len win_bind; i++)
125 tk->cmd(t, expand(win_bind[i], canvas));
126
127 tk->cmd(t, "update");
128
129 c := ref Canvas;
130 display = ctxt.display;
131 c.image = display.image;
132 c.rect = canvposn(t, canvas);
133 c.buf = display.newimage(c.image.r, c.image.ldepth , 0, Draw->White);
134 c.events = chan of ref Event;
135 c.top = t;
136 c.ctxt = ctxt;
137 c.canvas = canvas;
138 c.pid = sys->pctl(0, nil);
139
140# calculate topInset and boardwidth
141 y1 := int tk->cmd(t, ". cget -acty") + int tk->cmd(t, ".dy get");
142 y2 := int tk->cmd(t, ".c cget -acty") + int tk->cmd(t, ".dy get");
143
144# tHeight = int tk->cmd(t, ".Wm_t cget -actheight");
145 tHeight = y2 - y1;
146 bWidth = int tk->cmd(t, ". cget -bd");
147
148 paint(c, c_canvposn(t, canvas));
149 spawn handler(c, menu, cmd, butt, key, foc);
150 return c;
151}
152
153hidewin(c: ref Canvas)
154{
155 tk->cmd(c.top, "pack forget " + c.canvas);
156}
157
158handler(c: ref Canvas, menu, cmd, butt, key, foc: chan of string)
159{
160 detail: string;
161 t := c.top;
162 if (menu == nil)
163 menu = nochan;
164 for (;;) alt {
165 detail = <- menu =>
166 case detail {
167 "exit" =>
168 c.events <- = ref Event(Event.Shutdown, nil);
169 "task" =>
170 c.events <- = ref Event(Event.Icon, nil);
171# "move" =>
172# sys->print("===== moving \n");
173 * =>
174 ;
175 }
176 wmlib->titlectl(c.top, detail);
177
178 detail = <- cmd =>
179 (n, word) := sys->tokenize(detail, " ");
180 case hd word {
181 "resize" or "map" =>
182 c.rect = canvposn(t, c.canvas);
183 paint(c, c_canvposn(t, c.canvas));
184 e := Event.Resize;
185 if (hd word == "map") {
186 e = Event.DeIcon;
187 tk->cmd(t, "focus " + c.canvas);
188 }
189 c.events <- = ref Event(e, nil);
190 * =>
191 ;
192 }
193 detail = <- butt =>
194
195 c.events <- = ref Event(Event.Button, detail);
196 detail = <- key =>
197 c.events <- = ref Event(Event.Key, detail);
198# detail = <- foc =>
199# c.events <- = ref Event(Event.Focus, detail);
200
201 }
202}
203
204expand(cmd, canvas: string): string
205{
206 s: string;
207 for (;;) {
208 (l, r) := str->splitl(cmd, "#");
209 s = s + l;
210 if (r == nil)
211 return s;
212 s = s + canvas;
213 cmd = r[1:];
214 }
215}
216
217paint(c: ref Canvas, r: Rect)
218{
219 c.image.draw(r, white, ones, (0, 0));
220}
221
222c_canvposn(t: ref Toplevel, c: string): Rect
223{
224 r: Rect;
225
226 r.min.x = int tk->cmd(t, c + " cget -actx") + int tk->cmd(t, ".dx get");
227 r.min.y = int tk->cmd(t, c + " cget -acty") + int tk->cmd(t, ".dy get");
228 r.max.x = r.min.x + int tk->cmd(t, c + " cget -actwidth") + int tk->cmd(t, ".dw get");
229 r.max.y = r.min.y + int tk->cmd(t, c + " cget -actheight") + int tk->cmd(t, ".dh get");
230 return r;
231}
232canvposn(t: ref Toplevel, c: string): Rect
233{
234 r: Rect;
235
236 r.min.x = int tk->cmd(t, ". cget -actx") + int tk->cmd(t, ".dx get");
237 r.min.y = int tk->cmd(t, ". cget -acty") + int tk->cmd(t, ".dy get");
238 r.max.x = r.min.x + int tk->cmd(t, ". cget -actwidth") + int tk->cmd(t, ".dw get");
239 r.max.y = r.min.y + int tk->cmd(t, ". cget -actheight") + int tk->cmd(t, ".dh get");
240 return r;
241}
242getInsets(): (int, int)
243{
244 return (bWidth, tHeight);
245}
246
247mapCanvas(dimg : ref Image, wimg : ref Image)
248{
249 dimg.draw(dimg.r, wimg, ones, dimg.r.min);
250}
java/pkg/awt/awt_Frame.m+46−0
@@ -0,0 +1,46 @@
1#
2# %W% - %E%
3#
4
5FrameManager: module
6{
7 PATH: con "/dis/java/inferno/awt/awt_Frame.dis";
8
9 Event: adt
10 {
11 event: int;
12 detail: string;
13
14 Button, Key,
15 Icon, DeIcon,
16 Resize, Shutdown, Focus
17 : con iota;
18 };
19
20 Attr: adt
21 {
22 origin: Draw->Point;
23 dims: Draw->Point;
24 };
25
26 Canvas: adt
27 {
28 # interface
29 image: ref Draw->Image;
30 buf: ref Draw->Image;
31 rect: Draw->Rect;
32 events: chan of ref Event;
33 attr: ref Attr;
34 # implementation
35 ctxt : ref Draw->Context;
36 top: ref Tk->Toplevel;
37 canvas: string;
38 pid: int;
39 };
40
41 makewin: fn(ctxt: ref Draw->Context, title: string, x, y, width, height: int): ref Canvas;
42 resizewin: fn(cv: ref Canvas, x, y, width, height : int);
43 hidewin: fn(c: ref Canvas);

3 more lines aren’t shown here.

java/pkg/awt/awt_Graphics.b+209−0

This diff is large: its 210 lines aren’t shown here.

java/pkg/awt/awt_Graphics.m+43−0

This diff is large: its 44 lines aren’t shown here.

java/pkg/awt/awt_Image.m+36−0

This diff is large: its 37 lines aren’t shown here.

java/pkg/awt/iDrawingSurfaceInfo.java+117−0

This diff is large: its 118 lines aren’t shown here.

java/pkg/awt/iDrawingSurfaceInfo_L.b+56−0

This diff is large: its 57 lines aren’t shown here.

java/pkg/awt/iDrawingSurfaceInfo_L.m+21−0

This diff is large: its 22 lines aren’t shown here.

java/pkg/awt/iFontMetrics.java+266−0

This diff is large: its 267 lines aren’t shown here.

java/pkg/awt/iFontMetrics_L.b+123−0

This diff is large: its 124 lines aren’t shown here.

java/pkg/awt/iFontMetrics_L.m+27−0

This diff is large: its 28 lines aren’t shown here.

java/pkg/awt/iFontPeer.java+276−0

This diff is large: its 277 lines aren’t shown here.

java/pkg/awt/iFontPeer_L.b+115−0

This diff is large: its 116 lines aren’t shown here.

java/pkg/awt/iFontPeer_L.m+20−0

This diff is large: its 21 lines aren’t shown here.

java/pkg/awt/iFramePeer.java+527−0

This diff is large: its 528 lines aren’t shown here.

java/pkg/awt/iFramePeer_L.b+588−0

This diff is large: its 589 lines aren’t shown here.

java/pkg/awt/iFramePeer_L.m+36−0

This diff is large: its 37 lines aren’t shown here.

java/pkg/awt/iGraphics.java+606−0

This diff is large: its 607 lines aren’t shown here.

java/pkg/awt/iGraphics_L.b+245−0

This diff is large: its 246 lines aren’t shown here.

java/pkg/awt/iGraphics_L.m+50−0

This diff is large: its 51 lines aren’t shown here.

java/pkg/awt/iImage.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/awt/iImageConsumer.java+0−0

Empty file added.

java/pkg/awt/iImageRepresentation.java+91−0

This diff is large: its 92 lines aren’t shown here.

java/pkg/awt/iImageRepresentation_L.b+152−0

This diff is large: its 153 lines aren’t shown here.

java/pkg/awt/iImageRepresentation_L.m+36−0

This diff is large: its 37 lines aren’t shown here.

java/pkg/awt/iImage_L.b+180−0

This diff is large: its 181 lines aren’t shown here.

java/pkg/awt/iImage_L.m+26−0

This diff is large: its 27 lines aren’t shown here.

java/pkg/awt/iMenuBarPeer.java+906−0

This diff is large: its 907 lines aren’t shown here.

java/pkg/awt/iOffScreenImage.java+33−0

This diff is large: its 34 lines aren’t shown here.

java/pkg/awt/iPopupMenuPeer.java+652−0

This diff is large: its 653 lines aren’t shown here.

java/pkg/awt/iToolkit.java+303−0

This diff is large: its 304 lines aren’t shown here.

java/pkg/awt/iToolkit_L.b+85−0

This diff is large: its 86 lines aren’t shown here.

java/pkg/awt/iToolkit_L.m+19−0

This diff is large: its 20 lines aren’t shown here.

java/pkg/awt/iWindowPeer.java+411−0

This diff is large: its 412 lines aren’t shown here.

java/pkg/awt/iWindowPeer_L.b+377−0

This diff is large: its 378 lines aren’t shown here.

java/pkg/awt/iWindowPeer_L.m+36−0

This diff is large: its 37 lines aren’t shown here.

java/pkg/awt/mkfile+126−0

This diff is large: its 127 lines aren’t shown here.

java/pkg/com/mkfile+7−0

This diff is large: its 8 lines aren’t shown here.

java/pkg/com/oracle/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/oracle/net/Sdp.java+201−0

This diff is large: its 202 lines aren’t shown here.

java/pkg/com/oracle/net/mkfile+8−0

This diff is large: its 9 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_de.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_en.properties+142−0

This diff is large: its 143 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_es.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_fr.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_it.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_ja.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_ko.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_sv.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_zh_CN.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/accessibility_zh_TW.properties+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/accessibility/internal/resources/mkfile+2−0

This diff is large: its 3 lines aren’t shown here.

java/pkg/com/sun/accessibility/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/awt/AWTUtilities$1.class+0−0

Binary file not shown.

java/pkg/com/sun/awt/AWTUtilities$Translucency.class+0−0

Binary file not shown.

java/pkg/com/sun/awt/AWTUtilities.class+0−0

Binary file not shown.

java/pkg/com/sun/awt/AWTUtilities.java+462−0

This diff is large: its 463 lines aren’t shown here.

java/pkg/com/sun/awt/SecurityWarning.java+169−0

This diff is large: its 170 lines aren’t shown here.

java/pkg/com/sun/awt/mkfile+9−0

This diff is large: its 10 lines aren’t shown here.

java/pkg/com/sun/beans/TypeResolver.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/TypeResolver.java+410−0

This diff is large: its 411 lines aren’t shown here.

java/pkg/com/sun/beans/WeakCache.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/WeakCache.java+91−0

This diff is large: its 92 lines aren’t shown here.

java/pkg/com/sun/beans/WildcardTypeImpl.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/WildcardTypeImpl.java+161−0

This diff is large: its 162 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/AccessorElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/AccessorElementHandler.java+105−0

This diff is large: its 106 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/ArrayElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/ArrayElementHandler.java+133−0

This diff is large: its 134 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/BooleanElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/BooleanElementHandler.java+69−0

This diff is large: its 70 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/ByteElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/ByteElementHandler.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/CharElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/CharElementHandler.java+92−0

This diff is large: its 93 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/ClassElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/ClassElementHandler.java+62−0

This diff is large: its 63 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/DocumentHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/DocumentHandler.java+389−0

This diff is large: its 390 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/DoubleElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/DoubleElementHandler.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/ElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/ElementHandler.java+224−0

This diff is large: its 225 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/FalseElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/FalseElementHandler.java+56−0

This diff is large: its 57 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/FieldElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/FieldElementHandler.java+189−0

This diff is large: its 190 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/FloatElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/FloatElementHandler.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/IntElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/IntElementHandler.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/JavaElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/JavaElementHandler.java+151−0

This diff is large: its 152 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/LongElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/LongElementHandler.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/MethodElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/MethodElementHandler.java+109−0

This diff is large: its 110 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/NewElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/NewElementHandler.java+205−0

This diff is large: its 206 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/NullElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/NullElementHandler.java+76−0

This diff is large: its 77 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/ObjectElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/ObjectElementHandler.java+168−0

This diff is large: its 169 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/PropertyElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/PropertyElementHandler.java+287−0

This diff is large: its 288 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/ShortElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/ShortElementHandler.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/StringElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/StringElementHandler.java+116−0

This diff is large: its 117 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/TrueElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/TrueElementHandler.java+56−0

This diff is large: its 57 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/ValueObject.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/ValueObject.java+50−0

This diff is large: its 51 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/ValueObjectImpl.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/ValueObjectImpl.java+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/VarElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/VarElementHandler.java+82−0

This diff is large: its 83 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/VoidElementHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/decoder/VoidElementHandler.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/beans/decoder/mkfile+34−0

This diff is large: its 35 lines aren’t shown here.

java/pkg/com/sun/beans/finder/AbstractFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/AbstractFinder.java+213−0

This diff is large: its 214 lines aren’t shown here.

java/pkg/com/sun/beans/finder/BeanInfoFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/BeanInfoFinder.java+98−0

This diff is large: its 99 lines aren’t shown here.

java/pkg/com/sun/beans/finder/ClassFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/ClassFinder.java+176−0

This diff is large: its 177 lines aren’t shown here.

java/pkg/com/sun/beans/finder/ConstructorFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/ConstructorFinder.java+127−0

This diff is large: its 128 lines aren’t shown here.

java/pkg/com/sun/beans/finder/FieldFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/FieldFinder.java+106−0

This diff is large: its 107 lines aren’t shown here.

java/pkg/com/sun/beans/finder/InstanceFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/InstanceFinder.java+109−0

This diff is large: its 110 lines aren’t shown here.

java/pkg/com/sun/beans/finder/MethodFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/MethodFinder.java+231−0

This diff is large: its 232 lines aren’t shown here.

java/pkg/com/sun/beans/finder/PersistenceDelegateFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/PersistenceDelegateFinder.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/beans/finder/PrimitiveTypeMap.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/PrimitiveTypeMap.java+70−0

This diff is large: its 71 lines aren’t shown here.

java/pkg/com/sun/beans/finder/PrimitiveWrapperMap.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/PrimitiveWrapperMap.java+86−0

This diff is large: its 87 lines aren’t shown here.

java/pkg/com/sun/beans/finder/PropertyEditorFinder.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/PropertyEditorFinder.java+87−0

This diff is large: its 88 lines aren’t shown here.

java/pkg/com/sun/beans/finder/Signature.class+0−0

Binary file not shown.

java/pkg/com/sun/beans/finder/Signature.java+169−0

This diff is large: its 170 lines aren’t shown here.

java/pkg/com/sun/beans/finder/mkfile+19−0

This diff is large: its 20 lines aren’t shown here.

java/pkg/com/sun/beans/mkfile+15−0

This diff is large: its 16 lines aren’t shown here.

java/pkg/com/sun/crypto/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/AESCipher.java+427−0

This diff is large: its 428 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/AESConstants.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/AESCrypt.java+659−0

This diff is large: its 660 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/AESKeyGenerator.java+117−0

This diff is large: its 118 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/AESParameters.java+87−0

This diff is large: its 88 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/AESWrapCipher.java+483−0

This diff is large: its 484 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/ARCFOURCipher.java+263−0

This diff is large: its 264 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/BlockCipherParamsCore.java+127−0

This diff is large: its 128 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/BlowfishCipher.java+428−0

This diff is large: its 429 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/BlowfishConstants.java+41−0

This diff is large: its 42 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/BlowfishCrypt.java+558−0

This diff is large: its 559 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/BlowfishKeyGenerator.java+115−0

This diff is large: its 116 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/BlowfishParameters.java+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/CipherBlockChaining.java+212−0

This diff is large: its 213 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/CipherCore.java+943−0

This diff is large: its 944 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/CipherFeedback.java+272−0

This diff is large: its 273 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/CipherTextStealing.java+215−0

This diff is large: its 216 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/CipherWithWrappingSpi.java+261−0

This diff is large: its 262 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/ConstructKeys.java+191−0

This diff is large: its 192 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/CounterMode.java+210−0

This diff is large: its 211 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESCipher.java+428−0

This diff is large: its 429 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESConstants.java+39−0

This diff is large: its 40 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESCrypt.java+1145−0

This diff is large: its 1146 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESKey.java+161−0

This diff is large: its 162 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESKeyFactory.java+164−0

This diff is large: its 165 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESKeyGenerator.java+147−0

This diff is large: its 148 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESParameters.java+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESedeCipher.java+426−0

This diff is large: its 427 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESedeCrypt.java+168−0

This diff is large: its 169 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESedeKey.java+162−0

This diff is large: its 163 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESedeKeyFactory.java+161−0

This diff is large: its 162 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESedeKeyGenerator.java+145−0

This diff is large: its 146 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESedeParameters.java+87−0

This diff is large: its 88 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DESedeWrapCipher.java+567−0

This diff is large: its 568 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DHKeyAgreement.java+412−0

This diff is large: its 413 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DHKeyFactory.java+236−0

This diff is large: its 237 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DHKeyPairGenerator.java+186−0

This diff is large: its 187 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DHParameterGenerator.java+171−0

This diff is large: its 172 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DHParameters.java+144−0

This diff is large: its 145 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DHPrivateKey.java+352−0

This diff is large: its 353 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/DHPublicKey.java+331−0

This diff is large: its 332 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/ElectronicCodeBook.java+160−0

This diff is large: its 161 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/EncryptedPrivateKeyInfo.java+130−0

This diff is large: its 131 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/FeedbackCipher.java+199−0

This diff is large: its 200 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/HmacCore.java+348−0

This diff is large: its 349 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/HmacMD5.java+133−0

This diff is large: its 134 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/HmacMD5KeyGenerator.java+109−0

This diff is large: its 110 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/HmacPKCS12PBESHA1.java+203−0

This diff is large: its 204 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/HmacSHA1.java+133−0

This diff is large: its 134 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/HmacSHA1KeyGenerator.java+109−0

This diff is large: its 110 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/ISO10126Padding.java+123−0

This diff is large: its 124 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/JceKeyStore.java+903−0

This diff is large: its 904 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/KeyGeneratorCore.java+221−0

This diff is large: its 222 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/KeyProtector.java+410−0

This diff is large: its 411 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/OAEPParameters.java+259−0

This diff is large: its 260 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/OutputFeedback.java+229−0

This diff is large: its 230 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PBECipherCore.java+541−0

This diff is large: its 542 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PBEKey.java+154−0

This diff is large: its 155 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PBEKeyFactory.java+203−0

This diff is large: its 204 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PBEParameters.java+143−0

This diff is large: its 144 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PBEWithMD5AndDESCipher.java+429−0

This diff is large: its 430 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java+435−0

This diff is large: its 436 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java+154−0

This diff is large: its 155 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PBKDF2KeyImpl.java+282−0

This diff is large: its 283 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PCBC.java+198−0

This diff is large: its 199 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PKCS12PBECipherCore.java+521−0

This diff is large: its 522 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PKCS5Padding.java+128−0

This diff is large: its 129 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/Padding.java+84−0

This diff is large: its 85 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/PrivateKeyInfo.java+90−0

This diff is large: its 91 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/RC2Cipher.java+151−0

This diff is large: its 152 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/RC2Crypt.java+320−0

This diff is large: its 321 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/RC2Parameters.java+229−0

This diff is large: its 230 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/RSACipher.java+444−0

This diff is large: its 445 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/SslMacCore.java+264−0

This diff is large: its 265 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/SunJCE.java+456−0

This diff is large: its 457 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/SymmetricCipher.java+102−0

This diff is large: its 103 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/TlsKeyMaterialGenerator.java+277−0

This diff is large: its 278 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/TlsMasterSecretGenerator.java+175−0

This diff is large: its 176 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/TlsPrfGenerator.java+368−0

This diff is large: its 369 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java+85−0

This diff is large: its 86 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/ai.java+64−0

This diff is large: its 65 lines aren’t shown here.

java/pkg/com/sun/crypto/provider/mkfile+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/demo/jvmti/hprof/Tracker.java+102−0

This diff is large: its 103 lines aren’t shown here.

java/pkg/com/sun/demo/jvmti/hprof/mkfile+8−0

This diff is large: its 9 lines aren’t shown here.

java/pkg/com/sun/demo/jvmti/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/demo/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/imageio/mkfile+8−0

This diff is large: its 9 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/BMPConstants.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPConstants.java+53−0

This diff is large: its 54 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$1.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$2.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$3.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$4.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$5.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader$EmbeddedProgressAdapter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReader.java+1821−0

This diff is large: its 1822 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageReaderSpi.java+94−0

This diff is large: its 95 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter$1.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter$2.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter$IIOWriteProgressAdapter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriter.java+1532−0

This diff is large: its 1533 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPImageWriterSpi.java+106−0

This diff is large: its 107 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/BMPMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/bmp/BMPMetadata.java+307−0

This diff is large: its 308 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/BMPMetadataFormat.java+208−0

This diff is large: its 209 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/BMPMetadataFormatResources.java+69−0

This diff is large: its 70 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/bmp/mkfile+15−0

This diff is large: its 16 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/BitFile.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/BitFile.java+123−0

This diff is large: its 124 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/BogusColorSpace.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/BogusColorSpace.java+136−0

This diff is large: its 137 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/I18N.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/I18N.java+33−0

This diff is large: its 34 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/I18NImpl.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/I18NImpl.java+62−0

This diff is large: its 63 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/ImageUtil.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/ImageUtil.java+1167−0

This diff is large: its 1168 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/InputStreamAdapter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/InputStreamAdapter.java+49−0

This diff is large: its 50 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/LZWCompressor.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/LZWCompressor.java+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/LZWStringTable.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/LZWStringTable.java+218−0

This diff is large: its 219 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/PaletteBuilder$ColorNode.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/PaletteBuilder.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/PaletteBuilder.java+486−0

This diff is large: its 487 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/ReaderUtil.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/ReaderUtil.java+216−0

This diff is large: its 217 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/StandardMetadataFormat.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/StandardMetadataFormat.java+499−0

This diff is large: its 500 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/StandardMetadataFormatResources.java+210−0

This diff is large: its 211 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/SubImageInputStream.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/common/SubImageInputStream.java+79−0

This diff is large: its 80 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/iio-plugin.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/common/mkfile+20−0

This diff is large: its 21 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFImageMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFImageMetadata.java+446−0

This diff is large: its 447 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFImageMetadataFormat.java+171−0

This diff is large: its 172 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFImageMetadataFormatResources.java+104−0

This diff is large: its 105 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFImageReader.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFImageReader.java+1028−0

This diff is large: its 1029 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFImageReaderSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFImageReaderSpi.java+99−0

This diff is large: its 100 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFImageWriteParam.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFImageWriter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFImageWriter.java+1317−0

This diff is large: its 1318 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFImageWriterSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFImageWriterSpi.java+104−0

This diff is large: its 105 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFMetadata.java+317−0

This diff is large: its 318 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFStreamMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFStreamMetadata.java+320−0

This diff is large: its 321 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFStreamMetadataFormat.java+106−0

This diff is large: its 107 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFStreamMetadataFormatResources.java+71−0

This diff is large: its 72 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFWritableImageMetadata.java+402−0

This diff is large: its 403 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.java+267−0

This diff is large: its 268 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/gif/mkfile+20−0

This diff is large: its 21 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.java+136−0

This diff is large: its 137 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/COMMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/COMMarkerSegment.java+133−0

This diff is large: its 134 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/DHTMarkerSegment$Htable.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/DHTMarkerSegment.java+260−0

This diff is large: its 261 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/DQTMarkerSegment$Qtable.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/DQTMarkerSegment.java+309−0

This diff is large: its 310 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/DRIMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/DRIMarkerSegment.java+83−0

This diff is large: its 84 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/ImageTypeIterator.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/ImageTypeProducer.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$1.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$ICCMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$IllegalThumbException.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFExtensionMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumb.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbJPEG$ThumbnailReadListener.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbJPEG.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbPalette.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbRGB.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbUncompressed.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.java+1564−0

This diff is large: its 1565 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEG$JCS.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEG.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEG.java+371−0

This diff is large: its 372 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGBuffer.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGBuffer.java+254−0

This diff is large: its 255 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.java+366−0

This diff is large: its 367 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormatResources.java+143−0

This diff is large: its 144 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReader$1.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReader$JPEGReaderDisposerRecord.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReader.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReader.java+1675−0

This diff is large: its 1676 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReaderResources.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.java+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriter$JPEGWriterDisposerRecord.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java+1809−0

This diff is large: its 1810 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriterResources.java+82−0

This diff is large: its 83 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.java+98−0

This diff is large: its 99 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadata.java+2416−0

This diff is large: its 2417 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.java+157−0

This diff is large: its 158 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGMetadataFormatResources.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormat.java+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormatResources.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/MarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/MarkerSegment.java+224−0

This diff is large: its 225 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/SOFMarkerSegment$ComponentSpec.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/SOFMarkerSegment.java+284−0

This diff is large: its 285 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/SOSMarkerSegment$ScanComponentSpec.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/jpeg/SOSMarkerSegment.java+241−0

This diff is large: its 242 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/jpeg/mkfile+31−0

This diff is large: its 32 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/mkfile+11−0

This diff is large: its 12 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/CRC.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/ChunkStream.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/IDATOutputStream.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/PNGImageDataEnumeration.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/PNGImageReader.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/PNGImageReader.java+1592−0

This diff is large: its 1593 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/PNGImageReaderSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/PNGImageReaderSpi.java+103−0

This diff is large: its 104 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/PNGImageWriteParam.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/PNGImageWriter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/PNGImageWriter.java+1171−0

This diff is large: its 1172 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/PNGImageWriterSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/PNGImageWriterSpi.java+126−0

This diff is large: its 127 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/PNGMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/PNGMetadata.java+2046−0

This diff is large: its 2047 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/PNGMetadataFormat.java+500−0

This diff is large: its 501 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/PNGMetadataFormatResources.java+219−0

This diff is large: its 220 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/RowFilter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/png/RowFilter.java+192−0

This diff is large: its 193 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/png/mkfile+15−0

This diff is large: its 16 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageReader.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageReader.java+322−0

This diff is large: its 323 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.java+130−0

This diff is large: its 131 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageWriter.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageWriter.java+315−0

This diff is large: its 316 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.java+93−0

This diff is large: its 94 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPMetadata.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPMetadata.java+134−0

This diff is large: its 135 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/wbmp/WBMPMetadataFormat.java+70−0

This diff is large: its 71 lines aren’t shown here.

java/pkg/com/sun/imageio/plugins/wbmp/mkfile+13−0

This diff is large: its 14 lines aren’t shown here.

java/pkg/com/sun/imageio/spi/FileImageInputStreamSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/spi/FileImageInputStreamSpi.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/imageio/spi/FileImageOutputStreamSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/spi/FileImageOutputStreamSpi.java+64−0

This diff is large: its 65 lines aren’t shown here.

java/pkg/com/sun/imageio/spi/InputStreamImageInputStreamSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/spi/InputStreamImageInputStreamSpi.java+77−0

This diff is large: its 78 lines aren’t shown here.

java/pkg/com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.java+76−0

This diff is large: its 77 lines aren’t shown here.

java/pkg/com/sun/imageio/spi/RAFImageInputStreamSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/spi/RAFImageInputStreamSpi.java+65−0

This diff is large: its 66 lines aren’t shown here.

java/pkg/com/sun/imageio/spi/RAFImageOutputStreamSpi.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/spi/RAFImageOutputStreamSpi.java+66−0

This diff is large: its 67 lines aren’t shown here.

java/pkg/com/sun/imageio/spi/mkfile+13−0

This diff is large: its 14 lines aren’t shown here.

java/pkg/com/sun/imageio/stream/CloseableDisposerRecord.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/stream/CloseableDisposerRecord.java+54−0

This diff is large: its 55 lines aren’t shown here.

java/pkg/com/sun/imageio/stream/StreamCloser$1.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/stream/StreamCloser$2.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/stream/StreamCloser$CloseAction.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/stream/StreamCloser.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/stream/StreamCloser.java+134−0

This diff is large: its 135 lines aren’t shown here.

java/pkg/com/sun/imageio/stream/StreamFinalizer.class+0−0

Binary file not shown.

java/pkg/com/sun/imageio/stream/StreamFinalizer.java+72−0

This diff is large: its 73 lines aren’t shown here.

java/pkg/com/sun/imageio/stream/mkfile+10−0

This diff is large: its 11 lines aren’t shown here.

java/pkg/com/sun/jarsigner/ContentSigner.java+70−0

This diff is large: its 71 lines aren’t shown here.

java/pkg/com/sun/jarsigner/ContentSignerParameters.java+97−0

This diff is large: its 98 lines aren’t shown here.

java/pkg/com/sun/jarsigner/mkfile+9−0

This diff is large: its 10 lines aren’t shown here.

java/pkg/com/sun/jarsigner/package.html+38−0

This diff is large: its 39 lines aren’t shown here.

java/pkg/com/sun/java/browser/dom/DOMAccessException.java+89−0

This diff is large: its 90 lines aren’t shown here.

java/pkg/com/sun/java/browser/dom/DOMAccessor.java+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/browser/dom/DOMAction.java+42−0

This diff is large: its 43 lines aren’t shown here.

java/pkg/com/sun/java/browser/dom/DOMService.java+103−0

This diff is large: its 104 lines aren’t shown here.

java/pkg/com/sun/java/browser/dom/DOMServiceProvider.java+60−0

This diff is large: its 61 lines aren’t shown here.

java/pkg/com/sun/java/browser/dom/DOMUnsupportedException.java+89−0

This diff is large: its 90 lines aren’t shown here.

java/pkg/com/sun/java/browser/dom/mkfile+13−0

This diff is large: its 14 lines aren’t shown here.

java/pkg/com/sun/java/browser/mkfile+7−0

This diff is large: its 8 lines aren’t shown here.

java/pkg/com/sun/java/browser/net/ProxyInfo.java+36−0

This diff is large: its 37 lines aren’t shown here.

java/pkg/com/sun/java/browser/net/ProxyService.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/java/browser/net/ProxyServiceProvider.java+36−0

This diff is large: its 37 lines aren’t shown here.

java/pkg/com/sun/java/browser/net/mkfile+10−0

This diff is large: its 11 lines aren’t shown here.

java/pkg/com/sun/java/mkfile+8−0

This diff is large: its 9 lines aren’t shown here.

java/pkg/com/sun/java/swing/Painter.java+33−0

This diff is large: its 34 lines aren’t shown here.

java/pkg/com/sun/java/swing/SwingUtilities3$EventQueueDelegateFromMap.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/SwingUtilities3.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/SwingUtilities3.java+220−0

This diff is large: its 221 lines aren’t shown here.

java/pkg/com/sun/java/swing/mkfile+13−0

This diff is large: its 14 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java+1303−0

This diff is large: its 1304 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKColorType.java+167−0

This diff is large: its 168 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKConstants.java+118−0

This diff is large: its 119 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKEngine.java+635−0

This diff is large: its 636 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java+1398−0

This diff is large: its 1399 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKGraphicsUtils.java+144−0

This diff is large: its 145 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKIconFactory.java+351−0

This diff is large: its 352 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java+1739−0

This diff is large: its 1740 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKPainter.java+1497−0

This diff is large: its 1498 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKRegion.java+42−0

This diff is large: its 43 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKStyle.java+1141−0

This diff is large: its 1142 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java+182−0

This diff is large: its 183 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/Metacity.java+2155−0

This diff is large: its 2156 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/PangoFonts.java+233−0

This diff is large: its 234 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/XColors.java+831−0

This diff is large: its 832 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/icons/Directory.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/gtk/icons/File.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/gtk/icons/image-delayed.png+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/gtk/icons/image-failed.png+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/gtk/icons/mkfile+2−0

This diff is large: its 3 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/mkfile+27−0

This diff is large: its 28 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk.properties+83−0

This diff is large: its 84 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_de.properties+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_es.properties+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_fr.properties+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_it.properties+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_ja.properties+84−0

This diff is large: its 85 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_ko.properties+84−0

This diff is large: its 85 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.properties+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_sv.properties+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_zh_CN.properties+84−0

This diff is large: its 85 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/gtk_zh_TW.properties+84−0

This diff is large: its 85 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/metacity-theme-1.xml+178−0

This diff is large: its 179 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/metacity-1/mkfile+2−0

This diff is large: its 3 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/metacity/SwingFallbackTheme/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/metacity/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/gtk/resources/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/mkfile+9−0

This diff is large: its 10 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifBorders.java+734−0

This diff is large: its 735 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifButtonListener.java+49−0

This diff is large: its 50 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifButtonUI.java+150−0

This diff is large: its 151 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI.java+107−0

This diff is large: its 108 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifCheckBoxUI.java+90−0

This diff is large: its 91 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifComboBoxUI.java+361−0

This diff is large: its 362 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifDesktopIconUI.java+365−0

This diff is large: its 366 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifDesktopPaneUI.java+267−0

This diff is large: its 268 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifEditorPaneUI.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java+846−0

This diff is large: its 847 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifGraphicsUtils.java+476−0

This diff is large: its 477 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifIconFactory.java+460−0

This diff is large: its 461 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.java+374−0

This diff is large: its 375 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifInternalFrameUI.java+223−0

This diff is large: its 224 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifLabelUI.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifLookAndFeel.java+1283−0

This diff is large: its 1284 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifMenuBarUI.java+69−0

This diff is large: its 70 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifMenuItemUI.java+109−0

This diff is large: its 110 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifMenuMouseListener.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifMenuMouseMotionListener.java+43−0

This diff is large: its 44 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifMenuUI.java+151−0

This diff is large: its 152 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifOptionPaneUI.java+114−0

This diff is large: its 115 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifPasswordFieldUI.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifPopupMenuSeparatorUI.java+66−0

This diff is large: its 67 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifPopupMenuUI.java+114−0

This diff is large: its 115 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifProgressBarUI.java+58−0

This diff is large: its 59 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI.java+113−0

This diff is large: its 114 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifRadioButtonUI.java+104−0

This diff is large: its 105 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifScrollBarButton.java+211−0

This diff is large: its 212 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifScrollBarUI.java+108−0

This diff is large: its 109 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifScrollPaneUI.java+143−0

This diff is large: its 144 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifSeparatorUI.java+59−0

This diff is large: its 60 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifSliderUI.java+159−0

This diff is large: its 160 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifSplitPaneDivider.java+295−0

This diff is large: its 296 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifSplitPaneUI.java+66−0

This diff is large: its 67 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifTabbedPaneUI.java+306−0

This diff is large: its 307 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifTextAreaUI.java+70−0

This diff is large: its 71 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifTextFieldUI.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifTextPaneUI.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifTextUI.java+175−0

This diff is large: its 176 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifToggleButtonUI.java+125−0

This diff is large: its 126 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifTreeCellRenderer.java+113−0

This diff is large: its 114 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/MotifTreeUI.java+166−0

This diff is large: its 167 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/icons/DesktopIcon.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/Error.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/Inform.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/Question.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/TreeClosed.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/TreeOpen.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/Warn.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/image-delayed.png+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/image-failed.png+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/motif/icons/mkfile+2−0

This diff is large: its 3 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/mkfile+55−0

This diff is large: its 56 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/mkfile+2−0

This diff is large: its 3 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_de.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_es.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_fr.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_it.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_ja.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_ko.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_pt_BR.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_sv.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_zh_CN.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/motif/resources/motif_zh_TW.properties+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/nimbus/AbstractRegionPainter.java+33−0

This diff is large: its 34 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/nimbus/NimbusLookAndFeel.java+33−0

This diff is large: its 34 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/nimbus/mkfile+9−0

This diff is large: its 10 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/AnimationController$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/AnimationController$AnimationState.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/AnimationController$PartUIClientPropertyKey.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/AnimationController.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/AnimationController.java+428−0

This diff is large: its 429 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/DesktopProperty$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/DesktopProperty$WeakPCL.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/DesktopProperty.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/DesktopProperty.java+285−0

This diff is large: its 286 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/TMSchema$Control.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/TMSchema$Part.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/TMSchema$Prop.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/TMSchema$State.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/TMSchema$TypeEnum.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/TMSchema.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/TMSchema.java+565−0

This diff is large: its 566 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$ComplementDashedBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$DashedBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$InternalFrameLineBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$ProgressBarBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders$ToolBarBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsBorders.java+336−0

This diff is large: its 337 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsButtonListener.java+54−0

This diff is large: its 55 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsButtonUI$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsButtonUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsButtonUI.java+320−0

This diff is large: its 321 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.java+104−0

This diff is large: its 105 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsCheckBoxUI.java+95−0

This diff is large: its 96 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.java+44−0

This diff is large: its 45 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$2.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$3.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboBoxEditor.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboBoxRenderer.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboPopup$InvocationKeyHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboPopup.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI$XPComboBoxButton.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsComboBoxUI.java+565−0

This diff is large: its 566 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsDesktopIconUI.java+98−0

This diff is large: its 99 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsDesktopManager.java+103−0

This diff is large: its 104 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsDesktopPaneUI.java+71−0

This diff is large: its 72 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsEditorPaneUI.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java+1309−0

This diff is large: its 1310 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.java+211−0

This diff is large: its 212 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$CheckBoxIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$CheckBoxMenuItemIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$FrameButtonIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuArrowIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemArrowIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemCheckIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonMenuItemIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$ResizeIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory$VistaMenuItemCheckIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsIconFactory.java+903−0

This diff is large: its 904 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.java+559−0

This diff is large: its 560 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsInternalFrameUI.java+134−0

This diff is large: its 135 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLabelUI.java+112−0

This diff is large: its 113 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$2.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$AudioAction.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$FontDesktopProperty.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$LazyWindowsIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$RGBGrayFilter.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$SkinIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$TriggerDesktopProperty.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsFontProperty.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsFontSizeProperty.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsLayoutStyle.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPBorderValue.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue$XPColorValueKey.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPDLUValue.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPValue.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java+2620−0

This diff is large: its 2621 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI$2.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI$TakeFocus.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuBarUI.java+186−0

This diff is large: its 187 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUI$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUI.java+177−0

This diff is large: its 178 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuUI$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuUI$WindowsMouseInputHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsMenuUI.java+295−0

This diff is large: its 296 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsOptionPaneUI.java+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsPasswordFieldUI.java+69−0

This diff is large: its 70 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.java+94−0

This diff is large: its 95 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI$MnemonicListener.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.java+224−0

This diff is large: its 225 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsPopupWindow.java+95−0

This diff is large: its 96 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsProgressBarUI.java+400−0

This diff is large: its 401 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.java+103−0

This diff is large: its 104 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.java+130−0

This diff is large: its 131 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsRootPaneUI$AltProcessor.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsRootPaneUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsRootPaneUI.java+184−0

This diff is large: its 185 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsScrollBarUI.java+479−0

This diff is large: its 480 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsScrollPaneUI.java+44−0

This diff is large: its 45 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsSeparatorUI.java+35−0

This diff is large: its 36 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsSliderUI.java+234−0

This diff is large: its 235 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsSpinnerUI.java+103−0

This diff is large: its 104 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsSplitPaneDivider.java+72−0

This diff is large: its 73 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsSplitPaneUI.java+67−0

This diff is large: its 68 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.java+227−0

This diff is large: its 228 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java+245−0

This diff is large: its 246 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTextAreaUI.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTextFieldUI.java+175−0

This diff is large: its 176 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTextPaneUI.java+67−0

This diff is large: its 68 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTextUI.java+236−0

This diff is large: its 237 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsToggleButtonUI.java+181−0

This diff is large: its 182 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsToolBarSeparatorUI.java+124−0

This diff is large: its 125 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsToolBarUI.java+99−0

This diff is large: its 100 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI$CollapsedIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI$ExpandedIcon.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI$WindowsTreeCellRenderer.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/WindowsTreeUI.java+234−0

This diff is large: its 235 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle$GlyphButton.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle$Skin.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle$SkinPainter.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle$XPEmptyBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle$XPFillBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle$XPImageBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle$XPStatefulFillBorder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle.class+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/XPStyle.java+751−0

This diff is large: its 752 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/icons/Computer.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/DetailsView.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/Directory.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/Error.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/File.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/FloppyDrive.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/HardDrive.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/HomeFolder.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/Inform.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/JavaCup32.png+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/ListView.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/NewFolder.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/Question.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/TreeClosed.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/TreeLeaf.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/TreeOpen.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/UpFolder.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/Warn.gif+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/image-delayed.png+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/image-failed.png+0−0

Binary file not shown.

java/pkg/com/sun/java/swing/plaf/windows/icons/mkfile+2−0

This diff is large: its 3 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/mkfile+64−0

This diff is large: its 65 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/mkfile+2−0

This diff is large: its 3 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_de.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_es.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_fr.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_it.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_ja.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_ko.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_pt_BR.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_sv.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_zh_CN.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/swing/plaf/windows/resources/windows_zh_TW.properties+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/AdaptiveCoding.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/AdaptiveCoding.java+298−0

This diff is large: its 299 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Attribute$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Attribute$FormatException.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Attribute$Holder.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Attribute$Layout$Element.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Attribute$Layout.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Attribute$ValueStream.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Attribute.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Attribute.java+1622−0

This diff is large: its 1623 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/BandStructure$Band.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure$ByteBand$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure$ByteBand.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure$ByteCounter.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure$CPRefBand.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure$IntBand.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure$MultiBand.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure$ValueBand.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/BandStructure.java+2682−0

This diff is large: its 2683 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/ClassReader$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ClassReader$ClassFormatException.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ClassReader.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ClassReader.java+494−0

This diff is large: its 495 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/ClassWriter.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ClassWriter.java+257−0

This diff is large: its 258 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Code.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Code.java+399−0

This diff is large: its 400 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Coding.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Coding.java+907−0

This diff is large: its 908 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/CodingChooser$Choice.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/CodingChooser$Sizer.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/CodingChooser.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/CodingChooser.java+1489−0

This diff is large: its 1490 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/CodingMethod.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/CodingMethod.java+43−0

This diff is large: its 44 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$ClassEntry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$DescriptorEntry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$Entry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$Index.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$IndexGroup.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$LiteralEntry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$MemberEntry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$NumberEntry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$SignatureEntry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$StringEntry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool$Utf8Entry.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/ConstantPool.java+1218−0

This diff is large: its 1219 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Constants.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Constants.java+436−0

This diff is large: its 437 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Driver.java+725−0

This diff is large: its 726 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/DriverResource.java+131−0

This diff is large: its 132 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/FixedList.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/FixedList.java+174−0

This diff is large: its 175 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Fixups$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Fixups$Fixup.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Fixups$Itr.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Fixups.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Fixups.java+546−0

This diff is large: its 547 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Histogram$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Histogram$BitMetric.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Histogram.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Histogram.java+818−0

This diff is large: its 819 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Instruction$FormatException.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Instruction$LookupSwitch.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Instruction$Switch.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Instruction$TableSwitch.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Instruction.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Instruction.java+664−0

This diff is large: its 665 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/NativeUnpack.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/NativeUnpack.java+322−0

This diff is large: its 323 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Package$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Package$Class$Field.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Package$Class$Member.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Package$Class$Method.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Package$Class.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Package$File.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Package$InnerClass.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Package.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Package.java+1322−0

This diff is large: its 1323 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/PackageReader$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageReader$2.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageReader$LimitedBuffer$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageReader$LimitedBuffer.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageReader.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageReader.java+2204−0

This diff is large: its 2205 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/PackageWriter$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageWriter$2.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageWriter$3.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageWriter.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackageWriter.java+1619−0

This diff is large: its 1620 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/PackerImpl$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackerImpl$DoPack$InFile.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackerImpl$DoPack.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackerImpl.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PackerImpl.java+642−0

This diff is large: its 643 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/PopulationCoding.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PopulationCoding.java+500−0

This diff is large: its 501 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/PropMap.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/PropMap.java+338−0

This diff is large: its 339 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/TLGlobals.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/TLGlobals.java+97−0

This diff is large: its 98 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/UnpackerImpl$1.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/UnpackerImpl$DoUnpack.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/UnpackerImpl.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/UnpackerImpl.java+281−0

This diff is large: its 282 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/Utils$NonCloser.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Utils$Pack200Logger.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Utils.class+0−0

Binary file not shown.

java/pkg/com/sun/java/util/jar/pack/Utils.java+344−0

This diff is large: its 345 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/intrinsic.properties+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/mkfile+34−0

This diff is large: its 35 lines aren’t shown here.

java/pkg/com/sun/java/util/jar/pack/package.html+104−0

This diff is large: its 105 lines aren’t shown here.

java/pkg/com/sun/java/util/mkfile+6−0

This diff is large: its 7 lines aren’t shown here.

java/pkg/com/sun/jdi/AbsentInformationException.java+45−0

This diff is large: its 46 lines aren’t shown here.

java/pkg/com/sun/jdi/Accessible.java+107−0

This diff is large: its 108 lines aren’t shown here.

java/pkg/com/sun/jdi/ArrayReference.java+209−0

This diff is large: its 210 lines aren’t shown here.

java/pkg/com/sun/jdi/ArrayType.java+96−0

This diff is large: its 97 lines aren’t shown here.

java/pkg/com/sun/jdi/BooleanType.java+39−0

This diff is large: its 40 lines aren’t shown here.

java/pkg/com/sun/jdi/BooleanValue.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/Bootstrap.java+56−0

This diff is large: its 57 lines aren’t shown here.

java/pkg/com/sun/jdi/ByteType.java+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/jdi/ByteValue.java+60−0

This diff is large: its 61 lines aren’t shown here.

java/pkg/com/sun/jdi/CharType.java+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/jdi/CharValue.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/ClassLoaderReference.java+93−0

This diff is large: its 94 lines aren’t shown here.

java/pkg/com/sun/jdi/ClassNotLoadedException.java+87−0

This diff is large: its 88 lines aren’t shown here.

java/pkg/com/sun/jdi/ClassNotPreparedException.java+45−0

This diff is large: its 46 lines aren’t shown here.

java/pkg/com/sun/jdi/ClassObjectReference.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jdi/ClassType.java+372−0

This diff is large: its 373 lines aren’t shown here.

java/pkg/com/sun/jdi/DoubleType.java+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/jdi/DoubleValue.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/Field.java+135−0

This diff is large: its 136 lines aren’t shown here.

java/pkg/com/sun/jdi/FloatType.java+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/jdi/FloatValue.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/IncompatibleThreadStateException.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/jdi/InconsistentDebugInfoException.java+45−0

This diff is large: its 46 lines aren’t shown here.

java/pkg/com/sun/jdi/IntegerType.java+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/jdi/IntegerValue.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/InterfaceType.java+81−0

This diff is large: its 82 lines aren’t shown here.

java/pkg/com/sun/jdi/InternalException.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/InvalidCodeIndexException.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/jdi/InvalidLineNumberException.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/jdi/InvalidStackFrameException.java+43−0

This diff is large: its 44 lines aren’t shown here.

java/pkg/com/sun/jdi/InvalidTypeException.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/jdi/InvocationException.java+49−0

This diff is large: its 50 lines aren’t shown here.

java/pkg/com/sun/jdi/JDIPermission.java+113−0

This diff is large: its 114 lines aren’t shown here.

java/pkg/com/sun/jdi/LocalVariable.java+153−0

This diff is large: its 154 lines aren’t shown here.

java/pkg/com/sun/jdi/Locatable.java+49−0

This diff is large: its 50 lines aren’t shown here.

java/pkg/com/sun/jdi/Location.java+261−0

This diff is large: its 262 lines aren’t shown here.

java/pkg/com/sun/jdi/LongType.java+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/jdi/LongValue.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/Method.java+429−0

This diff is large: its 430 lines aren’t shown here.

java/pkg/com/sun/jdi/Mirror.java+76−0

This diff is large: its 77 lines aren’t shown here.

java/pkg/com/sun/jdi/MonitorInfo.java+73−0

This diff is large: its 74 lines aren’t shown here.

java/pkg/com/sun/jdi/NativeMethodException.java+44−0

This diff is large: its 45 lines aren’t shown here.

java/pkg/com/sun/jdi/ObjectCollectedException.java+43−0

This diff is large: its 44 lines aren’t shown here.

java/pkg/com/sun/jdi/ObjectReference.java+444−0

This diff is large: its 445 lines aren’t shown here.

java/pkg/com/sun/jdi/PathSearchingVirtualMachine.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/PrimitiveType.java+41−0

This diff is large: its 42 lines aren’t shown here.

java/pkg/com/sun/jdi/PrimitiveValue.java+123−0

This diff is large: its 124 lines aren’t shown here.

java/pkg/com/sun/jdi/ReferenceType.java+830−0

This diff is large: its 831 lines aren’t shown here.

java/pkg/com/sun/jdi/ShortType.java+39−0

This diff is large: its 40 lines aren’t shown here.

java/pkg/com/sun/jdi/ShortValue.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/StackFrame.java+239−0

This diff is large: its 240 lines aren’t shown here.

java/pkg/com/sun/jdi/StringReference.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jdi/ThreadGroupReference.java+101−0

This diff is large: its 102 lines aren’t shown here.

java/pkg/com/sun/jdi/ThreadReference.java+473−0

This diff is large: its 474 lines aren’t shown here.

java/pkg/com/sun/jdi/Type.java+149−0

This diff is large: its 150 lines aren’t shown here.

java/pkg/com/sun/jdi/TypeComponent.java+129−0

This diff is large: its 130 lines aren’t shown here.

java/pkg/com/sun/jdi/VMCannotBeModifiedException.java+43−0

This diff is large: its 44 lines aren’t shown here.

java/pkg/com/sun/jdi/VMDisconnectedException.java+44−0

This diff is large: its 45 lines aren’t shown here.

java/pkg/com/sun/jdi/VMMismatchException.java+44−0

This diff is large: its 45 lines aren’t shown here.

java/pkg/com/sun/jdi/VMOutOfMemoryException.java+43−0

This diff is large: its 44 lines aren’t shown here.

java/pkg/com/sun/jdi/Value.java+181−0

This diff is large: its 182 lines aren’t shown here.

java/pkg/com/sun/jdi/VirtualMachine.java+863−0

This diff is large: its 864 lines aren’t shown here.

java/pkg/com/sun/jdi/VirtualMachineManager.java+430−0

This diff is large: its 431 lines aren’t shown here.

java/pkg/com/sun/jdi/VoidType.java+39−0

This diff is large: its 40 lines aren’t shown here.

java/pkg/com/sun/jdi/VoidValue.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/AttachingConnector.java+69−0

This diff is large: its 70 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/Connector.java+285−0

This diff is large: its 286 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/IllegalConnectorArgumentsException.java+79−0

This diff is large: its 80 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/LaunchingConnector.java+74−0

This diff is large: its 75 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/ListeningConnector.java+117−0

This diff is large: its 118 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/Transport.java+52−0

This diff is large: its 53 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/TransportTimeoutException.java+77−0

This diff is large: its 78 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/VMStartException.java+55−0

This diff is large: its 56 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/mkfile+19−0

This diff is large: its 20 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/package.html+43−0

This diff is large: its 44 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/spi/ClosedConnectionException.java+67−0

This diff is large: its 68 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/spi/Connection.java+200−0

This diff is large: its 201 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/spi/TransportService.java+377−0

This diff is large: its 378 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/spi/mkfile+10−0

This diff is large: its 11 lines aren’t shown here.

java/pkg/com/sun/jdi/connect/spi/package.html+35−0

This diff is large: its 36 lines aren’t shown here.

java/pkg/com/sun/jdi/doc-files/mkfile+2−0

This diff is large: its 3 lines aren’t shown here.

java/pkg/com/sun/jdi/doc-files/signature.html+39−0

This diff is large: its 40 lines aren’t shown here.

java/pkg/com/sun/jdi/event/AccessWatchpointEvent.java+41−0

This diff is large: its 42 lines aren’t shown here.

java/pkg/com/sun/jdi/event/BreakpointEvent.java+52−0

This diff is large: its 53 lines aren’t shown here.

java/pkg/com/sun/jdi/event/ClassPrepareEvent.java+73−0

This diff is large: its 74 lines aren’t shown here.

java/pkg/com/sun/jdi/event/ClassUnloadEvent.java+52−0

This diff is large: its 53 lines aren’t shown here.

java/pkg/com/sun/jdi/event/Event.java+54−0

This diff is large: its 55 lines aren’t shown here.

java/pkg/com/sun/jdi/event/EventIterator.java+49−0

This diff is large: its 50 lines aren’t shown here.

java/pkg/com/sun/jdi/event/EventQueue.java+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/jdi/event/EventSet.java+171−0

This diff is large: its 172 lines aren’t shown here.

java/pkg/com/sun/jdi/event/ExceptionEvent.java+94−0

This diff is large: its 95 lines aren’t shown here.

java/pkg/com/sun/jdi/event/LocatableEvent.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jdi/event/MethodEntryEvent.java+54−0

This diff is large: its 55 lines aren’t shown here.

java/pkg/com/sun/jdi/event/MethodExitEvent.java+73−0

This diff is large: its 74 lines aren’t shown here.

java/pkg/com/sun/jdi/event/ModificationWatchpointEvent.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jdi/event/MonitorContendedEnterEvent.java+60−0

This diff is large: its 61 lines aren’t shown here.

java/pkg/com/sun/jdi/event/MonitorContendedEnteredEvent.java+60−0

This diff is large: its 61 lines aren’t shown here.

java/pkg/com/sun/jdi/event/MonitorWaitEvent.java+65−0

This diff is large: its 66 lines aren’t shown here.

java/pkg/com/sun/jdi/event/MonitorWaitedEvent.java+67−0

This diff is large: its 68 lines aren’t shown here.

java/pkg/com/sun/jdi/event/StepEvent.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/com/sun/jdi/event/ThreadDeathEvent.java+56−0

This diff is large: its 57 lines aren’t shown here.

java/pkg/com/sun/jdi/event/ThreadStartEvent.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/jdi/event/VMDeathEvent.java+72−0

This diff is large: its 73 lines aren’t shown here.

java/pkg/com/sun/jdi/event/VMDisconnectEvent.java+56−0

This diff is large: its 57 lines aren’t shown here.

java/pkg/com/sun/jdi/event/VMStartEvent.java+54−0

This diff is large: its 55 lines aren’t shown here.

java/pkg/com/sun/jdi/event/WatchpointEvent.java+67−0

This diff is large: its 68 lines aren’t shown here.

java/pkg/com/sun/jdi/event/mkfile+31−0

This diff is large: its 32 lines aren’t shown here.

java/pkg/com/sun/jdi/event/package.html+49−0

This diff is large: its 50 lines aren’t shown here.

java/pkg/com/sun/jdi/mkfile+79−0

This diff is large: its 80 lines aren’t shown here.

java/pkg/com/sun/jdi/package.html+50−0

This diff is large: its 51 lines aren’t shown here.

java/pkg/com/sun/jdi/request/AccessWatchpointRequest.java+60−0

This diff is large: its 61 lines aren’t shown here.

java/pkg/com/sun/jdi/request/BreakpointRequest.java+87−0

This diff is large: its 88 lines aren’t shown here.

java/pkg/com/sun/jdi/request/ClassPrepareRequest.java+124−0

This diff is large: its 125 lines aren’t shown here.

java/pkg/com/sun/jdi/request/ClassUnloadRequest.java+76−0

This diff is large: its 77 lines aren’t shown here.

java/pkg/com/sun/jdi/request/DuplicateRequestException.java+45−0

This diff is large: its 46 lines aren’t shown here.

java/pkg/com/sun/jdi/request/EventRequest.java+210−0

This diff is large: its 211 lines aren’t shown here.

java/pkg/com/sun/jdi/request/EventRequestManager.java+544−0

This diff is large: its 545 lines aren’t shown here.

java/pkg/com/sun/jdi/request/ExceptionRequest.java+155−0

This diff is large: its 156 lines aren’t shown here.

java/pkg/com/sun/jdi/request/InvalidRequestStateException.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jdi/request/MethodEntryRequest.java+116−0

This diff is large: its 117 lines aren’t shown here.

java/pkg/com/sun/jdi/request/MethodExitRequest.java+119−0

This diff is large: its 120 lines aren’t shown here.

java/pkg/com/sun/jdi/request/ModificationWatchpointRequest.java+59−0

This diff is large: its 60 lines aren’t shown here.

java/pkg/com/sun/jdi/request/MonitorContendedEnterRequest.java+116−0

This diff is large: its 117 lines aren’t shown here.

java/pkg/com/sun/jdi/request/MonitorContendedEnteredRequest.java+116−0

This diff is large: its 117 lines aren’t shown here.

java/pkg/com/sun/jdi/request/MonitorWaitRequest.java+115−0

This diff is large: its 116 lines aren’t shown here.

java/pkg/com/sun/jdi/request/MonitorWaitedRequest.java+115−0

This diff is large: its 116 lines aren’t shown here.

java/pkg/com/sun/jdi/request/StepRequest.java+135−0

This diff is large: its 136 lines aren’t shown here.

java/pkg/com/sun/jdi/request/ThreadDeathRequest.java+58−0

This diff is large: its 59 lines aren’t shown here.

java/pkg/com/sun/jdi/request/ThreadStartRequest.java+58−0

This diff is large: its 59 lines aren’t shown here.

java/pkg/com/sun/jdi/request/VMDeathRequest.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jdi/request/WatchpointRequest.java+120−0

This diff is large: its 121 lines aren’t shown here.

java/pkg/com/sun/jdi/request/mkfile+28−0

This diff is large: its 29 lines aren’t shown here.

java/pkg/com/sun/jdi/request/package.html+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jmx/defaults/JmxProperties.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/defaults/JmxProperties.java+232−0

This diff is large: its 233 lines aren’t shown here.

java/pkg/com/sun/jmx/defaults/ServiceName.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/defaults/ServiceName.java+97−0

This diff is large: its 98 lines aren’t shown here.

java/pkg/com/sun/jmx/defaults/mkfile+9−0

This diff is large: its 10 lines aren’t shown here.

java/pkg/com/sun/jmx/defaults/package.html+33−0

This diff is large: its 34 lines aren’t shown here.

java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$2.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ListenerWrapper.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ResourceContext$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ResourceContext.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.java+2064−0

This diff is large: its 2065 lines aren’t shown here.

java/pkg/com/sun/jmx/interceptor/MBeanServerInterceptor.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/interceptor/MBeanServerInterceptor.java+130−0

This diff is large: its 131 lines aren’t shown here.

java/pkg/com/sun/jmx/interceptor/mkfile+9−0

This diff is large: its 10 lines aren’t shown here.

java/pkg/com/sun/jmx/interceptor/package.html+36−0

This diff is large: its 37 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport$LoaderEntry.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java+304−0

This diff is large: its 305 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/ConvertingMethod.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/ConvertingMethod.java+228−0

This diff is large: its 229 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$ArrayMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CollectionMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilder.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderCheckGetters.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaConstructor$Constr.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaConstructor.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaFrom.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaProxy.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaSetters.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$EnumMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$IdentityMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$MXBeanRefMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$Mappings.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$NonNullMXBeanMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$TabularMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.java+1492−0

This diff is large: its 1493 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/DescriptorCache.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DescriptorCache.java+67−0

This diff is large: its 68 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/DynamicMBean2.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/DynamicMBean2.java+77−0

This diff is large: its 78 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/GetPropertyAction.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/GetPropertyAction.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/Introspector$BeansHelper.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/Introspector$SimpleIntrospector.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/Introspector.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/Introspector.java+778−0

This diff is large: its 779 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/JmxMBeanServer$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/JmxMBeanServer.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/JmxMBeanServer.java+1497−0

This diff is large: its 1498 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/JmxMBeanServerBuilder.java+114−0

This diff is large: its 115 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer$AttrMethods.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer$MBeanVisitor.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer$MethodOrder.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanAnalyzer.java+270−0

This diff is large: its 271 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MBeanInstantiator.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanInstantiator.java+718−0

This diff is large: its 719 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector$MBeanInfoMaker.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector$MBeanInfoMap.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector$PerInterfaceMap.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanIntrospector.java+469−0

This diff is large: its 470 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.java+321−0

This diff is large: its 322 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MBeanSupport.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MBeanSupport.java+274−0

This diff is large: its 275 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MXBeanIntrospector.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanIntrospector.java+365−0

This diff is large: its 366 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MXBeanLookup.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanLookup.java+188−0

This diff is large: its 189 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MXBeanMapping.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanMapping.java+210−0

This diff is large: its 211 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MXBeanMappingFactory.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanMappingFactory.java+124−0

This diff is large: its 125 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$GetHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$Handler.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$InvokeHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$SetHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy$Visitor.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanProxy.java+175−0

This diff is large: its 176 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/MXBeanSupport.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/MXBeanSupport.java+178−0

This diff is large: its 179 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.java+70−0

This diff is large: its 71 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/NamedObject.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/NamedObject.java+122−0

This diff is large: its 123 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.java+68−0

This diff is large: its 69 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/PerInterface$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/PerInterface$InitMaps.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/PerInterface$MethodAndSig.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/PerInterface.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/PerInterface.java+280−0

This diff is large: its 281 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/Repository$ObjectNamePattern.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/Repository$RegistrationContext.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/Repository.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/Repository.java+678−0

This diff is large: its 679 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/SecureClassLoaderRepository.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/SecureClassLoaderRepository.java+64−0

This diff is large: its 65 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/StandardMBeanIntrospector.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/StandardMBeanIntrospector.java+192−0

This diff is large: its 193 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/StandardMBeanSupport.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/StandardMBeanSupport.java+95−0

This diff is large: its 96 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/SunJmxMBeanServer.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/SunJmxMBeanServer.java+90−0

This diff is large: its 91 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/Util.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/Util.java+241−0

This diff is large: its 242 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/WeakIdentityHashMap$IdentityWeakReference.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/WeakIdentityHashMap.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/mbeanserver/WeakIdentityHashMap.java+137−0

This diff is large: its 138 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/mkfile+38−0

This diff is large: its 39 lines aren’t shown here.

java/pkg/com/sun/jmx/mbeanserver/package.html+33−0

This diff is large: its 34 lines aren’t shown here.

java/pkg/com/sun/jmx/mkfile+10−0

This diff is large: its 11 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$2.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$3.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$4.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$5.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$BroadcasterQuery.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$BufferListener.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$NamedNotification.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer$ShareBuffer.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayNotificationBuffer.java+838−0

This diff is large: its 839 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/ArrayQueue.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ArrayQueue.java+102−0

This diff is large: its 103 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/ClientCommunicatorAdmin$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientCommunicatorAdmin.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientCommunicatorAdmin.java+252−0

This diff is large: its 253 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/ClientListenerInfo.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientListenerInfo.java+106−0

This diff is large: its 107 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$LinearExecutor$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$LinearExecutor.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$NotifFetcher$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder$NotifFetcher.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ClientNotifForwarder.java+910−0

This diff is large: its 911 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/IIOPHelper$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/IIOPHelper.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/IIOPHelper.java+188−0

This diff is large: its 189 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/IIOPProxy.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/IIOPProxy.java+110−0

This diff is large: its 111 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/NotificationBuffer.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/NotificationBuffer.java+72−0

This diff is large: its 73 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/NotificationBufferFilter.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/NotificationBufferFilter.java+40−0

This diff is large: its 41 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/ProxyRef.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ProxyRef.java+103−0

This diff is large: its 104 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/RMIExporter.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/RMIExporter.java+59−0

This diff is large: its 60 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/ServerCommunicatorAdmin$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ServerCommunicatorAdmin$Timeout.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ServerCommunicatorAdmin.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ServerCommunicatorAdmin.java+232−0

This diff is large: its 233 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder$2.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder$3.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder$IdAndFilter.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/internal/ServerNotifForwarder.java+494−0

This diff is large: its 495 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/Unmarshal.java+34−0

This diff is large: its 35 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/mkfile+21−0

This diff is large: its 22 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/internal/package.html+37−0

This diff is large: its 38 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/mkfile+9−0

This diff is large: its 10 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/iiop/ClientProvider.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java+119−0

This diff is large: its 120 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/iiop/ProxyInputStream.java+241−0

This diff is large: its 242 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/iiop/ServerProvider.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/iiop/mkfile+11−0

This diff is large: its 12 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/mkfile+7−0

This diff is large: its 8 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/rmi/ClientProvider.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/rmi/ServerProvider.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/protocol/rmi/mkfile+9−0

This diff is large: its 10 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/security/FileLoginModule.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/FileLoginModule.java+570−0

This diff is large: its 571 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator$2.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator$FileLoginConfig.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator$JMXCallbackHandler.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/JMXPluggableAuthenticator.java+346−0

This diff is large: its 347 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/security/JMXSubjectDomainCombiner.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/JMXSubjectDomainCombiner.java+106−0

This diff is large: its 107 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/security/MBeanServerAccessController.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/MBeanServerAccessController.java+665−0

This diff is large: its 666 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$2.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$Access.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$AccessType.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController$Parser.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/MBeanServerFileAccessController.java+544−0

This diff is large: its 545 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/security/NotificationAccessController.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/NotificationAccessController.java+110−0

This diff is large: its 111 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/security/SubjectDelegator$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/SubjectDelegator.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/security/SubjectDelegator.java+148−0

This diff is large: its 149 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/security/mkfile+14−0

This diff is large: its 15 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/util/CacheMap.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/util/CacheMap.java+121−0

This diff is large: its 122 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/util/ClassLoaderWithRepository.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/util/ClassLoaderWithRepository.java+55−0

This diff is large: its 56 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/util/ClassLogger.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/util/ClassLogger.java+246−0

This diff is large: its 247 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/util/EnvHelp$1.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/util/EnvHelp$SinkOutputStream.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/util/EnvHelp.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/util/EnvHelp.java+808−0

This diff is large: its 809 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/util/OrderClassLoaders.class+0−0

Binary file not shown.

java/pkg/com/sun/jmx/remote/util/OrderClassLoaders.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jmx/remote/util/mkfile+12−0

This diff is large: its 13 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/BerDecoder.java+757−0

This diff is large: its 758 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/BerEncoder.java+477−0

This diff is large: its 478 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/BerException.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/EnumRowStatus.java+308−0

This diff is large: its 309 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/Enumerated.java+219−0

This diff is large: its 220 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.README+23−0

This diff is large: its 24 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/ASCII_CharStream.java+402−0

This diff is large: its 403 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/AclEntryImpl.java+263−0

This diff is large: its 264 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/AclImpl.java+287−0

This diff is large: its 288 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/GroupImpl.java+142−0

This diff is large: its 143 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/Host.java+181−0

This diff is large: its 182 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMAccess.java+64−0

This diff is large: its 65 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMAclBlock.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMAclItem.java+58−0

This diff is large: its 59 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMCommunities.java+53−0

This diff is large: its 54 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMCommunity.java+53−0

This diff is large: its 54 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMEnterprise.java+49−0

This diff is large: its 50 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMHost.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMHostInform.java+48−0

This diff is large: its 49 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMHostName.java+62−0

This diff is large: its 63 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMHostTrap.java+49−0

This diff is large: its 50 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMInformBlock.java+60−0

This diff is large: its 61 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMInformCommunity.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMInformInterestedHost.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMInformItem.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMIpAddress.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMIpMask.java+63−0

This diff is large: its 64 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMIpV6Address.java+41−0

This diff is large: its 42 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMManagers.java+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMNetMask.java+58−0

This diff is large: its 59 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMNetMaskV6.java+46−0

This diff is large: its 47 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMSecurityDefs.java+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapBlock.java+61−0

This diff is large: its 62 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapCommunity.java+52−0

This diff is large: its 53 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapInterestedHost.java+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapItem.java+53−0

This diff is large: its 54 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JDMTrapNum.java+50−0

This diff is large: its 51 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/JJTParserState.java+149−0

This diff is large: its 150 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/NetMaskImpl.java+266−0

This diff is large: its 267 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/Node.java+60−0

This diff is large: its 61 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/OwnerImpl.java+137−0

This diff is large: its 138 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/ParseError.java+38−0

This diff is large: its 39 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/ParseException.java+217−0

This diff is large: its 218 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/Parser.java+1285−0

This diff is large: its 1286 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/Parser.jj+948−0

This diff is large: its 949 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/Parser.jjt+380−0

This diff is large: its 381 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/ParserConstants.java+111−0

This diff is large: its 112 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/ParserTokenManager.java+1514−0

This diff is large: its 1515 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/ParserTreeConstants.java+88−0

This diff is large: its 89 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/PermissionImpl.java+89−0

This diff is large: its 90 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/PrincipalImpl.java+148−0

This diff is large: its 149 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/README.update+29−0

This diff is large: its 30 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/SimpleNode.java+155−0

This diff is large: its 156 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/SnmpAcl.java+486−0

This diff is large: its 487 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/Token.java+107−0

This diff is large: its 108 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/TokenMgrError.java+160−0

This diff is large: its 161 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/mkfile+54−0

This diff is large: its 55 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/IPAcl/package.html+34−0

This diff is large: its 35 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/InetAddressAcl.java+128−0

This diff is large: its 129 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/ServiceName.java+170−0

This diff is large: its 171 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpAckPdu.java+39−0

This diff is large: its 40 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpBadSecurityLevelException.java+38−0

This diff is large: its 39 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpCounter.java+99−0

This diff is large: its 100 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpCounter64.java+214−0

This diff is large: its 215 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpEngine.java+70−0

This diff is large: its 71 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpEngineFactory.java+58−0

This diff is large: its 59 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpEngineId.java+489−0

This diff is large: its 490 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpEngineParameters.java+117−0

This diff is large: its 118 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpGauge.java+99−0

This diff is large: its 100 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpInt.java+282−0

This diff is large: its 283 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpIpAddress.java+217−0

This diff is large: its 218 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpMessage.java+362−0

This diff is large: its 363 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpMsg.java+476−0

This diff is large: its 477 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpNull.java+183−0

This diff is large: its 184 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpOpaque.java+100−0

This diff is large: its 101 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpParams.java+76−0

This diff is large: its 77 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpPdu.java+124−0

This diff is large: its 125 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpPduBulk.java+119−0

This diff is large: its 120 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpPduBulkType.java+58−0

This diff is large: its 59 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpPduFactory.java+94−0

This diff is large: its 95 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpPduFactoryBER.java+131−0

This diff is large: its 132 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpPduRequest.java+109−0

This diff is large: its 110 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpPduRequestType.java+60−0

This diff is large: its 61 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpPduTrap.java+93−0

This diff is large: its 94 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpScopedPduBulk.java+110−0

This diff is large: its 111 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpScopedPduPacket.java+104−0

This diff is large: its 105 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpScopedPduRequest.java+95−0

This diff is large: its 96 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpSecurityException.java+67−0

This diff is large: its 68 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpSecurityParameters.java+54−0

This diff is large: its 55 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpStatusException.java+146−0

This diff is large: its 147 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpString.java+278−0

This diff is large: its 279 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpStringFixed.java+193−0

This diff is large: its 194 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpTooBigException.java+82−0

This diff is large: its 83 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpUnknownAccContrModelException.java+47−0

This diff is large: its 48 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpUnknownModelException.java+42−0

This diff is large: its 43 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpUnknownModelLcdException.java+42−0

This diff is large: its 43 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpUnknownMsgProcModelException.java+45−0

This diff is large: its 46 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpUnknownSecModelException.java+45−0

This diff is large: its 46 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpUnknownSubSystemException.java+42−0

This diff is large: its 43 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpUnsignedInt.java+125−0

This diff is large: its 126 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpUsmKeyHandler.java+98−0

This diff is large: its 99 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpV3Message.java+511−0

This diff is large: its 512 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/SnmpValue.java+96−0

This diff is large: its 97 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/ThreadContext.java+326−0

This diff is large: its 327 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/UserAcl.java+97−0

This diff is large: its 98 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpEntryOid.java+51−0

This diff is large: its 52 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpErrorHandlerAgent.java+206−0

This diff is large: its 207 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpGenericMetaServer.java+132−0

This diff is large: its 133 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpGenericObjectServer.java+573−0

This diff is large: its 574 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpIndex.java+190−0

This diff is large: its 191 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMib.java+1026−0

This diff is large: its 1027 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibAgent.java+757−0

This diff is large: its 758 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibAgentMBean.java+316−0

This diff is large: its 317 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibEntry.java+194−0

This diff is large: its 195 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibGroup.java+519−0

This diff is large: its 520 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibHandler.java+155−0

This diff is large: its 156 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibNode.java+414−0

This diff is large: its 415 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibOid.java+561−0

This diff is large: its 562 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibRequest.java+175−0

This diff is large: its 176 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibRequestImpl.java+242−0

This diff is large: its 243 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibSubRequest.java+209−0

This diff is large: its 210 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpMibTable.java+2570−0

This diff is large: its 2571 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpRequestTree.java+1071−0

This diff is large: its 1072 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpStandardMetaServer.java+119−0

This diff is large: its 120 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpStandardObjectServer.java+264−0

This diff is large: its 265 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpTableCallbackHandler.java+76−0

This diff is large: its 77 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpTableEntryFactory.java+91−0

This diff is large: its 92 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpTableEntryNotification.java+141−0

This diff is large: its 142 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpTableSupport.java+571−0

This diff is large: its 572 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/SnmpUserDataFactory.java+124−0

This diff is large: its 125 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/mkfile+32−0

This diff is large: its 33 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/agent/package.html+34−0

This diff is large: its 35 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/ClientHandler.java+133−0

This diff is large: its 134 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/CommunicationException.java+77−0

This diff is large: its 78 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/CommunicatorServer.java+1375−0

This diff is large: its 1376 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/CommunicatorServerMBean.java+171−0

This diff is large: its 172 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/SnmpAdaptorServer.java+2659−0

This diff is large: its 2660 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/SnmpAdaptorServerMBean.java+700−0

This diff is large: its 701 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/SnmpInformHandler.java+80−0

This diff is large: its 81 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/SnmpMibTree.java+269−0

This diff is large: its 270 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java+1152−0

This diff is large: its 1153 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/SnmpSubBulkRequestHandler.java+345−0

This diff is large: its 346 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/SnmpSubNextRequestHandler.java+272−0

This diff is large: its 273 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/SnmpSubRequestHandler.java+630−0

This diff is large: its 631 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/mkfile+19−0

This diff is large: its 20 lines aren’t shown here.

java/pkg/com/sun/jmx/snmp/daemon/package.html+34−0

This diff is large: its 35 lines aren’t shown here.

This diff is larger than a page shows: the files after these aren’t listed. Clone the repository to see all of it.