clojure 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }