clojure 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1378) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +23 -0
  4. data/README.rdoc +18 -0
  5. data/Rakefile +18 -0
  6. data/VERSION +1 -0
  7. data/bin/clj +13 -0
  8. data/epl-v10.html +261 -0
  9. data/lib/clojure/asm/AnnotationVisitor.class +0 -0
  10. data/lib/clojure/asm/AnnotationWriter.class +0 -0
  11. data/lib/clojure/asm/Attribute.class +0 -0
  12. data/lib/clojure/asm/ByteVector.class +0 -0
  13. data/lib/clojure/asm/ClassAdapter.class +0 -0
  14. data/lib/clojure/asm/ClassReader.class +0 -0
  15. data/lib/clojure/asm/ClassVisitor.class +0 -0
  16. data/lib/clojure/asm/ClassWriter.class +0 -0
  17. data/lib/clojure/asm/Edge.class +0 -0
  18. data/lib/clojure/asm/FieldVisitor.class +0 -0
  19. data/lib/clojure/asm/FieldWriter.class +0 -0
  20. data/lib/clojure/asm/Frame.class +0 -0
  21. data/lib/clojure/asm/Handler.class +0 -0
  22. data/lib/clojure/asm/Item.class +0 -0
  23. data/lib/clojure/asm/Label.class +0 -0
  24. data/lib/clojure/asm/MethodAdapter.class +0 -0
  25. data/lib/clojure/asm/MethodVisitor.class +0 -0
  26. data/lib/clojure/asm/MethodWriter.class +0 -0
  27. data/lib/clojure/asm/Opcodes.class +0 -0
  28. data/lib/clojure/asm/Type.class +0 -0
  29. data/lib/clojure/asm/commons/AdviceAdapter.class +0 -0
  30. data/lib/clojure/asm/commons/AnalyzerAdapter.class +0 -0
  31. data/lib/clojure/asm/commons/CodeSizeEvaluator.class +0 -0
  32. data/lib/clojure/asm/commons/EmptyVisitor.class +0 -0
  33. data/lib/clojure/asm/commons/GeneratorAdapter.class +0 -0
  34. data/lib/clojure/asm/commons/LocalVariablesSorter.class +0 -0
  35. data/lib/clojure/asm/commons/Method.class +0 -0
  36. data/lib/clojure/asm/commons/SerialVersionUIDAdder$Item.class +0 -0
  37. data/lib/clojure/asm/commons/SerialVersionUIDAdder.class +0 -0
  38. data/lib/clojure/asm/commons/StaticInitMerger.class +0 -0
  39. data/lib/clojure/asm/commons/TableSwitchGenerator.class +0 -0
  40. data/lib/clojure/core$_DOT__DOT___3630.class +0 -0
  41. data/lib/clojure/core$_EQ__EQ___3398.class +0 -0
  42. data/lib/clojure/core$_EQ___3291.class +0 -0
  43. data/lib/clojure/core$_GT__EQ___3390.class +0 -0
  44. data/lib/clojure/core$_GT___3382.class +0 -0
  45. data/lib/clojure/core$_LT__EQ___3374.class +0 -0
  46. data/lib/clojure/core$_LT___3366.class +0 -0
  47. data/lib/clojure/core$_PLUS___3332.class +0 -0
  48. data/lib/clojure/core$_SLASH___3350.class +0 -0
  49. data/lib/clojure/core$_STAR___3341.class +0 -0
  50. data/lib/clojure/core$__GT___3634.class +0 -0
  51. data/lib/clojure/core$___3358.class +0 -0
  52. data/lib/clojure/core$accessor__4294.class +0 -0
  53. data/lib/clojure/core$aclone__4211.class +0 -0
  54. data/lib/clojure/core$add_classpath__4707.class +0 -0
  55. data/lib/clojure/core$add_doc__5153.class +0 -0
  56. data/lib/clojure/core$add_watch__3697.class +0 -0
  57. data/lib/clojure/core$add_watcher__3703$fn__3705.class +0 -0
  58. data/lib/clojure/core$add_watcher__3703.class +0 -0
  59. data/lib/clojure/core$agent__3684.class +0 -0
  60. data/lib/clojure/core$agent_errors__3712.class +0 -0
  61. data/lib/clojure/core$aget__4217.class +0 -0
  62. data/lib/clojure/core$alength__4205.class +0 -0
  63. data/lib/clojure/core$alias__4367.class +0 -0
  64. data/lib/clojure/core$all_ns__4318.class +0 -0
  65. data/lib/clojure/core$alter__3759.class +0 -0
  66. data/lib/clojure/core$alter_meta_BANG___3750.class +0 -0
  67. data/lib/clojure/core$alter_var_root__4827.class +0 -0
  68. data/lib/clojure/core$amap__4725.class +0 -0
  69. data/lib/clojure/core$ancestors__4866$fn__4869.class +0 -0
  70. data/lib/clojure/core$ancestors__4866.class +0 -0
  71. data/lib/clojure/core$and__3308.class +0 -0
  72. data/lib/clojure/core$apply__3243.class +0 -0
  73. data/lib/clojure/core$areduce__4729.class +0 -0
  74. data/lib/clojure/core$array__4040.class +0 -0
  75. data/lib/clojure/core$array_map__4401.class +0 -0
  76. data/lib/clojure/core$aset__4224.class +0 -0
  77. data/lib/clojure/core$aset_boolean__4244.class +0 -0
  78. data/lib/clojure/core$aset_byte__4260.class +0 -0
  79. data/lib/clojure/core$aset_char__4264.class +0 -0
  80. data/lib/clojure/core$aset_double__4252.class +0 -0
  81. data/lib/clojure/core$aset_float__4248.class +0 -0
  82. data/lib/clojure/core$aset_int__4236.class +0 -0
  83. data/lib/clojure/core$aset_long__4240.class +0 -0
  84. data/lib/clojure/core$aset_short__4256.class +0 -0
  85. data/lib/clojure/core$asm_type__5683.class +0 -0
  86. data/lib/clojure/core$assert__4528.class +0 -0
  87. data/lib/clojure/core$assert_args__3659.class +0 -0
  88. data/lib/clojure/core$assoc__3148.class +0 -0
  89. data/lib/clojure/core$assoc_in__5075.class +0 -0
  90. data/lib/clojure/core$associative_QMARK___5102.class +0 -0
  91. data/lib/clojure/core$atom__3728.class +0 -0
  92. data/lib/clojure/core$await1__4014.class +0 -0
  93. data/lib/clojure/core$await__4007$count_down__4009.class +0 -0
  94. data/lib/clojure/core$await__4007.class +0 -0
  95. data/lib/clojure/core$await_for__4017$count_down__4019.class +0 -0
  96. data/lib/clojure/core$await_for__4017.class +0 -0
  97. data/lib/clojure/core$bases__4836.class +0 -0
  98. data/lib/clojure/core$bean__5303$fn__5305$fn__5307.class +0 -0
  99. data/lib/clojure/core$bean__5303$fn__5305.class +0 -0
  100. data/lib/clojure/core$bean__5303$fn__5321$thisfn__5323$fn__5324.class +0 -0
  101. data/lib/clojure/core$bean__5303$fn__5321$thisfn__5323.class +0 -0
  102. data/lib/clojure/core$bean__5303$fn__5321.class +0 -0
  103. data/lib/clojure/core$bean__5303$fn__5330.class +0 -0
  104. data/lib/clojure/core$bean__5303$fn__5333.class +0 -0
  105. data/lib/clojure/core$bean__5303$fn__5336.class +0 -0
  106. data/lib/clojure/core$bean__5303$fn__5339.class +0 -0
  107. data/lib/clojure/core$bean__5303$fn__5342.class +0 -0
  108. data/lib/clojure/core$bean__5303$fn__5346.class +0 -0
  109. data/lib/clojure/core$bean__5303$fn__5349.class +0 -0
  110. data/lib/clojure/core$bean__5303$snapshot__5315$fn__5317.class +0 -0
  111. data/lib/clojure/core$bean__5303$snapshot__5315.class +0 -0
  112. data/lib/clojure/core$bean__5303$v__5312.class +0 -0
  113. data/lib/clojure/core$bean__5303.class +0 -0
  114. data/lib/clojure/core$bigdec__4136.class +0 -0
  115. data/lib/clojure/core$bigint__4133.class +0 -0
  116. data/lib/clojure/core$binding__3672$var_ize__3674.class +0 -0
  117. data/lib/clojure/core$binding__3672.class +0 -0
  118. data/lib/clojure/core$bit_and__3509.class +0 -0
  119. data/lib/clojure/core$bit_and_not__3524.class +0 -0
  120. data/lib/clojure/core$bit_clear__3527.class +0 -0
  121. data/lib/clojure/core$bit_flip__3533.class +0 -0
  122. data/lib/clojure/core$bit_not__3503.class +0 -0
  123. data/lib/clojure/core$bit_or__3515.class +0 -0
  124. data/lib/clojure/core$bit_set__3530.class +0 -0
  125. data/lib/clojure/core$bit_shift_left__3539.class +0 -0
  126. data/lib/clojure/core$bit_shift_right__3542.class +0 -0
  127. data/lib/clojure/core$bit_test__3536.class +0 -0
  128. data/lib/clojure/core$bit_xor__3521.class +0 -0
  129. data/lib/clojure/core$boolean__4101.class +0 -0
  130. data/lib/clojure/core$bound_fn__4679$fn__4681.class +0 -0
  131. data/lib/clojure/core$bound_fn__4679.class +0 -0
  132. data/lib/clojure/core$butlast__3156.class +0 -0
  133. data/lib/clojure/core$byte__4089.class +0 -0
  134. data/lib/clojure/core$cast__3160.class +0 -0
  135. data/lib/clojure/core$char__4095.class +0 -0
  136. data/lib/clojure/core$class_QMARK___4824.class +0 -0
  137. data/lib/clojure/core$class__4043.class +0 -0
  138. data/lib/clojure/core$clear_agent_errors__3715.class +0 -0
  139. data/lib/clojure/core$clojure_version__5781.class +0 -0
  140. data/lib/clojure/core$coll_QMARK___5087.class +0 -0
  141. data/lib/clojure/core$comment__4501.class +0 -0
  142. data/lib/clojure/core$commute__3756.class +0 -0
  143. data/lib/clojure/core$comp__3775$fn__3777.class +0 -0
  144. data/lib/clojure/core$comp__3775.class +0 -0
  145. data/lib/clojure/core$comparator__3965$fn__3967.class +0 -0
  146. data/lib/clojure/core$comparator__3965.class +0 -0
  147. data/lib/clojure/core$compare__3304.class +0 -0
  148. data/lib/clojure/core$compare_and_set_BANG___3738.class +0 -0
  149. data/lib/clojure/core$compile__5065$fn__5067.class +0 -0
  150. data/lib/clojure/core$compile__5065.class +0 -0
  151. data/lib/clojure/core$complement__3551$fn__3553.class +0 -0
  152. data/lib/clojure/core$complement__3551.class +0 -0
  153. data/lib/clojure/core$concat__3255$cat__3269$fn__3270.class +0 -0
  154. data/lib/clojure/core$concat__3255$cat__3269.class +0 -0
  155. data/lib/clojure/core$concat__3255$fn__3257.class +0 -0
  156. data/lib/clojure/core$concat__3255$fn__3261.class +0 -0
  157. data/lib/clojure/core$concat__3255$fn__3265.class +0 -0
  158. data/lib/clojure/core$concat__3255.class +0 -0
  159. data/lib/clojure/core$cond__3237.class +0 -0
  160. data/lib/clojure/core$condp__5146$emit__5148.class +0 -0
  161. data/lib/clojure/core$condp__5146.class +0 -0
  162. data/lib/clojure/core$conj__3121.class +0 -0
  163. data/lib/clojure/core$cons__3107.class +0 -0
  164. data/lib/clojure/core$constantly__3560$fn__3562.class +0 -0
  165. data/lib/clojure/core$constantly__3560.class +0 -0
  166. data/lib/clojure/core$construct_proxy__5265.class +0 -0
  167. data/lib/clojure/core$contains_QMARK___3582.class +0 -0
  168. data/lib/clojure/core$count__3569.class +0 -0
  169. data/lib/clojure/core$counted_QMARK___5111.class +0 -0
  170. data/lib/clojure/core$create_ns__4312.class +0 -0
  171. data/lib/clojure/core$create_struct__4282.class +0 -0
  172. data/lib/clojure/core$ctor_sigs__5565$iter__5567__5569$fn__5570.class +0 -0
  173. data/lib/clojure/core$ctor_sigs__5565$iter__5567__5569.class +0 -0
  174. data/lib/clojure/core$ctor_sigs__5565.class +0 -0
  175. data/lib/clojure/core$cycle__3899$fn__3901.class +0 -0
  176. data/lib/clojure/core$cycle__3899.class +0 -0
  177. data/lib/clojure/core$dec__3422.class +0 -0
  178. data/lib/clojure/core$decimal_QMARK___4121.class +0 -0
  179. data/lib/clojure/core$declare__5118$fn__5120.class +0 -0
  180. data/lib/clojure/core$declare__5118.class +0 -0
  181. data/lib/clojure/core$def_aset__4233.class +0 -0
  182. data/lib/clojure/core$definline__4716.class +0 -0
  183. data/lib/clojure/core$defmacro__3190.class +0 -0
  184. data/lib/clojure/core$defmethod__3641.class +0 -0
  185. data/lib/clojure/core$defmulti__3638.class +0 -0
  186. data/lib/clojure/core$defn__3158.class +0 -0
  187. data/lib/clojure/core$defn___4565.class +0 -0
  188. data/lib/clojure/core$defonce__4973.class +0 -0
  189. data/lib/clojure/core$defstruct__4285.class +0 -0
  190. data/lib/clojure/core$delay_QMARK___3278.class +0 -0
  191. data/lib/clojure/core$delay__3275.class +0 -0
  192. data/lib/clojure/core$deref__3725.class +0 -0
  193. data/lib/clojure/core$derive__4877$tf__4880$fn__4882.class +0 -0
  194. data/lib/clojure/core$derive__4877$tf__4880.class +0 -0
  195. data/lib/clojure/core$derive__4877.class +0 -0
  196. data/lib/clojure/core$descendants__4873.class +0 -0
  197. data/lib/clojure/core$destructure__4413$pb__4415$pmap__4419$fn__4421$fn__4423.class +0 -0
  198. data/lib/clojure/core$destructure__4413$pb__4415$pmap__4419$fn__4421.class +0 -0
  199. data/lib/clojure/core$destructure__4413$pb__4415$pmap__4419$fn__4427.class +0 -0
  200. data/lib/clojure/core$destructure__4413$pb__4415$pmap__4419$fn__4430.class +0 -0
  201. data/lib/clojure/core$destructure__4413$pb__4415$pmap__4419.class +0 -0
  202. data/lib/clojure/core$destructure__4413$pb__4415$pvec__4416.class +0 -0
  203. data/lib/clojure/core$destructure__4413$pb__4415.class +0 -0
  204. data/lib/clojure/core$destructure__4413$process_entry__4436.class +0 -0
  205. data/lib/clojure/core$destructure__4413.class +0 -0
  206. data/lib/clojure/core$disj__3594.class +0 -0
  207. data/lib/clojure/core$dissoc__3589.class +0 -0
  208. data/lib/clojure/core$distinct_QMARK___4901.class +0 -0
  209. data/lib/clojure/core$distinct__4646$step__4648$fn__4649$fn__4652.class +0 -0
  210. data/lib/clojure/core$distinct__4646$step__4648$fn__4649.class +0 -0
  211. data/lib/clojure/core$distinct__4646$step__4648.class +0 -0
  212. data/lib/clojure/core$distinct__4646.class +0 -0
  213. data/lib/clojure/core$doall__4003.class +0 -0
  214. data/lib/clojure/core$doc__4590.class +0 -0
  215. data/lib/clojure/core$dorun__3998.class +0 -0
  216. data/lib/clojure/core$doseq__3993$step__3995.class +0 -0
  217. data/lib/clojure/core$doseq__3993.class +0 -0
  218. data/lib/clojure/core$dosync__4672.class +0 -0
  219. data/lib/clojure/core$dotimes__4025.class +0 -0
  220. data/lib/clojure/core$doto__4187$fn__4189.class +0 -0
  221. data/lib/clojure/core$doto__4187.class +0 -0
  222. data/lib/clojure/core$double__4077.class +0 -0
  223. data/lib/clojure/core$double_array__4742.class +0 -0
  224. data/lib/clojure/core$doubles__4790.class +0 -0
  225. data/lib/clojure/core$drop__3872$fn__3878.class +0 -0
  226. data/lib/clojure/core$drop__3872$step__3874.class +0 -0
  227. data/lib/clojure/core$drop__3872.class +0 -0
  228. data/lib/clojure/core$drop_last__3882$fn__3885.class +0 -0
  229. data/lib/clojure/core$drop_last__3882.class +0 -0
  230. data/lib/clojure/core$drop_while__3889$fn__3895.class +0 -0
  231. data/lib/clojure/core$drop_while__3889$step__3891.class +0 -0
  232. data/lib/clojure/core$drop_while__3889.class +0 -0
  233. data/lib/clojure/core$empty_QMARK___5084.class +0 -0
  234. data/lib/clojure/core$empty__4721.class +0 -0
  235. data/lib/clojure/core$ensure__3765.class +0 -0
  236. data/lib/clojure/core$enumeration_seq__4935.class +0 -0
  237. data/lib/clojure/core$escape_class_name__5576.class +0 -0
  238. data/lib/clojure/core$eval__3990.class +0 -0
  239. data/lib/clojure/core$eval__4760$fn__4762.class +0 -0
  240. data/lib/clojure/core$eval__4760.class +0 -0
  241. data/lib/clojure/core$eval__4772$fn__4774.class +0 -0
  242. data/lib/clojure/core$eval__4772.class +0 -0
  243. data/lib/clojure/core$eval__4784$fn__4786.class +0 -0
  244. data/lib/clojure/core$eval__4784.class +0 -0
  245. data/lib/clojure/core$eval__4796$fn__4798.class +0 -0
  246. data/lib/clojure/core$eval__4796.class +0 -0
  247. data/lib/clojure/core$even_QMARK___3545.class +0 -0
  248. data/lib/clojure/core$every_QMARK___3806.class +0 -0
  249. data/lib/clojure/core$false_QMARK___3202.class +0 -0
  250. data/lib/clojure/core$ffirst__3125.class +0 -0
  251. data/lib/clojure/core$file_seq__4601$fn__4603.class +0 -0
  252. data/lib/clojure/core$file_seq__4601$fn__4606.class +0 -0
  253. data/lib/clojure/core$file_seq__4601.class +0 -0
  254. data/lib/clojure/core$filter__3845$fn__3851.class +0 -0
  255. data/lib/clojure/core$filter__3845$step__3847.class +0 -0
  256. data/lib/clojure/core$filter__3845.class +0 -0
  257. data/lib/clojure/core$filter_key__4306.class +0 -0
  258. data/lib/clojure/core$find__3599.class +0 -0
  259. data/lib/clojure/core$find_doc__4571.class +0 -0
  260. data/lib/clojure/core$find_field__5583$fn__5585.class +0 -0
  261. data/lib/clojure/core$find_field__5583.class +0 -0
  262. data/lib/clojure/core$find_ns__4309.class +0 -0
  263. data/lib/clojure/core$find_var__3678.class +0 -0
  264. data/lib/clojure/core$first__3115.class +0 -0
  265. data/lib/clojure/core$float_QMARK___4124.class +0 -0
  266. data/lib/clojure/core$float__4071.class +0 -0
  267. data/lib/clojure/core$float_array__4735.class +0 -0
  268. data/lib/clojure/core$floats__4766.class +0 -0
  269. data/lib/clojure/core$flush__4156.class +0 -0
  270. data/lib/clojure/core$fn_QMARK___5099.class +0 -0
  271. data/lib/clojure/core$fn__3113.class +0 -0
  272. data/lib/clojure/core$fn__3288.class +0 -0
  273. data/lib/clojure/core$fn__3301.class +0 -0
  274. data/lib/clojure/core$fn__3329.class +0 -0
  275. data/lib/clojure/core$fn__3338.class +0 -0
  276. data/lib/clojure/core$fn__3347.class +0 -0
  277. data/lib/clojure/core$fn__3355.class +0 -0
  278. data/lib/clojure/core$fn__3363.class +0 -0
  279. data/lib/clojure/core$fn__3371.class +0 -0
  280. data/lib/clojure/core$fn__3379.class +0 -0
  281. data/lib/clojure/core$fn__3387.class +0 -0
  282. data/lib/clojure/core$fn__3395.class +0 -0
  283. data/lib/clojure/core$fn__3413.class +0 -0
  284. data/lib/clojure/core$fn__3419.class +0 -0
  285. data/lib/clojure/core$fn__3425.class +0 -0
  286. data/lib/clojure/core$fn__3431.class +0 -0
  287. data/lib/clojure/core$fn__3437.class +0 -0
  288. data/lib/clojure/core$fn__3443.class +0 -0
  289. data/lib/clojure/core$fn__3449.class +0 -0
  290. data/lib/clojure/core$fn__3455.class +0 -0
  291. data/lib/clojure/core$fn__3461.class +0 -0
  292. data/lib/clojure/core$fn__3467.class +0 -0
  293. data/lib/clojure/core$fn__3473.class +0 -0
  294. data/lib/clojure/core$fn__3479.class +0 -0
  295. data/lib/clojure/core$fn__3485.class +0 -0
  296. data/lib/clojure/core$fn__3500.class +0 -0
  297. data/lib/clojure/core$fn__3506.class +0 -0
  298. data/lib/clojure/core$fn__3512.class +0 -0
  299. data/lib/clojure/core$fn__3518.class +0 -0
  300. data/lib/clojure/core$fn__4050.class +0 -0
  301. data/lib/clojure/core$fn__4056.class +0 -0
  302. data/lib/clojure/core$fn__4062.class +0 -0
  303. data/lib/clojure/core$fn__4068.class +0 -0
  304. data/lib/clojure/core$fn__4074.class +0 -0
  305. data/lib/clojure/core$fn__4080.class +0 -0
  306. data/lib/clojure/core$fn__4086.class +0 -0
  307. data/lib/clojure/core$fn__4092.class +0 -0
  308. data/lib/clojure/core$fn__4098.class +0 -0
  309. data/lib/clojure/core$fn__4139.class +0 -0
  310. data/lib/clojure/core$fn__4142.class +0 -0
  311. data/lib/clojure/core$fn__4202.class +0 -0
  312. data/lib/clojure/core$fn__4208.class +0 -0
  313. data/lib/clojure/core$fn__4214.class +0 -0
  314. data/lib/clojure/core$fn__4221.class +0 -0
  315. data/lib/clojure/core$fn__4443$psig__4445.class +0 -0
  316. data/lib/clojure/core$fn__4443.class +0 -0
  317. data/lib/clojure/core$fn__4732.class +0 -0
  318. data/lib/clojure/core$fn__4739.class +0 -0
  319. data/lib/clojure/core$fn__4746.class +0 -0
  320. data/lib/clojure/core$fn__4753.class +0 -0
  321. data/lib/clojure/core$fn__4769.class +0 -0
  322. data/lib/clojure/core$fn__4781.class +0 -0
  323. data/lib/clojure/core$fn__4793.class +0 -0
  324. data/lib/clojure/core$fn__4805.class +0 -0
  325. data/lib/clojure/core$fn__4976.class +0 -0
  326. data/lib/clojure/core$fn__4980.class +0 -0
  327. data/lib/clojure/core$fn__4984.class +0 -0
  328. data/lib/clojure/core$fn__5379$fn__5381.class +0 -0
  329. data/lib/clojure/core$fn__5379.class +0 -0
  330. data/lib/clojure/core$fn__5385.class +0 -0
  331. data/lib/clojure/core$fn__5388.class +0 -0
  332. data/lib/clojure/core$fn__5394.class +0 -0
  333. data/lib/clojure/core$fn__5397.class +0 -0
  334. data/lib/clojure/core$fn__5400.class +0 -0
  335. data/lib/clojure/core$fn__5403.class +0 -0
  336. data/lib/clojure/core$fn__5406$fn__5408.class +0 -0
  337. data/lib/clojure/core$fn__5406.class +0 -0
  338. data/lib/clojure/core$fn__5412$fn__5414.class +0 -0
  339. data/lib/clojure/core$fn__5412.class +0 -0
  340. data/lib/clojure/core$fn__5418.class +0 -0
  341. data/lib/clojure/core$fn__5421.class +0 -0
  342. data/lib/clojure/core$fn__5427.class +0 -0
  343. data/lib/clojure/core$fn__5430.class +0 -0
  344. data/lib/clojure/core$fn__5433.class +0 -0
  345. data/lib/clojure/core$fn__5436.class +0 -0
  346. data/lib/clojure/core$fn__5439.class +0 -0
  347. data/lib/clojure/core$fn__5442.class +0 -0
  348. data/lib/clojure/core$fn__5445.class +0 -0
  349. data/lib/clojure/core$fn__5448.class +0 -0
  350. data/lib/clojure/core$fn__5453$fn__5455.class +0 -0
  351. data/lib/clojure/core$fn__5453.class +0 -0
  352. data/lib/clojure/core$fn__5459.class +0 -0
  353. data/lib/clojure/core$fn__5462.class +0 -0
  354. data/lib/clojure/core$fn__5467.class +0 -0
  355. data/lib/clojure/core$fn__5470.class +0 -0
  356. data/lib/clojure/core$fn__5479.class +0 -0
  357. data/lib/clojure/core$fn__5484$fn__5486.class +0 -0
  358. data/lib/clojure/core$fn__5484.class +0 -0
  359. data/lib/clojure/core$fn__5490.class +0 -0
  360. data/lib/clojure/core$fn__5493.class +0 -0
  361. data/lib/clojure/core$fn__5496.class +0 -0
  362. data/lib/clojure/core$fn__5500.class +0 -0
  363. data/lib/clojure/core$fn__5503.class +0 -0
  364. data/lib/clojure/core$fn__5506.class +0 -0
  365. data/lib/clojure/core$fn__5509.class +0 -0
  366. data/lib/clojure/core$fn__5512.class +0 -0
  367. data/lib/clojure/core$fn__5515.class +0 -0
  368. data/lib/clojure/core$fn__5518.class +0 -0
  369. data/lib/clojure/core$fn__5521.class +0 -0
  370. data/lib/clojure/core$fn__5524.class +0 -0
  371. data/lib/clojure/core$fn__5527.class +0 -0
  372. data/lib/clojure/core$fn__5530.class +0 -0
  373. data/lib/clojure/core$fn__5533.class +0 -0
  374. data/lib/clojure/core$fn__5536.class +0 -0
  375. data/lib/clojure/core$fn__5544.class +0 -0
  376. data/lib/clojure/core$fn__5547.class +0 -0
  377. data/lib/clojure/core$fn__5550.class +0 -0
  378. data/lib/clojure/core$fn__5774$prop__5777.class +0 -0
  379. data/lib/clojure/core$fn__5774.class +0 -0
  380. data/lib/clojure/core$fnext__3129.class +0 -0
  381. data/lib/clojure/core$for__4475$emit_bind__4489$do_mod__4495.class +0 -0
  382. data/lib/clojure/core$for__4475$emit_bind__4489.class +0 -0
  383. data/lib/clojure/core$for__4475$err__4485.class +0 -0
  384. data/lib/clojure/core$for__4475$to_groups__4477$fn__4480.class +0 -0
  385. data/lib/clojure/core$for__4475$to_groups__4477.class +0 -0
  386. data/lib/clojure/core$for__4475.class +0 -0
  387. data/lib/clojure/core$force__3281.class +0 -0
  388. data/lib/clojure/core$format__4938.class +0 -0
  389. data/lib/clojure/core$future__5722.class +0 -0
  390. data/lib/clojure/core$future_call__5702$fn__5704.class +0 -0
  391. data/lib/clojure/core$future_call__5702$fn__5707.class +0 -0
  392. data/lib/clojure/core$future_call__5702$fn__5710.class +0 -0
  393. data/lib/clojure/core$future_call__5702$fn__5713.class +0 -0
  394. data/lib/clojure/core$future_call__5702$fn__5717.class +0 -0
  395. data/lib/clojure/core$future_call__5702.class +0 -0
  396. data/lib/clojure/core$gen_class__5679.class +0 -0
  397. data/lib/clojure/core$gen_interface__5698.class +0 -0
  398. data/lib/clojure/core$generate_class__5596$arg_types__5608.class +0 -0
  399. data/lib/clojure/core$generate_class__5596$emit_forwarding_method__5642.class +0 -0
  400. data/lib/clojure/core$generate_class__5596$emit_get_var__5636.class +0 -0
  401. data/lib/clojure/core$generate_class__5596$emit_unsupported__5639.class +0 -0
  402. data/lib/clojure/core$generate_class__5596$fn__5614.class +0 -0
  403. data/lib/clojure/core$generate_class__5596$fn__5619.class +0 -0
  404. data/lib/clojure/core$generate_class__5596$fn__5624.class +0 -0
  405. data/lib/clojure/core$generate_class__5596$fn__5629$fn__5632.class +0 -0
  406. data/lib/clojure/core$generate_class__5596$fn__5629.class +0 -0
  407. data/lib/clojure/core$generate_class__5596$fn__5651.class +0 -0
  408. data/lib/clojure/core$generate_class__5596$fn__5654.class +0 -0
  409. data/lib/clojure/core$generate_class__5596$fn__5657.class +0 -0
  410. data/lib/clojure/core$generate_class__5596$fn__5664.class +0 -0
  411. data/lib/clojure/core$generate_class__5596$iname__5599.class +0 -0
  412. data/lib/clojure/core$generate_class__5596$to_types__5605.class +0 -0
  413. data/lib/clojure/core$generate_class__5596$totype__5602.class +0 -0
  414. data/lib/clojure/core$generate_class__5596$var_name__5611.class +0 -0
  415. data/lib/clojure/core$generate_class__5596.class +0 -0
  416. data/lib/clojure/core$generate_interface__5689$fn__5692.class +0 -0
  417. data/lib/clojure/core$generate_interface__5689.class +0 -0
  418. data/lib/clojure/core$generate_proxy__5188$fn__5209$fn__5212.class +0 -0
  419. data/lib/clojure/core$generate_proxy__5188$fn__5209.class +0 -0
  420. data/lib/clojure/core$generate_proxy__5188$fn__5237.class +0 -0
  421. data/lib/clojure/core$generate_proxy__5188$fn__5240.class +0 -0
  422. data/lib/clojure/core$generate_proxy__5188$fn__5247.class +0 -0
  423. data/lib/clojure/core$generate_proxy__5188$fn__5251.class +0 -0
  424. data/lib/clojure/core$generate_proxy__5188$gen_bridge__5199.class +0 -0
  425. data/lib/clojure/core$generate_proxy__5188$gen_method__5203.class +0 -0
  426. data/lib/clojure/core$generate_proxy__5188$iname__5190.class +0 -0
  427. data/lib/clojure/core$generate_proxy__5188$iter__5221__5225$fn__5226$iter__5223__5228$fn__5229.class +0 -0
  428. data/lib/clojure/core$generate_proxy__5188$iter__5221__5225$fn__5226$iter__5223__5228.class +0 -0
  429. data/lib/clojure/core$generate_proxy__5188$iter__5221__5225$fn__5226.class +0 -0
  430. data/lib/clojure/core$generate_proxy__5188$iter__5221__5225.class +0 -0
  431. data/lib/clojure/core$generate_proxy__5188$to_types__5196.class +0 -0
  432. data/lib/clojure/core$generate_proxy__5188$totype__5193.class +0 -0
  433. data/lib/clojure/core$generate_proxy__5188.class +0 -0
  434. data/lib/clojure/core$gensym__3233.class +0 -0
  435. data/lib/clojure/core$get__3585.class +0 -0
  436. data/lib/clojure/core$get_in__5071.class +0 -0
  437. data/lib/clojure/core$get_method__3653.class +0 -0
  438. data/lib/clojure/core$get_proxy_class__5259.class +0 -0
  439. data/lib/clojure/core$get_super_and_interfaces__5256.class +0 -0
  440. data/lib/clojure/core$get_validator__3747.class +0 -0
  441. data/lib/clojure/core$group_by_sig__5170$fn__5173.class +0 -0
  442. data/lib/clojure/core$group_by_sig__5170.class +0 -0
  443. data/lib/clojure/core$hash__4710.class +0 -0
  444. data/lib/clojure/core$hash_map__3173.class +0 -0
  445. data/lib/clojure/core$hash_set__3177.class +0 -0
  446. data/lib/clojure/core$identity__3566.class +0 -0
  447. data/lib/clojure/core$if_let__3663.class +0 -0
  448. data/lib/clojure/core$if_not__3284.class +0 -0
  449. data/lib/clojure/core$ifn_QMARK___5096.class +0 -0
  450. data/lib/clojure/core$import__4028.class +0 -0
  451. data/lib/clojure/core$inc__3416.class +0 -0
  452. data/lib/clojure/core$init_proxy__5268.class +0 -0
  453. data/lib/clojure/core$instance_QMARK___3135.class +0 -0
  454. data/lib/clojure/core$int__4059.class +0 -0
  455. data/lib/clojure/core$int_array__4749.class +0 -0
  456. data/lib/clojure/core$integer_QMARK___4107.class +0 -0
  457. data/lib/clojure/core$interleave__4383.class +0 -0
  458. data/lib/clojure/core$intern__5131.class +0 -0
  459. data/lib/clojure/core$interpose__4713.class +0 -0
  460. data/lib/clojure/core$into__4037.class +0 -0
  461. data/lib/clojure/core$into_array__4033.class +0 -0
  462. data/lib/clojure/core$ints__4778.class +0 -0
  463. data/lib/clojure/core$io_BANG___3771.class +0 -0
  464. data/lib/clojure/core$isa_QMARK___4843$fn__4846.class +0 -0
  465. data/lib/clojure/core$isa_QMARK___4843.class +0 -0
  466. data/lib/clojure/core$iterate__3922$fn__3924.class +0 -0
  467. data/lib/clojure/core$iterate__3922.class +0 -0
  468. data/lib/clojure/core$iterator_seq__4932.class +0 -0
  469. data/lib/clojure/core$key__3611.class +0 -0
  470. data/lib/clojure/core$keys__3605.class +0 -0
  471. data/lib/clojure/core$keyword_QMARK___3222.class +0 -0
  472. data/lib/clojure/core$keyword__3229.class +0 -0
  473. data/lib/clojure/core$last__3154.class +0 -0
  474. data/lib/clojure/core$lazy_cat__4466$fn__4468.class +0 -0
  475. data/lib/clojure/core$lazy_cat__4466.class +0 -0
  476. data/lib/clojure/core$lazy_seq__3252.class +0 -0
  477. data/lib/clojure/core$let__3109.class +0 -0
  478. data/lib/clojure/core$let__4440.class +0 -0
  479. data/lib/clojure/core$letfn__5768$fn__5770.class +0 -0
  480. data/lib/clojure/core$letfn__5768.class +0 -0
  481. data/lib/clojure/core$libspec_QMARK___4995.class +0 -0
  482. data/lib/clojure/core$line_seq__3959$fn__3961.class +0 -0
  483. data/lib/clojure/core$line_seq__3959.class +0 -0
  484. data/lib/clojure/core$list_QMARK___5090.class +0 -0
  485. data/lib/clojure/core$list_STAR___3249.class +0 -0
  486. data/lib/clojure/core$load__5058$fn__5061.class +0 -0
  487. data/lib/clojure/core$load__5058.class +0 -0
  488. data/lib/clojure/core$load_all__5019$fn__5021$fn__5023.class +0 -0
  489. data/lib/clojure/core$load_all__5019$fn__5021$fn__5026.class +0 -0
  490. data/lib/clojure/core$load_all__5019$fn__5021.class +0 -0
  491. data/lib/clojure/core$load_all__5019.class +0 -0
  492. data/lib/clojure/core$load_lib__5031.class +0 -0
  493. data/lib/clojure/core$load_libs__5043.class +0 -0
  494. data/lib/clojure/core$load_one__5010$fn__5012.class +0 -0
  495. data/lib/clojure/core$load_one__5010.class +0 -0
  496. data/lib/clojure/core$load_reader__4297.class +0 -0
  497. data/lib/clojure/core$load_string__4300.class +0 -0
  498. data/lib/clojure/core$loaded_libs__5055.class +0 -0
  499. data/lib/clojure/core$locking__3627.class +0 -0
  500. data/lib/clojure/core$long__4065.class +0 -0
  501. data/lib/clojure/core$long_array__4756.class +0 -0
  502. data/lib/clojure/core$longs__4802.class +0 -0
  503. data/lib/clojure/core$loop__3111.class +0 -0
  504. data/lib/clojure/core$loop__4450$fn__4452.class +0 -0
  505. data/lib/clojure/core$loop__4450$fn__4456.class +0 -0
  506. data/lib/clojure/core$loop__4450.class +0 -0
  507. data/lib/clojure/core$macroexpand_1__4276.class +0 -0
  508. data/lib/clojure/core$macroexpand__4279.class +0 -0
  509. data/lib/clojure/core$make_array__4268.class +0 -0
  510. data/lib/clojure/core$make_hierarchy__4830.class +0 -0
  511. data/lib/clojure/core$map_QMARK___3141.class +0 -0
  512. data/lib/clojure/core$map__3815$fn__3817.class +0 -0
  513. data/lib/clojure/core$map__3815$fn__3822.class +0 -0
  514. data/lib/clojure/core$map__3815$fn__3827.class +0 -0
  515. data/lib/clojure/core$map__3815$fn__3838.class +0 -0
  516. data/lib/clojure/core$map__3815$step__3833$fn__3834.class +0 -0
  517. data/lib/clojure/core$map__3815$step__3833.class +0 -0
  518. data/lib/clojure/core$map__3815.class +0 -0
  519. data/lib/clojure/core$mapcat__3842.class +0 -0
  520. data/lib/clojure/core$max__3403.class +0 -0
  521. data/lib/clojure/core$max_key__4628$fn__4632.class +0 -0
  522. data/lib/clojure/core$max_key__4628.class +0 -0
  523. data/lib/clojure/core$memfn__4194.class +0 -0
  524. data/lib/clojure/core$memoize__5138$fn__5140.class +0 -0
  525. data/lib/clojure/core$memoize__5138.class +0 -0
  526. data/lib/clojure/core$merge__3938$fn__3940.class +0 -0
  527. data/lib/clojure/core$merge__3938.class +0 -0
  528. data/lib/clojure/core$merge_with__3945$merge2__3950.class +0 -0
  529. data/lib/clojure/core$merge_with__3945$merge_entry__3947.class +0 -0
  530. data/lib/clojure/core$merge_with__3945.class +0 -0
  531. data/lib/clojure/core$meta__3150.class +0 -0
  532. data/lib/clojure/core$method_sig__5156.class +0 -0
  533. data/lib/clojure/core$methods__3650.class +0 -0
  534. data/lib/clojure/core$min__3408.class +0 -0
  535. data/lib/clojure/core$min_key__4638$fn__4642.class +0 -0
  536. data/lib/clojure/core$min_key__4638.class +0 -0
  537. data/lib/clojure/core$mod__4114.class +0 -0
  538. data/lib/clojure/core$most_specific__5160$fn__5162$fn__5164.class +0 -0
  539. data/lib/clojure/core$most_specific__5160$fn__5162.class +0 -0
  540. data/lib/clojure/core$most_specific__5160.class +0 -0
  541. data/lib/clojure/core$name__3620.class +0 -0
  542. data/lib/clojure/core$namespace__3623.class +0 -0
  543. data/lib/clojure/core$neg_QMARK___3482.class +0 -0
  544. data/lib/clojure/core$newline__4153.class +0 -0
  545. data/lib/clojure/core$next__3117.class +0 -0
  546. data/lib/clojure/core$nfirst__3127.class +0 -0
  547. data/lib/clojure/core$nil_QMARK___3199.class +0 -0
  548. data/lib/clojure/core$nnext__3131.class +0 -0
  549. data/lib/clojure/core$non_private_methods__5553$fn__5556.class +0 -0
  550. data/lib/clojure/core$non_private_methods__5553.class +0 -0
  551. data/lib/clojure/core$not_EQ___3296.class +0 -0
  552. data/lib/clojure/core$not__3208.class +0 -0
  553. data/lib/clojure/core$not_empty__4833.class +0 -0
  554. data/lib/clojure/core$ns__4948$fn__4958.class +0 -0
  555. data/lib/clojure/core$ns__4948$fn__4961.class +0 -0
  556. data/lib/clojure/core$ns__4948$fn__4964.class +0 -0
  557. data/lib/clojure/core$ns__4948$process_reference__4951$fn__4954.class +0 -0
  558. data/lib/clojure/core$ns__4948$process_reference__4951.class +0 -0
  559. data/lib/clojure/core$ns__4948.class +0 -0
  560. data/lib/clojure/core$ns_aliases__4370.class +0 -0
  561. data/lib/clojure/core$ns_imports__4342.class +0 -0
  562. data/lib/clojure/core$ns_interns__4360$fn__4362.class +0 -0
  563. data/lib/clojure/core$ns_interns__4360.class +0 -0
  564. data/lib/clojure/core$ns_map__4328.class +0 -0
  565. data/lib/clojure/core$ns_name__4325.class +0 -0
  566. data/lib/clojure/core$ns_publics__4334$fn__4336.class +0 -0
  567. data/lib/clojure/core$ns_publics__4334.class +0 -0
  568. data/lib/clojure/core$ns_refers__4353$fn__4355.class +0 -0
  569. data/lib/clojure/core$ns_refers__4353.class +0 -0
  570. data/lib/clojure/core$ns_resolve__4395.class +0 -0
  571. data/lib/clojure/core$ns_unalias__4373.class +0 -0
  572. data/lib/clojure/core$ns_unmap__4331.class +0 -0
  573. data/lib/clojure/core$nth__3578.class +0 -0
  574. data/lib/clojure/core$nthnext__4405.class +0 -0
  575. data/lib/clojure/core$num__4053.class +0 -0
  576. data/lib/clojure/core$number_QMARK___4104.class +0 -0
  577. data/lib/clojure/core$odd_QMARK___3548.class +0 -0
  578. data/lib/clojure/core$or__3314.class +0 -0
  579. data/lib/clojure/core$overload_name__5579.class +0 -0
  580. data/lib/clojure/core$parents__4861.class +0 -0
  581. data/lib/clojure/core$partial__3781$fn__3783.class +0 -0
  582. data/lib/clojure/core$partial__3781$fn__3787.class +0 -0
  583. data/lib/clojure/core$partial__3781$fn__3791.class +0 -0
  584. data/lib/clojure/core$partial__3781$fn__3795.class +0 -0
  585. data/lib/clojure/core$partial__3781.class +0 -0
  586. data/lib/clojure/core$partition__3982$fn__3985.class +0 -0
  587. data/lib/clojure/core$partition__3982.class +0 -0
  588. data/lib/clojure/core$pcalls__5754$fn__5756.class +0 -0
  589. data/lib/clojure/core$pcalls__5754.class +0 -0
  590. data/lib/clojure/core$peek__3572.class +0 -0
  591. data/lib/clojure/core$pmap__5727$fn__5729$fn__5731.class +0 -0
  592. data/lib/clojure/core$pmap__5727$fn__5729.class +0 -0
  593. data/lib/clojure/core$pmap__5727$fn__5749.class +0 -0
  594. data/lib/clojure/core$pmap__5727$step__5736$fn__5738.class +0 -0
  595. data/lib/clojure/core$pmap__5727$step__5736.class +0 -0
  596. data/lib/clojure/core$pmap__5727$step__5744$fn__5745.class +0 -0
  597. data/lib/clojure/core$pmap__5727$step__5744.class +0 -0
  598. data/lib/clojure/core$pmap__5727.class +0 -0
  599. data/lib/clojure/core$pop__3575.class +0 -0
  600. data/lib/clojure/core$pos_QMARK___3476.class +0 -0
  601. data/lib/clojure/core$pr__4148.class +0 -0
  602. data/lib/clojure/core$pr_on__4145.class +0 -0
  603. data/lib/clojure/core$pr_str__4512.class +0 -0
  604. data/lib/clojure/core$prefer_method__3647.class +0 -0
  605. data/lib/clojure/core$prefers__3656.class +0 -0
  606. data/lib/clojure/core$prependss__5001.class +0 -0
  607. data/lib/clojure/core$print__4162.class +0 -0
  608. data/lib/clojure/core$print_ctor__5391.class +0 -0
  609. data/lib/clojure/core$print_doc__4568.class +0 -0
  610. data/lib/clojure/core$print_map__5473$fn__5475.class +0 -0
  611. data/lib/clojure/core$print_map__5473.class +0 -0
  612. data/lib/clojure/core$print_meta__5370.class +0 -0
  613. data/lib/clojure/core$print_namespace_doc__4587.class +0 -0
  614. data/lib/clojure/core$print_sequential__5354.class +0 -0
  615. data/lib/clojure/core$print_simple__5424.class +0 -0
  616. data/lib/clojure/core$print_special_doc__4584.class +0 -0
  617. data/lib/clojure/core$print_str__4520.class +0 -0
  618. data/lib/clojure/core$printf__4941.class +0 -0
  619. data/lib/clojure/core$println__4165.class +0 -0
  620. data/lib/clojure/core$println_str__4524.class +0 -0
  621. data/lib/clojure/core$prn__4159.class +0 -0
  622. data/lib/clojure/core$prn_str__4516.class +0 -0
  623. data/lib/clojure/core$proxy__5279$fn__5282.class +0 -0
  624. data/lib/clojure/core$proxy__5279$fn__5287$fn__5291.class +0 -0
  625. data/lib/clojure/core$proxy__5279$fn__5287.class +0 -0
  626. data/lib/clojure/core$proxy__5279.class +0 -0
  627. data/lib/clojure/core$proxy_call_with_super__5297.class +0 -0
  628. data/lib/clojure/core$proxy_mappings__5274.class +0 -0
  629. data/lib/clojure/core$proxy_name__5179$fn__5181.class +0 -0
  630. data/lib/clojure/core$proxy_name__5179.class +0 -0
  631. data/lib/clojure/core$proxy_super__5300.class +0 -0
  632. data/lib/clojure/core$pvalues__5761$fn__5763.class +0 -0
  633. data/lib/clojure/core$pvalues__5761.class +0 -0
  634. data/lib/clojure/core$quot__3491.class +0 -0
  635. data/lib/clojure/core$rand__4558.class +0 -0
  636. data/lib/clojure/core$rand_int__4562.class +0 -0
  637. data/lib/clojure/core$range__3928.class +0 -0
  638. data/lib/clojure/core$ratio_QMARK___4118.class +0 -0
  639. data/lib/clojure/core$rational_QMARK___4128.class +0 -0
  640. data/lib/clojure/core$rationalize__3497.class +0 -0
  641. data/lib/clojure/core$re_find__4554.class +0 -0
  642. data/lib/clojure/core$re_groups__4540.class +0 -0
  643. data/lib/clojure/core$re_matcher__4537.class +0 -0
  644. data/lib/clojure/core$re_matches__4551.class +0 -0
  645. data/lib/clojure/core$re_pattern__4534.class +0 -0
  646. data/lib/clojure/core$re_seq__4543$step__4545$fn__4546.class +0 -0
  647. data/lib/clojure/core$re_seq__4543$step__4545.class +0 -0
  648. data/lib/clojure/core$re_seq__4543.class +0 -0
  649. data/lib/clojure/core$read__4168.class +0 -0
  650. data/lib/clojure/core$read_line__4174.class +0 -0
  651. data/lib/clojure/core$read_string__4177.class +0 -0
  652. data/lib/clojure/core$reduce__3319$fn__3322.class +0 -0
  653. data/lib/clojure/core$reduce__3319.class +0 -0
  654. data/lib/clojure/core$ref__3721.class +0 -0
  655. data/lib/clojure/core$ref_set__3762.class +0 -0
  656. data/lib/clojure/core$refer__4345.class +0 -0
  657. data/lib/clojure/core$refer_clojure__4969.class +0 -0
  658. data/lib/clojure/core$release_pending_sends__3694.class +0 -0
  659. data/lib/clojure/core$rem__3494.class +0 -0
  660. data/lib/clojure/core$remove__3855.class +0 -0
  661. data/lib/clojure/core$remove_method__3644.class +0 -0
  662. data/lib/clojure/core$remove_ns__4315.class +0 -0
  663. data/lib/clojure/core$remove_watch__3700.class +0 -0
  664. data/lib/clojure/core$remove_watcher__3709.class +0 -0
  665. data/lib/clojure/core$repeat__3912$fn__3914.class +0 -0
  666. data/lib/clojure/core$repeat__3912.class +0 -0
  667. data/lib/clojure/core$repeatedly__4701$fn__4703.class +0 -0
  668. data/lib/clojure/core$repeatedly__4701.class +0 -0
  669. data/lib/clojure/core$replace__4661$fn__4663.class +0 -0
  670. data/lib/clojure/core$replace__4661$fn__4667.class +0 -0
  671. data/lib/clojure/core$replace__4661.class +0 -0
  672. data/lib/clojure/core$replicate__3919.class +0 -0
  673. data/lib/clojure/core$require__5049.class +0 -0
  674. data/lib/clojure/core$reset_BANG___3741.class +0 -0
  675. data/lib/clojure/core$reset_meta_BANG___3753.class +0 -0
  676. data/lib/clojure/core$resolve__4398.class +0 -0
  677. data/lib/clojure/core$rest__3119.class +0 -0
  678. data/lib/clojure/core$resultset_seq__4911$fn__4913.class +0 -0
  679. data/lib/clojure/core$resultset_seq__4911$fn__4916.class +0 -0
  680. data/lib/clojure/core$resultset_seq__4911$row_values__4919$fn__4921.class +0 -0
  681. data/lib/clojure/core$resultset_seq__4911$row_values__4919.class +0 -0
  682. data/lib/clojure/core$resultset_seq__4911$thisfn__4925$fn__4926.class +0 -0
  683. data/lib/clojure/core$resultset_seq__4911$thisfn__4925.class +0 -0
  684. data/lib/clojure/core$resultset_seq__4911.class +0 -0
  685. data/lib/clojure/core$reverse__3326.class +0 -0
  686. data/lib/clojure/core$reversible_QMARK___5114.class +0 -0
  687. data/lib/clojure/core$root_directory__5007.class +0 -0
  688. data/lib/clojure/core$root_resource__5004.class +0 -0
  689. data/lib/clojure/core$rseq__3617.class +0 -0
  690. data/lib/clojure/core$rsubseq__4693.class +0 -0
  691. data/lib/clojure/core$second__3123.class +0 -0
  692. data/lib/clojure/core$select_keys__3602.class +0 -0
  693. data/lib/clojure/core$send__3688.class +0 -0
  694. data/lib/clojure/core$send_off__3691.class +0 -0
  695. data/lib/clojure/core$seq_QMARK___3137.class +0 -0
  696. data/lib/clojure/core$seq__3133.class +0 -0
  697. data/lib/clojure/core$seque__4808$drain__4818$fn__4819.class +0 -0
  698. data/lib/clojure/core$seque__4808$drain__4818.class +0 -0
  699. data/lib/clojure/core$seque__4808$fill__4811.class +0 -0
  700. data/lib/clojure/core$seque__4808.class +0 -0
  701. data/lib/clojure/core$sequence__3802.class +0 -0
  702. data/lib/clojure/core$sequential_QMARK___5105.class +0 -0
  703. data/lib/clojure/core$set_QMARK___5093.class +0 -0
  704. data/lib/clojure/core$set__4303.class +0 -0
  705. data/lib/clojure/core$set_validator_BANG___3744.class +0 -0
  706. data/lib/clojure/core$setup_reference__3681.class +0 -0
  707. data/lib/clojure/core$short__4083.class +0 -0
  708. data/lib/clojure/core$shutdown_agents__3718.class +0 -0
  709. data/lib/clojure/core$sigs__3145.class +0 -0
  710. data/lib/clojure/core$slurp__4619.class +0 -0
  711. data/lib/clojure/core$some__3810.class +0 -0
  712. data/lib/clojure/core$sort__3971.class +0 -0
  713. data/lib/clojure/core$sort_by__3975$fn__3978.class +0 -0
  714. data/lib/clojure/core$sort_by__3975.class +0 -0
  715. data/lib/clojure/core$sorted_QMARK___5108.class +0 -0
  716. data/lib/clojure/core$sorted_map__3181.class +0 -0
  717. data/lib/clojure/core$sorted_map_by__3187.class +0 -0
  718. data/lib/clojure/core$sorted_set__3184.class +0 -0
  719. data/lib/clojure/core$special_form_anchor__4578.class +0 -0
  720. data/lib/clojure/core$special_symbol_QMARK___4613.class +0 -0
  721. data/lib/clojure/core$split_at__3906.class +0 -0
  722. data/lib/clojure/core$split_with__3909.class +0 -0
  723. data/lib/clojure/core$spread__3240.class +0 -0
  724. data/lib/clojure/core$str__3211$fn__3215.class +0 -0
  725. data/lib/clojure/core$str__3211.class +0 -0
  726. data/lib/clojure/core$stream_QMARK___3799.class +0 -0
  727. data/lib/clojure/core$string_QMARK___3139.class +0 -0
  728. data/lib/clojure/core$struct__4291.class +0 -0
  729. data/lib/clojure/core$struct_map__4288.class +0 -0
  730. data/lib/clojure/core$subs__4622.class +0 -0
  731. data/lib/clojure/core$subseq__4685.class +0 -0
  732. data/lib/clojure/core$subvec__4180.class +0 -0
  733. data/lib/clojure/core$supers__4839.class +0 -0
  734. data/lib/clojure/core$swap_BANG___3732.class +0 -0
  735. data/lib/clojure/core$symbol_QMARK___3219.class +0 -0
  736. data/lib/clojure/core$symbol__3225.class +0 -0
  737. data/lib/clojure/core$sync__3768.class +0 -0
  738. data/lib/clojure/core$syntax_symbol_anchor__4581.class +0 -0
  739. data/lib/clojure/core$take__3858$fn__3860.class +0 -0
  740. data/lib/clojure/core$take__3858.class +0 -0
  741. data/lib/clojure/core$take_nth__4376$fn__4378.class +0 -0
  742. data/lib/clojure/core$take_nth__4376.class +0 -0
  743. data/lib/clojure/core$take_while__3865$fn__3867.class +0 -0
  744. data/lib/clojure/core$take_while__3865.class +0 -0
  745. data/lib/clojure/core$test__4531.class +0 -0
  746. data/lib/clojure/core$the_class__5590.class +0 -0
  747. data/lib/clojure/core$the_ns__4321.class +0 -0
  748. data/lib/clojure/core$throw_if__4989$boring_QMARK___4991.class +0 -0
  749. data/lib/clojure/core$throw_if__4989.class +0 -0
  750. data/lib/clojure/core$time__4199.class +0 -0
  751. data/lib/clojure/core$to_array_2d__4273.class +0 -0
  752. data/lib/clojure/core$to_array__3163.class +0 -0
  753. data/lib/clojure/core$trampoline__5124$fn__5127.class +0 -0
  754. data/lib/clojure/core$trampoline__5124.class +0 -0
  755. data/lib/clojure/core$tree_seq__4593$walk__4595$fn__4596.class +0 -0
  756. data/lib/clojure/core$tree_seq__4593$walk__4595.class +0 -0
  757. data/lib/clojure/core$tree_seq__4593.class +0 -0
  758. data/lib/clojure/core$true_QMARK___3205.class +0 -0
  759. data/lib/clojure/core$type__4046.class +0 -0
  760. data/lib/clojure/core$unchecked_add__3446.class +0 -0
  761. data/lib/clojure/core$unchecked_dec__3434.class +0 -0
  762. data/lib/clojure/core$unchecked_divide__3464.class +0 -0
  763. data/lib/clojure/core$unchecked_inc__3428.class +0 -0
  764. data/lib/clojure/core$unchecked_multiply__3458.class +0 -0
  765. data/lib/clojure/core$unchecked_negate__3440.class +0 -0
  766. data/lib/clojure/core$unchecked_remainder__3470.class +0 -0
  767. data/lib/clojure/core$unchecked_subtract__3452.class +0 -0
  768. data/lib/clojure/core$underive__4891$tf__4894$fn__4896.class +0 -0
  769. data/lib/clojure/core$underive__4891$tf__4894.class +0 -0
  770. data/lib/clojure/core$underive__4891.class +0 -0
  771. data/lib/clojure/core$update_in__5080.class +0 -0
  772. data/lib/clojure/core$update_proxy__5271.class +0 -0
  773. data/lib/clojure/core$use__5052.class +0 -0
  774. data/lib/clojure/core$val__3614.class +0 -0
  775. data/lib/clojure/core$vals__3608.class +0 -0
  776. data/lib/clojure/core$var_QMARK___4616.class +0 -0
  777. data/lib/clojure/core$var_get__4386.class +0 -0
  778. data/lib/clojure/core$var_set__4389.class +0 -0
  779. data/lib/clojure/core$vary_meta__3246.class +0 -0
  780. data/lib/clojure/core$vec__3170.class +0 -0
  781. data/lib/clojure/core$vector_QMARK___3143.class +0 -0
  782. data/lib/clojure/core$vector__3166.class +0 -0
  783. data/lib/clojure/core$when__3193.class +0 -0
  784. data/lib/clojure/core$when_first__4461.class +0 -0
  785. data/lib/clojure/core$when_let__3669.class +0 -0
  786. data/lib/clojure/core$when_not__3196.class +0 -0
  787. data/lib/clojure/core$while__5135.class +0 -0
  788. data/lib/clojure/core$with_in_str__4509.class +0 -0
  789. data/lib/clojure/core$with_local_vars__4392.class +0 -0
  790. data/lib/clojure/core$with_meta__3152.class +0 -0
  791. data/lib/clojure/core$with_open__4184.class +0 -0
  792. data/lib/clojure/core$with_out_str__4505.class +0 -0
  793. data/lib/clojure/core$with_precision__4675.class +0 -0
  794. data/lib/clojure/core$xml_seq__4610.class +0 -0
  795. data/lib/clojure/core$zero_QMARK___3488.class +0 -0
  796. data/lib/clojure/core$zipmap__3955.class +0 -0
  797. data/lib/clojure/core.clj +4121 -0
  798. data/lib/clojure/core__init.class +0 -0
  799. data/lib/clojure/core_print.clj +317 -0
  800. data/lib/clojure/core_print__init.class +0 -0
  801. data/lib/clojure/core_proxy.clj +394 -0
  802. data/lib/clojure/core_proxy__init.class +0 -0
  803. data/lib/clojure/genclass.clj +683 -0
  804. data/lib/clojure/genclass__init.class +0 -0
  805. data/lib/clojure/inspector$atom_QMARK___6181.class +0 -0
  806. data/lib/clojure/inspector$collection_tag__6184.class +0 -0
  807. data/lib/clojure/inspector$fn__6187.class +0 -0
  808. data/lib/clojure/inspector$fn__6190.class +0 -0
  809. data/lib/clojure/inspector$fn__6193.class +0 -0
  810. data/lib/clojure/inspector$fn__6196.class +0 -0
  811. data/lib/clojure/inspector$fn__6199.class +0 -0
  812. data/lib/clojure/inspector$fn__6202.class +0 -0
  813. data/lib/clojure/inspector$fn__6205.class +0 -0
  814. data/lib/clojure/inspector$fn__6208.class +0 -0
  815. data/lib/clojure/inspector$fn__6211.class +0 -0
  816. data/lib/clojure/inspector$fn__6278$fn__6280.class +0 -0
  817. data/lib/clojure/inspector$fn__6278$fn__6283.class +0 -0
  818. data/lib/clojure/inspector$fn__6278.class +0 -0
  819. data/lib/clojure/inspector$fn__6287$fn__6289.class +0 -0
  820. data/lib/clojure/inspector$fn__6287$fn__6292.class +0 -0
  821. data/lib/clojure/inspector$fn__6287.class +0 -0
  822. data/lib/clojure/inspector$fn__6296$fn__6299.class +0 -0
  823. data/lib/clojure/inspector$fn__6296$fn__6303.class +0 -0
  824. data/lib/clojure/inspector$fn__6296$fn__6306.class +0 -0
  825. data/lib/clojure/inspector$fn__6296.class +0 -0
  826. data/lib/clojure/inspector$fn__6324$fn__6326.class +0 -0
  827. data/lib/clojure/inspector$fn__6324$fn__6329.class +0 -0
  828. data/lib/clojure/inspector$fn__6324$fn__6332.class +0 -0
  829. data/lib/clojure/inspector$fn__6324.class +0 -0
  830. data/lib/clojure/inspector$inspect__6337.class +0 -0
  831. data/lib/clojure/inspector$inspect_table__6274.class +0 -0
  832. data/lib/clojure/inspector$inspect_tree__6270.class +0 -0
  833. data/lib/clojure/inspector$list_model__6310$fn__6313.class +0 -0
  834. data/lib/clojure/inspector$list_model__6310$fn__6316.class +0 -0
  835. data/lib/clojure/inspector$list_model__6310$fn__6319.class +0 -0
  836. data/lib/clojure/inspector$list_model__6310.class +0 -0
  837. data/lib/clojure/inspector$old_table_model__6242$fn__6244.class +0 -0
  838. data/lib/clojure/inspector$old_table_model__6242$fn__6247.class +0 -0
  839. data/lib/clojure/inspector$old_table_model__6242$fn__6250.class +0 -0
  840. data/lib/clojure/inspector$old_table_model__6242$fn__6253.class +0 -0
  841. data/lib/clojure/inspector$old_table_model__6242$fn__6256.class +0 -0
  842. data/lib/clojure/inspector$old_table_model__6242$fn__6259.class +0 -0
  843. data/lib/clojure/inspector$old_table_model__6242$fn__6262.class +0 -0
  844. data/lib/clojure/inspector$old_table_model__6242$fn__6265.class +0 -0
  845. data/lib/clojure/inspector$old_table_model__6242.class +0 -0
  846. data/lib/clojure/inspector$tree_model__6214$fn__6216.class +0 -0
  847. data/lib/clojure/inspector$tree_model__6214$fn__6219.class +0 -0
  848. data/lib/clojure/inspector$tree_model__6214$fn__6222.class +0 -0
  849. data/lib/clojure/inspector$tree_model__6214$fn__6225.class +0 -0
  850. data/lib/clojure/inspector$tree_model__6214$fn__6228.class +0 -0
  851. data/lib/clojure/inspector$tree_model__6214$fn__6231.class +0 -0
  852. data/lib/clojure/inspector$tree_model__6214$fn__6234.class +0 -0
  853. data/lib/clojure/inspector$tree_model__6214$fn__6237.class +0 -0
  854. data/lib/clojure/inspector$tree_model__6214.class +0 -0
  855. data/lib/clojure/inspector.clj +180 -0
  856. data/lib/clojure/inspector__init.class +0 -0
  857. data/lib/clojure/lang/AFn.class +0 -0
  858. data/lib/clojure/lang/AFunction.class +0 -0
  859. data/lib/clojure/lang/AMapEntry.class +0 -0
  860. data/lib/clojure/lang/APersistentMap$1.class +0 -0
  861. data/lib/clojure/lang/APersistentMap$2$1.class +0 -0
  862. data/lib/clojure/lang/APersistentMap$2.class +0 -0
  863. data/lib/clojure/lang/APersistentMap$3$1.class +0 -0
  864. data/lib/clojure/lang/APersistentMap$3.class +0 -0
  865. data/lib/clojure/lang/APersistentMap$KeySeq.class +0 -0
  866. data/lib/clojure/lang/APersistentMap$ValSeq.class +0 -0
  867. data/lib/clojure/lang/APersistentMap.class +0 -0
  868. data/lib/clojure/lang/APersistentSet.class +0 -0
  869. data/lib/clojure/lang/APersistentVector$1.class +0 -0
  870. data/lib/clojure/lang/APersistentVector$2.class +0 -0
  871. data/lib/clojure/lang/APersistentVector$RSeq.class +0 -0
  872. data/lib/clojure/lang/APersistentVector$Seq.class +0 -0
  873. data/lib/clojure/lang/APersistentVector$Src.class +0 -0
  874. data/lib/clojure/lang/APersistentVector$SubVector.class +0 -0
  875. data/lib/clojure/lang/APersistentVector.class +0 -0
  876. data/lib/clojure/lang/ARef.class +0 -0
  877. data/lib/clojure/lang/AReference.class +0 -0
  878. data/lib/clojure/lang/ASeq$Src.class +0 -0
  879. data/lib/clojure/lang/ASeq.class +0 -0
  880. data/lib/clojure/lang/Agent$Action.class +0 -0
  881. data/lib/clojure/lang/Agent.class +0 -0
  882. data/lib/clojure/lang/ArraySeq$ArraySeq_double.class +0 -0
  883. data/lib/clojure/lang/ArraySeq$ArraySeq_float.class +0 -0
  884. data/lib/clojure/lang/ArraySeq$ArraySeq_int.class +0 -0
  885. data/lib/clojure/lang/ArraySeq$ArraySeq_long.class +0 -0
  886. data/lib/clojure/lang/ArraySeq.class +0 -0
  887. data/lib/clojure/lang/ArrayStream$ArrayStream_boolean.class +0 -0
  888. data/lib/clojure/lang/ArrayStream$ArrayStream_byte.class +0 -0
  889. data/lib/clojure/lang/ArrayStream$ArrayStream_char.class +0 -0
  890. data/lib/clojure/lang/ArrayStream$ArrayStream_double.class +0 -0
  891. data/lib/clojure/lang/ArrayStream$ArrayStream_float.class +0 -0
  892. data/lib/clojure/lang/ArrayStream$ArrayStream_int.class +0 -0
  893. data/lib/clojure/lang/ArrayStream$ArrayStream_long.class +0 -0
  894. data/lib/clojure/lang/ArrayStream$ArrayStream_short.class +0 -0
  895. data/lib/clojure/lang/ArrayStream.class +0 -0
  896. data/lib/clojure/lang/Associative.class +0 -0
  897. data/lib/clojure/lang/Atom.class +0 -0
  898. data/lib/clojure/lang/Binding.class +0 -0
  899. data/lib/clojure/lang/Box.class +0 -0
  900. data/lib/clojure/lang/Compile.class +0 -0
  901. data/lib/clojure/lang/Compiler$1.class +0 -0
  902. data/lib/clojure/lang/Compiler$AssignExpr$Parser.class +0 -0
  903. data/lib/clojure/lang/Compiler$AssignExpr.class +0 -0
  904. data/lib/clojure/lang/Compiler$AssignableExpr.class +0 -0
  905. data/lib/clojure/lang/Compiler$BindingInit.class +0 -0
  906. data/lib/clojure/lang/Compiler$BodyExpr$Parser.class +0 -0
  907. data/lib/clojure/lang/Compiler$BodyExpr.class +0 -0
  908. data/lib/clojure/lang/Compiler$BooleanExpr.class +0 -0
  909. data/lib/clojure/lang/Compiler$C.class +0 -0
  910. data/lib/clojure/lang/Compiler$CompilerException.class +0 -0
  911. data/lib/clojure/lang/Compiler$ConstantExpr$Parser.class +0 -0
  912. data/lib/clojure/lang/Compiler$ConstantExpr.class +0 -0
  913. data/lib/clojure/lang/Compiler$DefExpr$Parser.class +0 -0
  914. data/lib/clojure/lang/Compiler$DefExpr.class +0 -0
  915. data/lib/clojure/lang/Compiler$EmptyExpr.class +0 -0
  916. data/lib/clojure/lang/Compiler$Expr.class +0 -0
  917. data/lib/clojure/lang/Compiler$FieldExpr.class +0 -0
  918. data/lib/clojure/lang/Compiler$FnExpr.class +0 -0
  919. data/lib/clojure/lang/Compiler$FnLoaderThunk.class +0 -0
  920. data/lib/clojure/lang/Compiler$FnMethod.class +0 -0
  921. data/lib/clojure/lang/Compiler$HostExpr$Parser.class +0 -0
  922. data/lib/clojure/lang/Compiler$HostExpr.class +0 -0
  923. data/lib/clojure/lang/Compiler$IParser.class +0 -0
  924. data/lib/clojure/lang/Compiler$IfExpr$Parser.class +0 -0
  925. data/lib/clojure/lang/Compiler$IfExpr.class +0 -0
  926. data/lib/clojure/lang/Compiler$InstanceFieldExpr.class +0 -0
  927. data/lib/clojure/lang/Compiler$InstanceMethodExpr.class +0 -0
  928. data/lib/clojure/lang/Compiler$InvokeExpr.class +0 -0
  929. data/lib/clojure/lang/Compiler$KeywordExpr.class +0 -0
  930. data/lib/clojure/lang/Compiler$LetExpr$Parser.class +0 -0
  931. data/lib/clojure/lang/Compiler$LetExpr.class +0 -0
  932. data/lib/clojure/lang/Compiler$LetFnExpr$Parser.class +0 -0
  933. data/lib/clojure/lang/Compiler$LetFnExpr.class +0 -0
  934. data/lib/clojure/lang/Compiler$ListExpr.class +0 -0
  935. data/lib/clojure/lang/Compiler$LiteralExpr.class +0 -0
  936. data/lib/clojure/lang/Compiler$LocalBinding.class +0 -0
  937. data/lib/clojure/lang/Compiler$LocalBindingExpr.class +0 -0
  938. data/lib/clojure/lang/Compiler$MapExpr.class +0 -0
  939. data/lib/clojure/lang/Compiler$MaybePrimitiveExpr.class +0 -0
  940. data/lib/clojure/lang/Compiler$MetaExpr.class +0 -0
  941. data/lib/clojure/lang/Compiler$MethodExpr.class +0 -0
  942. data/lib/clojure/lang/Compiler$MonitorEnterExpr$Parser.class +0 -0
  943. data/lib/clojure/lang/Compiler$MonitorEnterExpr.class +0 -0
  944. data/lib/clojure/lang/Compiler$MonitorExitExpr$Parser.class +0 -0
  945. data/lib/clojure/lang/Compiler$MonitorExitExpr.class +0 -0
  946. data/lib/clojure/lang/Compiler$NewExpr$Parser.class +0 -0
  947. data/lib/clojure/lang/Compiler$NewExpr.class +0 -0
  948. data/lib/clojure/lang/Compiler$NilExpr.class +0 -0
  949. data/lib/clojure/lang/Compiler$PSTATE.class +0 -0
  950. data/lib/clojure/lang/Compiler$RecurExpr$Parser.class +0 -0
  951. data/lib/clojure/lang/Compiler$RecurExpr.class +0 -0
  952. data/lib/clojure/lang/Compiler$SetExpr.class +0 -0
  953. data/lib/clojure/lang/Compiler$SourceDebugExtensionAttribute.class +0 -0
  954. data/lib/clojure/lang/Compiler$StaticFieldExpr.class +0 -0
  955. data/lib/clojure/lang/Compiler$StaticMethodExpr.class +0 -0
  956. data/lib/clojure/lang/Compiler$StringExpr.class +0 -0
  957. data/lib/clojure/lang/Compiler$TheVarExpr$Parser.class +0 -0
  958. data/lib/clojure/lang/Compiler$TheVarExpr.class +0 -0
  959. data/lib/clojure/lang/Compiler$ThrowExpr$Parser.class +0 -0
  960. data/lib/clojure/lang/Compiler$ThrowExpr.class +0 -0
  961. data/lib/clojure/lang/Compiler$TryExpr$CatchClause.class +0 -0
  962. data/lib/clojure/lang/Compiler$TryExpr$Parser.class +0 -0
  963. data/lib/clojure/lang/Compiler$TryExpr.class +0 -0
  964. data/lib/clojure/lang/Compiler$UnresolvedVarExpr.class +0 -0
  965. data/lib/clojure/lang/Compiler$UntypedExpr.class +0 -0
  966. data/lib/clojure/lang/Compiler$VarExpr.class +0 -0
  967. data/lib/clojure/lang/Compiler$VectorExpr.class +0 -0
  968. data/lib/clojure/lang/Compiler.class +0 -0
  969. data/lib/clojure/lang/Cons.class +0 -0
  970. data/lib/clojure/lang/Counted.class +0 -0
  971. data/lib/clojure/lang/Delay.class +0 -0
  972. data/lib/clojure/lang/DynamicClassLoader.class +0 -0
  973. data/lib/clojure/lang/EnumerationSeq$State.class +0 -0
  974. data/lib/clojure/lang/EnumerationSeq.class +0 -0
  975. data/lib/clojure/lang/Fn.class +0 -0
  976. data/lib/clojure/lang/IDeref.class +0 -0
  977. data/lib/clojure/lang/IFn.class +0 -0
  978. data/lib/clojure/lang/IMapEntry.class +0 -0
  979. data/lib/clojure/lang/IMeta.class +0 -0
  980. data/lib/clojure/lang/IObj.class +0 -0
  981. data/lib/clojure/lang/IPersistentCollection.class +0 -0
  982. data/lib/clojure/lang/IPersistentList.class +0 -0
  983. data/lib/clojure/lang/IPersistentMap.class +0 -0
  984. data/lib/clojure/lang/IPersistentSet.class +0 -0
  985. data/lib/clojure/lang/IPersistentStack.class +0 -0
  986. data/lib/clojure/lang/IPersistentVector.class +0 -0
  987. data/lib/clojure/lang/IProxy.class +0 -0
  988. data/lib/clojure/lang/IReduce.class +0 -0
  989. data/lib/clojure/lang/IRef.class +0 -0
  990. data/lib/clojure/lang/IReference.class +0 -0
  991. data/lib/clojure/lang/ISeq.class +0 -0
  992. data/lib/clojure/lang/IndexedSeq.class +0 -0
  993. data/lib/clojure/lang/IteratorSeq$State.class +0 -0
  994. data/lib/clojure/lang/IteratorSeq.class +0 -0
  995. data/lib/clojure/lang/IteratorStream.class +0 -0
  996. data/lib/clojure/lang/Keyword.class +0 -0
  997. data/lib/clojure/lang/LazilyPersistentVector.class +0 -0
  998. data/lib/clojure/lang/LazySeq.class +0 -0
  999. data/lib/clojure/lang/LineNumberingPushbackReader.class +0 -0
  1000. data/lib/clojure/lang/LispReader$ArgReader.class +0 -0
  1001. data/lib/clojure/lang/LispReader$CharacterReader.class +0 -0
  1002. data/lib/clojure/lang/LispReader$CommentReader.class +0 -0
  1003. data/lib/clojure/lang/LispReader$CtorReader.class +0 -0
  1004. data/lib/clojure/lang/LispReader$DiscardReader.class +0 -0
  1005. data/lib/clojure/lang/LispReader$DispatchReader.class +0 -0
  1006. data/lib/clojure/lang/LispReader$EvalReader.class +0 -0
  1007. data/lib/clojure/lang/LispReader$FnReader.class +0 -0
  1008. data/lib/clojure/lang/LispReader$ListReader.class +0 -0
  1009. data/lib/clojure/lang/LispReader$MapReader.class +0 -0
  1010. data/lib/clojure/lang/LispReader$MetaReader.class +0 -0
  1011. data/lib/clojure/lang/LispReader$ReaderException.class +0 -0
  1012. data/lib/clojure/lang/LispReader$RegexReader.class +0 -0
  1013. data/lib/clojure/lang/LispReader$SetReader.class +0 -0
  1014. data/lib/clojure/lang/LispReader$StringReader.class +0 -0
  1015. data/lib/clojure/lang/LispReader$SyntaxQuoteReader.class +0 -0
  1016. data/lib/clojure/lang/LispReader$UnmatchedDelimiterReader.class +0 -0
  1017. data/lib/clojure/lang/LispReader$UnquoteReader.class +0 -0
  1018. data/lib/clojure/lang/LispReader$UnreadableReader.class +0 -0
  1019. data/lib/clojure/lang/LispReader$VarReader.class +0 -0
  1020. data/lib/clojure/lang/LispReader$VectorReader.class +0 -0
  1021. data/lib/clojure/lang/LispReader$WrappingReader.class +0 -0
  1022. data/lib/clojure/lang/LispReader.class +0 -0
  1023. data/lib/clojure/lang/LockingTransaction$AbortException.class +0 -0
  1024. data/lib/clojure/lang/LockingTransaction$CFn.class +0 -0
  1025. data/lib/clojure/lang/LockingTransaction$Info.class +0 -0
  1026. data/lib/clojure/lang/LockingTransaction$Notify.class +0 -0
  1027. data/lib/clojure/lang/LockingTransaction$RetryEx.class +0 -0
  1028. data/lib/clojure/lang/LockingTransaction.class +0 -0
  1029. data/lib/clojure/lang/MapEntry.class +0 -0
  1030. data/lib/clojure/lang/MultiFn.class +0 -0
  1031. data/lib/clojure/lang/Named.class +0 -0
  1032. data/lib/clojure/lang/Namespace.class +0 -0
  1033. data/lib/clojure/lang/Numbers$BigDecimalOps.class +0 -0
  1034. data/lib/clojure/lang/Numbers$BigIntegerBitOps.class +0 -0
  1035. data/lib/clojure/lang/Numbers$BigIntegerOps.class +0 -0
  1036. data/lib/clojure/lang/Numbers$BitOps.class +0 -0
  1037. data/lib/clojure/lang/Numbers$DoubleOps.class +0 -0
  1038. data/lib/clojure/lang/Numbers$FloatOps.class +0 -0
  1039. data/lib/clojure/lang/Numbers$IntegerBitOps.class +0 -0
  1040. data/lib/clojure/lang/Numbers$IntegerOps.class +0 -0
  1041. data/lib/clojure/lang/Numbers$LongBitOps.class +0 -0
  1042. data/lib/clojure/lang/Numbers$LongOps.class +0 -0
  1043. data/lib/clojure/lang/Numbers$Ops.class +0 -0
  1044. data/lib/clojure/lang/Numbers$RatioOps.class +0 -0
  1045. data/lib/clojure/lang/Numbers.class +0 -0
  1046. data/lib/clojure/lang/Obj.class +0 -0
  1047. data/lib/clojure/lang/PersistentArrayMap$Iter.class +0 -0
  1048. data/lib/clojure/lang/PersistentArrayMap$Seq.class +0 -0
  1049. data/lib/clojure/lang/PersistentArrayMap.class +0 -0
  1050. data/lib/clojure/lang/PersistentHashMap$BitmapIndexedNode$Seq.class +0 -0
  1051. data/lib/clojure/lang/PersistentHashMap$BitmapIndexedNode.class +0 -0
  1052. data/lib/clojure/lang/PersistentHashMap$EmptyNode.class +0 -0
  1053. data/lib/clojure/lang/PersistentHashMap$FullNode$Seq.class +0 -0
  1054. data/lib/clojure/lang/PersistentHashMap$FullNode.class +0 -0
  1055. data/lib/clojure/lang/PersistentHashMap$HashCollisionNode.class +0 -0
  1056. data/lib/clojure/lang/PersistentHashMap$INode.class +0 -0
  1057. data/lib/clojure/lang/PersistentHashMap$LeafNode.class +0 -0
  1058. data/lib/clojure/lang/PersistentHashMap.class +0 -0
  1059. data/lib/clojure/lang/PersistentHashSet.class +0 -0
  1060. data/lib/clojure/lang/PersistentList$1.class +0 -0
  1061. data/lib/clojure/lang/PersistentList$EmptyList$1.class +0 -0
  1062. data/lib/clojure/lang/PersistentList$EmptyList.class +0 -0
  1063. data/lib/clojure/lang/PersistentList.class +0 -0
  1064. data/lib/clojure/lang/PersistentQueue$Seq.class +0 -0
  1065. data/lib/clojure/lang/PersistentQueue.class +0 -0
  1066. data/lib/clojure/lang/PersistentStructMap$1.class +0 -0
  1067. data/lib/clojure/lang/PersistentStructMap$Def.class +0 -0
  1068. data/lib/clojure/lang/PersistentStructMap$Seq.class +0 -0
  1069. data/lib/clojure/lang/PersistentStructMap.class +0 -0
  1070. data/lib/clojure/lang/PersistentTreeMap$Black.class +0 -0
  1071. data/lib/clojure/lang/PersistentTreeMap$BlackBranch.class +0 -0
  1072. data/lib/clojure/lang/PersistentTreeMap$BlackBranchVal.class +0 -0
  1073. data/lib/clojure/lang/PersistentTreeMap$BlackVal.class +0 -0
  1074. data/lib/clojure/lang/PersistentTreeMap$KeyIterator.class +0 -0
  1075. data/lib/clojure/lang/PersistentTreeMap$Node.class +0 -0
  1076. data/lib/clojure/lang/PersistentTreeMap$NodeIterator.class +0 -0
  1077. data/lib/clojure/lang/PersistentTreeMap$Red.class +0 -0
  1078. data/lib/clojure/lang/PersistentTreeMap$RedBranch.class +0 -0
  1079. data/lib/clojure/lang/PersistentTreeMap$RedBranchVal.class +0 -0
  1080. data/lib/clojure/lang/PersistentTreeMap$RedVal.class +0 -0
  1081. data/lib/clojure/lang/PersistentTreeMap$Seq.class +0 -0
  1082. data/lib/clojure/lang/PersistentTreeMap$ValIterator.class +0 -0
  1083. data/lib/clojure/lang/PersistentTreeMap.class +0 -0
  1084. data/lib/clojure/lang/PersistentTreeSet.class +0 -0
  1085. data/lib/clojure/lang/PersistentVector.class +0 -0
  1086. data/lib/clojure/lang/ProxyHandler.class +0 -0
  1087. data/lib/clojure/lang/RT$1.class +0 -0
  1088. data/lib/clojure/lang/RT$2.class +0 -0
  1089. data/lib/clojure/lang/RT$3.class +0 -0
  1090. data/lib/clojure/lang/RT$4.class +0 -0
  1091. data/lib/clojure/lang/RT$5.class +0 -0
  1092. data/lib/clojure/lang/RT$6.class +0 -0
  1093. data/lib/clojure/lang/RT.class +0 -0
  1094. data/lib/clojure/lang/Range$Src.class +0 -0
  1095. data/lib/clojure/lang/Range.class +0 -0
  1096. data/lib/clojure/lang/Ratio.class +0 -0
  1097. data/lib/clojure/lang/Ref$TVal.class +0 -0
  1098. data/lib/clojure/lang/Ref.class +0 -0
  1099. data/lib/clojure/lang/Reflector.class +0 -0
  1100. data/lib/clojure/lang/Repl.class +0 -0
  1101. data/lib/clojure/lang/RestFn.class +0 -0
  1102. data/lib/clojure/lang/Reversible.class +0 -0
  1103. data/lib/clojure/lang/Script.class +0 -0
  1104. data/lib/clojure/lang/SeqEnumeration.class +0 -0
  1105. data/lib/clojure/lang/SeqIterator.class +0 -0
  1106. data/lib/clojure/lang/Seqable.class +0 -0
  1107. data/lib/clojure/lang/Sequential.class +0 -0
  1108. data/lib/clojure/lang/Settable.class +0 -0
  1109. data/lib/clojure/lang/Sorted.class +0 -0
  1110. data/lib/clojure/lang/Stream$1.class +0 -0
  1111. data/lib/clojure/lang/Stream$2.class +0 -0
  1112. data/lib/clojure/lang/Stream.class +0 -0
  1113. data/lib/clojure/lang/Streamable.class +0 -0
  1114. data/lib/clojure/lang/StringSeq.class +0 -0
  1115. data/lib/clojure/lang/Symbol.class +0 -0
  1116. data/lib/clojure/lang/TransactionalHashMap$1.class +0 -0
  1117. data/lib/clojure/lang/TransactionalHashMap.class +0 -0
  1118. data/lib/clojure/lang/Util.class +0 -0
  1119. data/lib/clojure/lang/Var$1.class +0 -0
  1120. data/lib/clojure/lang/Var$2.class +0 -0
  1121. data/lib/clojure/lang/Var$Frame.class +0 -0
  1122. data/lib/clojure/lang/Var.class +0 -0
  1123. data/lib/clojure/lang/XMLHandler.class +0 -0
  1124. data/lib/clojure/main$eval_opt__5839.class +0 -0
  1125. data/lib/clojure/main$help_opt__5871.class +0 -0
  1126. data/lib/clojure/main$init_dispatch__5843.class +0 -0
  1127. data/lib/clojure/main$init_opt__5836.class +0 -0
  1128. data/lib/clojure/main$initialize__5846.class +0 -0
  1129. data/lib/clojure/main$legacy_repl__5878.class +0 -0
  1130. data/lib/clojure/main$legacy_script__5883.class +0 -0
  1131. data/lib/clojure/main$load_script__5833.class +0 -0
  1132. data/lib/clojure/main$main__5888.class +0 -0
  1133. data/lib/clojure/main$main_dispatch__5874.class +0 -0
  1134. data/lib/clojure/main$null_opt__5868.class +0 -0
  1135. data/lib/clojure/main$repl__5813$fn__5816.class +0 -0
  1136. data/lib/clojure/main$repl__5813$fn__5819.class +0 -0
  1137. data/lib/clojure/main$repl__5813$fn__5822.class +0 -0
  1138. data/lib/clojure/main$repl__5813$fn__5829.class +0 -0
  1139. data/lib/clojure/main$repl__5813$read_eval_print__5825.class +0 -0
  1140. data/lib/clojure/main$repl__5813.class +0 -0
  1141. data/lib/clojure/main$repl_caught__5810.class +0 -0
  1142. data/lib/clojure/main$repl_exception__5807.class +0 -0
  1143. data/lib/clojure/main$repl_opt__5853$fn__5856.class +0 -0
  1144. data/lib/clojure/main$repl_opt__5853$fn__5859.class +0 -0
  1145. data/lib/clojure/main$repl_opt__5853.class +0 -0
  1146. data/lib/clojure/main$repl_prompt__5789.class +0 -0
  1147. data/lib/clojure/main$repl_read__5799.class +0 -0
  1148. data/lib/clojure/main$root_cause__5803.class +0 -0
  1149. data/lib/clojure/main$script_opt__5864.class +0 -0
  1150. data/lib/clojure/main$skip_if_eol__5792.class +0 -0
  1151. data/lib/clojure/main$skip_whitespace__5795.class +0 -0
  1152. data/lib/clojure/main$with_bindings__5786.class +0 -0
  1153. data/lib/clojure/main.class +0 -0
  1154. data/lib/clojure/main.clj +337 -0
  1155. data/lib/clojure/main__init.class +0 -0
  1156. data/lib/clojure/parallel.clj +248 -0
  1157. data/lib/clojure/proxy/clojure/lang/APersistentMap.class +0 -0
  1158. data/lib/clojure/proxy/java/lang/Object$ContentHandler.class +0 -0
  1159. data/lib/clojure/proxy/java/lang/Object$Future$IDeref.class +0 -0
  1160. data/lib/clojure/proxy/java/lang/Object$TableModel.class +0 -0
  1161. data/lib/clojure/proxy/java/lang/Object$TreeModel.class +0 -0
  1162. data/lib/clojure/proxy/javax/swing/table/AbstractTableModel.class +0 -0
  1163. data/lib/clojure/set$bubble_max_key__5896$fn__5898.class +0 -0
  1164. data/lib/clojure/set$bubble_max_key__5896.class +0 -0
  1165. data/lib/clojure/set$difference__5920$fn__5923.class +0 -0
  1166. data/lib/clojure/set$difference__5920.class +0 -0
  1167. data/lib/clojure/set$index__5956$fn__5958.class +0 -0
  1168. data/lib/clojure/set$index__5956.class +0 -0
  1169. data/lib/clojure/set$intersection__5909$fn__5912.class +0 -0
  1170. data/lib/clojure/set$intersection__5909$fn__5916.class +0 -0
  1171. data/lib/clojure/set$intersection__5909.class +0 -0
  1172. data/lib/clojure/set$join__5974$fn__5977$fn__5979.class +0 -0
  1173. data/lib/clojure/set$join__5974$fn__5977.class +0 -0
  1174. data/lib/clojure/set$join__5974$fn__5985$fn__5987.class +0 -0
  1175. data/lib/clojure/set$join__5974$fn__5985.class +0 -0
  1176. data/lib/clojure/set$join__5974.class +0 -0
  1177. data/lib/clojure/set$map_invert__5962$fn__5965.class +0 -0
  1178. data/lib/clojure/set$map_invert__5962.class +0 -0
  1179. data/lib/clojure/set$project__5935$fn__5937.class +0 -0
  1180. data/lib/clojure/set$project__5935.class +0 -0
  1181. data/lib/clojure/set$rename__5950$fn__5952.class +0 -0
  1182. data/lib/clojure/set$rename__5950.class +0 -0
  1183. data/lib/clojure/set$rename_keys__5941$fn__5944.class +0 -0
  1184. data/lib/clojure/set$rename_keys__5941.class +0 -0
  1185. data/lib/clojure/set$select__5928$fn__5930.class +0 -0
  1186. data/lib/clojure/set$select__5928.class +0 -0
  1187. data/lib/clojure/set$union__5902.class +0 -0
  1188. data/lib/clojure/set.clj +148 -0
  1189. data/lib/clojure/set__init.class +0 -0
  1190. data/lib/clojure/version.properties +5 -0
  1191. data/lib/clojure/xml$emit__6057.class +0 -0
  1192. data/lib/clojure/xml$emit_element__6052.class +0 -0
  1193. data/lib/clojure/xml$fn__5994$fn__6007.class +0 -0
  1194. data/lib/clojure/xml$fn__5994$fn__6010.class +0 -0
  1195. data/lib/clojure/xml$fn__5994$fn__6013.class +0 -0
  1196. data/lib/clojure/xml$fn__5994$fn__6016.class +0 -0
  1197. data/lib/clojure/xml$fn__5994$fn__6019.class +0 -0
  1198. data/lib/clojure/xml$fn__5994$fn__6022.class +0 -0
  1199. data/lib/clojure/xml$fn__5994$fn__6025.class +0 -0
  1200. data/lib/clojure/xml$fn__5994$fn__6028$attrs__6030.class +0 -0
  1201. data/lib/clojure/xml$fn__5994$fn__6028.class +0 -0
  1202. data/lib/clojure/xml$fn__5994$fn__6034.class +0 -0
  1203. data/lib/clojure/xml$fn__5994$fn__6037.class +0 -0
  1204. data/lib/clojure/xml$fn__5994$fn__6040.class +0 -0
  1205. data/lib/clojure/xml$fn__5994$push_chars__6000$fn__6002.class +0 -0
  1206. data/lib/clojure/xml$fn__5994$push_chars__6000.class +0 -0
  1207. data/lib/clojure/xml$fn__5994$push_content__5996.class +0 -0
  1208. data/lib/clojure/xml$fn__5994.class +0 -0
  1209. data/lib/clojure/xml$parse__6048.class +0 -0
  1210. data/lib/clojure/xml$startparse_sax__6045.class +0 -0
  1211. data/lib/clojure/xml.clj +115 -0
  1212. data/lib/clojure/xml__init.class +0 -0
  1213. data/lib/clojure/zip$append_child__6155.class +0 -0
  1214. data/lib/clojure/zip$branch_QMARK___6085.class +0 -0
  1215. data/lib/clojure/zip$children__6088.class +0 -0
  1216. data/lib/clojure/zip$down__6103.class +0 -0
  1217. data/lib/clojure/zip$edit__6149.class +0 -0
  1218. data/lib/clojure/zip$end_QMARK___6171.class +0 -0
  1219. data/lib/clojure/zip$insert_child__6152.class +0 -0
  1220. data/lib/clojure/zip$insert_left__6137.class +0 -0
  1221. data/lib/clojure/zip$insert_right__6141.class +0 -0
  1222. data/lib/clojure/zip$left__6127.class +0 -0
  1223. data/lib/clojure/zip$leftmost__6132.class +0 -0
  1224. data/lib/clojure/zip$lefts__6097.class +0 -0
  1225. data/lib/clojure/zip$make_node__6091.class +0 -0
  1226. data/lib/clojure/zip$next__6158.class +0 -0
  1227. data/lib/clojure/zip$node__6082.class +0 -0
  1228. data/lib/clojure/zip$path__6094.class +0 -0
  1229. data/lib/clojure/zip$prev__6165.class +0 -0
  1230. data/lib/clojure/zip$remove__6174.class +0 -0
  1231. data/lib/clojure/zip$replace__6145.class +0 -0
  1232. data/lib/clojure/zip$right__6116.class +0 -0
  1233. data/lib/clojure/zip$rightmost__6122.class +0 -0
  1234. data/lib/clojure/zip$rights__6100.class +0 -0
  1235. data/lib/clojure/zip$root__6113.class +0 -0
  1236. data/lib/clojure/zip$seq_zip__6063$fn__6065.class +0 -0
  1237. data/lib/clojure/zip$seq_zip__6063.class +0 -0
  1238. data/lib/clojure/zip$up__6108.class +0 -0
  1239. data/lib/clojure/zip$vector_zip__6069$fn__6071.class +0 -0
  1240. data/lib/clojure/zip$vector_zip__6069.class +0 -0
  1241. data/lib/clojure/zip$xml_zip__6075$fn__6077.class +0 -0
  1242. data/lib/clojure/zip$xml_zip__6075.class +0 -0
  1243. data/lib/clojure/zip$zipper__6060.class +0 -0
  1244. data/lib/clojure/zip.clj +278 -0
  1245. data/lib/clojure/zip__init.class +0 -0
  1246. data/src/clj/clojure/core.clj +4121 -0
  1247. data/src/clj/clojure/core_print.clj +317 -0
  1248. data/src/clj/clojure/core_proxy.clj +394 -0
  1249. data/src/clj/clojure/genclass.clj +683 -0
  1250. data/src/clj/clojure/inspector.clj +180 -0
  1251. data/src/clj/clojure/main.clj +337 -0
  1252. data/src/clj/clojure/parallel.clj +248 -0
  1253. data/src/clj/clojure/set.clj +148 -0
  1254. data/src/clj/clojure/version.properties +5 -0
  1255. data/src/clj/clojure/xml.clj +115 -0
  1256. data/src/clj/clojure/zip.clj +278 -0
  1257. data/src/jvm/clojure/asm/AnnotationVisitor.java +97 -0
  1258. data/src/jvm/clojure/asm/AnnotationWriter.java +357 -0
  1259. data/src/jvm/clojure/asm/Attribute.java +253 -0
  1260. data/src/jvm/clojure/asm/ByteVector.java +318 -0
  1261. data/src/jvm/clojure/asm/ClassAdapter.java +115 -0
  1262. data/src/jvm/clojure/asm/ClassReader.java +2224 -0
  1263. data/src/jvm/clojure/asm/ClassVisitor.java +196 -0
  1264. data/src/jvm/clojure/asm/ClassWriter.java +1415 -0
  1265. data/src/jvm/clojure/asm/Edge.java +75 -0
  1266. data/src/jvm/clojure/asm/FieldVisitor.java +64 -0
  1267. data/src/jvm/clojure/asm/FieldWriter.java +290 -0
  1268. data/src/jvm/clojure/asm/Frame.java +1506 -0
  1269. data/src/jvm/clojure/asm/Handler.java +70 -0
  1270. data/src/jvm/clojure/asm/Item.java +258 -0
  1271. data/src/jvm/clojure/asm/Label.java +437 -0
  1272. data/src/jvm/clojure/asm/MethodAdapter.java +186 -0
  1273. data/src/jvm/clojure/asm/MethodVisitor.java +396 -0
  1274. data/src/jvm/clojure/asm/MethodWriter.java +3029 -0
  1275. data/src/jvm/clojure/asm/Opcodes.java +341 -0
  1276. data/src/jvm/clojure/asm/Type.java +872 -0
  1277. data/src/jvm/clojure/asm/commons/AdviceAdapter.java +681 -0
  1278. data/src/jvm/clojure/asm/commons/AnalyzerAdapter.java +938 -0
  1279. data/src/jvm/clojure/asm/commons/CodeSizeEvaluator.java +234 -0
  1280. data/src/jvm/clojure/asm/commons/EmptyVisitor.java +221 -0
  1281. data/src/jvm/clojure/asm/commons/GeneratorAdapter.java +1533 -0
  1282. data/src/jvm/clojure/asm/commons/LocalVariablesSorter.java +330 -0
  1283. data/src/jvm/clojure/asm/commons/Method.java +267 -0
  1284. data/src/jvm/clojure/asm/commons/SerialVersionUIDAdder.java +508 -0
  1285. data/src/jvm/clojure/asm/commons/StaticInitMerger.java +102 -0
  1286. data/src/jvm/clojure/asm/commons/TableSwitchGenerator.java +55 -0
  1287. data/src/jvm/clojure/asm/commons/package.html +48 -0
  1288. data/src/jvm/clojure/asm/package.html +87 -0
  1289. data/src/jvm/clojure/lang/AFn.java +452 -0
  1290. data/src/jvm/clojure/lang/AFunction.java +47 -0
  1291. data/src/jvm/clojure/lang/AMapEntry.java +149 -0
  1292. data/src/jvm/clojure/lang/APersistentMap.java +382 -0
  1293. data/src/jvm/clojure/lang/APersistentSet.java +159 -0
  1294. data/src/jvm/clojure/lang/APersistentVector.java +579 -0
  1295. data/src/jvm/clojure/lang/ARef.java +107 -0
  1296. data/src/jvm/clojure/lang/AReference.java +40 -0
  1297. data/src/jvm/clojure/lang/ASeq.java +282 -0
  1298. data/src/jvm/clojure/lang/Agent.java +194 -0
  1299. data/src/jvm/clojure/lang/ArraySeq.java +316 -0
  1300. data/src/jvm/clojure/lang/ArrayStream.java +184 -0
  1301. data/src/jvm/clojure/lang/Associative.java +22 -0
  1302. data/src/jvm/clojure/lang/Atom.java +104 -0
  1303. data/src/jvm/clojure/lang/Binding.java +26 -0
  1304. data/src/jvm/clojure/lang/Box.java +22 -0
  1305. data/src/jvm/clojure/lang/Compile.java +73 -0
  1306. data/src/jvm/clojure/lang/Compiler.java +5017 -0
  1307. data/src/jvm/clojure/lang/Cons.java +53 -0
  1308. data/src/jvm/clojure/lang/Counted.java +18 -0
  1309. data/src/jvm/clojure/lang/Delay.java +38 -0
  1310. data/src/jvm/clojure/lang/DynamicClassLoader.java +71 -0
  1311. data/src/jvm/clojure/lang/EnumerationSeq.java +71 -0
  1312. data/src/jvm/clojure/lang/Fn.java +16 -0
  1313. data/src/jvm/clojure/lang/IDeref.java +17 -0
  1314. data/src/jvm/clojure/lang/IFn.java +90 -0
  1315. data/src/jvm/clojure/lang/IMapEntry.java +19 -0
  1316. data/src/jvm/clojure/lang/IMeta.java +17 -0
  1317. data/src/jvm/clojure/lang/IObj.java +18 -0
  1318. data/src/jvm/clojure/lang/IPersistentCollection.java +23 -0
  1319. data/src/jvm/clojure/lang/IPersistentList.java +16 -0
  1320. data/src/jvm/clojure/lang/IPersistentMap.java +23 -0
  1321. data/src/jvm/clojure/lang/IPersistentSet.java +19 -0
  1322. data/src/jvm/clojure/lang/IPersistentStack.java +19 -0
  1323. data/src/jvm/clojure/lang/IPersistentVector.java +22 -0
  1324. data/src/jvm/clojure/lang/IProxy.java +21 -0
  1325. data/src/jvm/clojure/lang/IReduce.java +19 -0
  1326. data/src/jvm/clojure/lang/IRef.java +27 -0
  1327. data/src/jvm/clojure/lang/IReference.java +18 -0
  1328. data/src/jvm/clojure/lang/ISeq.java +29 -0
  1329. data/src/jvm/clojure/lang/IndexedSeq.java +16 -0
  1330. data/src/jvm/clojure/lang/IteratorSeq.java +69 -0
  1331. data/src/jvm/clojure/lang/IteratorStream.java +29 -0
  1332. data/src/jvm/clojure/lang/Keyword.java +199 -0
  1333. data/src/jvm/clojure/lang/LazilyPersistentVector.java +79 -0
  1334. data/src/jvm/clojure/lang/LazySeq.java +233 -0
  1335. data/src/jvm/clojure/lang/LineNumberingPushbackReader.java +75 -0
  1336. data/src/jvm/clojure/lang/LispReader.java +1063 -0
  1337. data/src/jvm/clojure/lang/LockingTransaction.java +583 -0
  1338. data/src/jvm/clojure/lang/MapEntry.java +40 -0
  1339. data/src/jvm/clojure/lang/MultiFn.java +308 -0
  1340. data/src/jvm/clojure/lang/Named.java +19 -0
  1341. data/src/jvm/clojure/lang/Namespace.java +178 -0
  1342. data/src/jvm/clojure/lang/Numbers.java +4371 -0
  1343. data/src/jvm/clojure/lang/Obj.java +33 -0
  1344. data/src/jvm/clojure/lang/PersistentArrayMap.java +263 -0
  1345. data/src/jvm/clojure/lang/PersistentHashMap.java +746 -0
  1346. data/src/jvm/clojure/lang/PersistentHashSet.java +72 -0
  1347. data/src/jvm/clojure/lang/PersistentList.java +298 -0
  1348. data/src/jvm/clojure/lang/PersistentQueue.java +304 -0
  1349. data/src/jvm/clojure/lang/PersistentStructMap.java +225 -0
  1350. data/src/jvm/clojure/lang/PersistentTreeMap.java +998 -0
  1351. data/src/jvm/clojure/lang/PersistentTreeSet.java +94 -0
  1352. data/src/jvm/clojure/lang/PersistentVector.java +320 -0
  1353. data/src/jvm/clojure/lang/ProxyHandler.java +72 -0
  1354. data/src/jvm/clojure/lang/RT.java +1676 -0
  1355. data/src/jvm/clojure/lang/Range.java +85 -0
  1356. data/src/jvm/clojure/lang/Ratio.java +74 -0
  1357. data/src/jvm/clojure/lang/Ref.java +335 -0
  1358. data/src/jvm/clojure/lang/Reflector.java +448 -0
  1359. data/src/jvm/clojure/lang/Repl.java +22 -0
  1360. data/src/jvm/clojure/lang/RestFn.java +1335 -0
  1361. data/src/jvm/clojure/lang/Reversible.java +17 -0
  1362. data/src/jvm/clojure/lang/Script.java +22 -0
  1363. data/src/jvm/clojure/lang/SeqEnumeration.java +33 -0
  1364. data/src/jvm/clojure/lang/SeqIterator.java +41 -0
  1365. data/src/jvm/clojure/lang/Seqable.java +17 -0
  1366. data/src/jvm/clojure/lang/Sequential.java +13 -0
  1367. data/src/jvm/clojure/lang/Settable.java +18 -0
  1368. data/src/jvm/clojure/lang/Sorted.java +25 -0
  1369. data/src/jvm/clojure/lang/Stream.java +88 -0
  1370. data/src/jvm/clojure/lang/Streamable.java +17 -0
  1371. data/src/jvm/clojure/lang/StringSeq.java +50 -0
  1372. data/src/jvm/clojure/lang/Symbol.java +121 -0
  1373. data/src/jvm/clojure/lang/TransactionalHashMap.java +197 -0
  1374. data/src/jvm/clojure/lang/Util.java +74 -0
  1375. data/src/jvm/clojure/lang/Var.java +472 -0
  1376. data/src/jvm/clojure/lang/XMLHandler.java +89 -0
  1377. data/src/jvm/clojure/main.java +41 -0
  1378. metadata +1433 -0
@@ -0,0 +1,115 @@
1
+ /***
2
+ * ASM: a very small and fast Java bytecode manipulation framework
3
+ * Copyright (c) 2000-2005 INRIA, France Telecom
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions
8
+ * are met:
9
+ * 1. Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * 2. Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ * 3. Neither the name of the copyright holders nor the names of its
15
+ * contributors may be used to endorse or promote products derived from
16
+ * this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28
+ * THE POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+ package clojure.asm;
31
+
32
+ /**
33
+ * An empty {@link ClassVisitor} that delegates to another {@link ClassVisitor}.
34
+ * This class can be used as a super class to quickly implement usefull class
35
+ * adapter classes, just by overriding the necessary methods.
36
+ *
37
+ * @author Eric Bruneton
38
+ */
39
+ public class ClassAdapter implements ClassVisitor{
40
+
41
+ /**
42
+ * The {@link ClassVisitor} to which this adapter delegates calls.
43
+ */
44
+ protected ClassVisitor cv;
45
+
46
+ /**
47
+ * Constructs a new {@link ClassAdapter} object.
48
+ *
49
+ * @param cv the class visitor to which this adapter must delegate calls.
50
+ */
51
+ public ClassAdapter(final ClassVisitor cv){
52
+ this.cv = cv;
53
+ }
54
+
55
+ public void visit(
56
+ final int version,
57
+ final int access,
58
+ final String name,
59
+ final String signature,
60
+ final String superName,
61
+ final String[] interfaces){
62
+ cv.visit(version, access, name, signature, superName, interfaces);
63
+ }
64
+
65
+ public void visitSource(final String source, final String debug){
66
+ cv.visitSource(source, debug);
67
+ }
68
+
69
+ public void visitOuterClass(
70
+ final String owner,
71
+ final String name,
72
+ final String desc){
73
+ cv.visitOuterClass(owner, name, desc);
74
+ }
75
+
76
+ public AnnotationVisitor visitAnnotation(
77
+ final String desc,
78
+ final boolean visible){
79
+ return cv.visitAnnotation(desc, visible);
80
+ }
81
+
82
+ public void visitAttribute(final Attribute attr){
83
+ cv.visitAttribute(attr);
84
+ }
85
+
86
+ public void visitInnerClass(
87
+ final String name,
88
+ final String outerName,
89
+ final String innerName,
90
+ final int access){
91
+ cv.visitInnerClass(name, outerName, innerName, access);
92
+ }
93
+
94
+ public FieldVisitor visitField(
95
+ final int access,
96
+ final String name,
97
+ final String desc,
98
+ final String signature,
99
+ final Object value){
100
+ return cv.visitField(access, name, desc, signature, value);
101
+ }
102
+
103
+ public MethodVisitor visitMethod(
104
+ final int access,
105
+ final String name,
106
+ final String desc,
107
+ final String signature,
108
+ final String[] exceptions){
109
+ return cv.visitMethod(access, name, desc, signature, exceptions);
110
+ }
111
+
112
+ public void visitEnd(){
113
+ cv.visitEnd();
114
+ }
115
+ }
@@ -0,0 +1,2224 @@
1
+ /***
2
+ * ASM: a very small and fast Java bytecode manipulation framework
3
+ * Copyright (c) 2000-2005 INRIA, France Telecom
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions
8
+ * are met:
9
+ * 1. Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * 2. Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ * 3. Neither the name of the copyright holders nor the names of its
15
+ * contributors may be used to endorse or promote products derived from
16
+ * this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28
+ * THE POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+ package clojure.asm;
31
+
32
+ import java.io.InputStream;
33
+ import java.io.IOException;
34
+
35
+ /**
36
+ * A Java class parser to make a {@link ClassVisitor} visit an existing class.
37
+ * This class parses a byte array conforming to the Java class file format and
38
+ * calls the appropriate visit methods of a given class visitor for each field,
39
+ * method and bytecode instruction encountered.
40
+ *
41
+ * @author Eric Bruneton
42
+ * @author Eugene Kuleshov
43
+ */
44
+ public class ClassReader{
45
+
46
+ /**
47
+ * Flag to skip method code. If this class is set <code>CODE</code>
48
+ * attribute won't be visited. This can be used, for example, to retrieve
49
+ * annotations for methods and method parameters.
50
+ */
51
+ public final static int SKIP_CODE = 1;
52
+
53
+ /**
54
+ * Flag to skip the debug information in the class. If this flag is set the
55
+ * debug information of the class is not visited, i.e. the
56
+ * {@link MethodVisitor#visitLocalVariable visitLocalVariable} and
57
+ * {@link MethodVisitor#visitLineNumber visitLineNumber} methods will not be
58
+ * called.
59
+ */
60
+ public final static int SKIP_DEBUG = 2;
61
+
62
+ /**
63
+ * Flag to skip the stack map frames in the class. If this flag is set the
64
+ * stack map frames of the class is not visited, i.e. the
65
+ * {@link MethodVisitor#visitFrame visitFrame} method will not be called.
66
+ * This flag is useful when the {@link ClassWriter#COMPUTE_FRAMES} option is
67
+ * used: it avoids visiting frames that will be ignored and recomputed from
68
+ * scratch in the class writer.
69
+ */
70
+ public final static int SKIP_FRAMES = 4;
71
+
72
+ /**
73
+ * Flag to expand the stack map frames. By default stack map frames are
74
+ * visited in their original format (i.e. "expanded" for classes whose
75
+ * version is less than V1_6, and "compressed" for the other classes). If
76
+ * this flag is set, stack map frames are always visited in expanded format
77
+ * (this option adds a decompression/recompression step in ClassReader and
78
+ * ClassWriter which degrades performances quite a lot).
79
+ */
80
+ public final static int EXPAND_FRAMES = 8;
81
+
82
+ /**
83
+ * The class to be parsed. <i>The content of this array must not be
84
+ * modified. This field is intended for {@link Attribute} sub classes, and
85
+ * is normally not needed by class generators or adapters.</i>
86
+ */
87
+ public final byte[] b;
88
+
89
+ /**
90
+ * The start index of each constant pool item in {@link #b b}, plus one.
91
+ * The one byte offset skips the constant pool item tag that indicates its
92
+ * type.
93
+ */
94
+ private final int[] items;
95
+
96
+ /**
97
+ * The String objects corresponding to the CONSTANT_Utf8 items. This cache
98
+ * avoids multiple parsing of a given CONSTANT_Utf8 constant pool item,
99
+ * which GREATLY improves performances (by a factor 2 to 3). This caching
100
+ * strategy could be extended to all constant pool items, but its benefit
101
+ * would not be so great for these items (because they are much less
102
+ * expensive to parse than CONSTANT_Utf8 items).
103
+ */
104
+ private final String[] strings;
105
+
106
+ /**
107
+ * Maximum length of the strings contained in the constant pool of the
108
+ * class.
109
+ */
110
+ private final int maxStringLength;
111
+
112
+ /**
113
+ * Start index of the class header information (access, name...) in
114
+ * {@link #b b}.
115
+ */
116
+ public final int header;
117
+
118
+ // ------------------------------------------------------------------------
119
+ // Constructors
120
+ // ------------------------------------------------------------------------
121
+
122
+ /**
123
+ * Constructs a new {@link ClassReader} object.
124
+ *
125
+ * @param b the bytecode of the class to be read.
126
+ */
127
+ public ClassReader(final byte[] b){
128
+ this(b, 0, b.length);
129
+ }
130
+
131
+ /**
132
+ * Constructs a new {@link ClassReader} object.
133
+ *
134
+ * @param b the bytecode of the class to be read.
135
+ * @param off the start offset of the class data.
136
+ * @param len the length of the class data.
137
+ */
138
+ public ClassReader(final byte[] b, final int off, final int len){
139
+ this.b = b;
140
+ // parses the constant pool
141
+ items = new int[readUnsignedShort(off + 8)];
142
+ int n = items.length;
143
+ strings = new String[n];
144
+ int max = 0;
145
+ int index = off + 10;
146
+ for(int i = 1; i < n; ++i)
147
+ {
148
+ items[i] = index + 1;
149
+ int size;
150
+ switch(b[index])
151
+ {
152
+ case ClassWriter.FIELD:
153
+ case ClassWriter.METH:
154
+ case ClassWriter.IMETH:
155
+ case ClassWriter.INT:
156
+ case ClassWriter.FLOAT:
157
+ case ClassWriter.NAME_TYPE:
158
+ size = 5;
159
+ break;
160
+ case ClassWriter.LONG:
161
+ case ClassWriter.DOUBLE:
162
+ size = 9;
163
+ ++i;
164
+ break;
165
+ case ClassWriter.UTF8:
166
+ size = 3 + readUnsignedShort(index + 1);
167
+ if(size > max)
168
+ {
169
+ max = size;
170
+ }
171
+ break;
172
+ // case ClassWriter.CLASS:
173
+ // case ClassWriter.STR:
174
+ default:
175
+ size = 3;
176
+ break;
177
+ }
178
+ index += size;
179
+ }
180
+ maxStringLength = max;
181
+ // the class header information starts just after the constant pool
182
+ header = index;
183
+ }
184
+
185
+ /**
186
+ * Returns the class's access flags (see {@link Opcodes}). This value may
187
+ * not reflect Deprecated and Synthetic flags when bytecode is before 1.5
188
+ * and those flags are represented by attributes.
189
+ *
190
+ * @return the class access flags
191
+ * @see ClassVisitor#visit(int,int,String,String,String,String[])
192
+ */
193
+ public int getAccess(){
194
+ return readUnsignedShort(header);
195
+ }
196
+
197
+ /**
198
+ * Returns the internal name of the class (see
199
+ * {@link Type#getInternalName() getInternalName}).
200
+ *
201
+ * @return the internal class name
202
+ * @see ClassVisitor#visit(int,int,String,String,String,String[])
203
+ */
204
+ public String getClassName(){
205
+ return readClass(header + 2, new char[maxStringLength]);
206
+ }
207
+
208
+ /**
209
+ * Returns the internal of name of the super class (see
210
+ * {@link Type#getInternalName() getInternalName}). For interfaces, the
211
+ * super class is {@link Object}.
212
+ *
213
+ * @return the internal name of super class, or <tt>null</tt> for
214
+ * {@link Object} class.
215
+ * @see ClassVisitor#visit(int,int,String,String,String,String[])
216
+ */
217
+ public String getSuperName(){
218
+ int n = items[readUnsignedShort(header + 4)];
219
+ return n == 0 ? null : readUTF8(n, new char[maxStringLength]);
220
+ }
221
+
222
+ /**
223
+ * Returns the internal names of the class's interfaces (see
224
+ * {@link Type#getInternalName() getInternalName}).
225
+ *
226
+ * @return the array of internal names for all implemented interfaces or
227
+ * <tt>null</tt>.
228
+ * @see ClassVisitor#visit(int,int,String,String,String,String[])
229
+ */
230
+ public String[] getInterfaces(){
231
+ int index = header + 6;
232
+ int n = readUnsignedShort(index);
233
+ String[] interfaces = new String[n];
234
+ if(n > 0)
235
+ {
236
+ char[] buf = new char[maxStringLength];
237
+ for(int i = 0; i < n; ++i)
238
+ {
239
+ index += 2;
240
+ interfaces[i] = readClass(index, buf);
241
+ }
242
+ }
243
+ return interfaces;
244
+ }
245
+
246
+ /**
247
+ * Copies the constant pool data into the given {@link ClassWriter}. Should
248
+ * be called before the {@link #accept(ClassVisitor,int)} method.
249
+ *
250
+ * @param classWriter the {@link ClassWriter} to copy constant pool into.
251
+ */
252
+ void copyPool(final ClassWriter classWriter){
253
+ char[] buf = new char[maxStringLength];
254
+ int ll = items.length;
255
+ Item[] items2 = new Item[ll];
256
+ for(int i = 1; i < ll; i++)
257
+ {
258
+ int index = items[i];
259
+ int tag = b[index - 1];
260
+ Item item = new Item(i);
261
+ int nameType;
262
+ switch(tag)
263
+ {
264
+ case ClassWriter.FIELD:
265
+ case ClassWriter.METH:
266
+ case ClassWriter.IMETH:
267
+ nameType = items[readUnsignedShort(index + 2)];
268
+ item.set(tag,
269
+ readClass(index, buf),
270
+ readUTF8(nameType, buf),
271
+ readUTF8(nameType + 2, buf));
272
+ break;
273
+
274
+ case ClassWriter.INT:
275
+ item.set(readInt(index));
276
+ break;
277
+
278
+ case ClassWriter.FLOAT:
279
+ item.set(Float.intBitsToFloat(readInt(index)));
280
+ break;
281
+
282
+ case ClassWriter.NAME_TYPE:
283
+ item.set(tag,
284
+ readUTF8(index, buf),
285
+ readUTF8(index + 2, buf),
286
+ null);
287
+ break;
288
+
289
+ case ClassWriter.LONG:
290
+ item.set(readLong(index));
291
+ ++i;
292
+ break;
293
+
294
+ case ClassWriter.DOUBLE:
295
+ item.set(Double.longBitsToDouble(readLong(index)));
296
+ ++i;
297
+ break;
298
+
299
+ case ClassWriter.UTF8:
300
+ {
301
+ String s = strings[i];
302
+ if(s == null)
303
+ {
304
+ index = items[i];
305
+ s = strings[i] = readUTF(index + 2,
306
+ readUnsignedShort(index),
307
+ buf);
308
+ }
309
+ item.set(tag, s, null, null);
310
+ }
311
+ break;
312
+
313
+ // case ClassWriter.STR:
314
+ // case ClassWriter.CLASS:
315
+ default:
316
+ item.set(tag, readUTF8(index, buf), null, null);
317
+ break;
318
+ }
319
+
320
+ int index2 = item.hashCode % items2.length;
321
+ item.next = items2[index2];
322
+ items2[index2] = item;
323
+ }
324
+
325
+ int off = items[1] - 1;
326
+ classWriter.pool.putByteArray(b, off, header - off);
327
+ classWriter.items = items2;
328
+ classWriter.threshold = (int) (0.75d * ll);
329
+ classWriter.index = ll;
330
+ }
331
+
332
+ /**
333
+ * Constructs a new {@link ClassReader} object.
334
+ *
335
+ * @param is an input stream from which to read the class.
336
+ * @throws IOException if a problem occurs during reading.
337
+ */
338
+ public ClassReader(final InputStream is) throws IOException{
339
+ this(readClass(is));
340
+ }
341
+
342
+ /**
343
+ * Constructs a new {@link ClassReader} object.
344
+ *
345
+ * @param name the fully qualified name of the class to be read.
346
+ * @throws IOException if an exception occurs during reading.
347
+ */
348
+ public ClassReader(final String name) throws IOException{
349
+ this(ClassLoader.getSystemResourceAsStream(name.replace('.', '/')
350
+ + ".class"));
351
+ }
352
+
353
+ /**
354
+ * Reads the bytecode of a class.
355
+ *
356
+ * @param is an input stream from which to read the class.
357
+ * @return the bytecode read from the given input stream.
358
+ * @throws IOException if a problem occurs during reading.
359
+ */
360
+ private static byte[] readClass(final InputStream is) throws IOException{
361
+ if(is == null)
362
+ {
363
+ throw new IOException("Class not found");
364
+ }
365
+ byte[] b = new byte[is.available()];
366
+ int len = 0;
367
+ while(true)
368
+ {
369
+ int n = is.read(b, len, b.length - len);
370
+ if(n == -1)
371
+ {
372
+ if(len < b.length)
373
+ {
374
+ byte[] c = new byte[len];
375
+ System.arraycopy(b, 0, c, 0, len);
376
+ b = c;
377
+ }
378
+ return b;
379
+ }
380
+ len += n;
381
+ if(len == b.length)
382
+ {
383
+ byte[] c = new byte[b.length + 1000];
384
+ System.arraycopy(b, 0, c, 0, len);
385
+ b = c;
386
+ }
387
+ }
388
+ }
389
+
390
+ // ------------------------------------------------------------------------
391
+ // Public methods
392
+ // ------------------------------------------------------------------------
393
+
394
+ /**
395
+ * Makes the given visitor visit the Java class of this {@link ClassReader}.
396
+ * This class is the one specified in the constructor (see
397
+ * {@link #ClassReader(byte[]) ClassReader}).
398
+ *
399
+ * @param classVisitor the visitor that must visit this class.
400
+ * @param flags option flags that can be used to modify the default behavior
401
+ * of this class. See {@link #SKIP_DEBUG}, {@link #EXPAND_FRAMES}.
402
+ */
403
+ public void accept(final ClassVisitor classVisitor, final int flags){
404
+ accept(classVisitor, new Attribute[0], flags);
405
+ }
406
+
407
+ /**
408
+ * Makes the given visitor visit the Java class of this {@link ClassReader}.
409
+ * This class is the one specified in the constructor (see
410
+ * {@link #ClassReader(byte[]) ClassReader}).
411
+ *
412
+ * @param classVisitor the visitor that must visit this class.
413
+ * @param attrs prototypes of the attributes that must be parsed during the
414
+ * visit of the class. Any attribute whose type is not equal to the
415
+ * type of one the prototypes will not be parsed: its byte array
416
+ * value will be passed unchanged to the ClassWriter. <i>This may
417
+ * corrupt it if this value contains references to the constant pool,
418
+ * or has syntactic or semantic links with a class element that has
419
+ * been transformed by a class adapter between the reader and the
420
+ * writer</i>.
421
+ * @param flags option flags that can be used to modify the default behavior
422
+ * of this class. See {@link #SKIP_DEBUG}, {@link #EXPAND_FRAMES}.
423
+ */
424
+ public void accept(
425
+ final ClassVisitor classVisitor,
426
+ final Attribute[] attrs,
427
+ final int flags){
428
+ byte[] b = this.b; // the bytecode array
429
+ char[] c = new char[maxStringLength]; // buffer used to read strings
430
+ int i, j, k; // loop variables
431
+ int u, v, w; // indexes in b
432
+ Attribute attr;
433
+
434
+ int access;
435
+ String name;
436
+ String desc;
437
+ String attrName;
438
+ String signature;
439
+ int anns = 0;
440
+ int ianns = 0;
441
+ Attribute cattrs = null;
442
+
443
+ // visits the header
444
+ u = header;
445
+ access = readUnsignedShort(u);
446
+ name = readClass(u + 2, c);
447
+ v = items[readUnsignedShort(u + 4)];
448
+ String superClassName = v == 0 ? null : readUTF8(v, c);
449
+ String[] implementedItfs = new String[readUnsignedShort(u + 6)];
450
+ w = 0;
451
+ u += 8;
452
+ for(i = 0; i < implementedItfs.length; ++i)
453
+ {
454
+ implementedItfs[i] = readClass(u, c);
455
+ u += 2;
456
+ }
457
+
458
+ boolean skipCode = (flags & SKIP_CODE) != 0;
459
+ boolean skipDebug = (flags & SKIP_DEBUG) != 0;
460
+ boolean unzip = (flags & EXPAND_FRAMES) != 0;
461
+
462
+ // skips fields and methods
463
+ v = u;
464
+ i = readUnsignedShort(v);
465
+ v += 2;
466
+ for(; i > 0; --i)
467
+ {
468
+ j = readUnsignedShort(v + 6);
469
+ v += 8;
470
+ for(; j > 0; --j)
471
+ {
472
+ v += 6 + readInt(v + 2);
473
+ }
474
+ }
475
+ i = readUnsignedShort(v);
476
+ v += 2;
477
+ for(; i > 0; --i)
478
+ {
479
+ j = readUnsignedShort(v + 6);
480
+ v += 8;
481
+ for(; j > 0; --j)
482
+ {
483
+ v += 6 + readInt(v + 2);
484
+ }
485
+ }
486
+ // reads the class's attributes
487
+ signature = null;
488
+ String sourceFile = null;
489
+ String sourceDebug = null;
490
+ String enclosingOwner = null;
491
+ String enclosingName = null;
492
+ String enclosingDesc = null;
493
+
494
+ i = readUnsignedShort(v);
495
+ v += 2;
496
+ for(; i > 0; --i)
497
+ {
498
+ attrName = readUTF8(v, c);
499
+ // tests are sorted in decreasing frequency order
500
+ // (based on frequencies observed on typical classes)
501
+ if(attrName.equals("SourceFile"))
502
+ {
503
+ sourceFile = readUTF8(v + 6, c);
504
+ }
505
+ else if(attrName.equals("InnerClasses"))
506
+ {
507
+ w = v + 6;
508
+ }
509
+ else if(attrName.equals("EnclosingMethod"))
510
+ {
511
+ enclosingOwner = readClass(v + 6, c);
512
+ int item = readUnsignedShort(v + 8);
513
+ if(item != 0)
514
+ {
515
+ enclosingName = readUTF8(items[item], c);
516
+ enclosingDesc = readUTF8(items[item] + 2, c);
517
+ }
518
+ }
519
+ else if(attrName.equals("Signature"))
520
+ {
521
+ signature = readUTF8(v + 6, c);
522
+ }
523
+ else if(attrName.equals("RuntimeVisibleAnnotations"))
524
+ {
525
+ anns = v + 6;
526
+ }
527
+ else if(attrName.equals("Deprecated"))
528
+ {
529
+ access |= Opcodes.ACC_DEPRECATED;
530
+ }
531
+ else if(attrName.equals("Synthetic"))
532
+ {
533
+ access |= Opcodes.ACC_SYNTHETIC;
534
+ }
535
+ else if(attrName.equals("SourceDebugExtension"))
536
+ {
537
+ int len = readInt(v + 2);
538
+ sourceDebug = readUTF(v + 6, len, new char[len]);
539
+ }
540
+ else if(attrName.equals("RuntimeInvisibleAnnotations"))
541
+ {
542
+ ianns = v + 6;
543
+ }
544
+ else
545
+ {
546
+ attr = readAttribute(attrs,
547
+ attrName,
548
+ v + 6,
549
+ readInt(v + 2),
550
+ c,
551
+ -1,
552
+ null);
553
+ if(attr != null)
554
+ {
555
+ attr.next = cattrs;
556
+ cattrs = attr;
557
+ }
558
+ }
559
+ v += 6 + readInt(v + 2);
560
+ }
561
+ // calls the visit method
562
+ classVisitor.visit(readInt(4),
563
+ access,
564
+ name,
565
+ signature,
566
+ superClassName,
567
+ implementedItfs);
568
+
569
+ // calls the visitSource method
570
+ if(!skipDebug && (sourceFile != null || sourceDebug != null))
571
+ {
572
+ classVisitor.visitSource(sourceFile, sourceDebug);
573
+ }
574
+
575
+ // calls the visitOuterClass method
576
+ if(enclosingOwner != null)
577
+ {
578
+ classVisitor.visitOuterClass(enclosingOwner,
579
+ enclosingName,
580
+ enclosingDesc);
581
+ }
582
+
583
+ // visits the class annotations
584
+ for(i = 1; i >= 0; --i)
585
+ {
586
+ v = i == 0 ? ianns : anns;
587
+ if(v != 0)
588
+ {
589
+ j = readUnsignedShort(v);
590
+ v += 2;
591
+ for(; j > 0; --j)
592
+ {
593
+ v = readAnnotationValues(v + 2,
594
+ c,
595
+ true,
596
+ classVisitor.visitAnnotation(readUTF8(v, c), i != 0));
597
+ }
598
+ }
599
+ }
600
+
601
+ // visits the class attributes
602
+ while(cattrs != null)
603
+ {
604
+ attr = cattrs.next;
605
+ cattrs.next = null;
606
+ classVisitor.visitAttribute(cattrs);
607
+ cattrs = attr;
608
+ }
609
+
610
+ // calls the visitInnerClass method
611
+ if(w != 0)
612
+ {
613
+ i = readUnsignedShort(w);
614
+ w += 2;
615
+ for(; i > 0; --i)
616
+ {
617
+ classVisitor.visitInnerClass(readUnsignedShort(w) == 0
618
+ ? null
619
+ : readClass(w, c), readUnsignedShort(w + 2) == 0
620
+ ? null
621
+ : readClass(w + 2, c), readUnsignedShort(w + 4) == 0
622
+ ? null
623
+ : readUTF8(w + 4, c),
624
+ readUnsignedShort(w + 6));
625
+ w += 8;
626
+ }
627
+ }
628
+
629
+ // visits the fields
630
+ i = readUnsignedShort(u);
631
+ u += 2;
632
+ for(; i > 0; --i)
633
+ {
634
+ access = readUnsignedShort(u);
635
+ name = readUTF8(u + 2, c);
636
+ desc = readUTF8(u + 4, c);
637
+ // visits the field's attributes and looks for a ConstantValue
638
+ // attribute
639
+ int fieldValueItem = 0;
640
+ signature = null;
641
+ anns = 0;
642
+ ianns = 0;
643
+ cattrs = null;
644
+
645
+ j = readUnsignedShort(u + 6);
646
+ u += 8;
647
+ for(; j > 0; --j)
648
+ {
649
+ attrName = readUTF8(u, c);
650
+ // tests are sorted in decreasing frequency order
651
+ // (based on frequencies observed on typical classes)
652
+ if(attrName.equals("ConstantValue"))
653
+ {
654
+ fieldValueItem = readUnsignedShort(u + 6);
655
+ }
656
+ else if(attrName.equals("Signature"))
657
+ {
658
+ signature = readUTF8(u + 6, c);
659
+ }
660
+ else if(attrName.equals("Deprecated"))
661
+ {
662
+ access |= Opcodes.ACC_DEPRECATED;
663
+ }
664
+ else if(attrName.equals("Synthetic"))
665
+ {
666
+ access |= Opcodes.ACC_SYNTHETIC;
667
+ }
668
+ else if(attrName.equals("RuntimeVisibleAnnotations"))
669
+ {
670
+ anns = u + 6;
671
+ }
672
+ else if(attrName.equals("RuntimeInvisibleAnnotations"))
673
+ {
674
+ ianns = u + 6;
675
+ }
676
+ else
677
+ {
678
+ attr = readAttribute(attrs,
679
+ attrName,
680
+ u + 6,
681
+ readInt(u + 2),
682
+ c,
683
+ -1,
684
+ null);
685
+ if(attr != null)
686
+ {
687
+ attr.next = cattrs;
688
+ cattrs = attr;
689
+ }
690
+ }
691
+ u += 6 + readInt(u + 2);
692
+ }
693
+ // visits the field
694
+ FieldVisitor fv = classVisitor.visitField(access,
695
+ name,
696
+ desc,
697
+ signature,
698
+ fieldValueItem == 0 ? null : readConst(fieldValueItem, c));
699
+ // visits the field annotations and attributes
700
+ if(fv != null)
701
+ {
702
+ for(j = 1; j >= 0; --j)
703
+ {
704
+ v = j == 0 ? ianns : anns;
705
+ if(v != 0)
706
+ {
707
+ k = readUnsignedShort(v);
708
+ v += 2;
709
+ for(; k > 0; --k)
710
+ {
711
+ v = readAnnotationValues(v + 2,
712
+ c,
713
+ true,
714
+ fv.visitAnnotation(readUTF8(v, c), j != 0));
715
+ }
716
+ }
717
+ }
718
+ while(cattrs != null)
719
+ {
720
+ attr = cattrs.next;
721
+ cattrs.next = null;
722
+ fv.visitAttribute(cattrs);
723
+ cattrs = attr;
724
+ }
725
+ fv.visitEnd();
726
+ }
727
+ }
728
+
729
+ // visits the methods
730
+ i = readUnsignedShort(u);
731
+ u += 2;
732
+ for(; i > 0; --i)
733
+ {
734
+ int u0 = u + 6;
735
+ access = readUnsignedShort(u);
736
+ name = readUTF8(u + 2, c);
737
+ desc = readUTF8(u + 4, c);
738
+ signature = null;
739
+ anns = 0;
740
+ ianns = 0;
741
+ int dann = 0;
742
+ int mpanns = 0;
743
+ int impanns = 0;
744
+ cattrs = null;
745
+ v = 0;
746
+ w = 0;
747
+
748
+ // looks for Code and Exceptions attributes
749
+ j = readUnsignedShort(u + 6);
750
+ u += 8;
751
+ for(; j > 0; --j)
752
+ {
753
+ attrName = readUTF8(u, c);
754
+ int attrSize = readInt(u + 2);
755
+ u += 6;
756
+ // tests are sorted in decreasing frequency order
757
+ // (based on frequencies observed on typical classes)
758
+ if(attrName.equals("Code"))
759
+ {
760
+ if(!skipCode)
761
+ {
762
+ v = u;
763
+ }
764
+ }
765
+ else if(attrName.equals("Exceptions"))
766
+ {
767
+ w = u;
768
+ }
769
+ else if(attrName.equals("Signature"))
770
+ {
771
+ signature = readUTF8(u, c);
772
+ }
773
+ else if(attrName.equals("Deprecated"))
774
+ {
775
+ access |= Opcodes.ACC_DEPRECATED;
776
+ }
777
+ else if(attrName.equals("RuntimeVisibleAnnotations"))
778
+ {
779
+ anns = u;
780
+ }
781
+ else if(attrName.equals("AnnotationDefault"))
782
+ {
783
+ dann = u;
784
+ }
785
+ else if(attrName.equals("Synthetic"))
786
+ {
787
+ access |= Opcodes.ACC_SYNTHETIC;
788
+ }
789
+ else if(attrName.equals("RuntimeInvisibleAnnotations"))
790
+ {
791
+ ianns = u;
792
+ }
793
+ else if(attrName.equals("RuntimeVisibleParameterAnnotations"))
794
+ {
795
+ mpanns = u;
796
+ }
797
+ else if(attrName.equals("RuntimeInvisibleParameterAnnotations"))
798
+ {
799
+ impanns = u;
800
+ }
801
+ else
802
+ {
803
+ attr = readAttribute(attrs,
804
+ attrName,
805
+ u,
806
+ attrSize,
807
+ c,
808
+ -1,
809
+ null);
810
+ if(attr != null)
811
+ {
812
+ attr.next = cattrs;
813
+ cattrs = attr;
814
+ }
815
+ }
816
+ u += attrSize;
817
+ }
818
+ // reads declared exceptions
819
+ String[] exceptions;
820
+ if(w == 0)
821
+ {
822
+ exceptions = null;
823
+ }
824
+ else
825
+ {
826
+ exceptions = new String[readUnsignedShort(w)];
827
+ w += 2;
828
+ for(j = 0; j < exceptions.length; ++j)
829
+ {
830
+ exceptions[j] = readClass(w, c);
831
+ w += 2;
832
+ }
833
+ }
834
+
835
+ // visits the method's code, if any
836
+ MethodVisitor mv = classVisitor.visitMethod(access,
837
+ name,
838
+ desc,
839
+ signature,
840
+ exceptions);
841
+
842
+ if(mv != null)
843
+ {
844
+ /*
845
+ * if the returned MethodVisitor is in fact a MethodWriter, it
846
+ * means there is no method adapter between the reader and the
847
+ * writer. If, in addition, the writer's constant pool was
848
+ * copied from this reader (mw.cw.cr == this), and the signature
849
+ * and exceptions of the method have not been changed, then it
850
+ * is possible to skip all visit events and just copy the
851
+ * original code of the method to the writer (the access, name
852
+ * and descriptor can have been changed, this is not important
853
+ * since they are not copied as is from the reader).
854
+ */
855
+ if(mv instanceof MethodWriter)
856
+ {
857
+ MethodWriter mw = (MethodWriter) mv;
858
+ if(mw.cw.cr == this)
859
+ {
860
+ if(signature == mw.signature)
861
+ {
862
+ boolean sameExceptions = false;
863
+ if(exceptions == null)
864
+ {
865
+ sameExceptions = mw.exceptionCount == 0;
866
+ }
867
+ else
868
+ {
869
+ if(exceptions.length == mw.exceptionCount)
870
+ {
871
+ sameExceptions = true;
872
+ for(j = exceptions.length - 1; j >= 0; --j)
873
+ {
874
+ w -= 2;
875
+ if(mw.exceptions[j] != readUnsignedShort(w))
876
+ {
877
+ sameExceptions = false;
878
+ break;
879
+ }
880
+ }
881
+ }
882
+ }
883
+ if(sameExceptions)
884
+ {
885
+ /*
886
+ * we do not copy directly the code into
887
+ * MethodWriter to save a byte array copy
888
+ * operation. The real copy will be done in
889
+ * ClassWriter.toByteArray().
890
+ */
891
+ mw.classReaderOffset = u0;
892
+ mw.classReaderLength = u - u0;
893
+ continue;
894
+ }
895
+ }
896
+ }
897
+ }
898
+
899
+ if(dann != 0)
900
+ {
901
+ AnnotationVisitor dv = mv.visitAnnotationDefault();
902
+ readAnnotationValue(dann, c, null, dv);
903
+ if(dv != null)
904
+ {
905
+ dv.visitEnd();
906
+ }
907
+ }
908
+ for(j = 1; j >= 0; --j)
909
+ {
910
+ w = j == 0 ? ianns : anns;
911
+ if(w != 0)
912
+ {
913
+ k = readUnsignedShort(w);
914
+ w += 2;
915
+ for(; k > 0; --k)
916
+ {
917
+ w = readAnnotationValues(w + 2,
918
+ c,
919
+ true,
920
+ mv.visitAnnotation(readUTF8(w, c), j != 0));
921
+ }
922
+ }
923
+ }
924
+ if(mpanns != 0)
925
+ {
926
+ readParameterAnnotations(mpanns, c, true, mv);
927
+ }
928
+ if(impanns != 0)
929
+ {
930
+ readParameterAnnotations(impanns, c, false, mv);
931
+ }
932
+ while(cattrs != null)
933
+ {
934
+ attr = cattrs.next;
935
+ cattrs.next = null;
936
+ mv.visitAttribute(cattrs);
937
+ cattrs = attr;
938
+ }
939
+ }
940
+
941
+ if(mv != null && v != 0)
942
+ {
943
+ int maxStack = readUnsignedShort(v);
944
+ int maxLocals = readUnsignedShort(v + 2);
945
+ int codeLength = readInt(v + 4);
946
+ v += 8;
947
+
948
+ int codeStart = v;
949
+ int codeEnd = v + codeLength;
950
+
951
+ mv.visitCode();
952
+
953
+ // 1st phase: finds the labels
954
+ int label;
955
+ Label[] labels = new Label[codeLength + 1];
956
+ while(v < codeEnd)
957
+ {
958
+ int opcode = b[v] & 0xFF;
959
+ switch(ClassWriter.TYPE[opcode])
960
+ {
961
+ case ClassWriter.NOARG_INSN:
962
+ case ClassWriter.IMPLVAR_INSN:
963
+ v += 1;
964
+ break;
965
+ case ClassWriter.LABEL_INSN:
966
+ label = v - codeStart + readShort(v + 1);
967
+ if(labels[label] == null)
968
+ {
969
+ labels[label] = new Label();
970
+ }
971
+ v += 3;
972
+ break;
973
+ case ClassWriter.LABELW_INSN:
974
+ label = v - codeStart + readInt(v + 1);
975
+ if(labels[label] == null)
976
+ {
977
+ labels[label] = new Label();
978
+ }
979
+ v += 5;
980
+ break;
981
+ case ClassWriter.WIDE_INSN:
982
+ opcode = b[v + 1] & 0xFF;
983
+ if(opcode == Opcodes.IINC)
984
+ {
985
+ v += 6;
986
+ }
987
+ else
988
+ {
989
+ v += 4;
990
+ }
991
+ break;
992
+ case ClassWriter.TABL_INSN:
993
+ // skips 0 to 3 padding bytes
994
+ w = v - codeStart;
995
+ v = v + 4 - (w & 3);
996
+ // reads instruction
997
+ label = w + readInt(v);
998
+ if(labels[label] == null)
999
+ {
1000
+ labels[label] = new Label();
1001
+ }
1002
+ j = readInt(v + 8) - readInt(v + 4) + 1;
1003
+ v += 12;
1004
+ for(; j > 0; --j)
1005
+ {
1006
+ label = w + readInt(v);
1007
+ v += 4;
1008
+ if(labels[label] == null)
1009
+ {
1010
+ labels[label] = new Label();
1011
+ }
1012
+ }
1013
+ break;
1014
+ case ClassWriter.LOOK_INSN:
1015
+ // skips 0 to 3 padding bytes
1016
+ w = v - codeStart;
1017
+ v = v + 4 - (w & 3);
1018
+ // reads instruction
1019
+ label = w + readInt(v);
1020
+ if(labels[label] == null)
1021
+ {
1022
+ labels[label] = new Label();
1023
+ }
1024
+ j = readInt(v + 4);
1025
+ v += 8;
1026
+ for(; j > 0; --j)
1027
+ {
1028
+ label = w + readInt(v + 4);
1029
+ v += 8;
1030
+ if(labels[label] == null)
1031
+ {
1032
+ labels[label] = new Label();
1033
+ }
1034
+ }
1035
+ break;
1036
+ case ClassWriter.VAR_INSN:
1037
+ case ClassWriter.SBYTE_INSN:
1038
+ case ClassWriter.LDC_INSN:
1039
+ v += 2;
1040
+ break;
1041
+ case ClassWriter.SHORT_INSN:
1042
+ case ClassWriter.LDCW_INSN:
1043
+ case ClassWriter.FIELDORMETH_INSN:
1044
+ case ClassWriter.TYPE_INSN:
1045
+ case ClassWriter.IINC_INSN:
1046
+ v += 3;
1047
+ break;
1048
+ case ClassWriter.ITFMETH_INSN:
1049
+ v += 5;
1050
+ break;
1051
+ // case MANA_INSN:
1052
+ default:
1053
+ v += 4;
1054
+ break;
1055
+ }
1056
+ }
1057
+ // parses the try catch entries
1058
+ j = readUnsignedShort(v);
1059
+ v += 2;
1060
+ for(; j > 0; --j)
1061
+ {
1062
+ label = readUnsignedShort(v);
1063
+ Label start = labels[label];
1064
+ if(start == null)
1065
+ {
1066
+ labels[label] = start = new Label();
1067
+ }
1068
+ label = readUnsignedShort(v + 2);
1069
+ Label end = labels[label];
1070
+ if(end == null)
1071
+ {
1072
+ labels[label] = end = new Label();
1073
+ }
1074
+ label = readUnsignedShort(v + 4);
1075
+ Label handler = labels[label];
1076
+ if(handler == null)
1077
+ {
1078
+ labels[label] = handler = new Label();
1079
+ }
1080
+ int type = readUnsignedShort(v + 6);
1081
+ if(type == 0)
1082
+ {
1083
+ mv.visitTryCatchBlock(start, end, handler, null);
1084
+ }
1085
+ else
1086
+ {
1087
+ mv.visitTryCatchBlock(start,
1088
+ end,
1089
+ handler,
1090
+ readUTF8(items[type], c));
1091
+ }
1092
+ v += 8;
1093
+ }
1094
+ // parses the local variable, line number tables, and code
1095
+ // attributes
1096
+ int varTable = 0;
1097
+ int varTypeTable = 0;
1098
+ int stackMap = 0;
1099
+ int frameCount = 0;
1100
+ int frameMode = 0;
1101
+ int frameOffset = 0;
1102
+ int frameLocalCount = 0;
1103
+ int frameLocalDiff = 0;
1104
+ int frameStackCount = 0;
1105
+ Object[] frameLocal = null;
1106
+ Object[] frameStack = null;
1107
+ boolean zip = true;
1108
+ cattrs = null;
1109
+ j = readUnsignedShort(v);
1110
+ v += 2;
1111
+ for(; j > 0; --j)
1112
+ {
1113
+ attrName = readUTF8(v, c);
1114
+ if(attrName.equals("LocalVariableTable"))
1115
+ {
1116
+ if(!skipDebug)
1117
+ {
1118
+ varTable = v + 6;
1119
+ k = readUnsignedShort(v + 6);
1120
+ w = v + 8;
1121
+ for(; k > 0; --k)
1122
+ {
1123
+ label = readUnsignedShort(w);
1124
+ if(labels[label] == null)
1125
+ {
1126
+ labels[label] = new Label(true);
1127
+ }
1128
+ label += readUnsignedShort(w + 2);
1129
+ if(labels[label] == null)
1130
+ {
1131
+ labels[label] = new Label(true);
1132
+ }
1133
+ w += 10;
1134
+ }
1135
+ }
1136
+ }
1137
+ else if(attrName.equals("LocalVariableTypeTable"))
1138
+ {
1139
+ varTypeTable = v + 6;
1140
+ }
1141
+ else if(attrName.equals("LineNumberTable"))
1142
+ {
1143
+ if(!skipDebug)
1144
+ {
1145
+ k = readUnsignedShort(v + 6);
1146
+ w = v + 8;
1147
+ for(; k > 0; --k)
1148
+ {
1149
+ label = readUnsignedShort(w);
1150
+ if(labels[label] == null)
1151
+ {
1152
+ labels[label] = new Label(true);
1153
+ }
1154
+ labels[label].line = readUnsignedShort(w + 2);
1155
+ w += 4;
1156
+ }
1157
+ }
1158
+ }
1159
+ else if(attrName.equals("StackMapTable"))
1160
+ {
1161
+ if((flags & SKIP_FRAMES) == 0)
1162
+ {
1163
+ stackMap = v + 8;
1164
+ frameCount = readUnsignedShort(v + 6);
1165
+ }
1166
+ /*
1167
+ * here we do not extract the labels corresponding to
1168
+ * the attribute content. This would require a full
1169
+ * parsing of the attribute, which would need to be
1170
+ * repeated in the second phase (see below). Instead the
1171
+ * content of the attribute is read one frame at a time
1172
+ * (i.e. after a frame has been visited, the next frame
1173
+ * is read), and the labels it contains are also
1174
+ * extracted one frame at a time. Thanks to the ordering
1175
+ * of frames, having only a "one frame lookahead" is not
1176
+ * a problem, i.e. it is not possible to see an offset
1177
+ * smaller than the offset of the current insn and for
1178
+ * which no Label exist.
1179
+ */
1180
+ // TODO true for frame offsets,
1181
+ // but for UNINITIALIZED type offsets?
1182
+ }
1183
+ else if(attrName.equals("StackMap"))
1184
+ {
1185
+ if((flags & SKIP_FRAMES) == 0)
1186
+ {
1187
+ stackMap = v + 8;
1188
+ frameCount = readUnsignedShort(v + 6);
1189
+ zip = false;
1190
+ }
1191
+ /*
1192
+ * IMPORTANT! here we assume that the frames are
1193
+ * ordered, as in the StackMapTable attribute, although
1194
+ * this is not guaranteed by the attribute format.
1195
+ */
1196
+ }
1197
+ else
1198
+ {
1199
+ for(k = 0; k < attrs.length; ++k)
1200
+ {
1201
+ if(attrs[k].type.equals(attrName))
1202
+ {
1203
+ attr = attrs[k].read(this,
1204
+ v + 6,
1205
+ readInt(v + 2),
1206
+ c,
1207
+ codeStart - 8,
1208
+ labels);
1209
+ if(attr != null)
1210
+ {
1211
+ attr.next = cattrs;
1212
+ cattrs = attr;
1213
+ }
1214
+ }
1215
+ }
1216
+ }
1217
+ v += 6 + readInt(v + 2);
1218
+ }
1219
+
1220
+ // 2nd phase: visits each instruction
1221
+ if(stackMap != 0)
1222
+ {
1223
+ // creates the very first (implicit) frame from the method
1224
+ // descriptor
1225
+ frameLocal = new Object[maxLocals];
1226
+ frameStack = new Object[maxStack];
1227
+ if(unzip)
1228
+ {
1229
+ int local = 0;
1230
+ if((access & Opcodes.ACC_STATIC) == 0)
1231
+ {
1232
+ if(name.equals("<init>"))
1233
+ {
1234
+ frameLocal[local++] = Opcodes.UNINITIALIZED_THIS;
1235
+ }
1236
+ else
1237
+ {
1238
+ frameLocal[local++] = readClass(header + 2, c);
1239
+ }
1240
+ }
1241
+ j = 1;
1242
+ loop:
1243
+ while(true)
1244
+ {
1245
+ k = j;
1246
+ switch(desc.charAt(j++))
1247
+ {
1248
+ case'Z':
1249
+ case'C':
1250
+ case'B':
1251
+ case'S':
1252
+ case'I':
1253
+ frameLocal[local++] = Opcodes.INTEGER;
1254
+ break;
1255
+ case'F':
1256
+ frameLocal[local++] = Opcodes.FLOAT;
1257
+ break;
1258
+ case'J':
1259
+ frameLocal[local++] = Opcodes.LONG;
1260
+ break;
1261
+ case'D':
1262
+ frameLocal[local++] = Opcodes.DOUBLE;
1263
+ break;
1264
+ case'[':
1265
+ while(desc.charAt(j) == '[')
1266
+ {
1267
+ ++j;
1268
+ }
1269
+ if(desc.charAt(j) == 'L')
1270
+ {
1271
+ ++j;
1272
+ while(desc.charAt(j) != ';')
1273
+ {
1274
+ ++j;
1275
+ }
1276
+ }
1277
+ frameLocal[local++] = desc.substring(k, ++j);
1278
+ break;
1279
+ case'L':
1280
+ while(desc.charAt(j) != ';')
1281
+ {
1282
+ ++j;
1283
+ }
1284
+ frameLocal[local++] = desc.substring(k + 1,
1285
+ j++);
1286
+ break;
1287
+ default:
1288
+ break loop;
1289
+ }
1290
+ }
1291
+ frameLocalCount = local;
1292
+ }
1293
+ /*
1294
+ * for the first explicit frame the offset is not
1295
+ * offset_delta + 1 but only offset_delta; setting the
1296
+ * implicit frame offset to -1 allow the use of the
1297
+ * "offset_delta + 1" rule in all cases
1298
+ */
1299
+ frameOffset = -1;
1300
+ }
1301
+ v = codeStart;
1302
+ Label l;
1303
+ while(v < codeEnd)
1304
+ {
1305
+ w = v - codeStart;
1306
+
1307
+ l = labels[w];
1308
+ if(l != null)
1309
+ {
1310
+ mv.visitLabel(l);
1311
+ if(!skipDebug && l.line > 0)
1312
+ {
1313
+ mv.visitLineNumber(l.line, l);
1314
+ }
1315
+ }
1316
+
1317
+ while(frameLocal != null
1318
+ && (frameOffset == w || frameOffset == -1))
1319
+ {
1320
+ // if there is a frame for this offset,
1321
+ // makes the visitor visit it,
1322
+ // and reads the next frame if there is one.
1323
+ if(!zip || unzip)
1324
+ {
1325
+ mv.visitFrame(Opcodes.F_NEW,
1326
+ frameLocalCount,
1327
+ frameLocal,
1328
+ frameStackCount,
1329
+ frameStack);
1330
+ }
1331
+ else if(frameOffset != -1)
1332
+ {
1333
+ mv.visitFrame(frameMode,
1334
+ frameLocalDiff,
1335
+ frameLocal,
1336
+ frameStackCount,
1337
+ frameStack);
1338
+ }
1339
+
1340
+ if(frameCount > 0)
1341
+ {
1342
+ int tag, delta, n;
1343
+ if(zip)
1344
+ {
1345
+ tag = b[stackMap++] & 0xFF;
1346
+ }
1347
+ else
1348
+ {
1349
+ tag = MethodWriter.FULL_FRAME;
1350
+ frameOffset = -1;
1351
+ }
1352
+ frameLocalDiff = 0;
1353
+ if(tag < MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME)
1354
+ {
1355
+ delta = tag;
1356
+ frameMode = Opcodes.F_SAME;
1357
+ frameStackCount = 0;
1358
+ }
1359
+ else if(tag < MethodWriter.RESERVED)
1360
+ {
1361
+ delta = tag
1362
+ - MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME;
1363
+ stackMap = readFrameType(frameStack,
1364
+ 0,
1365
+ stackMap,
1366
+ c,
1367
+ labels);
1368
+ frameMode = Opcodes.F_SAME1;
1369
+ frameStackCount = 1;
1370
+ }
1371
+ else
1372
+ {
1373
+ delta = readUnsignedShort(stackMap);
1374
+ stackMap += 2;
1375
+ if(tag == MethodWriter.SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED)
1376
+ {
1377
+ stackMap = readFrameType(frameStack,
1378
+ 0,
1379
+ stackMap,
1380
+ c,
1381
+ labels);
1382
+ frameMode = Opcodes.F_SAME1;
1383
+ frameStackCount = 1;
1384
+ }
1385
+ else if(tag >= MethodWriter.CHOP_FRAME
1386
+ && tag < MethodWriter.SAME_FRAME_EXTENDED)
1387
+ {
1388
+ frameMode = Opcodes.F_CHOP;
1389
+ frameLocalDiff = MethodWriter.SAME_FRAME_EXTENDED
1390
+ - tag;
1391
+ frameLocalCount -= frameLocalDiff;
1392
+ frameStackCount = 0;
1393
+ }
1394
+ else if(tag == MethodWriter.SAME_FRAME_EXTENDED)
1395
+ {
1396
+ frameMode = Opcodes.F_SAME;
1397
+ frameStackCount = 0;
1398
+ }
1399
+ else if(tag < MethodWriter.FULL_FRAME)
1400
+ {
1401
+ j = unzip ? frameLocalCount : 0;
1402
+ for(k = tag
1403
+ - MethodWriter.SAME_FRAME_EXTENDED; k > 0; k--)
1404
+ {
1405
+ stackMap = readFrameType(frameLocal,
1406
+ j++,
1407
+ stackMap,
1408
+ c,
1409
+ labels);
1410
+ }
1411
+ frameMode = Opcodes.F_APPEND;
1412
+ frameLocalDiff = tag
1413
+ - MethodWriter.SAME_FRAME_EXTENDED;
1414
+ frameLocalCount += frameLocalDiff;
1415
+ frameStackCount = 0;
1416
+ }
1417
+ else
1418
+ { // if (tag == FULL_FRAME) {
1419
+ frameMode = Opcodes.F_FULL;
1420
+ n = frameLocalDiff = frameLocalCount = readUnsignedShort(stackMap);
1421
+ stackMap += 2;
1422
+ for(j = 0; n > 0; n--)
1423
+ {
1424
+ stackMap = readFrameType(frameLocal,
1425
+ j++,
1426
+ stackMap,
1427
+ c,
1428
+ labels);
1429
+ }
1430
+ n = frameStackCount = readUnsignedShort(stackMap);
1431
+ stackMap += 2;
1432
+ for(j = 0; n > 0; n--)
1433
+ {
1434
+ stackMap = readFrameType(frameStack,
1435
+ j++,
1436
+ stackMap,
1437
+ c,
1438
+ labels);
1439
+ }
1440
+ }
1441
+ }
1442
+ frameOffset += delta + 1;
1443
+ if(labels[frameOffset] == null)
1444
+ {
1445
+ labels[frameOffset] = new Label();
1446
+ }
1447
+
1448
+ --frameCount;
1449
+ }
1450
+ else
1451
+ {
1452
+ frameLocal = null;
1453
+ }
1454
+ }
1455
+
1456
+ int opcode = b[v] & 0xFF;
1457
+ switch(ClassWriter.TYPE[opcode])
1458
+ {
1459
+ case ClassWriter.NOARG_INSN:
1460
+ mv.visitInsn(opcode);
1461
+ v += 1;
1462
+ break;
1463
+ case ClassWriter.IMPLVAR_INSN:
1464
+ if(opcode > Opcodes.ISTORE)
1465
+ {
1466
+ opcode -= 59; // ISTORE_0
1467
+ mv.visitVarInsn(Opcodes.ISTORE + (opcode >> 2),
1468
+ opcode & 0x3);
1469
+ }
1470
+ else
1471
+ {
1472
+ opcode -= 26; // ILOAD_0
1473
+ mv.visitVarInsn(Opcodes.ILOAD + (opcode >> 2),
1474
+ opcode & 0x3);
1475
+ }
1476
+ v += 1;
1477
+ break;
1478
+ case ClassWriter.LABEL_INSN:
1479
+ mv.visitJumpInsn(opcode, labels[w
1480
+ + readShort(v + 1)]);
1481
+ v += 3;
1482
+ break;
1483
+ case ClassWriter.LABELW_INSN:
1484
+ mv.visitJumpInsn(opcode - 33, labels[w
1485
+ + readInt(v + 1)]);
1486
+ v += 5;
1487
+ break;
1488
+ case ClassWriter.WIDE_INSN:
1489
+ opcode = b[v + 1] & 0xFF;
1490
+ if(opcode == Opcodes.IINC)
1491
+ {
1492
+ mv.visitIincInsn(readUnsignedShort(v + 2),
1493
+ readShort(v + 4));
1494
+ v += 6;
1495
+ }
1496
+ else
1497
+ {
1498
+ mv.visitVarInsn(opcode,
1499
+ readUnsignedShort(v + 2));
1500
+ v += 4;
1501
+ }
1502
+ break;
1503
+ case ClassWriter.TABL_INSN:
1504
+ // skips 0 to 3 padding bytes
1505
+ v = v + 4 - (w & 3);
1506
+ // reads instruction
1507
+ label = w + readInt(v);
1508
+ int min = readInt(v + 4);
1509
+ int max = readInt(v + 8);
1510
+ v += 12;
1511
+ Label[] table = new Label[max - min + 1];
1512
+ for(j = 0; j < table.length; ++j)
1513
+ {
1514
+ table[j] = labels[w + readInt(v)];
1515
+ v += 4;
1516
+ }
1517
+ mv.visitTableSwitchInsn(min,
1518
+ max,
1519
+ labels[label],
1520
+ table);
1521
+ break;
1522
+ case ClassWriter.LOOK_INSN:
1523
+ // skips 0 to 3 padding bytes
1524
+ v = v + 4 - (w & 3);
1525
+ // reads instruction
1526
+ label = w + readInt(v);
1527
+ j = readInt(v + 4);
1528
+ v += 8;
1529
+ int[] keys = new int[j];
1530
+ Label[] values = new Label[j];
1531
+ for(j = 0; j < keys.length; ++j)
1532
+ {
1533
+ keys[j] = readInt(v);
1534
+ values[j] = labels[w + readInt(v + 4)];
1535
+ v += 8;
1536
+ }
1537
+ mv.visitLookupSwitchInsn(labels[label],
1538
+ keys,
1539
+ values);
1540
+ break;
1541
+ case ClassWriter.VAR_INSN:
1542
+ mv.visitVarInsn(opcode, b[v + 1] & 0xFF);
1543
+ v += 2;
1544
+ break;
1545
+ case ClassWriter.SBYTE_INSN:
1546
+ mv.visitIntInsn(opcode, b[v + 1]);
1547
+ v += 2;
1548
+ break;
1549
+ case ClassWriter.SHORT_INSN:
1550
+ mv.visitIntInsn(opcode, readShort(v + 1));
1551
+ v += 3;
1552
+ break;
1553
+ case ClassWriter.LDC_INSN:
1554
+ mv.visitLdcInsn(readConst(b[v + 1] & 0xFF, c));
1555
+ v += 2;
1556
+ break;
1557
+ case ClassWriter.LDCW_INSN:
1558
+ mv.visitLdcInsn(readConst(readUnsignedShort(v + 1),
1559
+ c));
1560
+ v += 3;
1561
+ break;
1562
+ case ClassWriter.FIELDORMETH_INSN:
1563
+ case ClassWriter.ITFMETH_INSN:
1564
+ int cpIndex = items[readUnsignedShort(v + 1)];
1565
+ String iowner = readClass(cpIndex, c);
1566
+ cpIndex = items[readUnsignedShort(cpIndex + 2)];
1567
+ String iname = readUTF8(cpIndex, c);
1568
+ String idesc = readUTF8(cpIndex + 2, c);
1569
+ if(opcode < Opcodes.INVOKEVIRTUAL)
1570
+ {
1571
+ mv.visitFieldInsn(opcode, iowner, iname, idesc);
1572
+ }
1573
+ else
1574
+ {
1575
+ mv.visitMethodInsn(opcode, iowner, iname, idesc);
1576
+ }
1577
+ if(opcode == Opcodes.INVOKEINTERFACE)
1578
+ {
1579
+ v += 5;
1580
+ }
1581
+ else
1582
+ {
1583
+ v += 3;
1584
+ }
1585
+ break;
1586
+ case ClassWriter.TYPE_INSN:
1587
+ mv.visitTypeInsn(opcode, readClass(v + 1, c));
1588
+ v += 3;
1589
+ break;
1590
+ case ClassWriter.IINC_INSN:
1591
+ mv.visitIincInsn(b[v + 1] & 0xFF, b[v + 2]);
1592
+ v += 3;
1593
+ break;
1594
+ // case MANA_INSN:
1595
+ default:
1596
+ mv.visitMultiANewArrayInsn(readClass(v + 1, c),
1597
+ b[v + 3] & 0xFF);
1598
+ v += 4;
1599
+ break;
1600
+ }
1601
+ }
1602
+ l = labels[codeEnd - codeStart];
1603
+ if(l != null)
1604
+ {
1605
+ mv.visitLabel(l);
1606
+ }
1607
+ // visits the local variable tables
1608
+ if(!skipDebug && varTable != 0)
1609
+ {
1610
+ int[] typeTable = null;
1611
+ if(varTypeTable != 0)
1612
+ {
1613
+ k = readUnsignedShort(varTypeTable) * 3;
1614
+ w = varTypeTable + 2;
1615
+ typeTable = new int[k];
1616
+ while(k > 0)
1617
+ {
1618
+ typeTable[--k] = w + 6; // signature
1619
+ typeTable[--k] = readUnsignedShort(w + 8); // index
1620
+ typeTable[--k] = readUnsignedShort(w); // start
1621
+ w += 10;
1622
+ }
1623
+ }
1624
+ k = readUnsignedShort(varTable);
1625
+ w = varTable + 2;
1626
+ for(; k > 0; --k)
1627
+ {
1628
+ int start = readUnsignedShort(w);
1629
+ int length = readUnsignedShort(w + 2);
1630
+ int index = readUnsignedShort(w + 8);
1631
+ String vsignature = null;
1632
+ if(typeTable != null)
1633
+ {
1634
+ for(int a = 0; a < typeTable.length; a += 3)
1635
+ {
1636
+ if(typeTable[a] == start
1637
+ && typeTable[a + 1] == index)
1638
+ {
1639
+ vsignature = readUTF8(typeTable[a + 2], c);
1640
+ break;
1641
+ }
1642
+ }
1643
+ }
1644
+ mv.visitLocalVariable(readUTF8(w + 4, c),
1645
+ readUTF8(w + 6, c),
1646
+ vsignature,
1647
+ labels[start],
1648
+ labels[start + length],
1649
+ index);
1650
+ w += 10;
1651
+ }
1652
+ }
1653
+ // visits the other attributes
1654
+ while(cattrs != null)
1655
+ {
1656
+ attr = cattrs.next;
1657
+ cattrs.next = null;
1658
+ mv.visitAttribute(cattrs);
1659
+ cattrs = attr;
1660
+ }
1661
+ // visits the max stack and max locals values
1662
+ mv.visitMaxs(maxStack, maxLocals);
1663
+ }
1664
+
1665
+ if(mv != null)
1666
+ {
1667
+ mv.visitEnd();
1668
+ }
1669
+ }
1670
+
1671
+ // visits the end of the class
1672
+ classVisitor.visitEnd();
1673
+ }
1674
+
1675
+ /**
1676
+ * Reads parameter annotations and makes the given visitor visit them.
1677
+ *
1678
+ * @param v start offset in {@link #b b} of the annotations to be read.
1679
+ * @param buf buffer to be used to call {@link #readUTF8 readUTF8},
1680
+ * {@link #readClass(int,char[]) readClass} or
1681
+ * {@link #readConst readConst}.
1682
+ * @param visible <tt>true</tt> if the annotations to be read are visible
1683
+ * at runtime.
1684
+ * @param mv the visitor that must visit the annotations.
1685
+ */
1686
+ private void readParameterAnnotations(
1687
+ int v,
1688
+ final char[] buf,
1689
+ final boolean visible,
1690
+ final MethodVisitor mv){
1691
+ int n = b[v++] & 0xFF;
1692
+ for(int i = 0; i < n; ++i)
1693
+ {
1694
+ int j = readUnsignedShort(v);
1695
+ v += 2;
1696
+ for(; j > 0; --j)
1697
+ {
1698
+ v = readAnnotationValues(v + 2,
1699
+ buf,
1700
+ true,
1701
+ mv.visitParameterAnnotation(i,
1702
+ readUTF8(v, buf),
1703
+ visible));
1704
+ }
1705
+ }
1706
+ }
1707
+
1708
+ /**
1709
+ * Reads the values of an annotation and makes the given visitor visit them.
1710
+ *
1711
+ * @param v the start offset in {@link #b b} of the values to be read
1712
+ * (including the unsigned short that gives the number of values).
1713
+ * @param buf buffer to be used to call {@link #readUTF8 readUTF8},
1714
+ * {@link #readClass(int,char[]) readClass} or
1715
+ * {@link #readConst readConst}.
1716
+ * @param named if the annotation values are named or not.
1717
+ * @param av the visitor that must visit the values.
1718
+ * @return the end offset of the annotation values.
1719
+ */
1720
+ private int readAnnotationValues(
1721
+ int v,
1722
+ final char[] buf,
1723
+ final boolean named,
1724
+ final AnnotationVisitor av){
1725
+ int i = readUnsignedShort(v);
1726
+ v += 2;
1727
+ if(named)
1728
+ {
1729
+ for(; i > 0; --i)
1730
+ {
1731
+ v = readAnnotationValue(v + 2, buf, readUTF8(v, buf), av);
1732
+ }
1733
+ }
1734
+ else
1735
+ {
1736
+ for(; i > 0; --i)
1737
+ {
1738
+ v = readAnnotationValue(v, buf, null, av);
1739
+ }
1740
+ }
1741
+ if(av != null)
1742
+ {
1743
+ av.visitEnd();
1744
+ }
1745
+ return v;
1746
+ }
1747
+
1748
+ /**
1749
+ * Reads a value of an annotation and makes the given visitor visit it.
1750
+ *
1751
+ * @param v the start offset in {@link #b b} of the value to be read (<i>not
1752
+ * including the value name constant pool index</i>).
1753
+ * @param buf buffer to be used to call {@link #readUTF8 readUTF8},
1754
+ * {@link #readClass(int,char[]) readClass} or
1755
+ * {@link #readConst readConst}.
1756
+ * @param name the name of the value to be read.
1757
+ * @param av the visitor that must visit the value.
1758
+ * @return the end offset of the annotation value.
1759
+ */
1760
+ private int readAnnotationValue(
1761
+ int v,
1762
+ final char[] buf,
1763
+ final String name,
1764
+ final AnnotationVisitor av){
1765
+ int i;
1766
+ if(av == null)
1767
+ {
1768
+ switch(b[v] & 0xFF)
1769
+ {
1770
+ case'e': // enum_const_value
1771
+ return v + 5;
1772
+ case'@': // annotation_value
1773
+ return readAnnotationValues(v + 3, buf, true, null);
1774
+ case'[': // array_value
1775
+ return readAnnotationValues(v + 1, buf, false, null);
1776
+ default:
1777
+ return v + 3;
1778
+ }
1779
+ }
1780
+ switch(b[v++] & 0xFF)
1781
+ {
1782
+ case'I': // pointer to CONSTANT_Integer
1783
+ case'J': // pointer to CONSTANT_Long
1784
+ case'F': // pointer to CONSTANT_Float
1785
+ case'D': // pointer to CONSTANT_Double
1786
+ av.visit(name, readConst(readUnsignedShort(v), buf));
1787
+ v += 2;
1788
+ break;
1789
+ case'B': // pointer to CONSTANT_Byte
1790
+ av.visit(name,
1791
+ new Byte((byte) readInt(items[readUnsignedShort(v)])));
1792
+ v += 2;
1793
+ break;
1794
+ case'Z': // pointer to CONSTANT_Boolean
1795
+ av.visit(name, readInt(items[readUnsignedShort(v)]) == 0
1796
+ ? Boolean.FALSE
1797
+ : Boolean.TRUE);
1798
+ v += 2;
1799
+ break;
1800
+ case'S': // pointer to CONSTANT_Short
1801
+ av.visit(name,
1802
+ new Short((short) readInt(items[readUnsignedShort(v)])));
1803
+ v += 2;
1804
+ break;
1805
+ case'C': // pointer to CONSTANT_Char
1806
+ av.visit(name,
1807
+ new Character((char) readInt(items[readUnsignedShort(v)])));
1808
+ v += 2;
1809
+ break;
1810
+ case's': // pointer to CONSTANT_Utf8
1811
+ av.visit(name, readUTF8(v, buf));
1812
+ v += 2;
1813
+ break;
1814
+ case'e': // enum_const_value
1815
+ av.visitEnum(name, readUTF8(v, buf), readUTF8(v + 2, buf));
1816
+ v += 4;
1817
+ break;
1818
+ case'c': // class_info
1819
+ av.visit(name, Type.getType(readUTF8(v, buf)));
1820
+ v += 2;
1821
+ break;
1822
+ case'@': // annotation_value
1823
+ v = readAnnotationValues(v + 2,
1824
+ buf,
1825
+ true,
1826
+ av.visitAnnotation(name, readUTF8(v, buf)));
1827
+ break;
1828
+ case'[': // array_value
1829
+ int size = readUnsignedShort(v);
1830
+ v += 2;
1831
+ if(size == 0)
1832
+ {
1833
+ return readAnnotationValues(v - 2,
1834
+ buf,
1835
+ false,
1836
+ av.visitArray(name));
1837
+ }
1838
+ switch(this.b[v++] & 0xFF)
1839
+ {
1840
+ case'B':
1841
+ byte[] bv = new byte[size];
1842
+ for(i = 0; i < size; i++)
1843
+ {
1844
+ bv[i] = (byte) readInt(items[readUnsignedShort(v)]);
1845
+ v += 3;
1846
+ }
1847
+ av.visit(name, bv);
1848
+ --v;
1849
+ break;
1850
+ case'Z':
1851
+ boolean[] zv = new boolean[size];
1852
+ for(i = 0; i < size; i++)
1853
+ {
1854
+ zv[i] = readInt(items[readUnsignedShort(v)]) != 0;
1855
+ v += 3;
1856
+ }
1857
+ av.visit(name, zv);
1858
+ --v;
1859
+ break;
1860
+ case'S':
1861
+ short[] sv = new short[size];
1862
+ for(i = 0; i < size; i++)
1863
+ {
1864
+ sv[i] = (short) readInt(items[readUnsignedShort(v)]);
1865
+ v += 3;
1866
+ }
1867
+ av.visit(name, sv);
1868
+ --v;
1869
+ break;
1870
+ case'C':
1871
+ char[] cv = new char[size];
1872
+ for(i = 0; i < size; i++)
1873
+ {
1874
+ cv[i] = (char) readInt(items[readUnsignedShort(v)]);
1875
+ v += 3;
1876
+ }
1877
+ av.visit(name, cv);
1878
+ --v;
1879
+ break;
1880
+ case'I':
1881
+ int[] iv = new int[size];
1882
+ for(i = 0; i < size; i++)
1883
+ {
1884
+ iv[i] = readInt(items[readUnsignedShort(v)]);
1885
+ v += 3;
1886
+ }
1887
+ av.visit(name, iv);
1888
+ --v;
1889
+ break;
1890
+ case'J':
1891
+ long[] lv = new long[size];
1892
+ for(i = 0; i < size; i++)
1893
+ {
1894
+ lv[i] = readLong(items[readUnsignedShort(v)]);
1895
+ v += 3;
1896
+ }
1897
+ av.visit(name, lv);
1898
+ --v;
1899
+ break;
1900
+ case'F':
1901
+ float[] fv = new float[size];
1902
+ for(i = 0; i < size; i++)
1903
+ {
1904
+ fv[i] = Float.intBitsToFloat(readInt(items[readUnsignedShort(v)]));
1905
+ v += 3;
1906
+ }
1907
+ av.visit(name, fv);
1908
+ --v;
1909
+ break;
1910
+ case'D':
1911
+ double[] dv = new double[size];
1912
+ for(i = 0; i < size; i++)
1913
+ {
1914
+ dv[i] = Double.longBitsToDouble(readLong(items[readUnsignedShort(v)]));
1915
+ v += 3;
1916
+ }
1917
+ av.visit(name, dv);
1918
+ --v;
1919
+ break;
1920
+ default:
1921
+ v = readAnnotationValues(v - 3,
1922
+ buf,
1923
+ false,
1924
+ av.visitArray(name));
1925
+ }
1926
+ }
1927
+ return v;
1928
+ }
1929
+
1930
+ private int readFrameType(
1931
+ final Object[] frame,
1932
+ final int index,
1933
+ int v,
1934
+ final char[] buf,
1935
+ final Label[] labels){
1936
+ int type = b[v++] & 0xFF;
1937
+ switch(type)
1938
+ {
1939
+ case 0:
1940
+ frame[index] = Opcodes.TOP;
1941
+ break;
1942
+ case 1:
1943
+ frame[index] = Opcodes.INTEGER;
1944
+ break;
1945
+ case 2:
1946
+ frame[index] = Opcodes.FLOAT;
1947
+ break;
1948
+ case 3:
1949
+ frame[index] = Opcodes.DOUBLE;
1950
+ break;
1951
+ case 4:
1952
+ frame[index] = Opcodes.LONG;
1953
+ break;
1954
+ case 5:
1955
+ frame[index] = Opcodes.NULL;
1956
+ break;
1957
+ case 6:
1958
+ frame[index] = Opcodes.UNINITIALIZED_THIS;
1959
+ break;
1960
+ case 7: // Object
1961
+ frame[index] = readClass(v, buf);
1962
+ v += 2;
1963
+ break;
1964
+ default: // Uninitialized
1965
+ int offset = readUnsignedShort(v);
1966
+ if(labels[offset] == null)
1967
+ {
1968
+ labels[offset] = new Label();
1969
+ }
1970
+ frame[index] = labels[offset];
1971
+ v += 2;
1972
+ }
1973
+ return v;
1974
+ }
1975
+
1976
+ /**
1977
+ * Reads an attribute in {@link #b b}.
1978
+ *
1979
+ * @param attrs prototypes of the attributes that must be parsed during the
1980
+ * visit of the class. Any attribute whose type is not equal to the
1981
+ * type of one the prototypes is ignored (i.e. an empty
1982
+ * {@link Attribute} instance is returned).
1983
+ * @param type the type of the attribute.
1984
+ * @param off index of the first byte of the attribute's content in
1985
+ * {@link #b b}. The 6 attribute header bytes, containing the type
1986
+ * and the length of the attribute, are not taken into account here
1987
+ * (they have already been read).
1988
+ * @param len the length of the attribute's content.
1989
+ * @param buf buffer to be used to call {@link #readUTF8 readUTF8},
1990
+ * {@link #readClass(int,char[]) readClass} or
1991
+ * {@link #readConst readConst}.
1992
+ * @param codeOff index of the first byte of code's attribute content in
1993
+ * {@link #b b}, or -1 if the attribute to be read is not a code
1994
+ * attribute. The 6 attribute header bytes, containing the type and
1995
+ * the length of the attribute, are not taken into account here.
1996
+ * @param labels the labels of the method's code, or <tt>null</tt> if the
1997
+ * attribute to be read is not a code attribute.
1998
+ * @return the attribute that has been read, or <tt>null</tt> to skip this
1999
+ * attribute.
2000
+ */
2001
+ private Attribute readAttribute(
2002
+ final Attribute[] attrs,
2003
+ final String type,
2004
+ final int off,
2005
+ final int len,
2006
+ final char[] buf,
2007
+ final int codeOff,
2008
+ final Label[] labels){
2009
+ for(int i = 0; i < attrs.length; ++i)
2010
+ {
2011
+ if(attrs[i].type.equals(type))
2012
+ {
2013
+ return attrs[i].read(this, off, len, buf, codeOff, labels);
2014
+ }
2015
+ }
2016
+ return new Attribute(type).read(this, off, len, null, -1, null);
2017
+ }
2018
+
2019
+ // ------------------------------------------------------------------------
2020
+ // Utility methods: low level parsing
2021
+ // ------------------------------------------------------------------------
2022
+
2023
+ /**
2024
+ * Returns the start index of the constant pool item in {@link #b b}, plus
2025
+ * one. <i>This method is intended for {@link Attribute} sub classes, and is
2026
+ * normally not needed by class generators or adapters.</i>
2027
+ *
2028
+ * @param item the index a constant pool item.
2029
+ * @return the start index of the constant pool item in {@link #b b}, plus
2030
+ * one.
2031
+ */
2032
+ public int getItem(final int item){
2033
+ return items[item];
2034
+ }
2035
+
2036
+ /**
2037
+ * Reads a byte value in {@link #b b}. <i>This method is intended for
2038
+ * {@link Attribute} sub classes, and is normally not needed by class
2039
+ * generators or adapters.</i>
2040
+ *
2041
+ * @param index the start index of the value to be read in {@link #b b}.
2042
+ * @return the read value.
2043
+ */
2044
+ public int readByte(final int index){
2045
+ return b[index] & 0xFF;
2046
+ }
2047
+
2048
+ /**
2049
+ * Reads an unsigned short value in {@link #b b}. <i>This method is
2050
+ * intended for {@link Attribute} sub classes, and is normally not needed by
2051
+ * class generators or adapters.</i>
2052
+ *
2053
+ * @param index the start index of the value to be read in {@link #b b}.
2054
+ * @return the read value.
2055
+ */
2056
+ public int readUnsignedShort(final int index){
2057
+ byte[] b = this.b;
2058
+ return ((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF);
2059
+ }
2060
+
2061
+ /**
2062
+ * Reads a signed short value in {@link #b b}. <i>This method is intended
2063
+ * for {@link Attribute} sub classes, and is normally not needed by class
2064
+ * generators or adapters.</i>
2065
+ *
2066
+ * @param index the start index of the value to be read in {@link #b b}.
2067
+ * @return the read value.
2068
+ */
2069
+ public short readShort(final int index){
2070
+ byte[] b = this.b;
2071
+ return (short) (((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF));
2072
+ }
2073
+
2074
+ /**
2075
+ * Reads a signed int value in {@link #b b}. <i>This method is intended for
2076
+ * {@link Attribute} sub classes, and is normally not needed by class
2077
+ * generators or adapters.</i>
2078
+ *
2079
+ * @param index the start index of the value to be read in {@link #b b}.
2080
+ * @return the read value.
2081
+ */
2082
+ public int readInt(final int index){
2083
+ byte[] b = this.b;
2084
+ return ((b[index] & 0xFF) << 24) | ((b[index + 1] & 0xFF) << 16)
2085
+ | ((b[index + 2] & 0xFF) << 8) | (b[index + 3] & 0xFF);
2086
+ }
2087
+
2088
+ /**
2089
+ * Reads a signed long value in {@link #b b}. <i>This method is intended
2090
+ * for {@link Attribute} sub classes, and is normally not needed by class
2091
+ * generators or adapters.</i>
2092
+ *
2093
+ * @param index the start index of the value to be read in {@link #b b}.
2094
+ * @return the read value.
2095
+ */
2096
+ public long readLong(final int index){
2097
+ long l1 = readInt(index);
2098
+ long l0 = readInt(index + 4) & 0xFFFFFFFFL;
2099
+ return (l1 << 32) | l0;
2100
+ }
2101
+
2102
+ /**
2103
+ * Reads an UTF8 string constant pool item in {@link #b b}. <i>This method
2104
+ * is intended for {@link Attribute} sub classes, and is normally not needed
2105
+ * by class generators or adapters.</i>
2106
+ *
2107
+ * @param index the start index of an unsigned short value in {@link #b b},
2108
+ * whose value is the index of an UTF8 constant pool item.
2109
+ * @param buf buffer to be used to read the item. This buffer must be
2110
+ * sufficiently large. It is not automatically resized.
2111
+ * @return the String corresponding to the specified UTF8 item.
2112
+ */
2113
+ public String readUTF8(int index, final char[] buf){
2114
+ int item = readUnsignedShort(index);
2115
+ String s = strings[item];
2116
+ if(s != null)
2117
+ {
2118
+ return s;
2119
+ }
2120
+ index = items[item];
2121
+ return strings[item] = readUTF(index + 2, readUnsignedShort(index), buf);
2122
+ }
2123
+
2124
+ /**
2125
+ * Reads UTF8 string in {@link #b b}.
2126
+ *
2127
+ * @param index start offset of the UTF8 string to be read.
2128
+ * @param utfLen length of the UTF8 string to be read.
2129
+ * @param buf buffer to be used to read the string. This buffer must be
2130
+ * sufficiently large. It is not automatically resized.
2131
+ * @return the String corresponding to the specified UTF8 string.
2132
+ */
2133
+ private String readUTF(int index, final int utfLen, final char[] buf){
2134
+ int endIndex = index + utfLen;
2135
+ byte[] b = this.b;
2136
+ int strLen = 0;
2137
+ int c, d, e;
2138
+ while(index < endIndex)
2139
+ {
2140
+ c = b[index++] & 0xFF;
2141
+ switch(c >> 4)
2142
+ {
2143
+ case 0:
2144
+ case 1:
2145
+ case 2:
2146
+ case 3:
2147
+ case 4:
2148
+ case 5:
2149
+ case 6:
2150
+ case 7:
2151
+ // 0xxxxxxx
2152
+ buf[strLen++] = (char) c;
2153
+ break;
2154
+ case 12:
2155
+ case 13:
2156
+ // 110x xxxx 10xx xxxx
2157
+ d = b[index++];
2158
+ buf[strLen++] = (char) (((c & 0x1F) << 6) | (d & 0x3F));
2159
+ break;
2160
+ default:
2161
+ // 1110 xxxx 10xx xxxx 10xx xxxx
2162
+ d = b[index++];
2163
+ e = b[index++];
2164
+ buf[strLen++] = (char) (((c & 0x0F) << 12)
2165
+ | ((d & 0x3F) << 6) | (e & 0x3F));
2166
+ break;
2167
+ }
2168
+ }
2169
+ return new String(buf, 0, strLen);
2170
+ }
2171
+
2172
+ /**
2173
+ * Reads a class constant pool item in {@link #b b}. <i>This method is
2174
+ * intended for {@link Attribute} sub classes, and is normally not needed by
2175
+ * class generators or adapters.</i>
2176
+ *
2177
+ * @param index the start index of an unsigned short value in {@link #b b},
2178
+ * whose value is the index of a class constant pool item.
2179
+ * @param buf buffer to be used to read the item. This buffer must be
2180
+ * sufficiently large. It is not automatically resized.
2181
+ * @return the String corresponding to the specified class item.
2182
+ */
2183
+ public String readClass(final int index, final char[] buf){
2184
+ // computes the start index of the CONSTANT_Class item in b
2185
+ // and reads the CONSTANT_Utf8 item designated by
2186
+ // the first two bytes of this CONSTANT_Class item
2187
+ return readUTF8(items[readUnsignedShort(index)], buf);
2188
+ }
2189
+
2190
+ /**
2191
+ * Reads a numeric or string constant pool item in {@link #b b}. <i>This
2192
+ * method is intended for {@link Attribute} sub classes, and is normally not
2193
+ * needed by class generators or adapters.</i>
2194
+ *
2195
+ * @param item the index of a constant pool item.
2196
+ * @param buf buffer to be used to read the item. This buffer must be
2197
+ * sufficiently large. It is not automatically resized.
2198
+ * @return the {@link Integer}, {@link Float}, {@link Long},
2199
+ * {@link Double}, {@link String} or {@link Type} corresponding to
2200
+ * the given constant pool item.
2201
+ */
2202
+ public Object readConst(final int item, final char[] buf){
2203
+ int index = items[item];
2204
+ switch(b[index - 1])
2205
+ {
2206
+ case ClassWriter.INT:
2207
+ return new Integer(readInt(index));
2208
+ case ClassWriter.FLOAT:
2209
+ return new Float(Float.intBitsToFloat(readInt(index)));
2210
+ case ClassWriter.LONG:
2211
+ return new Long(readLong(index));
2212
+ case ClassWriter.DOUBLE:
2213
+ return new Double(Double.longBitsToDouble(readLong(index)));
2214
+ case ClassWriter.CLASS:
2215
+ String s = readUTF8(index, buf);
2216
+ return s.charAt(0) == '['
2217
+ ? Type.getType(s)
2218
+ : Type.getObjectType(s);
2219
+ // case ClassWriter.STR:
2220
+ default:
2221
+ return readUTF8(index, buf);
2222
+ }
2223
+ }
2224
+ }