distil 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (552) hide show
  1. data/Rakefile +28 -0
  2. data/VERSION +1 -0
  3. data/bin/distil +45 -0
  4. data/distil.gemspec +586 -0
  5. data/lib/bootstrap-template.js +56 -0
  6. data/lib/configurable.rb +125 -0
  7. data/lib/file-set.rb +42 -0
  8. data/lib/file-types/css-file.rb +75 -0
  9. data/lib/file-types/html-file.rb +11 -0
  10. data/lib/file-types/javascript-file.rb +98 -0
  11. data/lib/file-types/json-file.rb +14 -0
  12. data/lib/file-types/nib-file.rb +9 -0
  13. data/lib/jsdoc.conf +18 -0
  14. data/lib/jsl.conf +121 -0
  15. data/lib/project.rb +96 -0
  16. data/lib/source-file.rb +181 -0
  17. data/lib/target.rb +96 -0
  18. data/lib/task.rb +239 -0
  19. data/lib/tasks/copy-task.rb +21 -0
  20. data/lib/tasks/css-task.rb +18 -0
  21. data/lib/tasks/javascript-task.rb +125 -0
  22. data/lib/tasks/multiple-output-task.rb +134 -0
  23. data/lib/tasks/nib-task.rb +83 -0
  24. data/lib/tasks/output-task.rb +73 -0
  25. data/lib/tasks/single-output-task.rb +83 -0
  26. data/lib/tasks/test-task.rb +280 -0
  27. data/lib/test/HtmlTestReporter.js +127 -0
  28. data/lib/test/Test.js +248 -0
  29. data/lib/test/TestReporter.js +79 -0
  30. data/lib/test/TestRunner.js +132 -0
  31. data/lib/test/browser.rb +97 -0
  32. data/lib/test/scriptwrapper.html +10 -0
  33. data/lib/test/unittest.html +127 -0
  34. data/vendor/Makefile +35 -0
  35. data/vendor/extconf.rb +3 -0
  36. data/vendor/jsdoc-extras/plugins/distil-plugin.js +142 -0
  37. data/vendor/jsdoc-extras/plugins/interface-plugin.js +36 -0
  38. data/vendor/jsdoc-extras/templates/coherent/allclasses.tmpl +17 -0
  39. data/vendor/jsdoc-extras/templates/coherent/allfiles.tmpl +53 -0
  40. data/vendor/jsdoc-extras/templates/coherent/class.tmpl +803 -0
  41. data/vendor/jsdoc-extras/templates/coherent/index.tmpl +37 -0
  42. data/vendor/jsdoc-extras/templates/coherent/publish.js +242 -0
  43. data/vendor/jsdoc-extras/templates/coherent/showdown.js +421 -0
  44. data/vendor/jsdoc-extras/templates/coherent/static/code-footer.html +3 -0
  45. data/vendor/jsdoc-extras/templates/coherent/static/code-header.html +7 -0
  46. data/vendor/jsdoc-extras/templates/coherent/static/default.css +297 -0
  47. data/vendor/jsdoc-extras/templates/coherent/static/header.html +2 -0
  48. data/vendor/jsdoc-extras/templates/coherent/static/index.html +19 -0
  49. data/vendor/jsdoc-extras/templates/coherent/symbol.tmpl +35 -0
  50. data/vendor/jsdoc-toolkit/README.txt +183 -0
  51. data/vendor/jsdoc-toolkit/app/frame/Chain.js +102 -0
  52. data/vendor/jsdoc-toolkit/app/frame/Dumper.js +144 -0
  53. data/vendor/jsdoc-toolkit/app/frame/Hash.js +84 -0
  54. data/vendor/jsdoc-toolkit/app/frame/Link.js +171 -0
  55. data/vendor/jsdoc-toolkit/app/frame/Namespace.js +10 -0
  56. data/vendor/jsdoc-toolkit/app/frame/Opt.js +134 -0
  57. data/vendor/jsdoc-toolkit/app/frame/Reflection.js +26 -0
  58. data/vendor/jsdoc-toolkit/app/frame/String.js +93 -0
  59. data/vendor/jsdoc-toolkit/app/frame/Testrun.js +129 -0
  60. data/vendor/jsdoc-toolkit/app/frame.js +33 -0
  61. data/vendor/jsdoc-toolkit/app/handlers/FOODOC.js +26 -0
  62. data/vendor/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js +159 -0
  63. data/vendor/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js +16 -0
  64. data/vendor/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js +292 -0
  65. data/vendor/jsdoc-toolkit/app/handlers/XMLDOC.js +26 -0
  66. data/vendor/jsdoc-toolkit/app/lib/JSDOC/DocComment.js +204 -0
  67. data/vendor/jsdoc-toolkit/app/lib/JSDOC/DocTag.js +300 -0
  68. data/vendor/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js +126 -0
  69. data/vendor/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js +109 -0
  70. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Lang.js +144 -0
  71. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Parser.js +144 -0
  72. data/vendor/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js +33 -0
  73. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Symbol.js +644 -0
  74. data/vendor/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js +241 -0
  75. data/vendor/jsdoc-toolkit/app/lib/JSDOC/TextStream.js +41 -0
  76. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Token.js +18 -0
  77. data/vendor/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js +332 -0
  78. data/vendor/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js +133 -0
  79. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Util.js +32 -0
  80. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Walker.js +499 -0
  81. data/vendor/jsdoc-toolkit/app/lib/JSDOC.js +106 -0
  82. data/vendor/jsdoc-toolkit/app/main.js +129 -0
  83. data/vendor/jsdoc-toolkit/app/plugins/commentSrcJson.js +20 -0
  84. data/vendor/jsdoc-toolkit/app/plugins/frameworkPrototype.js +16 -0
  85. data/vendor/jsdoc-toolkit/app/plugins/functionCall.js +10 -0
  86. data/vendor/jsdoc-toolkit/app/plugins/publishSrcHilite.js +54 -0
  87. data/vendor/jsdoc-toolkit/app/plugins/symbolLink.js +10 -0
  88. data/vendor/jsdoc-toolkit/app/plugins/tagParamConfig.js +31 -0
  89. data/vendor/jsdoc-toolkit/app/plugins/tagSynonyms.js +43 -0
  90. data/vendor/jsdoc-toolkit/app/run.js +348 -0
  91. data/vendor/jsdoc-toolkit/app/t/TestDoc.js +144 -0
  92. data/vendor/jsdoc-toolkit/app/t/runner.js +13 -0
  93. data/vendor/jsdoc-toolkit/app/test/addon.js +24 -0
  94. data/vendor/jsdoc-toolkit/app/test/anon_inner.js +14 -0
  95. data/vendor/jsdoc-toolkit/app/test/augments.js +31 -0
  96. data/vendor/jsdoc-toolkit/app/test/augments2.js +26 -0
  97. data/vendor/jsdoc-toolkit/app/test/borrows.js +46 -0
  98. data/vendor/jsdoc-toolkit/app/test/borrows2.js +23 -0
  99. data/vendor/jsdoc-toolkit/app/test/config.js +22 -0
  100. data/vendor/jsdoc-toolkit/app/test/constructs.js +18 -0
  101. data/vendor/jsdoc-toolkit/app/test/encoding.js +10 -0
  102. data/vendor/jsdoc-toolkit/app/test/encoding_other.js +12 -0
  103. data/vendor/jsdoc-toolkit/app/test/event.js +54 -0
  104. data/vendor/jsdoc-toolkit/app/test/exports.js +14 -0
  105. data/vendor/jsdoc-toolkit/app/test/functions_anon.js +39 -0
  106. data/vendor/jsdoc-toolkit/app/test/functions_nested.js +33 -0
  107. data/vendor/jsdoc-toolkit/app/test/global.js +13 -0
  108. data/vendor/jsdoc-toolkit/app/test/globals.js +25 -0
  109. data/vendor/jsdoc-toolkit/app/test/ignore.js +10 -0
  110. data/vendor/jsdoc-toolkit/app/test/inner.js +16 -0
  111. data/vendor/jsdoc-toolkit/app/test/jsdoc_test.js +477 -0
  112. data/vendor/jsdoc-toolkit/app/test/lend.js +33 -0
  113. data/vendor/jsdoc-toolkit/app/test/memberof.js +19 -0
  114. data/vendor/jsdoc-toolkit/app/test/memberof2.js +38 -0
  115. data/vendor/jsdoc-toolkit/app/test/memberof3.js +33 -0
  116. data/vendor/jsdoc-toolkit/app/test/memberof_constructor.js +17 -0
  117. data/vendor/jsdoc-toolkit/app/test/module.js +17 -0
  118. data/vendor/jsdoc-toolkit/app/test/name.js +19 -0
  119. data/vendor/jsdoc-toolkit/app/test/namespace_nested.js +23 -0
  120. data/vendor/jsdoc-toolkit/app/test/nocode.js +13 -0
  121. data/vendor/jsdoc-toolkit/app/test/oblit_anon.js +20 -0
  122. data/vendor/jsdoc-toolkit/app/test/overview.js +20 -0
  123. data/vendor/jsdoc-toolkit/app/test/param_inline.js +37 -0
  124. data/vendor/jsdoc-toolkit/app/test/params_optional.js +8 -0
  125. data/vendor/jsdoc-toolkit/app/test/prototype.js +17 -0
  126. data/vendor/jsdoc-toolkit/app/test/prototype_nested.js +9 -0
  127. data/vendor/jsdoc-toolkit/app/test/prototype_oblit.js +13 -0
  128. data/vendor/jsdoc-toolkit/app/test/prototype_oblit_constructor.js +24 -0
  129. data/vendor/jsdoc-toolkit/app/test/public.js +10 -0
  130. data/vendor/jsdoc-toolkit/app/test/scripts/code.js +5 -0
  131. data/vendor/jsdoc-toolkit/app/test/scripts/notcode.txt +5 -0
  132. data/vendor/jsdoc-toolkit/app/test/shared.js +42 -0
  133. data/vendor/jsdoc-toolkit/app/test/shared2.js +2 -0
  134. data/vendor/jsdoc-toolkit/app/test/shortcuts.js +22 -0
  135. data/vendor/jsdoc-toolkit/app/test/static_this.js +13 -0
  136. data/vendor/jsdoc-toolkit/app/test/synonyms.js +31 -0
  137. data/vendor/jsdoc-toolkit/app/test/tosource.js +23 -0
  138. data/vendor/jsdoc-toolkit/app/test/variable_redefine.js +14 -0
  139. data/vendor/jsdoc-toolkit/app/test.js +342 -0
  140. data/vendor/jsdoc-toolkit/changes.txt +116 -0
  141. data/vendor/jsdoc-toolkit/conf/sample.conf +31 -0
  142. data/vendor/jsdoc-toolkit/java/build.xml +36 -0
  143. data/vendor/jsdoc-toolkit/java/build_1.4.xml +36 -0
  144. data/vendor/jsdoc-toolkit/java/classes/js.jar +0 -0
  145. data/vendor/jsdoc-toolkit/java/src/JsDebugRun.java +21 -0
  146. data/vendor/jsdoc-toolkit/java/src/JsRun.java +21 -0
  147. data/vendor/jsdoc-toolkit/jsdebug.jar +0 -0
  148. data/vendor/jsdoc-toolkit/jsrun.jar +0 -0
  149. data/vendor/jsdoc-toolkit/jsrun.sh +53 -0
  150. data/vendor/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl +17 -0
  151. data/vendor/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl +56 -0
  152. data/vendor/jsdoc-toolkit/templates/jsdoc/class.tmpl +649 -0
  153. data/vendor/jsdoc-toolkit/templates/jsdoc/index.tmpl +39 -0
  154. data/vendor/jsdoc-toolkit/templates/jsdoc/publish.js +201 -0
  155. data/vendor/jsdoc-toolkit/templates/jsdoc/static/code-footer.html +3 -0
  156. data/vendor/jsdoc-toolkit/templates/jsdoc/static/code-header.html +14 -0
  157. data/vendor/jsdoc-toolkit/templates/jsdoc/static/default.css +162 -0
  158. data/vendor/jsdoc-toolkit/templates/jsdoc/static/header.html +2 -0
  159. data/vendor/jsdoc-toolkit/templates/jsdoc/static/index.html +19 -0
  160. data/vendor/jsdoc-toolkit/templates/jsdoc/symbol.tmpl +35 -0
  161. data/vendor/jsl-0.3.0/src/JavaScriptLintAPI.cpp +333 -0
  162. data/vendor/jsl-0.3.0/src/JavaScriptLintAPI.h +86 -0
  163. data/vendor/jsl-0.3.0/src/Makefile.in +375 -0
  164. data/vendor/jsl-0.3.0/src/Makefile.ref +372 -0
  165. data/vendor/jsl-0.3.0/src/README.html +826 -0
  166. data/vendor/jsl-0.3.0/src/SpiderMonkey.rsp +12 -0
  167. data/vendor/jsl-0.3.0/src/_jsl_online.php +223 -0
  168. data/vendor/jsl-0.3.0/src/config/AIX4.1.mk +65 -0
  169. data/vendor/jsl-0.3.0/src/config/AIX4.2.mk +64 -0
  170. data/vendor/jsl-0.3.0/src/config/AIX4.3.mk +65 -0
  171. data/vendor/jsl-0.3.0/src/config/Darwin.mk +81 -0
  172. data/vendor/jsl-0.3.0/src/config/Darwin1.3.mk +81 -0
  173. data/vendor/jsl-0.3.0/src/config/Darwin1.4.mk +41 -0
  174. data/vendor/jsl-0.3.0/src/config/Darwin5.2.mk +81 -0
  175. data/vendor/jsl-0.3.0/src/config/Darwin5.3.mk +81 -0
  176. data/vendor/jsl-0.3.0/src/config/HP-UXB.10.10.mk +77 -0
  177. data/vendor/jsl-0.3.0/src/config/HP-UXB.10.20.mk +77 -0
  178. data/vendor/jsl-0.3.0/src/config/HP-UXB.11.00.mk +80 -0
  179. data/vendor/jsl-0.3.0/src/config/IRIX.mk +87 -0
  180. data/vendor/jsl-0.3.0/src/config/IRIX5.3.mk +44 -0
  181. data/vendor/jsl-0.3.0/src/config/IRIX6.1.mk +44 -0
  182. data/vendor/jsl-0.3.0/src/config/IRIX6.2.mk +44 -0
  183. data/vendor/jsl-0.3.0/src/config/IRIX6.3.mk +44 -0
  184. data/vendor/jsl-0.3.0/src/config/IRIX6.5.mk +44 -0
  185. data/vendor/jsl-0.3.0/src/config/Linux_All.mk +103 -0
  186. data/vendor/jsl-0.3.0/src/config/Mac_OS10.0.mk +82 -0
  187. data/vendor/jsl-0.3.0/src/config/OSF1V4.0.mk +72 -0
  188. data/vendor/jsl-0.3.0/src/config/OSF1V5.0.mk +69 -0
  189. data/vendor/jsl-0.3.0/src/config/SunOS4.1.4.mk +101 -0
  190. data/vendor/jsl-0.3.0/src/config/SunOS5.3.mk +91 -0
  191. data/vendor/jsl-0.3.0/src/config/SunOS5.4.mk +92 -0
  192. data/vendor/jsl-0.3.0/src/config/SunOS5.5.1.mk +44 -0
  193. data/vendor/jsl-0.3.0/src/config/SunOS5.5.mk +87 -0
  194. data/vendor/jsl-0.3.0/src/config/SunOS5.6.mk +89 -0
  195. data/vendor/jsl-0.3.0/src/config/SunOS5.7.mk +44 -0
  196. data/vendor/jsl-0.3.0/src/config/SunOS5.8.mk +44 -0
  197. data/vendor/jsl-0.3.0/src/config/SunOS5.9.mk +44 -0
  198. data/vendor/jsl-0.3.0/src/config/WINNT4.0.mk +112 -0
  199. data/vendor/jsl-0.3.0/src/config/WINNT5.0.mk +112 -0
  200. data/vendor/jsl-0.3.0/src/config/WINNT5.1.mk +112 -0
  201. data/vendor/jsl-0.3.0/src/config/WINNT5.2.mk +112 -0
  202. data/vendor/jsl-0.3.0/src/config/dgux.mk +64 -0
  203. data/vendor/jsl-0.3.0/src/config.mk +166 -0
  204. data/vendor/jsl-0.3.0/src/editline/Makefile.ref +144 -0
  205. data/vendor/jsl-0.3.0/src/editline/README +83 -0
  206. data/vendor/jsl-0.3.0/src/editline/editline.3 +175 -0
  207. data/vendor/jsl-0.3.0/src/editline/editline.c +1369 -0
  208. data/vendor/jsl-0.3.0/src/editline/editline.h +135 -0
  209. data/vendor/jsl-0.3.0/src/editline/sysunix.c +182 -0
  210. data/vendor/jsl-0.3.0/src/editline/unix.h +82 -0
  211. data/vendor/jsl-0.3.0/src/fdlibm/Makefile.in +127 -0
  212. data/vendor/jsl-0.3.0/src/fdlibm/Makefile.ref +192 -0
  213. data/vendor/jsl-0.3.0/src/fdlibm/e_acos.c +147 -0
  214. data/vendor/jsl-0.3.0/src/fdlibm/e_acosh.c +105 -0
  215. data/vendor/jsl-0.3.0/src/fdlibm/e_asin.c +156 -0
  216. data/vendor/jsl-0.3.0/src/fdlibm/e_atan2.c +165 -0
  217. data/vendor/jsl-0.3.0/src/fdlibm/e_atanh.c +110 -0
  218. data/vendor/jsl-0.3.0/src/fdlibm/e_cosh.c +133 -0
  219. data/vendor/jsl-0.3.0/src/fdlibm/e_exp.c +202 -0
  220. data/vendor/jsl-0.3.0/src/fdlibm/e_fmod.c +184 -0
  221. data/vendor/jsl-0.3.0/src/fdlibm/e_gamma.c +71 -0
  222. data/vendor/jsl-0.3.0/src/fdlibm/e_gamma_r.c +70 -0
  223. data/vendor/jsl-0.3.0/src/fdlibm/e_hypot.c +173 -0
  224. data/vendor/jsl-0.3.0/src/fdlibm/e_j0.c +524 -0
  225. data/vendor/jsl-0.3.0/src/fdlibm/e_j1.c +523 -0
  226. data/vendor/jsl-0.3.0/src/fdlibm/e_jn.c +315 -0
  227. data/vendor/jsl-0.3.0/src/fdlibm/e_lgamma.c +71 -0
  228. data/vendor/jsl-0.3.0/src/fdlibm/e_lgamma_r.c +347 -0
  229. data/vendor/jsl-0.3.0/src/fdlibm/e_log.c +184 -0
  230. data/vendor/jsl-0.3.0/src/fdlibm/e_log10.c +134 -0
  231. data/vendor/jsl-0.3.0/src/fdlibm/e_pow.c +386 -0
  232. data/vendor/jsl-0.3.0/src/fdlibm/e_rem_pio2.c +221 -0
  233. data/vendor/jsl-0.3.0/src/fdlibm/e_remainder.c +120 -0
  234. data/vendor/jsl-0.3.0/src/fdlibm/e_scalb.c +89 -0
  235. data/vendor/jsl-0.3.0/src/fdlibm/e_sinh.c +122 -0
  236. data/vendor/jsl-0.3.0/src/fdlibm/e_sqrt.c +497 -0
  237. data/vendor/jsl-0.3.0/src/fdlibm/fdlibm.dsp +160 -0
  238. data/vendor/jsl-0.3.0/src/fdlibm/fdlibm.h +273 -0
  239. data/vendor/jsl-0.3.0/src/fdlibm/fdlibm.mak +1453 -0
  240. data/vendor/jsl-0.3.0/src/fdlibm/fdlibm.mdp +0 -0
  241. data/vendor/jsl-0.3.0/src/fdlibm/k_cos.c +134 -0
  242. data/vendor/jsl-0.3.0/src/fdlibm/k_rem_pio2.c +354 -0
  243. data/vendor/jsl-0.3.0/src/fdlibm/k_sin.c +114 -0
  244. data/vendor/jsl-0.3.0/src/fdlibm/k_standard.c +785 -0
  245. data/vendor/jsl-0.3.0/src/fdlibm/k_tan.c +170 -0
  246. data/vendor/jsl-0.3.0/src/fdlibm/s_asinh.c +101 -0
  247. data/vendor/jsl-0.3.0/src/fdlibm/s_atan.c +175 -0
  248. data/vendor/jsl-0.3.0/src/fdlibm/s_cbrt.c +133 -0
  249. data/vendor/jsl-0.3.0/src/fdlibm/s_ceil.c +120 -0
  250. data/vendor/jsl-0.3.0/src/fdlibm/s_copysign.c +72 -0
  251. data/vendor/jsl-0.3.0/src/fdlibm/s_cos.c +118 -0
  252. data/vendor/jsl-0.3.0/src/fdlibm/s_erf.c +356 -0
  253. data/vendor/jsl-0.3.0/src/fdlibm/s_expm1.c +267 -0
  254. data/vendor/jsl-0.3.0/src/fdlibm/s_fabs.c +70 -0
  255. data/vendor/jsl-0.3.0/src/fdlibm/s_finite.c +71 -0
  256. data/vendor/jsl-0.3.0/src/fdlibm/s_floor.c +121 -0
  257. data/vendor/jsl-0.3.0/src/fdlibm/s_frexp.c +99 -0
  258. data/vendor/jsl-0.3.0/src/fdlibm/s_ilogb.c +85 -0
  259. data/vendor/jsl-0.3.0/src/fdlibm/s_isnan.c +74 -0
  260. data/vendor/jsl-0.3.0/src/fdlibm/s_ldexp.c +66 -0
  261. data/vendor/jsl-0.3.0/src/fdlibm/s_lib_version.c +73 -0
  262. data/vendor/jsl-0.3.0/src/fdlibm/s_log1p.c +211 -0
  263. data/vendor/jsl-0.3.0/src/fdlibm/s_logb.c +79 -0
  264. data/vendor/jsl-0.3.0/src/fdlibm/s_matherr.c +64 -0
  265. data/vendor/jsl-0.3.0/src/fdlibm/s_modf.c +132 -0
  266. data/vendor/jsl-0.3.0/src/fdlibm/s_nextafter.c +124 -0
  267. data/vendor/jsl-0.3.0/src/fdlibm/s_rint.c +131 -0
  268. data/vendor/jsl-0.3.0/src/fdlibm/s_scalbn.c +107 -0
  269. data/vendor/jsl-0.3.0/src/fdlibm/s_signgam.c +40 -0
  270. data/vendor/jsl-0.3.0/src/fdlibm/s_significand.c +68 -0
  271. data/vendor/jsl-0.3.0/src/fdlibm/s_sin.c +118 -0
  272. data/vendor/jsl-0.3.0/src/fdlibm/s_tan.c +112 -0
  273. data/vendor/jsl-0.3.0/src/fdlibm/s_tanh.c +122 -0
  274. data/vendor/jsl-0.3.0/src/fdlibm/w_acos.c +78 -0
  275. data/vendor/jsl-0.3.0/src/fdlibm/w_acosh.c +78 -0
  276. data/vendor/jsl-0.3.0/src/fdlibm/w_asin.c +80 -0
  277. data/vendor/jsl-0.3.0/src/fdlibm/w_atan2.c +79 -0
  278. data/vendor/jsl-0.3.0/src/fdlibm/w_atanh.c +81 -0
  279. data/vendor/jsl-0.3.0/src/fdlibm/w_cosh.c +77 -0
  280. data/vendor/jsl-0.3.0/src/fdlibm/w_exp.c +88 -0
  281. data/vendor/jsl-0.3.0/src/fdlibm/w_fmod.c +78 -0
  282. data/vendor/jsl-0.3.0/src/fdlibm/w_gamma.c +85 -0
  283. data/vendor/jsl-0.3.0/src/fdlibm/w_gamma_r.c +81 -0
  284. data/vendor/jsl-0.3.0/src/fdlibm/w_hypot.c +78 -0
  285. data/vendor/jsl-0.3.0/src/fdlibm/w_j0.c +105 -0
  286. data/vendor/jsl-0.3.0/src/fdlibm/w_j1.c +106 -0
  287. data/vendor/jsl-0.3.0/src/fdlibm/w_jn.c +128 -0
  288. data/vendor/jsl-0.3.0/src/fdlibm/w_lgamma.c +85 -0
  289. data/vendor/jsl-0.3.0/src/fdlibm/w_lgamma_r.c +81 -0
  290. data/vendor/jsl-0.3.0/src/fdlibm/w_log.c +78 -0
  291. data/vendor/jsl-0.3.0/src/fdlibm/w_log10.c +81 -0
  292. data/vendor/jsl-0.3.0/src/fdlibm/w_pow.c +99 -0
  293. data/vendor/jsl-0.3.0/src/fdlibm/w_remainder.c +77 -0
  294. data/vendor/jsl-0.3.0/src/fdlibm/w_scalb.c +95 -0
  295. data/vendor/jsl-0.3.0/src/fdlibm/w_sinh.c +77 -0
  296. data/vendor/jsl-0.3.0/src/fdlibm/w_sqrt.c +77 -0
  297. data/vendor/jsl-0.3.0/src/js.c +2447 -0
  298. data/vendor/jsl-0.3.0/src/js.dsp +420 -0
  299. data/vendor/jsl-0.3.0/src/js.mak +4025 -0
  300. data/vendor/jsl-0.3.0/src/js.mdp +0 -0
  301. data/vendor/jsl-0.3.0/src/js.msg +291 -0
  302. data/vendor/jsl-0.3.0/src/js.pkg +2 -0
  303. data/vendor/jsl-0.3.0/src/js3240.rc +79 -0
  304. data/vendor/jsl-0.3.0/src/jsOS240.def +654 -0
  305. data/vendor/jsl-0.3.0/src/jsapi.c +4405 -0
  306. data/vendor/jsl-0.3.0/src/jsapi.h +1856 -0
  307. data/vendor/jsl-0.3.0/src/jsarena.c +567 -0
  308. data/vendor/jsl-0.3.0/src/jsarena.h +302 -0
  309. data/vendor/jsl-0.3.0/src/jsarray.c +1428 -0
  310. data/vendor/jsl-0.3.0/src/jsarray.h +77 -0
  311. data/vendor/jsl-0.3.0/src/jsatom.c +927 -0
  312. data/vendor/jsl-0.3.0/src/jsatom.h +426 -0
  313. data/vendor/jsl-0.3.0/src/jsbit.h +113 -0
  314. data/vendor/jsl-0.3.0/src/jsbool.c +220 -0
  315. data/vendor/jsl-0.3.0/src/jsbool.h +62 -0
  316. data/vendor/jsl-0.3.0/src/jsclist.h +139 -0
  317. data/vendor/jsl-0.3.0/src/jscntxt.c +1036 -0
  318. data/vendor/jsl-0.3.0/src/jscntxt.h +608 -0
  319. data/vendor/jsl-0.3.0/src/jscompat.h +57 -0
  320. data/vendor/jsl-0.3.0/src/jsconfig.h +489 -0
  321. data/vendor/jsl-0.3.0/src/jsconfig.mk +181 -0
  322. data/vendor/jsl-0.3.0/src/jscpucfg.c +377 -0
  323. data/vendor/jsl-0.3.0/src/jscpucfg.h +204 -0
  324. data/vendor/jsl-0.3.0/src/jsdate.c +2238 -0
  325. data/vendor/jsl-0.3.0/src/jsdate.h +118 -0
  326. data/vendor/jsl-0.3.0/src/jsdbgapi.c +1260 -0
  327. data/vendor/jsl-0.3.0/src/jsdbgapi.h +345 -0
  328. data/vendor/jsl-0.3.0/src/jsdhash.c +763 -0
  329. data/vendor/jsl-0.3.0/src/jsdhash.h +579 -0
  330. data/vendor/jsl-0.3.0/src/jsdtoa.c +3135 -0
  331. data/vendor/jsl-0.3.0/src/jsdtoa.h +130 -0
  332. data/vendor/jsl-0.3.0/src/jsemit.c +4851 -0
  333. data/vendor/jsl-0.3.0/src/jsemit.h +576 -0
  334. data/vendor/jsl-0.3.0/src/jsexn.c +1084 -0
  335. data/vendor/jsl-0.3.0/src/jsexn.h +102 -0
  336. data/vendor/jsl-0.3.0/src/jsfile.c +2610 -0
  337. data/vendor/jsl-0.3.0/src/jsfile.h +50 -0
  338. data/vendor/jsl-0.3.0/src/jsfile.msg +89 -0
  339. data/vendor/jsl-0.3.0/src/jsfun.c +2015 -0
  340. data/vendor/jsl-0.3.0/src/jsfun.h +158 -0
  341. data/vendor/jsl-0.3.0/src/jsgc.c +1441 -0
  342. data/vendor/jsl-0.3.0/src/jsgc.h +230 -0
  343. data/vendor/jsl-0.3.0/src/jshash.c +471 -0
  344. data/vendor/jsl-0.3.0/src/jshash.h +152 -0
  345. data/vendor/jsl-0.3.0/src/jsify.pl +485 -0
  346. data/vendor/jsl-0.3.0/src/jsinterp.c +4797 -0
  347. data/vendor/jsl-0.3.0/src/jsinterp.h +302 -0
  348. data/vendor/jsl-0.3.0/src/jsl-test.js +28 -0
  349. data/vendor/jsl-0.3.0/src/jsl.c +2371 -0
  350. data/vendor/jsl-0.3.0/src/jsl.conf +127 -0
  351. data/vendor/jsl-0.3.0/src/jsl.conf.old +124 -0
  352. data/vendor/jsl-0.3.0/src/jsl.dsp +242 -0
  353. data/vendor/jsl-0.3.0/src/jsl.dsw +59 -0
  354. data/vendor/jsl-0.3.0/src/jslibmath.h +290 -0
  355. data/vendor/jsl-0.3.0/src/jslock.c +1261 -0
  356. data/vendor/jsl-0.3.0/src/jslock.h +289 -0
  357. data/vendor/jsl-0.3.0/src/jslocko.asm +59 -0
  358. data/vendor/jsl-0.3.0/src/jslog2.c +83 -0
  359. data/vendor/jsl-0.3.0/src/jslong.c +281 -0
  360. data/vendor/jsl-0.3.0/src/jslong.h +437 -0
  361. data/vendor/jsl-0.3.0/src/jsmath.c +477 -0
  362. data/vendor/jsl-0.3.0/src/jsmath.h +55 -0
  363. data/vendor/jsl-0.3.0/src/jsnum.c +1148 -0
  364. data/vendor/jsl-0.3.0/src/jsnum.h +257 -0
  365. data/vendor/jsl-0.3.0/src/jsobj.c +4066 -0
  366. data/vendor/jsl-0.3.0/src/jsobj.h +475 -0
  367. data/vendor/jsl-0.3.0/src/jsopcode.c +2730 -0
  368. data/vendor/jsl-0.3.0/src/jsopcode.h +275 -0
  369. data/vendor/jsl-0.3.0/src/jsopcode.tbl +344 -0
  370. data/vendor/jsl-0.3.0/src/jsosdep.h +127 -0
  371. data/vendor/jsl-0.3.0/src/jsotypes.h +211 -0
  372. data/vendor/jsl-0.3.0/src/jsparse.c +4438 -0
  373. data/vendor/jsl-0.3.0/src/jsparse.h +345 -0
  374. data/vendor/jsl-0.3.0/src/jsprf.c +1212 -0
  375. data/vendor/jsl-0.3.0/src/jsprf.h +148 -0
  376. data/vendor/jsl-0.3.0/src/jsprvtd.h +174 -0
  377. data/vendor/jsl-0.3.0/src/jspubtd.h +586 -0
  378. data/vendor/jsl-0.3.0/src/jsregexp.c +3831 -0
  379. data/vendor/jsl-0.3.0/src/jsregexp.h +180 -0
  380. data/vendor/jsl-0.3.0/src/jsscan.c +1814 -0
  381. data/vendor/jsl-0.3.0/src/jsscan.h +267 -0
  382. data/vendor/jsl-0.3.0/src/jsscope.c +1639 -0
  383. data/vendor/jsl-0.3.0/src/jsscope.h +389 -0
  384. data/vendor/jsl-0.3.0/src/jsscript.c +1284 -0
  385. data/vendor/jsl-0.3.0/src/jsscript.h +179 -0
  386. data/vendor/jsl-0.3.0/src/jsshell.msg +50 -0
  387. data/vendor/jsl-0.3.0/src/jsstddef.h +83 -0
  388. data/vendor/jsl-0.3.0/src/jsstr.c +4502 -0
  389. data/vendor/jsl-0.3.0/src/jsstr.h +448 -0
  390. data/vendor/jsl-0.3.0/src/jstypes.h +391 -0
  391. data/vendor/jsl-0.3.0/src/jsutil.c +157 -0
  392. data/vendor/jsl-0.3.0/src/jsutil.h +75 -0
  393. data/vendor/jsl-0.3.0/src/jsxdrapi.c +686 -0
  394. data/vendor/jsl-0.3.0/src/jsxdrapi.h +193 -0
  395. data/vendor/jsl-0.3.0/src/liveconnect/LiveConnect.dsp +157 -0
  396. data/vendor/jsl-0.3.0/src/liveconnect/LiveConnectShell.dsp +120 -0
  397. data/vendor/jsl-0.3.0/src/liveconnect/LiveConnectShell.dsw +44 -0
  398. data/vendor/jsl-0.3.0/src/liveconnect/Makefile.in +106 -0
  399. data/vendor/jsl-0.3.0/src/liveconnect/Makefile.ref +169 -0
  400. data/vendor/jsl-0.3.0/src/liveconnect/README.html +719 -0
  401. data/vendor/jsl-0.3.0/src/liveconnect/_jni/netscape_javascript_JSException.h +14 -0
  402. data/vendor/jsl-0.3.0/src/liveconnect/_jni/netscape_javascript_JSObject.h +155 -0
  403. data/vendor/jsl-0.3.0/src/liveconnect/classes/Makefile.in +89 -0
  404. data/vendor/jsl-0.3.0/src/liveconnect/classes/Makefile.ref +57 -0
  405. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/Makefile.ref +47 -0
  406. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSException.java +140 -0
  407. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSObject.java +183 -0
  408. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSProxy.java +58 -0
  409. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSRunnable.java +70 -0
  410. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSUtil.java +59 -0
  411. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/Makefile.ref +53 -0
  412. data/vendor/jsl-0.3.0/src/liveconnect/config/AIX4.1.mk +45 -0
  413. data/vendor/jsl-0.3.0/src/liveconnect/config/AIX4.2.mk +45 -0
  414. data/vendor/jsl-0.3.0/src/liveconnect/config/AIX4.3.mk +50 -0
  415. data/vendor/jsl-0.3.0/src/liveconnect/config/HP-UXB.10.10.mk +43 -0
  416. data/vendor/jsl-0.3.0/src/liveconnect/config/HP-UXB.10.20.mk +43 -0
  417. data/vendor/jsl-0.3.0/src/liveconnect/config/HP-UXB.11.00.mk +43 -0
  418. data/vendor/jsl-0.3.0/src/liveconnect/config/IRIX6.2.mk +43 -0
  419. data/vendor/jsl-0.3.0/src/liveconnect/config/IRIX6.3.mk +43 -0
  420. data/vendor/jsl-0.3.0/src/liveconnect/config/IRIX6.5.mk +43 -0
  421. data/vendor/jsl-0.3.0/src/liveconnect/config/Linux_All.mk +73 -0
  422. data/vendor/jsl-0.3.0/src/liveconnect/config/OSF1V4.0.mk +65 -0
  423. data/vendor/jsl-0.3.0/src/liveconnect/config/OSF1V5.0.mk +62 -0
  424. data/vendor/jsl-0.3.0/src/liveconnect/config/SunOS5.5.1.mk +55 -0
  425. data/vendor/jsl-0.3.0/src/liveconnect/config/SunOS5.6.mk +39 -0
  426. data/vendor/jsl-0.3.0/src/liveconnect/config/SunOS5.7.mk +39 -0
  427. data/vendor/jsl-0.3.0/src/liveconnect/config/SunOS5.8.mk +39 -0
  428. data/vendor/jsl-0.3.0/src/liveconnect/config/WINNT4.0.mk +53 -0
  429. data/vendor/jsl-0.3.0/src/liveconnect/jsj.c +884 -0
  430. data/vendor/jsl-0.3.0/src/liveconnect/jsj.msg +98 -0
  431. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JSObject.c +1379 -0
  432. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaArray.c +481 -0
  433. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaClass.c +749 -0
  434. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaMember.c +186 -0
  435. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaObject.c +1099 -0
  436. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaPackage.c +548 -0
  437. data/vendor/jsl-0.3.0/src/liveconnect/jsj_array.c +207 -0
  438. data/vendor/jsl-0.3.0/src/liveconnect/jsj_class.c +765 -0
  439. data/vendor/jsl-0.3.0/src/liveconnect/jsj_convert.c +954 -0
  440. data/vendor/jsl-0.3.0/src/liveconnect/jsj_field.c +421 -0
  441. data/vendor/jsl-0.3.0/src/liveconnect/jsj_hash.c +504 -0
  442. data/vendor/jsl-0.3.0/src/liveconnect/jsj_hash.h +161 -0
  443. data/vendor/jsl-0.3.0/src/liveconnect/jsj_method.c +1823 -0
  444. data/vendor/jsl-0.3.0/src/liveconnect/jsj_nodl.c +1 -0
  445. data/vendor/jsl-0.3.0/src/liveconnect/jsj_private.h +689 -0
  446. data/vendor/jsl-0.3.0/src/liveconnect/jsj_simpleapi.c +219 -0
  447. data/vendor/jsl-0.3.0/src/liveconnect/jsj_utils.c +513 -0
  448. data/vendor/jsl-0.3.0/src/liveconnect/jsjava.h +313 -0
  449. data/vendor/jsl-0.3.0/src/liveconnect/liveconnect.pkg +3 -0
  450. data/vendor/jsl-0.3.0/src/liveconnect/netscape_javascript_JSObject.h +155 -0
  451. data/vendor/jsl-0.3.0/src/liveconnect/nsCLiveconnect.cpp +785 -0
  452. data/vendor/jsl-0.3.0/src/liveconnect/nsCLiveconnect.h +197 -0
  453. data/vendor/jsl-0.3.0/src/liveconnect/nsCLiveconnectFactory.cpp +163 -0
  454. data/vendor/jsl-0.3.0/src/liveconnect/nsCLiveconnectFactory.h +76 -0
  455. data/vendor/jsl-0.3.0/src/liveconnect/nsILiveconnect.h +195 -0
  456. data/vendor/jsl-0.3.0/src/liveconnect/nsISecureLiveconnect.h +84 -0
  457. data/vendor/jsl-0.3.0/src/liveconnect/nsISecurityContext.h +135 -0
  458. data/vendor/jsl-0.3.0/src/liveconnect/win32.order +6 -0
  459. data/vendor/jsl-0.3.0/src/lock_SunOS.s +114 -0
  460. data/vendor/jsl-0.3.0/src/perfect.js +39 -0
  461. data/vendor/jsl-0.3.0/src/perlconnect/JS.def +6 -0
  462. data/vendor/jsl-0.3.0/src/perlconnect/JS.dsp +107 -0
  463. data/vendor/jsl-0.3.0/src/perlconnect/JS.pm +318 -0
  464. data/vendor/jsl-0.3.0/src/perlconnect/JS.xs +1050 -0
  465. data/vendor/jsl-0.3.0/src/perlconnect/Makefile.PL +67 -0
  466. data/vendor/jsl-0.3.0/src/perlconnect/Makefile.ref +152 -0
  467. data/vendor/jsl-0.3.0/src/perlconnect/PerlConnect.dsp +103 -0
  468. data/vendor/jsl-0.3.0/src/perlconnect/PerlConnect.dsw +59 -0
  469. data/vendor/jsl-0.3.0/src/perlconnect/PerlConnect.pm +126 -0
  470. data/vendor/jsl-0.3.0/src/perlconnect/PerlConnectShell.dsp +89 -0
  471. data/vendor/jsl-0.3.0/src/perlconnect/README.html +345 -0
  472. data/vendor/jsl-0.3.0/src/perlconnect/bg.jpg +0 -0
  473. data/vendor/jsl-0.3.0/src/perlconnect/jsperl.c +1100 -0
  474. data/vendor/jsl-0.3.0/src/perlconnect/jsperl.h +52 -0
  475. data/vendor/jsl-0.3.0/src/perlconnect/jsperlbuild.pl +81 -0
  476. data/vendor/jsl-0.3.0/src/perlconnect/jsperlpvt.h +57 -0
  477. data/vendor/jsl-0.3.0/src/perlconnect/test.js +73 -0
  478. data/vendor/jsl-0.3.0/src/perlconnect/test.pl +244 -0
  479. data/vendor/jsl-0.3.0/src/perlconnect/typemap +121 -0
  480. data/vendor/jsl-0.3.0/src/plify_jsdhash.sed +31 -0
  481. data/vendor/jsl-0.3.0/src/prmjtime.c +646 -0
  482. data/vendor/jsl-0.3.0/src/prmjtime.h +95 -0
  483. data/vendor/jsl-0.3.0/src/resource.h +15 -0
  484. data/vendor/jsl-0.3.0/src/rules.mk +193 -0
  485. data/vendor/jsl-0.3.0/src/win32.order +391 -0
  486. data/vendor/jsl-0.3.0/tests/conf/always_use_option_explicit.js +4 -0
  487. data/vendor/jsl-0.3.0/tests/conf/define.js +8 -0
  488. data/vendor/jsl-0.3.0/tests/conf/jscript_function_extensions-1.js +7 -0
  489. data/vendor/jsl-0.3.0/tests/conf/jscript_function_extensions-2.js +8 -0
  490. data/vendor/jsl-0.3.0/tests/conf/jscript_function_extensions-3.js +27 -0
  491. data/vendor/jsl-0.3.0/tests/conf/jscript_function_extensions-4.js +4 -0
  492. data/vendor/jsl-0.3.0/tests/conf/lambda_assign_requires_semicolon.js +24 -0
  493. data/vendor/jsl-0.3.0/tests/conf/legacy_control_comments.js +8 -0
  494. data/vendor/jsl-0.3.0/tests/control_comments/control_comments.js +33 -0
  495. data/vendor/jsl-0.3.0/tests/control_comments/declare.js +26 -0
  496. data/vendor/jsl-0.3.0/tests/control_comments/import-overflow.js +9 -0
  497. data/vendor/jsl-0.3.0/tests/control_comments/import.js +5 -0
  498. data/vendor/jsl-0.3.0/tests/control_comments/import2.js +2 -0
  499. data/vendor/jsl-0.3.0/tests/control_comments/invalid_fallthru.js +13 -0
  500. data/vendor/jsl-0.3.0/tests/control_comments/option_explicit-with.js +12 -0
  501. data/vendor/jsl-0.3.0/tests/control_comments/option_explicit.js +64 -0
  502. data/vendor/jsl-0.3.0/tests/errors/unterminated_comment.js +8 -0
  503. data/vendor/jsl-0.3.0/tests/html/script_tag_in_js_literal.html +14 -0
  504. data/vendor/jsl-0.3.0/tests/run_tests.pl +71 -0
  505. data/vendor/jsl-0.3.0/tests/warnings/ambiguous_else_stmt.js +21 -0
  506. data/vendor/jsl-0.3.0/tests/warnings/ambiguous_nested_stmt.js +66 -0
  507. data/vendor/jsl-0.3.0/tests/warnings/ambiguous_newline.js +261 -0
  508. data/vendor/jsl-0.3.0/tests/warnings/anon_no_return_value.js +26 -0
  509. data/vendor/jsl-0.3.0/tests/warnings/assign_to_function_call.js +16 -0
  510. data/vendor/jsl-0.3.0/tests/warnings/block_without_braces.js +13 -0
  511. data/vendor/jsl-0.3.0/tests/warnings/comma_separated_stmts.js +17 -0
  512. data/vendor/jsl-0.3.0/tests/warnings/comparison_type_conv.js +44 -0
  513. data/vendor/jsl-0.3.0/tests/warnings/default_not_at_end.js +15 -0
  514. data/vendor/jsl-0.3.0/tests/warnings/dup_option_explicit.js +5 -0
  515. data/vendor/jsl-0.3.0/tests/warnings/duplicate_case_in_switch.js +62 -0
  516. data/vendor/jsl-0.3.0/tests/warnings/duplicate_formal.js +5 -0
  517. data/vendor/jsl-0.3.0/tests/warnings/empty_statement.js +29 -0
  518. data/vendor/jsl-0.3.0/tests/warnings/equal_as_assign.js +7 -0
  519. data/vendor/jsl-0.3.0/tests/warnings/inc_dec_within_stmt-ignore.js +21 -0
  520. data/vendor/jsl-0.3.0/tests/warnings/inc_dec_within_stmt.js +63 -0
  521. data/vendor/jsl-0.3.0/tests/warnings/jsl_cc_not_understood.js +5 -0
  522. data/vendor/jsl-0.3.0/tests/warnings/leading_decimal_point.js +7 -0
  523. data/vendor/jsl-0.3.0/tests/warnings/legacy_cc_not_understood.js +9 -0
  524. data/vendor/jsl-0.3.0/tests/warnings/meaningless_block.js +12 -0
  525. data/vendor/jsl-0.3.0/tests/warnings/misplaced_regex.js +20 -0
  526. data/vendor/jsl-0.3.0/tests/warnings/missing_break.js +87 -0
  527. data/vendor/jsl-0.3.0/tests/warnings/missing_break_for_last_case.js +19 -0
  528. data/vendor/jsl-0.3.0/tests/warnings/missing_default_case.js +51 -0
  529. data/vendor/jsl-0.3.0/tests/warnings/missing_option_explicit.js +5 -0
  530. data/vendor/jsl-0.3.0/tests/warnings/missing_semicolon.js +19 -0
  531. data/vendor/jsl-0.3.0/tests/warnings/multiple_plus_minus.js +10 -0
  532. data/vendor/jsl-0.3.0/tests/warnings/nested_comment.js +6 -0
  533. data/vendor/jsl-0.3.0/tests/warnings/no_return_value.js +25 -0
  534. data/vendor/jsl-0.3.0/tests/warnings/octal_number.js +5 -0
  535. data/vendor/jsl-0.3.0/tests/warnings/parseint_missing_radix.js +15 -0
  536. data/vendor/jsl-0.3.0/tests/warnings/partial_option_explicit.js +5 -0
  537. data/vendor/jsl-0.3.0/tests/warnings/redeclared_var.js +10 -0
  538. data/vendor/jsl-0.3.0/tests/warnings/spidermonkey/bad_backref.js +5 -0
  539. data/vendor/jsl-0.3.0/tests/warnings/spidermonkey/deprecated_usage.js +11 -0
  540. data/vendor/jsl-0.3.0/tests/warnings/spidermonkey/invalid_backref.js +5 -0
  541. data/vendor/jsl-0.3.0/tests/warnings/spidermonkey/trailing_comma.js +5 -0
  542. data/vendor/jsl-0.3.0/tests/warnings/trailing_comma_in_array.js +8 -0
  543. data/vendor/jsl-0.3.0/tests/warnings/trailing_decimal_point.js +7 -0
  544. data/vendor/jsl-0.3.0/tests/warnings/unreachable_code.js +29 -0
  545. data/vendor/jsl-0.3.0/tests/warnings/use_of_label.js +19 -0
  546. data/vendor/jsl-0.3.0/tests/warnings/useless_assign.js +20 -0
  547. data/vendor/jsl-0.3.0/tests/warnings/useless_comparison.js +55 -0
  548. data/vendor/jsl-0.3.0/tests/warnings/useless_void.js +6 -0
  549. data/vendor/jsl-0.3.0/tests/warnings/var_hides_arg.js +4 -0
  550. data/vendor/jsl-0.3.0/tests/warnings/with_statement.js +7 -0
  551. data/vendor/yuicompressor-2.4.2.jar +0 -0
  552. metadata +605 -0
