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,75 @@
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 edge in the control flow graph of a method body. See {@link Label Label}.
34
+ *
35
+ * @author Eric Bruneton
36
+ */
37
+ class Edge{
38
+
39
+ /**
40
+ * Denotes a normal control flow graph edge.
41
+ */
42
+ final static int NORMAL = 0;
43
+
44
+ /**
45
+ * Denotes a control flow graph edge corresponding to an exception handler.
46
+ * More precisely any {@link Edge} whose {@link #info} is strictly positive
47
+ * corresponds to an exception handler. The actual value of {@link #info} is
48
+ * the index, in the {@link ClassWriter} type table, of the exception that
49
+ * is catched.
50
+ */
51
+ final static int EXCEPTION = 0x7FFFFFFF;
52
+
53
+ /**
54
+ * Information about this control flow graph edge. If
55
+ * {@link ClassWriter#COMPUTE_MAXS} is used this field is the (relative)
56
+ * stack size in the basic block from which this edge originates. This size
57
+ * is equal to the stack size at the "jump" instruction to which this edge
58
+ * corresponds, relatively to the stack size at the beginning of the
59
+ * originating basic block. If {@link ClassWriter#COMPUTE_FRAMES} is used,
60
+ * this field is the kind of this control flow graph edge (i.e. NORMAL or
61
+ * EXCEPTION).
62
+ */
63
+ int info;
64
+
65
+ /**
66
+ * The successor block of the basic block from which this edge originates.
67
+ */
68
+ Label successor;
69
+
70
+ /**
71
+ * The next edge in the list of successors of the originating basic block.
72
+ * See {@link Label#successors successors}.
73
+ */
74
+ Edge next;
75
+ }
@@ -0,0 +1,64 @@
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
+ * A visitor to visit a Java field. The methods of this interface must be called
34
+ * in the following order: ( <tt>visitAnnotation</tt> |
35
+ * <tt>visitAttribute</tt> )* <tt>visitEnd</tt>.
36
+ *
37
+ * @author Eric Bruneton
38
+ */
39
+ public interface FieldVisitor{
40
+
41
+ /**
42
+ * Visits an annotation of the field.
43
+ *
44
+ * @param desc the class descriptor of the annotation class.
45
+ * @param visible <tt>true</tt> if the annotation is visible at runtime.
46
+ * @return a visitor to visit the annotation values, or <tt>null</tt> if
47
+ * this visitor is not interested in visiting this annotation.
48
+ */
49
+ AnnotationVisitor visitAnnotation(String desc, boolean visible);
50
+
51
+ /**
52
+ * Visits a non standard attribute of the field.
53
+ *
54
+ * @param attr an attribute.
55
+ */
56
+ void visitAttribute(Attribute attr);
57
+
58
+ /**
59
+ * Visits the end of the field. This method, which is the last one to be
60
+ * called, is used to inform the visitor that all the annotations and
61
+ * attributes of the field have been visited.
62
+ */
63
+ void visitEnd();
64
+ }
@@ -0,0 +1,290 @@
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 {@link FieldVisitor} that generates Java fields in bytecode form.
34
+ *
35
+ * @author Eric Bruneton
36
+ */
37
+ final class FieldWriter implements FieldVisitor{
38
+
39
+ /**
40
+ * Next field writer (see {@link ClassWriter#firstField firstField}).
41
+ */
42
+ FieldWriter next;
43
+
44
+ /**
45
+ * The class writer to which this field must be added.
46
+ */
47
+ private ClassWriter cw;
48
+
49
+ /**
50
+ * Access flags of this field.
51
+ */
52
+ private int access;
53
+
54
+ /**
55
+ * The index of the constant pool item that contains the name of this
56
+ * method.
57
+ */
58
+ private int name;
59
+
60
+ /**
61
+ * The index of the constant pool item that contains the descriptor of this
62
+ * field.
63
+ */
64
+ private int desc;
65
+
66
+ /**
67
+ * The index of the constant pool item that contains the signature of this
68
+ * field.
69
+ */
70
+ private int signature;
71
+
72
+ /**
73
+ * The index of the constant pool item that contains the constant value of
74
+ * this field.
75
+ */
76
+ private int value;
77
+
78
+ /**
79
+ * The runtime visible annotations of this field. May be <tt>null</tt>.
80
+ */
81
+ private AnnotationWriter anns;
82
+
83
+ /**
84
+ * The runtime invisible annotations of this field. May be <tt>null</tt>.
85
+ */
86
+ private AnnotationWriter ianns;
87
+
88
+ /**
89
+ * The non standard attributes of this field. May be <tt>null</tt>.
90
+ */
91
+ private Attribute attrs;
92
+
93
+ // ------------------------------------------------------------------------
94
+ // Constructor
95
+ // ------------------------------------------------------------------------
96
+
97
+ /**
98
+ * Constructs a new {@link FieldWriter}.
99
+ *
100
+ * @param cw the class writer to which this field must be added.
101
+ * @param access the field's access flags (see {@link Opcodes}).
102
+ * @param name the field's name.
103
+ * @param desc the field's descriptor (see {@link Type}).
104
+ * @param signature the field's signature. May be <tt>null</tt>.
105
+ * @param value the field's constant value. May be <tt>null</tt>.
106
+ */
107
+ protected FieldWriter(
108
+ final ClassWriter cw,
109
+ final int access,
110
+ final String name,
111
+ final String desc,
112
+ final String signature,
113
+ final Object value){
114
+ if(cw.firstField == null)
115
+ {
116
+ cw.firstField = this;
117
+ }
118
+ else
119
+ {
120
+ cw.lastField.next = this;
121
+ }
122
+ cw.lastField = this;
123
+ this.cw = cw;
124
+ this.access = access;
125
+ this.name = cw.newUTF8(name);
126
+ this.desc = cw.newUTF8(desc);
127
+ if(signature != null)
128
+ {
129
+ this.signature = cw.newUTF8(signature);
130
+ }
131
+ if(value != null)
132
+ {
133
+ this.value = cw.newConstItem(value).index;
134
+ }
135
+ }
136
+
137
+ // ------------------------------------------------------------------------
138
+ // Implementation of the FieldVisitor interface
139
+ // ------------------------------------------------------------------------
140
+
141
+ public AnnotationVisitor visitAnnotation(
142
+ final String desc,
143
+ final boolean visible){
144
+ ByteVector bv = new ByteVector();
145
+ // write type, and reserve space for values count
146
+ bv.putShort(cw.newUTF8(desc)).putShort(0);
147
+ AnnotationWriter aw = new AnnotationWriter(cw, true, bv, bv, 2);
148
+ if(visible)
149
+ {
150
+ aw.next = anns;
151
+ anns = aw;
152
+ }
153
+ else
154
+ {
155
+ aw.next = ianns;
156
+ ianns = aw;
157
+ }
158
+ return aw;
159
+ }
160
+
161
+ public void visitAttribute(final Attribute attr){
162
+ attr.next = attrs;
163
+ attrs = attr;
164
+ }
165
+
166
+ public void visitEnd(){
167
+ }
168
+
169
+ // ------------------------------------------------------------------------
170
+ // Utility methods
171
+ // ------------------------------------------------------------------------
172
+
173
+ /**
174
+ * Returns the size of this field.
175
+ *
176
+ * @return the size of this field.
177
+ */
178
+ int getSize(){
179
+ int size = 8;
180
+ if(value != 0)
181
+ {
182
+ cw.newUTF8("ConstantValue");
183
+ size += 8;
184
+ }
185
+ if((access & Opcodes.ACC_SYNTHETIC) != 0
186
+ && (cw.version & 0xffff) < Opcodes.V1_5)
187
+ {
188
+ cw.newUTF8("Synthetic");
189
+ size += 6;
190
+ }
191
+ if((access & Opcodes.ACC_DEPRECATED) != 0)
192
+ {
193
+ cw.newUTF8("Deprecated");
194
+ size += 6;
195
+ }
196
+ if(signature != 0)
197
+ {
198
+ cw.newUTF8("Signature");
199
+ size += 8;
200
+ }
201
+ if(anns != null)
202
+ {
203
+ cw.newUTF8("RuntimeVisibleAnnotations");
204
+ size += 8 + anns.getSize();
205
+ }
206
+ if(ianns != null)
207
+ {
208
+ cw.newUTF8("RuntimeInvisibleAnnotations");
209
+ size += 8 + ianns.getSize();
210
+ }
211
+ if(attrs != null)
212
+ {
213
+ size += attrs.getSize(cw, null, 0, -1, -1);
214
+ }
215
+ return size;
216
+ }
217
+
218
+ /**
219
+ * Puts the content of this field into the given byte vector.
220
+ *
221
+ * @param out where the content of this field must be put.
222
+ */
223
+ void put(final ByteVector out){
224
+ out.putShort(access).putShort(name).putShort(desc);
225
+ int attributeCount = 0;
226
+ if(value != 0)
227
+ {
228
+ ++attributeCount;
229
+ }
230
+ if((access & Opcodes.ACC_SYNTHETIC) != 0
231
+ && (cw.version & 0xffff) < Opcodes.V1_5)
232
+ {
233
+ ++attributeCount;
234
+ }
235
+ if((access & Opcodes.ACC_DEPRECATED) != 0)
236
+ {
237
+ ++attributeCount;
238
+ }
239
+ if(signature != 0)
240
+ {
241
+ ++attributeCount;
242
+ }
243
+ if(anns != null)
244
+ {
245
+ ++attributeCount;
246
+ }
247
+ if(ianns != null)
248
+ {
249
+ ++attributeCount;
250
+ }
251
+ if(attrs != null)
252
+ {
253
+ attributeCount += attrs.getCount();
254
+ }
255
+ out.putShort(attributeCount);
256
+ if(value != 0)
257
+ {
258
+ out.putShort(cw.newUTF8("ConstantValue"));
259
+ out.putInt(2).putShort(value);
260
+ }
261
+ if((access & Opcodes.ACC_SYNTHETIC) != 0
262
+ && (cw.version & 0xffff) < Opcodes.V1_5)
263
+ {
264
+ out.putShort(cw.newUTF8("Synthetic")).putInt(0);
265
+ }
266
+ if((access & Opcodes.ACC_DEPRECATED) != 0)
267
+ {
268
+ out.putShort(cw.newUTF8("Deprecated")).putInt(0);
269
+ }
270
+ if(signature != 0)
271
+ {
272
+ out.putShort(cw.newUTF8("Signature"));
273
+ out.putInt(2).putShort(signature);
274
+ }
275
+ if(anns != null)
276
+ {
277
+ out.putShort(cw.newUTF8("RuntimeVisibleAnnotations"));
278
+ anns.put(out);
279
+ }
280
+ if(ianns != null)
281
+ {
282
+ out.putShort(cw.newUTF8("RuntimeInvisibleAnnotations"));
283
+ ianns.put(out);
284
+ }
285
+ if(attrs != null)
286
+ {
287
+ attrs.put(cw, null, 0, -1, -1, out);
288
+ }
289
+ }
290
+ }
@@ -0,0 +1,1506 @@
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
+ * Information about the input and output stack map frames of a basic block.
34
+ *
35
+ * @author Eric Bruneton
36
+ */
37
+ final class Frame{
38
+
39
+ /*
40
+ * Frames are computed in a two steps process: during the visit of each
41
+ * instruction, the state of the frame at the end of current basic block is
42
+ * updated by simulating the action of the instruction on the previous state
43
+ * of this so called "output frame". In visitMaxs, a fix point algorithm is
44
+ * used to compute the "input frame" of each basic block, i.e. the stack map
45
+ * frame at the begining of the basic block, starting from the input frame
46
+ * of the first basic block (which is computed from the method descriptor),
47
+ * and by using the previously computed output frames to compute the input
48
+ * state of the other blocks.
49
+ *
50
+ * All output and input frames are stored as arrays of integers. Reference
51
+ * and array types are represented by an index into a type table (which is
52
+ * not the same as the constant pool of the class, in order to avoid adding
53
+ * unnecessary constants in the pool - not all computed frames will end up
54
+ * being stored in the stack map table). This allows very fast type
55
+ * comparisons.
56
+ *
57
+ * Output stack map frames are computed relatively to the input frame of the
58
+ * basic block, which is not yet known when output frames are computed. It
59
+ * is therefore necessary to be able to represent abstract types such as
60
+ * "the type at position x in the input frame locals" or "the type at
61
+ * position x from the top of the input frame stack" or even "the type at
62
+ * position x in the input frame, with y more (or less) array dimensions".
63
+ * This explains the rather complicated type format used in output frames.
64
+ *
65
+ * This format is the following: DIM KIND VALUE (4, 4 and 24 bits). DIM is a
66
+ * signed number of array dimensions (from -8 to 7). KIND is either BASE,
67
+ * LOCAL or STACK. BASE is used for types that are not relative to the input
68
+ * frame. LOCAL is used for types that are relative to the input local
69
+ * variable types. STACK is used for types that are relative to the input
70
+ * stack types. VALUE depends on KIND. For LOCAL types, it is an index in
71
+ * the input local variable types. For STACK types, it is a position
72
+ * relatively to the top of input frame stack. For BASE types, it is either
73
+ * one of the constants defined in FrameVisitor, or for OBJECT and
74
+ * UNINITIALIZED types, a tag and an index in the type table.
75
+ *
76
+ * Output frames can contain types of any kind and with a positive or
77
+ * negative dimension (and even unassigned types, represented by 0 - which
78
+ * does not correspond to any valid type value). Input frames can only
79
+ * contain BASE types of positive or null dimension. In all cases the type
80
+ * table contains only internal type names (array type descriptors are
81
+ * forbidden - dimensions must be represented through the DIM field).
82
+ *
83
+ * The LONG and DOUBLE types are always represented by using two slots (LONG +
84
+ * TOP or DOUBLE + TOP), for local variable types as well as in the operand
85
+ * stack. This is necessary to be able to simulate DUPx_y instructions,
86
+ * whose effect would be dependent on the actual type values if types were
87
+ * always represented by a single slot in the stack (and this is not
88
+ * possible, since actual type values are not always known - cf LOCAL and
89
+ * STACK type kinds).
90
+ */
91
+
92
+ /**
93
+ * Mask to get the dimension of a frame type. This dimension is a signed
94
+ * integer between -8 and 7.
95
+ */
96
+ final static int DIM = 0xF0000000;
97
+
98
+ /**
99
+ * Constant to be added to a type to get a type with one more dimension.
100
+ */
101
+ final static int ARRAY_OF = 0x10000000;
102
+
103
+ /**
104
+ * Constant to be added to a type to get a type with one less dimension.
105
+ */
106
+ final static int ELEMENT_OF = 0xF0000000;
107
+
108
+ /**
109
+ * Mask to get the kind of a frame type.
110
+ *
111
+ * @see #BASE
112
+ * @see #LOCAL
113
+ * @see #STACK
114
+ */
115
+ final static int KIND = 0xF000000;
116
+
117
+ /**
118
+ * Mask to get the value of a frame type.
119
+ */
120
+ final static int VALUE = 0xFFFFFF;
121
+
122
+ /**
123
+ * Mask to get the kind of base types.
124
+ */
125
+ final static int BASE_KIND = 0xFF00000;
126
+
127
+ /**
128
+ * Mask to get the value of base types.
129
+ */
130
+ final static int BASE_VALUE = 0xFFFFF;
131
+
132
+ /**
133
+ * Kind of the types that are not relative to an input stack map frame.
134
+ */
135
+ final static int BASE = 0x1000000;
136
+
137
+ /**
138
+ * Base kind of the base reference types. The BASE_VALUE of such types is an
139
+ * index into the type table.
140
+ */
141
+ final static int OBJECT = BASE | 0x700000;
142
+
143
+ /**
144
+ * Base kind of the uninitialized base types. The BASE_VALUE of such types
145
+ * in an index into the type table (the Item at that index contains both an
146
+ * instruction offset and an internal class name).
147
+ */
148
+ final static int UNINITIALIZED = BASE | 0x800000;
149
+
150
+ /**
151
+ * Kind of the types that are relative to the local variable types of an
152
+ * input stack map frame. The value of such types is a local variable index.
153
+ */
154
+ private final static int LOCAL = 0x2000000;
155
+
156
+ /**
157
+ * Kind of the the types that are relative to the stack of an input stack
158
+ * map frame. The value of such types is a position relatively to the top of
159
+ * this stack.
160
+ */
161
+ private final static int STACK = 0x3000000;
162
+
163
+ /**
164
+ * The TOP type. This is a BASE type.
165
+ */
166
+ final static int TOP = BASE | 0;
167
+
168
+ /**
169
+ * The BOOLEAN type. This is a BASE type mainly used for array types.
170
+ */
171
+ final static int BOOLEAN = BASE | 9;
172
+
173
+ /**
174
+ * The BYTE type. This is a BASE type mainly used for array types.
175
+ */
176
+ final static int BYTE = BASE | 10;
177
+
178
+ /**
179
+ * The CHAR type. This is a BASE type mainly used for array types.
180
+ */
181
+ final static int CHAR = BASE | 11;
182
+
183
+ /**
184
+ * The SHORT type. This is a BASE type mainly used for array types.
185
+ */
186
+ final static int SHORT = BASE | 12;
187
+
188
+ /**
189
+ * The INTEGER type. This is a BASE type.
190
+ */
191
+ final static int INTEGER = BASE | 1;
192
+
193
+ /**
194
+ * The FLOAT type. This is a BASE type.
195
+ */
196
+ final static int FLOAT = BASE | 2;
197
+
198
+ /**
199
+ * The DOUBLE type. This is a BASE type.
200
+ */
201
+ final static int DOUBLE = BASE | 3;
202
+
203
+ /**
204
+ * The LONG type. This is a BASE type.
205
+ */
206
+ final static int LONG = BASE | 4;
207
+
208
+ /**
209
+ * The NULL type. This is a BASE type.
210
+ */
211
+ final static int NULL = BASE | 5;
212
+
213
+ /**
214
+ * The UNINITIALIZED_THIS type. This is a BASE type.
215
+ */
216
+ final static int UNINITIALIZED_THIS = BASE | 6;
217
+
218
+ /**
219
+ * The stack size variation corresponding to each JVM instruction. This
220
+ * stack variation is equal to the size of the values produced by an
221
+ * instruction, minus the size of the values consumed by this instruction.
222
+ */
223
+ final static int[] SIZE;
224
+
225
+ /**
226
+ * Computes the stack size variation corresponding to each JVM instruction.
227
+ */
228
+ static
229
+ {
230
+ int i;
231
+ int[] b = new int[202];
232
+ String s = "EFFFFFFFFGGFFFGGFFFEEFGFGFEEEEEEEEEEEEEEEEEEEEDEDEDDDDD"
233
+ + "CDCDEEEEEEEEEEEEEEEEEEEEBABABBBBDCFFFGGGEDCDCDCDCDCDCDCDCD"
234
+ + "CDCEEEEDDDDDDDCDCDCEFEFDDEEFFDEDEEEBDDBBDDDDDDCCCCCCCCEFED"
235
+ + "DDCDCDEEEEEEEEEEFEEEEEEDDEEDDEE";
236
+ for(i = 0; i < b.length; ++i)
237
+ {
238
+ b[i] = s.charAt(i) - 'E';
239
+ }
240
+ SIZE = b;
241
+
242
+ // code to generate the above string
243
+ //
244
+ // int NA = 0; // not applicable (unused opcode or variable size opcode)
245
+ //
246
+ // b = new int[] {
247
+ // 0, //NOP, // visitInsn
248
+ // 1, //ACONST_NULL, // -
249
+ // 1, //ICONST_M1, // -
250
+ // 1, //ICONST_0, // -
251
+ // 1, //ICONST_1, // -
252
+ // 1, //ICONST_2, // -
253
+ // 1, //ICONST_3, // -
254
+ // 1, //ICONST_4, // -
255
+ // 1, //ICONST_5, // -
256
+ // 2, //LCONST_0, // -
257
+ // 2, //LCONST_1, // -
258
+ // 1, //FCONST_0, // -
259
+ // 1, //FCONST_1, // -
260
+ // 1, //FCONST_2, // -
261
+ // 2, //DCONST_0, // -
262
+ // 2, //DCONST_1, // -
263
+ // 1, //BIPUSH, // visitIntInsn
264
+ // 1, //SIPUSH, // -
265
+ // 1, //LDC, // visitLdcInsn
266
+ // NA, //LDC_W, // -
267
+ // NA, //LDC2_W, // -
268
+ // 1, //ILOAD, // visitVarInsn
269
+ // 2, //LLOAD, // -
270
+ // 1, //FLOAD, // -
271
+ // 2, //DLOAD, // -
272
+ // 1, //ALOAD, // -
273
+ // NA, //ILOAD_0, // -
274
+ // NA, //ILOAD_1, // -
275
+ // NA, //ILOAD_2, // -
276
+ // NA, //ILOAD_3, // -
277
+ // NA, //LLOAD_0, // -
278
+ // NA, //LLOAD_1, // -
279
+ // NA, //LLOAD_2, // -
280
+ // NA, //LLOAD_3, // -
281
+ // NA, //FLOAD_0, // -
282
+ // NA, //FLOAD_1, // -
283
+ // NA, //FLOAD_2, // -
284
+ // NA, //FLOAD_3, // -
285
+ // NA, //DLOAD_0, // -
286
+ // NA, //DLOAD_1, // -
287
+ // NA, //DLOAD_2, // -
288
+ // NA, //DLOAD_3, // -
289
+ // NA, //ALOAD_0, // -
290
+ // NA, //ALOAD_1, // -
291
+ // NA, //ALOAD_2, // -
292
+ // NA, //ALOAD_3, // -
293
+ // -1, //IALOAD, // visitInsn
294
+ // 0, //LALOAD, // -
295
+ // -1, //FALOAD, // -
296
+ // 0, //DALOAD, // -
297
+ // -1, //AALOAD, // -
298
+ // -1, //BALOAD, // -
299
+ // -1, //CALOAD, // -
300
+ // -1, //SALOAD, // -
301
+ // -1, //ISTORE, // visitVarInsn
302
+ // -2, //LSTORE, // -
303
+ // -1, //FSTORE, // -
304
+ // -2, //DSTORE, // -
305
+ // -1, //ASTORE, // -
306
+ // NA, //ISTORE_0, // -
307
+ // NA, //ISTORE_1, // -
308
+ // NA, //ISTORE_2, // -
309
+ // NA, //ISTORE_3, // -
310
+ // NA, //LSTORE_0, // -
311
+ // NA, //LSTORE_1, // -
312
+ // NA, //LSTORE_2, // -
313
+ // NA, //LSTORE_3, // -
314
+ // NA, //FSTORE_0, // -
315
+ // NA, //FSTORE_1, // -
316
+ // NA, //FSTORE_2, // -
317
+ // NA, //FSTORE_3, // -
318
+ // NA, //DSTORE_0, // -
319
+ // NA, //DSTORE_1, // -
320
+ // NA, //DSTORE_2, // -
321
+ // NA, //DSTORE_3, // -
322
+ // NA, //ASTORE_0, // -
323
+ // NA, //ASTORE_1, // -
324
+ // NA, //ASTORE_2, // -
325
+ // NA, //ASTORE_3, // -
326
+ // -3, //IASTORE, // visitInsn
327
+ // -4, //LASTORE, // -
328
+ // -3, //FASTORE, // -
329
+ // -4, //DASTORE, // -
330
+ // -3, //AASTORE, // -
331
+ // -3, //BASTORE, // -
332
+ // -3, //CASTORE, // -
333
+ // -3, //SASTORE, // -
334
+ // -1, //POP, // -
335
+ // -2, //POP2, // -
336
+ // 1, //DUP, // -
337
+ // 1, //DUP_X1, // -
338
+ // 1, //DUP_X2, // -
339
+ // 2, //DUP2, // -
340
+ // 2, //DUP2_X1, // -
341
+ // 2, //DUP2_X2, // -
342
+ // 0, //SWAP, // -
343
+ // -1, //IADD, // -
344
+ // -2, //LADD, // -
345
+ // -1, //FADD, // -
346
+ // -2, //DADD, // -
347
+ // -1, //ISUB, // -
348
+ // -2, //LSUB, // -
349
+ // -1, //FSUB, // -
350
+ // -2, //DSUB, // -
351
+ // -1, //IMUL, // -
352
+ // -2, //LMUL, // -
353
+ // -1, //FMUL, // -
354
+ // -2, //DMUL, // -
355
+ // -1, //IDIV, // -
356
+ // -2, //LDIV, // -
357
+ // -1, //FDIV, // -
358
+ // -2, //DDIV, // -
359
+ // -1, //IREM, // -
360
+ // -2, //LREM, // -
361
+ // -1, //FREM, // -
362
+ // -2, //DREM, // -
363
+ // 0, //INEG, // -
364
+ // 0, //LNEG, // -
365
+ // 0, //FNEG, // -
366
+ // 0, //DNEG, // -
367
+ // -1, //ISHL, // -
368
+ // -1, //LSHL, // -
369
+ // -1, //ISHR, // -
370
+ // -1, //LSHR, // -
371
+ // -1, //IUSHR, // -
372
+ // -1, //LUSHR, // -
373
+ // -1, //IAND, // -
374
+ // -2, //LAND, // -
375
+ // -1, //IOR, // -
376
+ // -2, //LOR, // -
377
+ // -1, //IXOR, // -
378
+ // -2, //LXOR, // -
379
+ // 0, //IINC, // visitIincInsn
380
+ // 1, //I2L, // visitInsn
381
+ // 0, //I2F, // -
382
+ // 1, //I2D, // -
383
+ // -1, //L2I, // -
384
+ // -1, //L2F, // -
385
+ // 0, //L2D, // -
386
+ // 0, //F2I, // -
387
+ // 1, //F2L, // -
388
+ // 1, //F2D, // -
389
+ // -1, //D2I, // -
390
+ // 0, //D2L, // -
391
+ // -1, //D2F, // -
392
+ // 0, //I2B, // -
393
+ // 0, //I2C, // -
394
+ // 0, //I2S, // -
395
+ // -3, //LCMP, // -
396
+ // -1, //FCMPL, // -
397
+ // -1, //FCMPG, // -
398
+ // -3, //DCMPL, // -
399
+ // -3, //DCMPG, // -
400
+ // -1, //IFEQ, // visitJumpInsn
401
+ // -1, //IFNE, // -
402
+ // -1, //IFLT, // -
403
+ // -1, //IFGE, // -
404
+ // -1, //IFGT, // -
405
+ // -1, //IFLE, // -
406
+ // -2, //IF_ICMPEQ, // -
407
+ // -2, //IF_ICMPNE, // -
408
+ // -2, //IF_ICMPLT, // -
409
+ // -2, //IF_ICMPGE, // -
410
+ // -2, //IF_ICMPGT, // -
411
+ // -2, //IF_ICMPLE, // -
412
+ // -2, //IF_ACMPEQ, // -
413
+ // -2, //IF_ACMPNE, // -
414
+ // 0, //GOTO, // -
415
+ // 1, //JSR, // -
416
+ // 0, //RET, // visitVarInsn
417
+ // -1, //TABLESWITCH, // visiTableSwitchInsn
418
+ // -1, //LOOKUPSWITCH, // visitLookupSwitch
419
+ // -1, //IRETURN, // visitInsn
420
+ // -2, //LRETURN, // -
421
+ // -1, //FRETURN, // -
422
+ // -2, //DRETURN, // -
423
+ // -1, //ARETURN, // -
424
+ // 0, //RETURN, // -
425
+ // NA, //GETSTATIC, // visitFieldInsn
426
+ // NA, //PUTSTATIC, // -
427
+ // NA, //GETFIELD, // -
428
+ // NA, //PUTFIELD, // -
429
+ // NA, //INVOKEVIRTUAL, // visitMethodInsn
430
+ // NA, //INVOKESPECIAL, // -
431
+ // NA, //INVOKESTATIC, // -
432
+ // NA, //INVOKEINTERFACE, // -
433
+ // NA, //UNUSED, // NOT VISITED
434
+ // 1, //NEW, // visitTypeInsn
435
+ // 0, //NEWARRAY, // visitIntInsn
436
+ // 0, //ANEWARRAY, // visitTypeInsn
437
+ // 0, //ARRAYLENGTH, // visitInsn
438
+ // NA, //ATHROW, // -
439
+ // 0, //CHECKCAST, // visitTypeInsn
440
+ // 0, //INSTANCEOF, // -
441
+ // -1, //MONITORENTER, // visitInsn
442
+ // -1, //MONITOREXIT, // -
443
+ // NA, //WIDE, // NOT VISITED
444
+ // NA, //MULTIANEWARRAY, // visitMultiANewArrayInsn
445
+ // -1, //IFNULL, // visitJumpInsn
446
+ // -1, //IFNONNULL, // -
447
+ // NA, //GOTO_W, // -
448
+ // NA, //JSR_W, // -
449
+ // };
450
+ // for (i = 0; i < b.length; ++i) {
451
+ // System.err.print((char)('E' + b[i]));
452
+ // }
453
+ // System.err.println();
454
+ }
455
+
456
+ /**
457
+ * The label (i.e. basic block) to which these input and output stack map
458
+ * frames correspond.
459
+ */
460
+ Label owner;
461
+
462
+ /**
463
+ * The input stack map frame locals.
464
+ */
465
+ int[] inputLocals;
466
+
467
+ /**
468
+ * The input stack map frame stack.
469
+ */
470
+ int[] inputStack;
471
+
472
+ /**
473
+ * The output stack map frame locals.
474
+ */
475
+ private int[] outputLocals;
476
+
477
+ /**
478
+ * The output stack map frame stack.
479
+ */
480
+ private int[] outputStack;
481
+
482
+ /**
483
+ * Relative size of the output stack. The exact semantics of this field
484
+ * depends on the algorithm that is used.
485
+ * <p/>
486
+ * When only the maximum stack size is computed, this field is the size of
487
+ * the output stack relatively to the top of the input stack.
488
+ * <p/>
489
+ * When the stack map frames are completely computed, this field is the
490
+ * actual number of types in {@link #outputStack}.
491
+ */
492
+ private int outputStackTop;
493
+
494
+ /**
495
+ * Number of types that are initialized in the basic block.
496
+ *
497
+ * @see #initializations
498
+ */
499
+ private int initializationCount;
500
+
501
+ /**
502
+ * The types that are initialized in the basic block. A constructor
503
+ * invocation on an UNINITIALIZED or UNINITIALIZED_THIS type must replace
504
+ * <i>every occurence</i> of this type in the local variables and in the
505
+ * operand stack. This cannot be done during the first phase of the
506
+ * algorithm since, during this phase, the local variables and the operand
507
+ * stack are not completely computed. It is therefore necessary to store the
508
+ * types on which constructors are invoked in the basic block, in order to
509
+ * do this replacement during the second phase of the algorithm, where the
510
+ * frames are fully computed. Note that this array can contain types that
511
+ * are relative to input locals or to the input stack (see below for the
512
+ * description of the algorithm).
513
+ */
514
+ private int[] initializations;
515
+
516
+ /**
517
+ * Returns the output frame local variable type at the given index.
518
+ *
519
+ * @param local the index of the local that must be returned.
520
+ * @return the output frame local variable type at the given index.
521
+ */
522
+ private int get(final int local){
523
+ if(outputLocals == null || local >= outputLocals.length)
524
+ {
525
+ // this local has never been assigned in this basic block,
526
+ // so it is still equal to its value in the input frame
527
+ return LOCAL | local;
528
+ }
529
+ else
530
+ {
531
+ int type = outputLocals[local];
532
+ if(type == 0)
533
+ {
534
+ // this local has never been assigned in this basic block,
535
+ // so it is still equal to its value in the input frame
536
+ type = outputLocals[local] = LOCAL | local;
537
+ }
538
+ return type;
539
+ }
540
+ }
541
+
542
+ /**
543
+ * Sets the output frame local variable type at the given index.
544
+ *
545
+ * @param local the index of the local that must be set.
546
+ * @param type the value of the local that must be set.
547
+ */
548
+ private void set(final int local, final int type){
549
+ // creates and/or resizes the output local variables array if necessary
550
+ if(outputLocals == null)
551
+ {
552
+ outputLocals = new int[10];
553
+ }
554
+ int n = outputLocals.length;
555
+ if(local >= n)
556
+ {
557
+ int[] t = new int[Math.max(local + 1, 2 * n)];
558
+ System.arraycopy(outputLocals, 0, t, 0, n);
559
+ outputLocals = t;
560
+ }
561
+ // sets the local variable
562
+ outputLocals[local] = type;
563
+ }
564
+
565
+ /**
566
+ * Pushes a new type onto the output frame stack.
567
+ *
568
+ * @param type the type that must be pushed.
569
+ */
570
+ private void push(final int type){
571
+ // creates and/or resizes the output stack array if necessary
572
+ if(outputStack == null)
573
+ {
574
+ outputStack = new int[10];
575
+ }
576
+ int n = outputStack.length;
577
+ if(outputStackTop >= n)
578
+ {
579
+ int[] t = new int[Math.max(outputStackTop + 1, 2 * n)];
580
+ System.arraycopy(outputStack, 0, t, 0, n);
581
+ outputStack = t;
582
+ }
583
+ // pushes the type on the output stack
584
+ outputStack[outputStackTop++] = type;
585
+ // updates the maximun height reached by the output stack, if needed
586
+ int top = owner.inputStackTop + outputStackTop;
587
+ if(top > owner.outputStackMax)
588
+ {
589
+ owner.outputStackMax = top;
590
+ }
591
+ }
592
+
593
+ /**
594
+ * Pushes a new type onto the output frame stack.
595
+ *
596
+ * @param cw the ClassWriter to which this label belongs.
597
+ * @param desc the descriptor of the type to be pushed. Can also be a method
598
+ * descriptor (in this case this method pushes its return type onto
599
+ * the output frame stack).
600
+ */
601
+ private void push(final ClassWriter cw, final String desc){
602
+ int type = type(cw, desc);
603
+ if(type != 0)
604
+ {
605
+ push(type);
606
+ if(type == LONG || type == DOUBLE)
607
+ {
608
+ push(TOP);
609
+ }
610
+ }
611
+ }
612
+
613
+ /**
614
+ * Returns the int encoding of the given type.
615
+ *
616
+ * @param cw the ClassWriter to which this label belongs.
617
+ * @param desc a type descriptor.
618
+ * @return the int encoding of the given type.
619
+ */
620
+ private int type(final ClassWriter cw, final String desc){
621
+ String t;
622
+ int index = desc.charAt(0) == '(' ? desc.indexOf(')') + 1 : 0;
623
+ switch(desc.charAt(index))
624
+ {
625
+ case'V':
626
+ return 0;
627
+ case'Z':
628
+ case'C':
629
+ case'B':
630
+ case'S':
631
+ case'I':
632
+ return INTEGER;
633
+ case'F':
634
+ return FLOAT;
635
+ case'J':
636
+ return LONG;
637
+ case'D':
638
+ return DOUBLE;
639
+ case'L':
640
+ // stores the internal name, not the descriptor!
641
+ t = desc.substring(index + 1, desc.length() - 1);
642
+ return OBJECT | cw.addType(t);
643
+ // case '[':
644
+ default:
645
+ // extracts the dimensions and the element type
646
+ int data;
647
+ int dims = index + 1;
648
+ while(desc.charAt(dims) == '[')
649
+ {
650
+ ++dims;
651
+ }
652
+ switch(desc.charAt(dims))
653
+ {
654
+ case'Z':
655
+ data = BOOLEAN;
656
+ break;
657
+ case'C':
658
+ data = CHAR;
659
+ break;
660
+ case'B':
661
+ data = BYTE;
662
+ break;
663
+ case'S':
664
+ data = SHORT;
665
+ break;
666
+ case'I':
667
+ data = INTEGER;
668
+ break;
669
+ case'F':
670
+ data = FLOAT;
671
+ break;
672
+ case'J':
673
+ data = LONG;
674
+ break;
675
+ case'D':
676
+ data = DOUBLE;
677
+ break;
678
+ // case 'L':
679
+ default:
680
+ // stores the internal name, not the descriptor
681
+ t = desc.substring(dims + 1, desc.length() - 1);
682
+ data = OBJECT | cw.addType(t);
683
+ }
684
+ return (dims - index) << 28 | data;
685
+ }
686
+ }
687
+
688
+ /**
689
+ * Pops a type from the output frame stack and returns its value.
690
+ *
691
+ * @return the type that has been popped from the output frame stack.
692
+ */
693
+ private int pop(){
694
+ if(outputStackTop > 0)
695
+ {
696
+ return outputStack[--outputStackTop];
697
+ }
698
+ else
699
+ {
700
+ // if the output frame stack is empty, pops from the input stack
701
+ return STACK | -(--owner.inputStackTop);
702
+ }
703
+ }
704
+
705
+ /**
706
+ * Pops the given number of types from the output frame stack.
707
+ *
708
+ * @param elements the number of types that must be popped.
709
+ */
710
+ private void pop(final int elements){
711
+ if(outputStackTop >= elements)
712
+ {
713
+ outputStackTop -= elements;
714
+ }
715
+ else
716
+ {
717
+ // if the number of elements to be popped is greater than the number
718
+ // of elements in the output stack, clear it, and pops the remaining
719
+ // elements from the input stack.
720
+ owner.inputStackTop -= elements - outputStackTop;
721
+ outputStackTop = 0;
722
+ }
723
+ }
724
+
725
+ /**
726
+ * Pops a type from the output frame stack.
727
+ *
728
+ * @param desc the descriptor of the type to be popped. Can also be a method
729
+ * descriptor (in this case this method pops the types corresponding
730
+ * to the method arguments).
731
+ */
732
+ private void pop(final String desc){
733
+ char c = desc.charAt(0);
734
+ if(c == '(')
735
+ {
736
+ pop((MethodWriter.getArgumentsAndReturnSizes(desc) >> 2) - 1);
737
+ }
738
+ else if(c == 'J' || c == 'D')
739
+ {
740
+ pop(2);
741
+ }
742
+ else
743
+ {
744
+ pop(1);
745
+ }
746
+ }
747
+
748
+ /**
749
+ * Adds a new type to the list of types on which a constructor is invoked in
750
+ * the basic block.
751
+ *
752
+ * @param var a type on a which a constructor is invoked.
753
+ */
754
+ private void init(final int var){
755
+ // creates and/or resizes the initializations array if necessary
756
+ if(initializations == null)
757
+ {
758
+ initializations = new int[2];
759
+ }
760
+ int n = initializations.length;
761
+ if(initializationCount >= n)
762
+ {
763
+ int[] t = new int[Math.max(initializationCount + 1, 2 * n)];
764
+ System.arraycopy(initializations, 0, t, 0, n);
765
+ initializations = t;
766
+ }
767
+ // stores the type to be initialized
768
+ initializations[initializationCount++] = var;
769
+ }
770
+
771
+ /**
772
+ * Replaces the given type with the appropriate type if it is one of the
773
+ * types on which a constructor is invoked in the basic block.
774
+ *
775
+ * @param cw the ClassWriter to which this label belongs.
776
+ * @param t a type
777
+ * @return t or, if t is one of the types on which a constructor is invoked
778
+ * in the basic block, the type corresponding to this constructor.
779
+ */
780
+ private int init(final ClassWriter cw, final int t){
781
+ int s;
782
+ if(t == UNINITIALIZED_THIS)
783
+ {
784
+ s = OBJECT | cw.addType(cw.thisName);
785
+ }
786
+ else if((t & (DIM | BASE_KIND)) == UNINITIALIZED)
787
+ {
788
+ String type = cw.typeTable[t & BASE_VALUE].strVal1;
789
+ s = OBJECT | cw.addType(type);
790
+ }
791
+ else
792
+ {
793
+ return t;
794
+ }
795
+ for(int j = 0; j < initializationCount; ++j)
796
+ {
797
+ int u = initializations[j];
798
+ int dim = u & DIM;
799
+ int kind = u & KIND;
800
+ if(kind == LOCAL)
801
+ {
802
+ u = dim + inputLocals[u & VALUE];
803
+ }
804
+ else if(kind == STACK)
805
+ {
806
+ u = dim + inputStack[inputStack.length - (u & VALUE)];
807
+ }
808
+ if(t == u)
809
+ {
810
+ return s;
811
+ }
812
+ }
813
+ return t;
814
+ }
815
+
816
+ /**
817
+ * Initializes the input frame of the first basic block from the method
818
+ * descriptor.
819
+ *
820
+ * @param cw the ClassWriter to which this label belongs.
821
+ * @param access the access flags of the method to which this label belongs.
822
+ * @param args the formal parameter types of this method.
823
+ * @param maxLocals the maximum number of local variables of this method.
824
+ */
825
+ void initInputFrame(
826
+ final ClassWriter cw,
827
+ final int access,
828
+ final Type[] args,
829
+ final int maxLocals){
830
+ inputLocals = new int[maxLocals];
831
+ inputStack = new int[0];
832
+ int i = 0;
833
+ if((access & Opcodes.ACC_STATIC) == 0)
834
+ {
835
+ if((access & MethodWriter.ACC_CONSTRUCTOR) == 0)
836
+ {
837
+ inputLocals[i++] = OBJECT | cw.addType(cw.thisName);
838
+ }
839
+ else
840
+ {
841
+ inputLocals[i++] = UNINITIALIZED_THIS;
842
+ }
843
+ }
844
+ for(int j = 0; j < args.length; ++j)
845
+ {
846
+ int t = type(cw, args[j].getDescriptor());
847
+ inputLocals[i++] = t;
848
+ if(t == LONG || t == DOUBLE)
849
+ {
850
+ inputLocals[i++] = TOP;
851
+ }
852
+ }
853
+ while(i < maxLocals)
854
+ {
855
+ inputLocals[i++] = TOP;
856
+ }
857
+ }
858
+
859
+ /**
860
+ * Simulates the action of the given instruction on the output stack frame.
861
+ *
862
+ * @param opcode the opcode of the instruction.
863
+ * @param arg the operand of the instruction, if any.
864
+ * @param cw the class writer to which this label belongs.
865
+ * @param item the operand of the instructions, if any.
866
+ */
867
+ void execute(
868
+ final int opcode,
869
+ final int arg,
870
+ final ClassWriter cw,
871
+ final Item item){
872
+ int t1, t2, t3, t4;
873
+ switch(opcode)
874
+ {
875
+ case Opcodes.NOP:
876
+ case Opcodes.INEG:
877
+ case Opcodes.LNEG:
878
+ case Opcodes.FNEG:
879
+ case Opcodes.DNEG:
880
+ case Opcodes.I2B:
881
+ case Opcodes.I2C:
882
+ case Opcodes.I2S:
883
+ case Opcodes.GOTO:
884
+ case Opcodes.RETURN:
885
+ break;
886
+ case Opcodes.ACONST_NULL:
887
+ push(NULL);
888
+ break;
889
+ case Opcodes.ICONST_M1:
890
+ case Opcodes.ICONST_0:
891
+ case Opcodes.ICONST_1:
892
+ case Opcodes.ICONST_2:
893
+ case Opcodes.ICONST_3:
894
+ case Opcodes.ICONST_4:
895
+ case Opcodes.ICONST_5:
896
+ case Opcodes.BIPUSH:
897
+ case Opcodes.SIPUSH:
898
+ case Opcodes.ILOAD:
899
+ push(INTEGER);
900
+ break;
901
+ case Opcodes.LCONST_0:
902
+ case Opcodes.LCONST_1:
903
+ case Opcodes.LLOAD:
904
+ push(LONG);
905
+ push(TOP);
906
+ break;
907
+ case Opcodes.FCONST_0:
908
+ case Opcodes.FCONST_1:
909
+ case Opcodes.FCONST_2:
910
+ case Opcodes.FLOAD:
911
+ push(FLOAT);
912
+ break;
913
+ case Opcodes.DCONST_0:
914
+ case Opcodes.DCONST_1:
915
+ case Opcodes.DLOAD:
916
+ push(DOUBLE);
917
+ push(TOP);
918
+ break;
919
+ case Opcodes.LDC:
920
+ switch(item.type)
921
+ {
922
+ case ClassWriter.INT:
923
+ push(INTEGER);
924
+ break;
925
+ case ClassWriter.LONG:
926
+ push(LONG);
927
+ push(TOP);
928
+ break;
929
+ case ClassWriter.FLOAT:
930
+ push(FLOAT);
931
+ break;
932
+ case ClassWriter.DOUBLE:
933
+ push(DOUBLE);
934
+ push(TOP);
935
+ break;
936
+ case ClassWriter.CLASS:
937
+ push(OBJECT | cw.addType("java/lang/Class"));
938
+ break;
939
+ // case ClassWriter.STR:
940
+ default:
941
+ push(OBJECT | cw.addType("java/lang/String"));
942
+ }
943
+ break;
944
+ case Opcodes.ALOAD:
945
+ push(get(arg));
946
+ break;
947
+ case Opcodes.IALOAD:
948
+ case Opcodes.BALOAD:
949
+ case Opcodes.CALOAD:
950
+ case Opcodes.SALOAD:
951
+ pop(2);
952
+ push(INTEGER);
953
+ break;
954
+ case Opcodes.LALOAD:
955
+ case Opcodes.D2L:
956
+ pop(2);
957
+ push(LONG);
958
+ push(TOP);
959
+ break;
960
+ case Opcodes.FALOAD:
961
+ pop(2);
962
+ push(FLOAT);
963
+ break;
964
+ case Opcodes.DALOAD:
965
+ case Opcodes.L2D:
966
+ pop(2);
967
+ push(DOUBLE);
968
+ push(TOP);
969
+ break;
970
+ case Opcodes.AALOAD:
971
+ pop(1);
972
+ t1 = pop();
973
+ push(ELEMENT_OF + t1);
974
+ break;
975
+ case Opcodes.ISTORE:
976
+ case Opcodes.FSTORE:
977
+ case Opcodes.ASTORE:
978
+ t1 = pop();
979
+ set(arg, t1);
980
+ if(arg > 0)
981
+ {
982
+ t2 = get(arg - 1);
983
+ // if t2 is of kind STACK or LOCAL we cannot know its size!
984
+ if(t2 == LONG || t2 == DOUBLE)
985
+ {
986
+ set(arg - 1, TOP);
987
+ }
988
+ }
989
+ break;
990
+ case Opcodes.LSTORE:
991
+ case Opcodes.DSTORE:
992
+ pop(1);
993
+ t1 = pop();
994
+ set(arg, t1);
995
+ set(arg + 1, TOP);
996
+ if(arg > 0)
997
+ {
998
+ t2 = get(arg - 1);
999
+ // if t2 is of kind STACK or LOCAL we cannot know its size!
1000
+ if(t2 == LONG || t2 == DOUBLE)
1001
+ {
1002
+ set(arg - 1, TOP);
1003
+ }
1004
+ }
1005
+ break;
1006
+ case Opcodes.IASTORE:
1007
+ case Opcodes.BASTORE:
1008
+ case Opcodes.CASTORE:
1009
+ case Opcodes.SASTORE:
1010
+ case Opcodes.FASTORE:
1011
+ case Opcodes.AASTORE:
1012
+ pop(3);
1013
+ break;
1014
+ case Opcodes.LASTORE:
1015
+ case Opcodes.DASTORE:
1016
+ pop(4);
1017
+ break;
1018
+ case Opcodes.POP:
1019
+ case Opcodes.IFEQ:
1020
+ case Opcodes.IFNE:
1021
+ case Opcodes.IFLT:
1022
+ case Opcodes.IFGE:
1023
+ case Opcodes.IFGT:
1024
+ case Opcodes.IFLE:
1025
+ case Opcodes.IRETURN:
1026
+ case Opcodes.FRETURN:
1027
+ case Opcodes.ARETURN:
1028
+ case Opcodes.TABLESWITCH:
1029
+ case Opcodes.LOOKUPSWITCH:
1030
+ case Opcodes.ATHROW:
1031
+ case Opcodes.MONITORENTER:
1032
+ case Opcodes.MONITOREXIT:
1033
+ case Opcodes.IFNULL:
1034
+ case Opcodes.IFNONNULL:
1035
+ pop(1);
1036
+ break;
1037
+ case Opcodes.POP2:
1038
+ case Opcodes.IF_ICMPEQ:
1039
+ case Opcodes.IF_ICMPNE:
1040
+ case Opcodes.IF_ICMPLT:
1041
+ case Opcodes.IF_ICMPGE:
1042
+ case Opcodes.IF_ICMPGT:
1043
+ case Opcodes.IF_ICMPLE:
1044
+ case Opcodes.IF_ACMPEQ:
1045
+ case Opcodes.IF_ACMPNE:
1046
+ case Opcodes.LRETURN:
1047
+ case Opcodes.DRETURN:
1048
+ pop(2);
1049
+ break;
1050
+ case Opcodes.DUP:
1051
+ t1 = pop();
1052
+ push(t1);
1053
+ push(t1);
1054
+ break;
1055
+ case Opcodes.DUP_X1:
1056
+ t1 = pop();
1057
+ t2 = pop();
1058
+ push(t1);
1059
+ push(t2);
1060
+ push(t1);
1061
+ break;
1062
+ case Opcodes.DUP_X2:
1063
+ t1 = pop();
1064
+ t2 = pop();
1065
+ t3 = pop();
1066
+ push(t1);
1067
+ push(t3);
1068
+ push(t2);
1069
+ push(t1);
1070
+ break;
1071
+ case Opcodes.DUP2:
1072
+ t1 = pop();
1073
+ t2 = pop();
1074
+ push(t2);
1075
+ push(t1);
1076
+ push(t2);
1077
+ push(t1);
1078
+ break;
1079
+ case Opcodes.DUP2_X1:
1080
+ t1 = pop();
1081
+ t2 = pop();
1082
+ t3 = pop();
1083
+ push(t2);
1084
+ push(t1);
1085
+ push(t3);
1086
+ push(t2);
1087
+ push(t1);
1088
+ break;
1089
+ case Opcodes.DUP2_X2:
1090
+ t1 = pop();
1091
+ t2 = pop();
1092
+ t3 = pop();
1093
+ t4 = pop();
1094
+ push(t2);
1095
+ push(t1);
1096
+ push(t4);
1097
+ push(t3);
1098
+ push(t2);
1099
+ push(t1);
1100
+ break;
1101
+ case Opcodes.SWAP:
1102
+ t1 = pop();
1103
+ t2 = pop();
1104
+ push(t1);
1105
+ push(t2);
1106
+ break;
1107
+ case Opcodes.IADD:
1108
+ case Opcodes.ISUB:
1109
+ case Opcodes.IMUL:
1110
+ case Opcodes.IDIV:
1111
+ case Opcodes.IREM:
1112
+ case Opcodes.IAND:
1113
+ case Opcodes.IOR:
1114
+ case Opcodes.IXOR:
1115
+ case Opcodes.ISHL:
1116
+ case Opcodes.ISHR:
1117
+ case Opcodes.IUSHR:
1118
+ case Opcodes.L2I:
1119
+ case Opcodes.D2I:
1120
+ case Opcodes.FCMPL:
1121
+ case Opcodes.FCMPG:
1122
+ pop(2);
1123
+ push(INTEGER);
1124
+ break;
1125
+ case Opcodes.LADD:
1126
+ case Opcodes.LSUB:
1127
+ case Opcodes.LMUL:
1128
+ case Opcodes.LDIV:
1129
+ case Opcodes.LREM:
1130
+ case Opcodes.LAND:
1131
+ case Opcodes.LOR:
1132
+ case Opcodes.LXOR:
1133
+ pop(4);
1134
+ push(LONG);
1135
+ push(TOP);
1136
+ break;
1137
+ case Opcodes.FADD:
1138
+ case Opcodes.FSUB:
1139
+ case Opcodes.FMUL:
1140
+ case Opcodes.FDIV:
1141
+ case Opcodes.FREM:
1142
+ case Opcodes.L2F:
1143
+ case Opcodes.D2F:
1144
+ pop(2);
1145
+ push(FLOAT);
1146
+ break;
1147
+ case Opcodes.DADD:
1148
+ case Opcodes.DSUB:
1149
+ case Opcodes.DMUL:
1150
+ case Opcodes.DDIV:
1151
+ case Opcodes.DREM:
1152
+ pop(4);
1153
+ push(DOUBLE);
1154
+ push(TOP);
1155
+ break;
1156
+ case Opcodes.LSHL:
1157
+ case Opcodes.LSHR:
1158
+ case Opcodes.LUSHR:
1159
+ pop(3);
1160
+ push(LONG);
1161
+ push(TOP);
1162
+ break;
1163
+ case Opcodes.IINC:
1164
+ set(arg, INTEGER);
1165
+ break;
1166
+ case Opcodes.I2L:
1167
+ case Opcodes.F2L:
1168
+ pop(1);
1169
+ push(LONG);
1170
+ push(TOP);
1171
+ break;
1172
+ case Opcodes.I2F:
1173
+ pop(1);
1174
+ push(FLOAT);
1175
+ break;
1176
+ case Opcodes.I2D:
1177
+ case Opcodes.F2D:
1178
+ pop(1);
1179
+ push(DOUBLE);
1180
+ push(TOP);
1181
+ break;
1182
+ case Opcodes.F2I:
1183
+ case Opcodes.ARRAYLENGTH:
1184
+ case Opcodes.INSTANCEOF:
1185
+ pop(1);
1186
+ push(INTEGER);
1187
+ break;
1188
+ case Opcodes.LCMP:
1189
+ case Opcodes.DCMPL:
1190
+ case Opcodes.DCMPG:
1191
+ pop(4);
1192
+ push(INTEGER);
1193
+ break;
1194
+ case Opcodes.JSR:
1195
+ case Opcodes.RET:
1196
+ throw new RuntimeException("JSR/RET are not supported with computeFrames option");
1197
+ case Opcodes.GETSTATIC:
1198
+ push(cw, item.strVal3);
1199
+ break;
1200
+ case Opcodes.PUTSTATIC:
1201
+ pop(item.strVal3);
1202
+ break;
1203
+ case Opcodes.GETFIELD:
1204
+ pop(1);
1205
+ push(cw, item.strVal3);
1206
+ break;
1207
+ case Opcodes.PUTFIELD:
1208
+ pop(item.strVal3);
1209
+ pop();
1210
+ break;
1211
+ case Opcodes.INVOKEVIRTUAL:
1212
+ case Opcodes.INVOKESPECIAL:
1213
+ case Opcodes.INVOKESTATIC:
1214
+ case Opcodes.INVOKEINTERFACE:
1215
+ pop(item.strVal3);
1216
+ if(opcode != Opcodes.INVOKESTATIC)
1217
+ {
1218
+ t1 = pop();
1219
+ if(opcode == Opcodes.INVOKESPECIAL
1220
+ && item.strVal2.charAt(0) == '<')
1221
+ {
1222
+ init(t1);
1223
+ }
1224
+ }
1225
+ push(cw, item.strVal3);
1226
+ break;
1227
+ case Opcodes.NEW:
1228
+ push(UNINITIALIZED | cw.addUninitializedType(item.strVal1, arg));
1229
+ break;
1230
+ case Opcodes.NEWARRAY:
1231
+ pop();
1232
+ switch(arg)
1233
+ {
1234
+ case Opcodes.T_BOOLEAN:
1235
+ push(ARRAY_OF | BOOLEAN);
1236
+ break;
1237
+ case Opcodes.T_CHAR:
1238
+ push(ARRAY_OF | CHAR);
1239
+ break;
1240
+ case Opcodes.T_BYTE:
1241
+ push(ARRAY_OF | BYTE);
1242
+ break;
1243
+ case Opcodes.T_SHORT:
1244
+ push(ARRAY_OF | SHORT);
1245
+ break;
1246
+ case Opcodes.T_INT:
1247
+ push(ARRAY_OF | INTEGER);
1248
+ break;
1249
+ case Opcodes.T_FLOAT:
1250
+ push(ARRAY_OF | FLOAT);
1251
+ break;
1252
+ case Opcodes.T_DOUBLE:
1253
+ push(ARRAY_OF | DOUBLE);
1254
+ break;
1255
+ // case Opcodes.T_LONG:
1256
+ default:
1257
+ push(ARRAY_OF | LONG);
1258
+ break;
1259
+ }
1260
+ break;
1261
+ case Opcodes.ANEWARRAY:
1262
+ String s = item.strVal1;
1263
+ pop();
1264
+ if(s.charAt(0) == '[')
1265
+ {
1266
+ push(cw, "[" + s);
1267
+ }
1268
+ else
1269
+ {
1270
+ push(ARRAY_OF | OBJECT | cw.addType(s));
1271
+ }
1272
+ break;
1273
+ case Opcodes.CHECKCAST:
1274
+ s = item.strVal1;
1275
+ pop();
1276
+ if(s.charAt(0) == '[')
1277
+ {
1278
+ push(cw, s);
1279
+ }
1280
+ else
1281
+ {
1282
+ push(OBJECT | cw.addType(s));
1283
+ }
1284
+ break;
1285
+ // case Opcodes.MULTIANEWARRAY:
1286
+ default:
1287
+ pop(arg);
1288
+ push(cw, item.strVal1);
1289
+ break;
1290
+ }
1291
+ }
1292
+
1293
+ /**
1294
+ * Merges the input frame of the given basic block with the input and output
1295
+ * frames of this basic block. Returns <tt>true</tt> if the input frame of
1296
+ * the given label has been changed by this operation.
1297
+ *
1298
+ * @param cw the ClassWriter to which this label belongs.
1299
+ * @param frame the basic block whose input frame must be updated.
1300
+ * @param edge the kind of the {@link Edge} between this label and 'label'.
1301
+ * See {@link Edge#info}.
1302
+ * @return <tt>true</tt> if the input frame of the given label has been
1303
+ * changed by this operation.
1304
+ */
1305
+ boolean merge(final ClassWriter cw, final Frame frame, final int edge){
1306
+ boolean changed = false;
1307
+ int i, s, dim, kind, t;
1308
+
1309
+ int nLocal = inputLocals.length;
1310
+ int nStack = inputStack.length;
1311
+ if(frame.inputLocals == null)
1312
+ {
1313
+ frame.inputLocals = new int[nLocal];
1314
+ changed = true;
1315
+ }
1316
+
1317
+ for(i = 0; i < nLocal; ++i)
1318
+ {
1319
+ if(outputLocals != null && i < outputLocals.length)
1320
+ {
1321
+ s = outputLocals[i];
1322
+ if(s == 0)
1323
+ {
1324
+ t = inputLocals[i];
1325
+ }
1326
+ else
1327
+ {
1328
+ dim = s & DIM;
1329
+ kind = s & KIND;
1330
+ if(kind == LOCAL)
1331
+ {
1332
+ t = dim + inputLocals[s & VALUE];
1333
+ }
1334
+ else if(kind == STACK)
1335
+ {
1336
+ t = dim + inputStack[nStack - (s & VALUE)];
1337
+ }
1338
+ else
1339
+ {
1340
+ t = s;
1341
+ }
1342
+ }
1343
+ }
1344
+ else
1345
+ {
1346
+ t = inputLocals[i];
1347
+ }
1348
+ if(initializations != null)
1349
+ {
1350
+ t = init(cw, t);
1351
+ }
1352
+ changed |= merge(cw, t, frame.inputLocals, i);
1353
+ }
1354
+
1355
+ if(edge > 0)
1356
+ {
1357
+ for(i = 0; i < nLocal; ++i)
1358
+ {
1359
+ t = inputLocals[i];
1360
+ changed |= merge(cw, t, frame.inputLocals, i);
1361
+ }
1362
+ if(frame.inputStack == null)
1363
+ {
1364
+ frame.inputStack = new int[1];
1365
+ changed = true;
1366
+ }
1367
+ changed |= merge(cw, edge, frame.inputStack, 0);
1368
+ return changed;
1369
+ }
1370
+
1371
+ int nInputStack = inputStack.length + owner.inputStackTop;
1372
+ if(frame.inputStack == null)
1373
+ {
1374
+ frame.inputStack = new int[nInputStack + outputStackTop];
1375
+ changed = true;
1376
+ }
1377
+
1378
+ for(i = 0; i < nInputStack; ++i)
1379
+ {
1380
+ t = inputStack[i];
1381
+ if(initializations != null)
1382
+ {
1383
+ t = init(cw, t);
1384
+ }
1385
+ changed |= merge(cw, t, frame.inputStack, i);
1386
+ }
1387
+ for(i = 0; i < outputStackTop; ++i)
1388
+ {
1389
+ s = outputStack[i];
1390
+ dim = s & DIM;
1391
+ kind = s & KIND;
1392
+ if(kind == LOCAL)
1393
+ {
1394
+ t = dim + inputLocals[s & VALUE];
1395
+ }
1396
+ else if(kind == STACK)
1397
+ {
1398
+ t = dim + inputStack[nStack - (s & VALUE)];
1399
+ }
1400
+ else
1401
+ {
1402
+ t = s;
1403
+ }
1404
+ if(initializations != null)
1405
+ {
1406
+ t = init(cw, t);
1407
+ }
1408
+ changed |= merge(cw, t, frame.inputStack, nInputStack + i);
1409
+ }
1410
+ return changed;
1411
+ }
1412
+
1413
+ /**
1414
+ * Merges the type at the given index in the given type array with the given
1415
+ * type. Returns <tt>true</tt> if the type array has been modified by this
1416
+ * operation.
1417
+ *
1418
+ * @param cw the ClassWriter to which this label belongs.
1419
+ * @param t the type with which the type array element must be merged.
1420
+ * @param types an array of types.
1421
+ * @param index the index of the type that must be merged in 'types'.
1422
+ * @return <tt>true</tt> if the type array has been modified by this
1423
+ * operation.
1424
+ */
1425
+ private boolean merge(
1426
+ final ClassWriter cw,
1427
+ int t,
1428
+ final int[] types,
1429
+ final int index){
1430
+ int u = types[index];
1431
+ if(u == t)
1432
+ {
1433
+ // if the types are equal, merge(u,t)=u, so there is no change
1434
+ return false;
1435
+ }
1436
+ if((t & ~DIM) == NULL)
1437
+ {
1438
+ if(u == NULL)
1439
+ {
1440
+ return false;
1441
+ }
1442
+ t = NULL;
1443
+ }
1444
+ if(u == 0)
1445
+ {
1446
+ // if types[index] has never been assigned, merge(u,t)=t
1447
+ types[index] = t;
1448
+ return true;
1449
+ }
1450
+ int v;
1451
+ if((u & BASE_KIND) == OBJECT || (u & DIM) != 0)
1452
+ {
1453
+ // if u is a reference type of any dimension
1454
+ if(t == NULL)
1455
+ {
1456
+ // if t is the NULL type, merge(u,t)=u, so there is no change
1457
+ return false;
1458
+ }
1459
+ else if((t & (DIM | BASE_KIND)) == (u & (DIM | BASE_KIND)))
1460
+ {
1461
+ if((u & BASE_KIND) == OBJECT)
1462
+ {
1463
+ // if t is also a reference type, and if u and t have the
1464
+ // same dimension merge(u,t) = dim(t) | common parent of the
1465
+ // element types of u and t
1466
+ v = (t & DIM) | OBJECT
1467
+ | cw.getMergedType(t & BASE_VALUE, u & BASE_VALUE);
1468
+ }
1469
+ else
1470
+ {
1471
+ // if u and t are array types, but not with the same element
1472
+ // type, merge(u,t)=java/lang/Object
1473
+ v = OBJECT | cw.addType("java/lang/Object");
1474
+ }
1475
+ }
1476
+ else if((t & BASE_KIND) == OBJECT || (t & DIM) != 0)
1477
+ {
1478
+ // if t is any other reference or array type,
1479
+ // merge(u,t)=java/lang/Object
1480
+ v = OBJECT | cw.addType("java/lang/Object");
1481
+ }
1482
+ else
1483
+ {
1484
+ // if t is any other type, merge(u,t)=TOP
1485
+ v = TOP;
1486
+ }
1487
+ }
1488
+ else if(u == NULL)
1489
+ {
1490
+ // if u is the NULL type, merge(u,t)=t,
1491
+ // or TOP if t is not a reference type
1492
+ v = (t & BASE_KIND) == OBJECT || (t & DIM) != 0 ? t : TOP;
1493
+ }
1494
+ else
1495
+ {
1496
+ // if u is any other type, merge(u,t)=TOP whatever t
1497
+ v = TOP;
1498
+ }
1499
+ if(u != v)
1500
+ {
1501
+ types[index] = v;
1502
+ return true;
1503
+ }
1504
+ return false;
1505
+ }
1506
+ }