@@ -0,0 +1,884 @@
1
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ *
3
+ * ***** BEGIN LICENSE BLOCK *****
4
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
+ *
6
+ * The contents of this file are subject to the Mozilla Public License Version
7
+ * 1.1 (the "License"); you may not use this file except in compliance with
8
+ * the License. You may obtain a copy of the License at
9
+ * http://www.mozilla.org/MPL/
10
+ *
11
+ * Software distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
+ * for the specific language governing rights and limitations under the
14
+ * License.
15
+ *
16
+ * The Original Code is Mozilla Communicator client code, released
17
+ * March 31, 1998.
18
+ *
19
+ * The Initial Developer of the Original Code is
20
+ * Netscape Communications Corporation.
21
+ * Portions created by the Initial Developer are Copyright (C) 1998
22
+ * the Initial Developer. All Rights Reserved.
23
+ *
24
+ * Contributor(s):
25
+ *
26
+ * Alternatively, the contents of this file may be used under the terms of
27
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
28
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29
+ * in which case the provisions of the GPL or the LGPL are applicable instead
30
+ * of those above. If you wish to allow use of your version of this file only
31
+ * under the terms of either the GPL or the LGPL, and not to allow others to
32
+ * use your version of this file under the terms of the MPL, indicate your
33
+ * decision by deleting the provisions above and replace them with the notice
34
+ * and other provisions required by the GPL or the LGPL. If you do not delete
35
+ * the provisions above, a recipient may use your version of this file under
36
+ * the terms of any one of the MPL, the GPL or the LGPL.
37
+ *
38
+ * ***** END LICENSE BLOCK ***** */
39
+
40
+ /*
41
+ * This file is part of the Java-vendor-neutral implementation of LiveConnect
42
+ *
43
+ * It contains the top-level initialization code and the implementation of the
44
+ * public API.
45
+ *
46
+ */
47
+
48
+ #include <stdlib.h>
49
+ #include <string.h>
50
+
51
+ #include "jsj_private.h" /* LiveConnect internals */
52
+ #include "jsjava.h" /* LiveConnect external API */
53
+
54
+ #ifdef JSJ_THREADSAFE
55
+ # include "prmon.h"
56
+ #endif
57
+
58
+ JSBool jsj_JSIsCallingApplet = JS_FALSE;
59
+
60
+ /*
61
+ * At certain times during initialization, there may be no JavaScript context
62
+ * available to direct error reports to, in which case the error messages
63
+ * are sent to this function. The caller is responsible for free'ing
64
+ * the js_error_msg argument.
65
+ */
66
+ static void
67
+ report_java_initialization_error(JNIEnv *jEnv, const char *js_error_msg)
68
+ {
69
+ const char *error_msg, *java_error_msg;
70
+
71
+ java_error_msg = NULL;
72
+
73
+ if (jEnv) {
74
+ java_error_msg = jsj_GetJavaErrorMessage(jEnv);
75
+ (*jEnv)->ExceptionClear(jEnv);
76
+ }
77
+
78
+ if (java_error_msg) {
79
+ error_msg = JS_smprintf("initialization error: %s (%s)\n",
80
+ js_error_msg, java_error_msg);
81
+ free((void*)java_error_msg);
82
+ } else {
83
+ error_msg = JS_smprintf("initialization error: %s\n",
84
+ js_error_msg);
85
+ }
86
+
87
+ jsj_LogError(error_msg);
88
+ free((void*)error_msg);
89
+ }
90
+
91
+ /*
92
+ * Opaque JVM handles to Java classes and methods required for Java reflection.
93
+ * These are computed and cached during initialization.
94
+ */
95
+
96
+ jclass jlObject; /* java.lang.Object */
97
+ jclass jlrMethod; /* java.lang.reflect.Method */
98
+ jclass jlrField; /* java.lang.reflect.Field */
99
+ jclass jlrArray; /* java.lang.reflect.Array */
100
+ jclass jlVoid; /* java.lang.Void */
101
+ jclass jlrConstructor; /* java.lang.reflect.Constructor */
102
+ jclass jlThrowable; /* java.lang.Throwable */
103
+ jclass jlSystem; /* java.lang.System */
104
+ jclass jlClass; /* java.lang.Class */
105
+ jclass jlBoolean; /* java.lang.Boolean */
106
+ jclass jlDouble; /* java.lang.Double */
107
+ jclass jlString; /* java.lang.String */
108
+ jclass jaApplet; /* java.applet.Applet */
109
+ jclass njJSObject; /* netscape.javascript.JSObject */
110
+ jclass njJSException; /* netscape.javascript.JSException */
111
+ jclass njJSUtil; /* netscape.javascript.JSUtil */
112
+
113
+ jmethodID jlClass_getMethods; /* java.lang.Class.getMethods() */
114
+ jmethodID jlClass_getConstructors; /* java.lang.Class.getConstructors() */
115
+ jmethodID jlClass_getFields; /* java.lang.Class.getFields() */
116
+ jmethodID jlClass_getName; /* java.lang.Class.getName() */
117
+ jmethodID jlClass_getComponentType; /* java.lang.Class.getComponentType() */
118
+ jmethodID jlClass_getModifiers; /* java.lang.Class.getModifiers() */
119
+ jmethodID jlClass_isArray; /* java.lang.Class.isArray() */
120
+
121
+ jmethodID jlrMethod_getName; /* java.lang.reflect.Method.getName() */
122
+ jmethodID jlrMethod_getParameterTypes; /* java.lang.reflect.Method.getParameterTypes() */
123
+ jmethodID jlrMethod_getReturnType; /* java.lang.reflect.Method.getReturnType() */
124
+ jmethodID jlrMethod_getModifiers; /* java.lang.reflect.Method.getModifiers() */
125
+
126
+ jmethodID jlrConstructor_getParameterTypes; /* java.lang.reflect.Constructor.getParameterTypes() */
127
+ jmethodID jlrConstructor_getModifiers; /* java.lang.reflect.Constructor.getModifiers() */
128
+
129
+ jmethodID jlrField_getName; /* java.lang.reflect.Field.getName() */
130
+ jmethodID jlrField_getType; /* java.lang.reflect.Field.getType() */
131
+ jmethodID jlrField_getModifiers; /* java.lang.reflect.Field.getModifiers() */
132
+
133
+ jmethodID jlrArray_newInstance; /* java.lang.reflect.Array.newInstance() */
134
+
135
+ jmethodID jlBoolean_Boolean; /* java.lang.Boolean constructor */
136
+ jmethodID jlBoolean_booleanValue; /* java.lang.Boolean.booleanValue() */
137
+ jmethodID jlDouble_Double; /* java.lang.Double constructor */
138
+ jmethodID jlDouble_doubleValue; /* java.lang.Double.doubleValue() */
139
+
140
+ jmethodID jlThrowable_toString; /* java.lang.Throwable.toString() */
141
+ jmethodID jlThrowable_getMessage; /* java.lang.Throwable.getMessage() */
142
+
143
+ jmethodID jlSystem_identityHashCode; /* java.lang.System.identityHashCode() */
144
+
145
+ jobject jlVoid_TYPE; /* java.lang.Void.TYPE value */
146
+
147
+ jmethodID njJSException_JSException; /* netscape.javascript.JSException constructor */
148
+ jmethodID njJSException_JSException_wrap;/*netscape.javascript.JSException alternate constructor */
149
+ jmethodID njJSObject_JSObject; /* netscape.javascript.JSObject constructor */
150
+ jmethodID njJSUtil_getStackTrace; /* netscape.javascript.JSUtil.getStackTrace() */
151
+ jfieldID njJSObject_internal; /* netscape.javascript.JSObject.internal */
152
+ jfieldID njJSObject_long_internal; /* netscape.javascript.JSObject.long_internal */
153
+ jfieldID njJSException_lineno; /* netscape.javascript.JSException.lineno */
154
+ jfieldID njJSException_tokenIndex; /* netscape.javascript.JSException.tokenIndex */
155
+ jfieldID njJSException_source; /* netscape.javascript.JSException.source */
156
+ jfieldID njJSException_filename; /* netscape.javascript.JSException.filename */
157
+ jfieldID njJSException_wrappedExceptionType; /* netscape.javascript.JSException.wrappedExceptionType */
158
+ jfieldID njJSException_wrappedException; /* netscape.javascript.JSException.wrappedException */
159
+
160
+ /* Obtain a reference to a Java class */
161
+ #define LOAD_CLASS(qualified_name, class) \
162
+ { \
163
+ jclass _##class = (*jEnv)->FindClass(jEnv, #qualified_name); \
164
+ if (_##class == 0) { \
165
+ (*jEnv)->ExceptionClear(jEnv); \
166
+ report_java_initialization_error(jEnv, \
167
+ "Can't load class " #qualified_name); \
168
+ return JS_FALSE; \
169
+ } \
170
+ class = (*jEnv)->NewGlobalRef(jEnv, _##class); \
171
+ (*jEnv)->DeleteLocalRef(jEnv, _##class); \
172
+ }
173
+
174
+ /* Obtain a methodID reference to a Java method or constructor */
175
+ #define _LOAD_METHOD(qualified_class, method, mvar, signature, class, is_static)\
176
+ if (is_static) { \
177
+ class##_##mvar = \
178
+ (*jEnv)->GetStaticMethodID(jEnv, class, #method, signature); \
179
+ } else { \
180
+ class##_##mvar = \
181
+ (*jEnv)->GetMethodID(jEnv, class, #method, signature); \
182
+ } \
183
+ if (class##_##mvar == 0) { \
184
+ (*jEnv)->ExceptionClear(jEnv); \
185
+ report_java_initialization_error(jEnv, \
186
+ "Can't get mid for " #qualified_class "." #method "()"); \
187
+ return JS_FALSE; \
188
+ }
189
+
190
+ /* Obtain a methodID reference to a Java instance method */
191
+ #define LOAD_METHOD(qualified_class, method, signature, class) \
192
+ _LOAD_METHOD(qualified_class, method, method, signature, class, JS_FALSE)
193
+
194
+ /* Obtain a methodID reference to a Java static method */
195
+ #define LOAD_STATIC_METHOD(qualified_class, method, signature, class) \
196
+ _LOAD_METHOD(qualified_class, method, method, signature, class, JS_TRUE)
197
+
198
+ /* Obtain a methodID reference to a Java constructor */
199
+ #define LOAD_CONSTRUCTOR(qualified_class, method, signature, class) \
200
+ _LOAD_METHOD(qualified_class,<init>, method, signature, class, JS_FALSE)
201
+
202
+ /* Obtain a fieldID reference to a Java instance or static field */
203
+ #define _LOAD_FIELDID(qualified_class, field, signature, class, is_static) \
204
+ if (is_static) { \
205
+ class##_##field = (*jEnv)->GetStaticFieldID(jEnv, class, #field, signature);\
206
+ } else { \
207
+ class##_##field = (*jEnv)->GetFieldID(jEnv, class, #field, signature);\
208
+ } \
209
+ if (class##_##field == 0) { \
210
+ (*jEnv)->ExceptionClear(jEnv); \
211
+ report_java_initialization_error(jEnv, \
212
+ "Can't get fid for " #qualified_class "." #field); \
213
+ return JS_FALSE; \
214
+ }
215
+
216
+ /* Obtain a fieldID reference to a Java instance field */
217
+ #define LOAD_FIELDID(qualified_class, field, signature, class) \
218
+ _LOAD_FIELDID(qualified_class, field, signature, class, JS_FALSE)
219
+
220
+ /* Obtain the value of a static field in a Java class */
221
+ #define LOAD_FIELD_VAL(qualified_class, field, signature, class, type) \
222
+ { \
223
+ jfieldID field_id; \
224
+ field_id = (*jEnv)->GetStaticFieldID(jEnv, class, #field, signature);\
225
+ if (field_id == 0) { \
226
+ report_java_initialization_error(jEnv, \
227
+ "Can't get fid for " #qualified_class "." #field); \
228
+ return JS_FALSE; \
229
+ } \
230
+ class##_##field = \
231
+ (*jEnv)->GetStatic##type##Field(jEnv, class, field_id); \
232
+ if (class##_##field == 0) { \
233
+ (*jEnv)->ExceptionClear(jEnv); \
234
+ report_java_initialization_error(jEnv, \
235
+ "Can't read static field " #qualified_class "." #field); \
236
+ return JS_FALSE; \
237
+ } \
238
+ }
239
+
240
+ /* Obtain the value of a static field in a Java class, which is known to
241
+ contain an object value. */
242
+ #define LOAD_FIELD_OBJ(qualified_class, field, signature, class) \
243
+ LOAD_FIELD_VAL(qualified_class, field, signature, class, Object); \
244
+ class##_##field = (*jEnv)->NewGlobalRef(jEnv, class##_##field);
245
+
246
+ /*
247
+ * Load the Java classes, and the method and field descriptors required for Java reflection.
248
+ * Returns JS_TRUE on success, JS_FALSE on failure.
249
+ */
250
+ static JSBool
251
+ init_java_VM_reflection(JSJavaVM *jsjava_vm, JNIEnv *jEnv)
252
+ {
253
+ /* Load Java system classes and method, including java.lang.reflect classes */
254
+ LOAD_CLASS(java/lang/Object, jlObject);
255
+ LOAD_CLASS(java/lang/Class, jlClass);
256
+ LOAD_CLASS(java/lang/reflect/Method, jlrMethod);
257
+ LOAD_CLASS(java/lang/reflect/Constructor, jlrConstructor);
258
+ LOAD_CLASS(java/lang/reflect/Field, jlrField);
259
+ LOAD_CLASS(java/lang/reflect/Array, jlrArray);
260
+ LOAD_CLASS(java/lang/Throwable, jlThrowable);
261
+ LOAD_CLASS(java/lang/System, jlSystem);
262
+ LOAD_CLASS(java/lang/Boolean, jlBoolean);
263
+ LOAD_CLASS(java/lang/Double, jlDouble);
264
+ LOAD_CLASS(java/lang/String, jlString);
265
+ LOAD_CLASS(java/lang/Void, jlVoid);
266
+
267
+ LOAD_CLASS(java/applet/Applet, jaApplet);
268
+
269
+ LOAD_METHOD(java.lang.Class, getMethods, "()[Ljava/lang/reflect/Method;",jlClass);
270
+ LOAD_METHOD(java.lang.Class, getConstructors, "()[Ljava/lang/reflect/Constructor;",jlClass);
271
+ LOAD_METHOD(java.lang.Class, getFields, "()[Ljava/lang/reflect/Field;", jlClass);
272
+ LOAD_METHOD(java.lang.Class, getName, "()Ljava/lang/String;", jlClass);
273
+ LOAD_METHOD(java.lang.Class, isArray, "()Z", jlClass);
274
+ LOAD_METHOD(java.lang.Class, getComponentType, "()Ljava/lang/Class;", jlClass);
275
+ LOAD_METHOD(java.lang.Class, getModifiers, "()I", jlClass);
276
+
277
+ LOAD_METHOD(java.lang.reflect.Method, getName, "()Ljava/lang/String;", jlrMethod);
278
+ LOAD_METHOD(java.lang.reflect.Method, getParameterTypes, "()[Ljava/lang/Class;", jlrMethod);
279
+ LOAD_METHOD(java.lang.reflect.Method, getReturnType, "()Ljava/lang/Class;", jlrMethod);
280
+ LOAD_METHOD(java.lang.reflect.Method, getModifiers, "()I", jlrMethod);
281
+
282
+ LOAD_METHOD(java.lang.reflect.Constructor, getParameterTypes, "()[Ljava/lang/Class;", jlrConstructor);
283
+ LOAD_METHOD(java.lang.reflect.Constructor, getModifiers, "()I", jlrConstructor);
284
+
285
+ LOAD_METHOD(java.lang.reflect.Field, getName, "()Ljava/lang/String;", jlrField);
286
+ LOAD_METHOD(java.lang.reflect.Field, getType, "()Ljava/lang/Class;", jlrField);
287
+ LOAD_METHOD(java.lang.reflect.Field, getModifiers, "()I", jlrField);
288
+
289
+ LOAD_STATIC_METHOD(java.lang.reflect.Array,
290
+ newInstance, "(Ljava/lang/Class;I)Ljava/lang/Object;",jlrArray);
291
+
292
+ LOAD_METHOD(java.lang.Throwable, toString, "()Ljava/lang/String;", jlThrowable);
293
+ LOAD_METHOD(java.lang.Throwable, getMessage, "()Ljava/lang/String;", jlThrowable);
294
+
295
+ LOAD_METHOD(java.lang.Double, doubleValue, "()D", jlDouble);
296
+
297
+ LOAD_METHOD(java.lang.Boolean, booleanValue, "()Z", jlBoolean);
298
+
299
+ LOAD_STATIC_METHOD(java.lang.System, identityHashCode, "(Ljava/lang/Object;)I", jlSystem);
300
+
301
+ LOAD_CONSTRUCTOR(java.lang.Boolean, Boolean, "(Z)V", jlBoolean);
302
+ LOAD_CONSTRUCTOR(java.lang.Double, Double, "(D)V", jlDouble);
303
+
304
+ LOAD_FIELD_OBJ(java.lang.Void, TYPE, "Ljava/lang/Class;", jlVoid);
305
+
306
+ return JS_TRUE;
307
+ }
308
+
309
+ #if defined(XP_MAC) || !defined(OJI)
310
+
311
+ /**
312
+ * Workaround for the fact that MRJ loads a different instance of the shared library.
313
+ */
314
+
315
+ #include "netscape_javascript_JSObject.h"
316
+
317
+ /* Manually load the required native methods. */
318
+ static JSBool
319
+ JSObject_RegisterNativeMethods(JNIEnv* jEnv)
320
+ {
321
+
322
+ static JNINativeMethod nativeMethods[] = {
323
+ {"initClass", "()V", (void*)&Java_netscape_javascript_JSObject_initClass},
324
+
325
+ #ifndef OJI
326
+ {"getMember", "(Ljava/lang/String;)Ljava/lang/Object;", (void*)&Java_netscape_javascript_JSObject_getMember},
327
+ {"getSlot", "(I)Ljava/lang/Object;", (void*)&Java_netscape_javascript_JSObject_getSlot},
328
+ {"setMember", "(Ljava/lang/String;Ljava/lang/Object;)V", (void*)&Java_netscape_javascript_JSObject_setMember},
329
+ {"setSlot", "(ILjava/lang/Object;)V", (void*)&Java_netscape_javascript_JSObject_setSlot},
330
+ {"removeMember", "(Ljava/lang/String;)V", (void*)&Java_netscape_javascript_JSObject_removeMember},
331
+ {"call", "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;", (void*)&Java_netscape_javascript_JSObject_call},
332
+ {"eval", "(Ljava/lang/String;)Ljava/lang/Object;", (void*)&Java_netscape_javascript_JSObject_eval},
333
+
334
+ {"toString", "()Ljava/lang/String;", (void*)&Java_netscape_javascript_JSObject_toString},
335
+ {"getWindow", "(Ljava/applet/Applet;)Lnetscape/javascript/JSObject;", (void*)&Java_netscape_javascript_JSObject_getWindow},
336
+ {"finalize", "()V", (void*)&Java_netscape_javascript_JSObject_finalize},
337
+ {"equals", "(Ljava/lang/Object;)Z", (void*)&Java_netscape_javascript_JSObject_equals}
338
+ #endif /* !OJI */
339
+
340
+ };
341
+ (*jEnv)->RegisterNatives(jEnv, njJSObject, nativeMethods, sizeof(nativeMethods) / sizeof(JNINativeMethod));
342
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
343
+ report_java_initialization_error(jEnv, "Couldn't initialize JSObject native methods.");
344
+ (*jEnv)->ExceptionClear(jEnv);
345
+ return JS_FALSE;
346
+ }
347
+ /* Call the initClass method */
348
+ Java_netscape_javascript_JSObject_initClass(jEnv, njJSObject);
349
+ return JS_TRUE;
350
+ }
351
+
352
+ #endif
353
+
354
+ /* Load Netscape-specific Java extension classes, methods, and fields */
355
+ static JSBool
356
+ init_netscape_java_classes(JSJavaVM *jsjava_vm, JNIEnv *jEnv)
357
+ {
358
+ LOAD_CLASS(netscape/javascript/JSObject, njJSObject);
359
+ LOAD_CLASS(netscape/javascript/JSException, njJSException);
360
+ LOAD_CLASS(netscape/javascript/JSUtil, njJSUtil);
361
+
362
+ #if defined(XP_MAC) || !defined(OJI)
363
+ JSObject_RegisterNativeMethods(jEnv);
364
+ #endif
365
+
366
+ #ifndef OJI
367
+ LOAD_CONSTRUCTOR(netscape.javascript.JSObject,
368
+ JSObject, "(I)V", njJSObject);
369
+ #endif
370
+ LOAD_CONSTRUCTOR(netscape.javascript.JSException,
371
+ JSException, "(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)V",
372
+ njJSException);
373
+
374
+ /* Load second constructor for wrapping JS exception objects inside JSExceptions */
375
+ _LOAD_METHOD(netscape.javascript.JSException,<init>,
376
+ JSException_wrap, "(ILjava/lang/Object;)V",
377
+ njJSException, JS_FALSE);
378
+
379
+ #ifndef OJI
380
+ LOAD_FIELDID(netscape.javascript.JSObject,
381
+ internal, "I", njJSObject);
382
+ #endif
383
+ LOAD_FIELDID(netscape.javascript.JSException,
384
+ lineno, "I", njJSException);
385
+ LOAD_FIELDID(netscape.javascript.JSException,
386
+ tokenIndex, "I", njJSException);
387
+ LOAD_FIELDID(netscape.javascript.JSException,
388
+ source, "Ljava/lang/String;", njJSException);
389
+ LOAD_FIELDID(netscape.javascript.JSException,
390
+ filename, "Ljava/lang/String;", njJSException);
391
+ LOAD_FIELDID(netscape.javascript.JSException, wrappedExceptionType, "I",
392
+ njJSException);
393
+ LOAD_FIELDID(netscape.javascript.JSException, wrappedException,
394
+ "Ljava/lang/Object;", njJSException);
395
+
396
+ LOAD_STATIC_METHOD(netscape.javascript.JSUtil,
397
+ getStackTrace, "(Ljava/lang/Throwable;)Ljava/lang/String;",
398
+ njJSUtil);
399
+
400
+ return JS_TRUE;
401
+ }
402
+
403
+ JSJavaVM *jsjava_vm_list = NULL;
404
+
405
+ static JSJavaThreadState *thread_list = NULL;
406
+
407
+ #ifdef JSJ_THREADSAFE
408
+ static PRMonitor *thread_list_monitor = NULL;
409
+ #endif
410
+
411
+ /*
412
+ * Called once per Java VM, this function initializes the classes, fields, and
413
+ * methods required for Java reflection. If java_vm is NULL, a new Java VM is
414
+ * created, using the provided classpath in addition to any default classpath.
415
+ * The classpath argument is ignored, however, if java_vm_arg is non-NULL.
416
+ */
417
+ JSJavaVM *
418
+ JSJ_ConnectToJavaVM(SystemJavaVM *java_vm_arg, void* initargs)
419
+ {
420
+ SystemJavaVM* java_vm;
421
+ JSJavaVM *jsjava_vm;
422
+ JNIEnv *jEnv;
423
+
424
+ JS_ASSERT(JSJ_callbacks);
425
+ JS_ASSERT(JSJ_callbacks->attach_current_thread);
426
+ JS_ASSERT(JSJ_callbacks->detach_current_thread);
427
+ JS_ASSERT(JSJ_callbacks->get_java_vm);
428
+
429
+ jsjava_vm = (JSJavaVM*)malloc(sizeof(JSJavaVM));
430
+ if (!jsjava_vm)
431
+ return NULL;
432
+ memset(jsjava_vm, 0, sizeof(JSJavaVM));
433
+
434
+ java_vm = java_vm_arg;
435
+
436
+ /* If a Java VM was passed in, try to attach to it on the current thread. */
437
+ if (java_vm) {
438
+ jEnv = JSJ_callbacks->attach_current_thread(java_vm);
439
+ if (jEnv == NULL) {
440
+ jsj_LogError("Failed to attach to Java VM thread\n");
441
+ free(jsjava_vm);
442
+ return NULL;
443
+ }
444
+
445
+ jsjava_vm->java_vm = java_vm;
446
+ jsjava_vm->main_thread_env = jEnv;
447
+ } else {
448
+ jsjava_vm->init_args = initargs;
449
+ }
450
+
451
+ #ifdef JSJ_THREADSAFE
452
+ if (jsjava_vm_list == NULL) {
453
+ thread_list_monitor =
454
+ (struct PRMonitor *) PR_NewMonitor();
455
+ }
456
+ #endif /* JSJ_THREADSAFE */
457
+
458
+ /* Put this VM on the list of all created VMs */
459
+ jsjava_vm->next = jsjava_vm_list;
460
+ jsjava_vm_list = jsjava_vm;
461
+
462
+ return jsjava_vm;
463
+ }
464
+
465
+ /* Completes a lazy connection to the host Java VM. */
466
+ static JSBool
467
+ jsj_ConnectToJavaVM(JSJavaVM *jsjava_vm)
468
+ {
469
+ if (!jsjava_vm->java_vm) {
470
+ JSBool ok;
471
+ JS_ASSERT(JSJ_callbacks->create_java_vm);
472
+ JS_ASSERT(JSJ_callbacks->destroy_java_vm);
473
+
474
+ ok = JSJ_callbacks->create_java_vm(&jsjava_vm->java_vm, &jsjava_vm->main_thread_env, jsjava_vm->init_args);
475
+ if (!ok || jsjava_vm->java_vm == NULL) {
476
+ jsj_LogError("Failed to create Java VM\n");
477
+ return JS_FALSE;
478
+ }
479
+
480
+ /* Remember that we created the VM so that we know to destroy it later */
481
+ jsjava_vm->jsj_created_java_vm = JS_TRUE;
482
+ }
483
+
484
+ if (!jsjava_vm->jsj_inited_java_vm) {
485
+ /*
486
+ * JVM initialization for netscape.javascript.JSObject is performed
487
+ * independently of the other classes that are initialized in
488
+ * init_java_VM_reflection, because we allow it to fail. In the case
489
+ * of failure, LiveConnect is still operative, but only when calling
490
+ * from JS to Java and not vice-versa.
491
+ */
492
+ init_netscape_java_classes(jsjava_vm, jsjava_vm->main_thread_env);
493
+
494
+ /* Load the Java classes, and the method and field descriptors required for
495
+ Java reflection. */
496
+ if (!init_java_VM_reflection(jsjava_vm, jsjava_vm->main_thread_env) ||
497
+ !jsj_InitJavaObjReflectionsTable()) {
498
+ jsj_LogError("LiveConnect was unable to reflect one or more components of the Java runtime.\nGo to http://bugzilla.mozilla.org/show_bug.cgi?id=5369 for details.\n");
499
+ /* This function crashes when called from here.
500
+ Check that all the preconditions for this
501
+ call are satisfied before making it. [jd]
502
+ JSJ_DisconnectFromJavaVM(jsjava_vm); */
503
+ return JS_FALSE;
504
+ }
505
+
506
+ jsjava_vm->jsj_inited_java_vm = JS_TRUE;
507
+ }
508
+
509
+ return JS_TRUE;
510
+ }
511
+
512
+ JSJCallbacks *JSJ_callbacks = NULL;
513
+
514
+ /* Called once to set up callbacks for all instances of LiveConnect */
515
+ void
516
+ JSJ_Init(JSJCallbacks *callbacks)
517
+ {
518
+ JS_ASSERT(callbacks);
519
+ JSJ_callbacks = callbacks;
520
+ }
521
+
522
+ /*
523
+ * Initialize the provided JSContext by setting up the JS classes necessary for
524
+ * reflection and by defining JavaPackage objects for the default Java packages
525
+ * as properties of global_obj. Additional packages may be pre-defined by
526
+ * setting the predefined_packages argument. (Pre-defining a Java package at
527
+ * initialization time is not necessary, but it will make package lookup faster
528
+ * and, more importantly, will avoid unnecessary network accesses if classes
529
+ * are being loaded over the network.)
530
+ */
531
+ JSBool
532
+ JSJ_InitJSContext(JSContext *cx, JSObject *global_obj,
533
+ JavaPackageDef *predefined_packages)
534
+ {
535
+ /* Initialize the JavaScript classes used for reflection */
536
+ if (!jsj_init_JavaObject(cx, global_obj))
537
+ return JS_FALSE;
538
+
539
+ /* if (!jsj_init_JavaMember(cx, global_obj))
540
+ return JS_FALSE; */
541
+
542
+ if (!jsj_init_JavaPackage(cx, global_obj, predefined_packages))
543
+ return JS_FALSE;
544
+
545
+ if (!jsj_init_JavaClass(cx, global_obj))
546
+ return JS_FALSE;
547
+
548
+ if (!jsj_init_JavaArray(cx, global_obj))
549
+ return JS_FALSE;
550
+
551
+ if (!jsj_init_JavaMember(cx, global_obj))
552
+ return JS_FALSE;
553
+
554
+ return JS_TRUE;
555
+ }
556
+
557
+ /* Eliminate a reference to a Java class */
558
+ #define UNLOAD_CLASS(qualified_name, class) \
559
+ if (class) { \
560
+ (*jEnv)->DeleteGlobalRef(jEnv, class); \
561
+ class = NULL; \
562
+ }
563
+
564
+ /*
565
+ * This routine severs the connection to a Java VM, freeing all related resources.
566
+ * It shouldn't be called until the global scope has been cleared in all related
567
+ * JSContexts (so that all LiveConnect objects are finalized) and a JavaScript
568
+ * GC is performed. Otherwise, accessed to free'ed memory could result.
569
+ */
570
+ void
571
+ JSJ_DisconnectFromJavaVM(JSJavaVM *jsjava_vm)
572
+ {
573
+ SystemJavaVM *java_vm;
574
+ JSJavaVM *j, **jp;
575
+
576
+ /* Since JSJ_ConnectToJavaVM is now lazy */
577
+ java_vm = jsjava_vm->java_vm;
578
+ if (java_vm) {
579
+ JNIEnv *jEnv = jsjava_vm->main_thread_env;
580
+
581
+ /* Drop all references to Java objects and classes */
582
+ jsj_DiscardJavaObjReflections(jEnv);
583
+ jsj_DiscardJavaClassReflections(jEnv);
584
+
585
+ if (jsjava_vm->jsj_created_java_vm) {
586
+ (void)JSJ_callbacks->destroy_java_vm(java_vm, jEnv);
587
+ } else {
588
+ UNLOAD_CLASS(java/lang/Object, jlObject);
589
+ UNLOAD_CLASS(java/lang/Class, jlClass);
590
+ UNLOAD_CLASS(java/lang/reflect/Method, jlrMethod);
591
+ UNLOAD_CLASS(java/lang/reflect/Constructor, jlrConstructor);
592
+ UNLOAD_CLASS(java/lang/reflect/Field, jlrField);
593
+ UNLOAD_CLASS(java/lang/reflect/Array, jlrArray);
594
+ UNLOAD_CLASS(java/lang/Throwable, jlThrowable);
595
+ UNLOAD_CLASS(java/lang/System, jlSystem);
596
+ UNLOAD_CLASS(java/lang/Boolean, jlBoolean);
597
+ UNLOAD_CLASS(java/lang/Double, jlDouble);
598
+ UNLOAD_CLASS(java/lang/String, jlString);
599
+ UNLOAD_CLASS(java/lang/Void, jlVoid);
600
+ UNLOAD_CLASS(java/applet/Applet, jaApplet);
601
+ UNLOAD_CLASS(netscape/javascript/JSObject, njJSObject);
602
+ UNLOAD_CLASS(netscape/javascript/JSException, njJSException);
603
+ UNLOAD_CLASS(netscape/javascript/JSUtil, njJSUtil);
604
+ }
605
+ }
606
+
607
+ /* Remove this VM from the list of all JSJavaVM objects. */
608
+ for (jp = &jsjava_vm_list; (j = *jp) != NULL; jp = &j->next) {
609
+ if (j == jsjava_vm) {
610
+ *jp = jsjava_vm->next;
611
+ break;
612
+ }
613
+ }
614
+ JS_ASSERT(j); /* vm not found in list */
615
+
616
+ #ifdef JSJ_THREADSAFE
617
+ if (jsjava_vm_list == NULL) {
618
+ PR_DestroyMonitor(thread_list_monitor);
619
+ thread_list_monitor = NULL;
620
+ }
621
+ #endif /* JSJ_THREADSAFE */
622
+
623
+ free(jsjava_vm);
624
+ }
625
+
626
+ static JSJavaThreadState *
627
+ new_jsjava_thread_state(JSJavaVM *jsjava_vm, const char *thread_name, JNIEnv *jEnv)
628
+ {
629
+ JSJavaThreadState *jsj_env;
630
+
631
+ jsj_env = (JSJavaThreadState *)malloc(sizeof(JSJavaThreadState));
632
+ if (!jsj_env)
633
+ return NULL;
634
+ memset(jsj_env, 0, sizeof(JSJavaThreadState));
635
+
636
+ jsj_env->jEnv = jEnv;
637
+ jsj_env->jsjava_vm = jsjava_vm;
638
+ if (thread_name)
639
+ jsj_env->name = strdup(thread_name);
640
+
641
+ #ifdef JSJ_THREADSAFE
642
+ PR_EnterMonitor(thread_list_monitor);
643
+ #endif
644
+
645
+ jsj_env->next = thread_list;
646
+ thread_list = jsj_env;
647
+
648
+ #ifdef JSJ_THREADSAFE
649
+ PR_ExitMonitor(thread_list_monitor);
650
+ #endif
651
+
652
+ return jsj_env;
653
+ }
654
+
655
+ static JSJavaThreadState *
656
+ find_jsjava_thread(JNIEnv *jEnv)
657
+ {
658
+ JSJavaThreadState *e, **p, *jsj_env;
659
+ jsj_env = NULL;
660
+
661
+ #ifdef JSJ_THREADSAFE
662
+ PR_EnterMonitor(thread_list_monitor);
663
+ #endif
664
+
665
+ /* Search for the thread state among the list of all created
666
+ LiveConnect threads */
667
+ for (p = &thread_list; (e = *p) != NULL; p = &(e->next)) {
668
+ if (e->jEnv == jEnv) {
669
+ jsj_env = e;
670
+ break;
671
+ }
672
+ }
673
+
674
+ /* Move a found thread to head of list for faster search next time. */
675
+ if (jsj_env && p != &thread_list) {
676
+ *p = jsj_env->next;
677
+ jsj_env->next = thread_list;
678
+ thread_list = jsj_env;
679
+ }
680
+
681
+ #ifdef JSJ_THREADSAFE
682
+ PR_ExitMonitor(thread_list_monitor);
683
+ #endif
684
+
685
+ return jsj_env;
686
+ }
687
+
688
+ JS_EXPORT_API(JSJavaThreadState *)
689
+ JSJ_AttachCurrentThreadToJava(JSJavaVM *jsjava_vm, const char *name, JNIEnv **java_envp)
690
+ {
691
+ JNIEnv *jEnv;
692
+ SystemJavaVM *java_vm;
693
+ JSJavaThreadState *jsj_env;
694
+
695
+ /* Make sure we're fully connected to the Java VM */
696
+ if (!jsj_ConnectToJavaVM(jsjava_vm))
697
+ return NULL;
698
+
699
+ /* Try to attach a Java thread to the current native thread */
700
+ java_vm = jsjava_vm->java_vm;
701
+ if (JSJ_callbacks && JSJ_callbacks->attach_current_thread)
702
+ jEnv = JSJ_callbacks->attach_current_thread(java_vm);
703
+ else
704
+ return NULL;
705
+ if (jEnv == NULL)
706
+ return NULL;
707
+
708
+ /* If we found an existing thread state, just return it. */
709
+ jsj_env = find_jsjava_thread(jEnv);
710
+ if (jsj_env)
711
+ return jsj_env;
712
+
713
+ /* Create a new wrapper around the thread/VM state */
714
+ jsj_env = new_jsjava_thread_state(jsjava_vm, name, jEnv);
715
+
716
+ if (java_envp)
717
+ *java_envp = jEnv;
718
+ return jsj_env;
719
+ }
720
+
721
+ static JSJavaVM *
722
+ map_java_vm_to_jsjava_vm(SystemJavaVM *java_vm)
723
+ {
724
+ JSJavaVM *v;
725
+ for (v = jsjava_vm_list; v; v = v->next) {
726
+ if (!jsj_ConnectToJavaVM(v))
727
+ return NULL;
728
+ if (v->java_vm == java_vm)
729
+ return v;
730
+ }
731
+ return NULL;
732
+ }
733
+
734
+ /*
735
+ * Unfortunately, there's no standard means to associate any private data with
736
+ * a JNI thread environment, so we need to use the Java environment pointer as
737
+ * the key in a lookup table that maps it to a JSJavaThreadState structure,
738
+ * where we store all our per-thread private data. If no existing thread state
739
+ * is found, a new one is created.
740
+ *
741
+ * If an error occurs, returns NULL and sets the errp argument to an error
742
+ * message, which the caller is responsible for free'ing.
743
+ */
744
+ JSJavaThreadState *
745
+ jsj_MapJavaThreadToJSJavaThreadState(JNIEnv *jEnv, char **errp)
746
+ {
747
+ JSJavaThreadState *jsj_env;
748
+ SystemJavaVM *java_vm;
749
+ JSJavaVM *jsjava_vm;
750
+
751
+ /* If we found an existing thread state, just return it. */
752
+ jsj_env = find_jsjava_thread(jEnv);
753
+ if (jsj_env)
754
+ return jsj_env;
755
+
756
+ /* No one set up a LiveConnect thread state for a given Java thread.
757
+ Invoke the callback to create one on-the-fly. */
758
+
759
+ /* First, figure out which Java VM is calling us */
760
+ if (JSJ_callbacks && JSJ_callbacks->get_java_vm)
761
+ java_vm = JSJ_callbacks->get_java_vm(jEnv);
762
+ else
763
+ return NULL;
764
+ if (java_vm == NULL)
765
+ return NULL;
766
+
767
+ /* Get our private JavaVM data */
768
+ jsjava_vm = map_java_vm_to_jsjava_vm(java_vm);
769
+ if (!jsjava_vm) {
770
+ *errp = JS_smprintf("Total weirdness: No JSJavaVM wrapper ever created "
771
+ "for JavaVM 0x%08x", java_vm);
772
+ return NULL;
773
+ }
774
+
775
+ jsj_env = new_jsjava_thread_state(jsjava_vm, NULL, jEnv);
776
+ if (!jsj_env)
777
+ return NULL;
778
+
779
+ return jsj_env;
780
+ }
781
+
782
+ /*
783
+ * This function is used to specify a particular JSContext as *the* JavaScript
784
+ * execution environment to be used when LiveConnect is accessed from the given
785
+ * Java thread, i.e. by using one of the methods of netscape.javascript.JSObject.
786
+ * (There can only be one such JS context for a given Java thread. To
787
+ * multiplex JSContexts among a single thread, this function must be called
788
+ * before Java is invoked on that thread.) The return value is the previous
789
+ * context associated with the given Java thread.
790
+ */
791
+ JS_EXPORT_API(JSContext *)
792
+ JSJ_SetDefaultJSContextForJavaThread(JSContext *cx, JSJavaThreadState *jsj_env)
793
+ {
794
+ JSContext *old_context;
795
+ old_context = jsj_env->cx;
796
+ jsj_env->cx = cx;
797
+
798
+ /* The following line prevents clearing of jsj_env->cx by jsj_ExitJava() */
799
+ jsj_env->recursion_depth++;
800
+ return old_context;
801
+ }
802
+
803
+ JS_EXPORT_API(JSBool)
804
+ JSJ_DetachCurrentThreadFromJava(JSJavaThreadState *jsj_env)
805
+ {
806
+ SystemJavaVM *java_vm;
807
+ JNIEnv* jEnv;
808
+ JSJavaThreadState *e, **p;
809
+
810
+ /* Disassociate the current native thread from its corresponding Java thread */
811
+ java_vm = jsj_env->jsjava_vm->java_vm;
812
+ jEnv = jsj_env->jEnv;
813
+
814
+ #ifdef JSJ_THREADSAFE
815
+ PR_EnterMonitor(thread_list_monitor);
816
+ #endif /* JSJ_THREADSAFE */
817
+
818
+ if (!JSJ_callbacks->detach_current_thread(java_vm, jEnv)) {
819
+
820
+ #ifdef JSJ_THREADSAFE
821
+ PR_ExitMonitor(thread_list_monitor);
822
+ #endif /* JSJ_THREADSAFE */
823
+
824
+ return JS_FALSE;
825
+ }
826
+
827
+ /* Destroy the LiveConnect execution environment passed in */
828
+ jsj_ClearPendingJSErrors(jsj_env);
829
+
830
+ for (p = &thread_list; (e = *p) != NULL; p = &(e->next)) {
831
+ if (e == jsj_env) {
832
+ *p = jsj_env->next;
833
+ break;
834
+ }
835
+ }
836
+
837
+ JS_ASSERT(e);
838
+
839
+ #ifdef JSJ_THREADSAFE
840
+ PR_ExitMonitor(thread_list_monitor);
841
+ #endif /* JSJ_THREADSAFE */
842
+
843
+ free(jsj_env);
844
+ return JS_TRUE;
845
+ }
846
+
847
+ /* Utility routine to wrap a Java object inside a JS object, having a
848
+ a result type of either JavaObject or JavaArray. */
849
+ JSBool
850
+ JSJ_ConvertJavaObjectToJSValue(JSContext *cx, jobject java_obj, jsval *vp)
851
+ {
852
+ JNIEnv *jEnv;
853
+ JSBool result;
854
+ JSJavaThreadState *jsj_env;
855
+
856
+ /* Get the Java per-thread environment pointer for this JSContext */
857
+ jsj_env = jsj_EnterJava(cx, &jEnv);
858
+ if (!jEnv)
859
+ return JS_FALSE;
860
+
861
+ result = jsj_ConvertJavaObjectToJSValue(cx, jEnv, java_obj, vp);
862
+ jsj_ExitJava(jsj_env);
863
+ return result;
864
+ }
865
+
866
+
867
+ JS_EXPORT_API(JSBool)
868
+ JSJ_ConvertJSValueToJavaObject(JSContext *cx, jsval v, jobject *vp)
869
+ {
870
+ if (JSVAL_IS_OBJECT(v)) {
871
+ JSObject *js_obj = JSVAL_TO_OBJECT(v);
872
+ JavaObjectWrapper *java_wrapper = JS_GetPrivate(cx, js_obj);
873
+ *vp = java_wrapper->java_obj;
874
+ return JS_TRUE;
875
+ }
876
+ return JS_FALSE;
877
+ }
878
+
879
+
880
+ JS_EXPORT_API(JSBool)
881
+ JSJ_IsJSCallApplet()
882
+ {
883
+ return jsj_JSIsCallingApplet;
884
+ }