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,1379 @@
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
+ /* This file is part of the Java-vendor-neutral implementation of LiveConnect
41
+ *
42
+ * It contains the implementation of the native methods for the
43
+ * netscape.javascript.JSObject Java class, which are used for calling into
44
+ * JavaScript from Java. It also contains the code that handles propagation
45
+ * of exceptions both into and out of Java.
46
+ *
47
+ */
48
+
49
+ #include <stdlib.h>
50
+ #include <string.h>
51
+
52
+ #include "jsj_private.h"
53
+ #include "jsjava.h"
54
+
55
+ #include "jscntxt.h" /* For js_ReportErrorAgain().
56
+ TODO - get rid of private header */
57
+
58
+ #include "netscape_javascript_JSObject.h" /* javah-generated headers */
59
+
60
+
61
+ /* A captured JavaScript error, created when JS_ReportError() is called while
62
+ running JavaScript code that is itself called from Java. */
63
+ struct CapturedJSError {
64
+ char * message;
65
+ JSErrorReport report; /* Line # of error, etc. */
66
+ jthrowable java_exception; /* Java exception, error, or null */
67
+ CapturedJSError * next; /* Next oldest captured JS error */
68
+ };
69
+
70
+
71
+ /*********************** Reflection of JSObjects ****************************/
72
+
73
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
74
+ /*
75
+ * This is a hash table that maps from JS objects to Java objects.
76
+ * It is used to ensure that the same Java object results when a JS
77
+ * object is reflected more than once, so that Java object equality
78
+ * tests work in the expected manner.
79
+ *
80
+ * The entry keys are JSObject pointers and the entry values are Java objects
81
+ * (of type jobject). When the corresponding Java instance is finalized,
82
+ * the entry is removed from the table, and a JavaScript GC root for the JS
83
+ * object is removed.
84
+ *
85
+ * This code is disabled because cycles in GC roots between the two systems
86
+ * cause every reflected JS object to become uncollectable. This can only
87
+ * be solved by using weak links, a feature not available in JDK1.1.
88
+ */
89
+ static JSHashTable *js_obj_reflections = NULL;
90
+
91
+ #ifdef JSJ_THREADSAFE
92
+ /*
93
+ * Used to protect the js_obj_reflections hashtable from simultaneous
94
+ * read/write or * write/write access.
95
+ */
96
+ static PRMonitor *js_obj_reflections_monitor = NULL;
97
+ #endif /* JSJ_THREADSAFE */
98
+ #endif /* PRESERVE_JSOBJECT_IDENTITY */
99
+
100
+ JSBool
101
+ jsj_init_js_obj_reflections_table()
102
+ {
103
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
104
+ if(js_obj_reflections != NULL)
105
+ {
106
+ return JS_TRUE;
107
+ }
108
+ js_obj_reflections = JS_NewHashTable(128, NULL, JS_CompareValues,
109
+ JS_CompareValues, NULL, NULL);
110
+ if (!js_obj_reflections)
111
+ return JS_FALSE;
112
+
113
+ #ifdef JSJ_THREADSAFE
114
+ js_obj_reflections_monitor = PR_NewMonitor();
115
+ if (!js_obj_reflections_monitor) {
116
+ JS_HashTableDestroy(js_obj_reflections);
117
+ return JS_FALSE;
118
+ }
119
+ #endif /* JSJ_THREADSAFE */
120
+ #endif /* PRESERVE_JSOBJECT_IDENTITY */
121
+
122
+ return JS_TRUE;
123
+ }
124
+
125
+ /*
126
+ * Return a Java object that "wraps" a given JS object by storing the address
127
+ * of the JS object in a private field of the Java object. A hash table is
128
+ * used to ensure that the mapping of JS objects to Java objects is done on
129
+ * one-to-one basis.
130
+ *
131
+ * If an error occurs, returns NULL and reports an error.
132
+ */
133
+
134
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
135
+
136
+ jobject
137
+ jsj_WrapJSObject(JSContext *cx, JNIEnv *jEnv, JSObject *js_obj)
138
+ {
139
+ jobject java_wrapper_obj;
140
+ JSHashEntry *he, **hep;
141
+
142
+ java_wrapper_obj = NULL;
143
+
144
+ #ifdef JSJ_THREADSAFE
145
+ PR_EnterMonitor(js_obj_reflections_monitor);
146
+ #endif
147
+
148
+ /* First, look in the hash table for an existing reflection of the same
149
+ JavaScript object. If one is found, return it. */
150
+ hep = JS_HashTableRawLookup(js_obj_reflections, (JSHashNumber)js_obj, js_obj);
151
+
152
+ /* If the same JSObject is reflected into Java more than once then we should
153
+ return the same Java object, both for efficiency and so that the '=='
154
+ operator works as expected in Java when comparing two JSObjects.
155
+ However, it is not possible to hold a reference to a Java object without
156
+ inhibiting GC of that object, at least not in a portable way, i.e.
157
+ a weak reference. So, for now, JSObject identity is broken. */
158
+
159
+ he = *hep;
160
+ if (he) {
161
+ java_wrapper_obj = (jobject)he->value;
162
+ JS_ASSERT(java_wrapper_obj);
163
+ if (java_wrapper_obj)
164
+ goto done;
165
+ }
166
+
167
+ /* No existing reflection found, so create a new Java object that wraps
168
+ the JavaScript object by storing its address in a private integer field. */
169
+ #ifndef OJI
170
+ java_wrapper_obj =
171
+ (*jEnv)->NewObject(jEnv, njJSObject, njJSObject_JSObject, (jint)js_obj);
172
+ #else
173
+ if (JSJ_callbacks && JSJ_callbacks->get_java_wrapper != NULL) {
174
+ java_wrapper_obj = JSJ_callbacks->get_java_wrapper(jEnv, (jint)handle);
175
+ }
176
+ #endif /*! OJI */
177
+
178
+ if (!java_wrapper_obj) {
179
+ jsj_UnexpectedJavaError(cx, jEnv, "Couldn't create new instance of "
180
+ "netscape.javascript.JSObject");
181
+ goto done;
182
+ }
183
+
184
+ /* Add the new reflection to the hash table. */
185
+ he = JS_HashTableRawAdd(js_obj_reflections, hep, (JSHashNumber)js_obj,
186
+ js_obj, java_wrapper_obj);
187
+ if (he) {
188
+ /* Tell the JavaScript GC about this object since the only reference
189
+ to it may be in Java-land. */
190
+ JS_AddNamedRoot(cx, (void*)&he->key, "&he->key");
191
+ } else {
192
+ JS_ReportOutOfMemory(cx);
193
+ /* No need to delete java_wrapper_obj because Java GC will reclaim it */
194
+ java_wrapper_obj = NULL;
195
+ }
196
+
197
+ /*
198
+ * Release local reference to wrapper object, since some JVMs seem reticent
199
+ * about collecting it otherwise.
200
+ */
201
+ /* FIXME -- beard: this seems to make calls into Java with JSObject's fail. */
202
+ /* We should really be creating a global ref if we are putting it in a hash table. */
203
+ /* (*jEnv)->DeleteLocalRef(jEnv, java_wrapper_obj); */
204
+
205
+ done:
206
+ #ifdef JSJ_THREADSAFE
207
+ PR_ExitMonitor(js_obj_reflections_monitor);
208
+ #endif
209
+
210
+ return java_wrapper_obj;
211
+ }
212
+
213
+ /*
214
+ * Remove the mapping of a JS object from the hash table that maps JS objects
215
+ * to Java objects. This is called from the finalizer of an instance of
216
+ * netscape.javascript.JSObject.
217
+ */
218
+ JSBool
219
+ jsj_remove_js_obj_reflection_from_hashtable(JSContext *cx, JSObject *js_obj)
220
+ {
221
+ JSHashEntry *he, **hep;
222
+ JSBool success = JS_FALSE;
223
+
224
+ #ifdef JSJ_THREADSAFE
225
+ PR_EnterMonitor(js_obj_reflections_monitor);
226
+ #endif
227
+
228
+ /* Get the hash-table entry for this wrapper object */
229
+ hep = JS_HashTableRawLookup(js_obj_reflections, (JSHashNumber)js_obj, js_obj);
230
+ he = *hep;
231
+
232
+ JS_ASSERT(he);
233
+ if (he) {
234
+ /* Tell the JS GC that Java no longer keeps a reference to this
235
+ JS object. */
236
+ success = JS_RemoveRoot(cx, (void *)&he->key);
237
+
238
+ JS_HashTableRawRemove(js_obj_reflections, hep, he);
239
+ }
240
+
241
+ #ifdef JSJ_THREADSAFE
242
+ PR_ExitMonitor(js_obj_reflections_monitor);
243
+ #endif
244
+
245
+ return success;
246
+ }
247
+
248
+ #else /* !PRESERVE_JSOBJECT_IDENTITY */
249
+
250
+
251
+ /*
252
+ * The caller must call DeleteLocalRef() on the returned object when no more
253
+ * references remain.
254
+ */
255
+ jobject
256
+ jsj_WrapJSObject(JSContext *cx, JNIEnv *jEnv, JSObject *js_obj)
257
+ {
258
+ jobject java_wrapper_obj;
259
+ JSObjectHandle *handle;
260
+
261
+ /* Create a tiny stub object to act as the GC root that points to the
262
+ JSObject from its netscape.javascript.JSObject counterpart. */
263
+ handle = (JSObjectHandle*)JS_malloc(cx, sizeof(JSObjectHandle));
264
+ if (!handle)
265
+ return NULL;
266
+ handle->js_obj = js_obj;
267
+ handle->rt = JS_GetRuntime(cx);
268
+
269
+ /* Create a new Java object that wraps the JavaScript object by storing its
270
+ address in a private integer field. */
271
+ #ifndef OJI
272
+ java_wrapper_obj =
273
+ (*jEnv)->NewObject(jEnv, njJSObject, njJSObject_JSObject, (lcjsobject)handle);
274
+ #else
275
+ if (JSJ_callbacks && JSJ_callbacks->get_java_wrapper != NULL) {
276
+ java_wrapper_obj = JSJ_callbacks->get_java_wrapper(jEnv, (lcjsobject)handle);
277
+ } else {
278
+ java_wrapper_obj = NULL;
279
+ }
280
+ #endif /*! OJI */
281
+ if (!java_wrapper_obj) {
282
+ jsj_UnexpectedJavaError(cx, jEnv, "Couldn't create new instance of "
283
+ "netscape.javascript.JSObject");
284
+ goto done;
285
+ }
286
+
287
+ JS_AddNamedRoot(cx, &handle->js_obj, "&handle->js_obj");
288
+
289
+ done:
290
+
291
+ return java_wrapper_obj;
292
+ }
293
+
294
+ JSObject *
295
+ jsj_UnwrapJSObjectWrapper(JNIEnv *jEnv, jobject java_wrapper_obj)
296
+ {
297
+ JSObjectHandle *handle;
298
+
299
+ #ifndef OJI
300
+ #if JS_BYTES_PER_LONG == 8
301
+ handle = (JSObjectHandle*)((*jEnv)->GetLongField(jEnv, java_wrapper_obj, njJSObject_long_internal));
302
+ #else
303
+ handle = (JSObjectHandle*)((*jEnv)->GetIntField(jEnv, java_wrapper_obj, njJSObject_internal));
304
+ #endif
305
+ #else
306
+ /* Unwrapping this wrapper requires knowledge of the structure of the object. This is privileged
307
+ information that only the object implementor can know. In this case the object implementor
308
+ is the java plugin (such as the Sun plugin class sun.plugin.javascript.navig5.JSObject.
309
+ Since the plugin owns this structure, we defer to it to unwrap the object. If the plugin
310
+ does not implement this callback, then it should be set to null. In that case we try something
311
+ that works with Sun's plugin assuming that it has not yet been implemented yet. This 'else'
312
+ case should be removed as soon as the unwrap function is supported by the Sun JPI. */
313
+
314
+ if (JSJ_callbacks && JSJ_callbacks->unwrap_java_wrapper != NULL) {
315
+ handle = (JSObjectHandle*)JSJ_callbacks->unwrap_java_wrapper(jEnv, java_wrapper_obj);
316
+ }
317
+ else {
318
+ jclass cid = (*jEnv)->GetObjectClass(jEnv, java_wrapper_obj);
319
+ #if JS_BYTES_PER_LONG == 8
320
+ jfieldID fid = (*jEnv)->GetFieldID(jEnv, cid, "nativeJSObject", "J");
321
+ handle = (JSObjectHandle*)((*jEnv)->GetLongField(jEnv, java_wrapper_obj, fid));
322
+ #else
323
+ jfieldID fid = (*jEnv)->GetFieldID(jEnv, cid, "nativeJSObject", "I");
324
+ handle = (JSObjectHandle*)((*jEnv)->GetIntField(jEnv, java_wrapper_obj, fid));
325
+ #endif
326
+ }
327
+ #endif
328
+
329
+ /* JNI returns a NULL handle for a Java 'null' */
330
+ if (!handle)
331
+ return NULL;
332
+
333
+ return handle->js_obj;
334
+
335
+ }
336
+
337
+ #endif /* !PRESERVE_JSOBJECT_IDENTITY */
338
+
339
+ /*************** Handling of Java exceptions in JavaScript ******************/
340
+
341
+ /*
342
+ * Free up a JavaScript error that has been stored by the
343
+ * capture_js_error_reports_for_java() function.
344
+ */
345
+ static CapturedJSError *
346
+ destroy_saved_js_error(JNIEnv *jEnv, CapturedJSError *error)
347
+ {
348
+ CapturedJSError *next_error;
349
+ if (!error)
350
+ return NULL;
351
+ next_error = error->next;
352
+
353
+ if (error->java_exception)
354
+ (*jEnv)->DeleteGlobalRef(jEnv, error->java_exception);
355
+ if (error->message)
356
+ free((char*)error->message);
357
+ if (error->report.filename)
358
+ free((char*)error->report.filename);
359
+ if (error->report.linebuf)
360
+ free((char*)error->report.linebuf);
361
+ free(error);
362
+
363
+ return next_error;
364
+ }
365
+
366
+ /*
367
+ * Capture a JS error that has been reported using JS_ReportError() by JS code
368
+ * that has itself been called from Java. A copy of the JS error data is made
369
+ * and hung off the JSJ environment. When JS completes and returns to its Java
370
+ * caller, this data is used to synthesize an instance of
371
+ * netscape.javascript.JSException. If the resulting JSException is not caught
372
+ * within Java, it may be propagated up the stack beyond the Java caller back
373
+ * into JavaScript, in which case the error will be re-reported as a JavaScript
374
+ * error.
375
+ */
376
+ JS_STATIC_DLL_CALLBACK(void)
377
+ capture_js_error_reports_for_java(JSContext *cx, const char *message,
378
+ JSErrorReport *report)
379
+ {
380
+ CapturedJSError *new_error;
381
+ JSJavaThreadState *jsj_env;
382
+ jthrowable java_exception, tmp_exception;
383
+ JNIEnv *jEnv;
384
+
385
+ /* Warnings are not propagated as Java exceptions - they are simply
386
+ ignored. Ditto for exceptions that are duplicated in the form
387
+ of error reports. */
388
+ if (report && (report->flags & (JSREPORT_WARNING | JSREPORT_EXCEPTION)))
389
+ return;
390
+
391
+ /* Create an empty struct to hold the saved JS error state */
392
+ new_error = malloc(sizeof(CapturedJSError));
393
+ if (!new_error)
394
+ goto out_of_memory;
395
+ memset(new_error, 0, sizeof(CapturedJSError));
396
+
397
+ /* Copy all the error info out of the original report into a private copy */
398
+ if (message) {
399
+ new_error->message = strdup(message);
400
+ if (!new_error->message)
401
+ goto out_of_memory;
402
+ }
403
+ if (report) {
404
+ new_error->report.lineno = report->lineno;
405
+
406
+ if (report->filename) {
407
+ new_error->report.filename = strdup(report->filename);
408
+ if (!new_error->report.filename)
409
+ goto out_of_memory;
410
+ }
411
+
412
+ if (report->linebuf) {
413
+ new_error->report.linebuf = strdup(report->linebuf);
414
+ if (!new_error->report.linebuf)
415
+ goto out_of_memory;
416
+ new_error->report.tokenptr =
417
+ new_error->report.linebuf + (report->tokenptr - report->linebuf);
418
+ }
419
+ }
420
+
421
+ /* Get the head of the list of pending JS errors */
422
+ jsj_env = jsj_EnterJava(cx, &jEnv);
423
+ if (!jsj_env)
424
+ goto abort;
425
+
426
+ /* If there's a Java exception associated with this error, save it too. */
427
+ java_exception = (*jEnv)->ExceptionOccurred(jEnv);
428
+ if (java_exception) {
429
+ (*jEnv)->ExceptionClear(jEnv);
430
+ tmp_exception = java_exception; /* Make a copy */
431
+ java_exception = (*jEnv)->NewGlobalRef(jEnv, java_exception);
432
+ new_error->java_exception = java_exception;
433
+ (*jEnv)->DeleteLocalRef(jEnv, tmp_exception);
434
+ }
435
+
436
+ /* Push this error onto the list of pending JS errors */
437
+ new_error->next = jsj_env->pending_js_errors;
438
+ jsj_env->pending_js_errors = new_error;
439
+ jsj_ExitJava(jsj_env);
440
+ return;
441
+
442
+ abort:
443
+ out_of_memory:
444
+ /* No recovery action possible */
445
+ JS_ASSERT(0);
446
+ destroy_saved_js_error(jEnv, new_error);
447
+ return;
448
+ }
449
+
450
+ void
451
+ jsj_ClearPendingJSErrors(JSJavaThreadState *jsj_env)
452
+ {
453
+ while (jsj_env->pending_js_errors)
454
+ jsj_env->pending_js_errors = destroy_saved_js_error(jsj_env->jEnv, jsj_env->pending_js_errors);
455
+ }
456
+
457
+ /*
458
+ * This is called upon returning from JS back into Java. Any JS errors
459
+ * reported during that time will be converted into Java exceptions. It's
460
+ * possible that a JS error was actually triggered by Java at some point, in
461
+ * which case the original Java exception is thrown.
462
+ */
463
+ static void
464
+ throw_any_pending_js_error_as_a_java_exception(JSJavaThreadState *jsj_env)
465
+ {
466
+ CapturedJSError *error;
467
+ JNIEnv *jEnv;
468
+ jstring message_jstr, linebuf_jstr, filename_jstr;
469
+ jint index, lineno;
470
+ JSErrorReport *report;
471
+ JSContext *cx;
472
+ jsval pending_exception;
473
+ jobject java_obj;
474
+ int dummy_cost;
475
+ JSBool is_local_refp;
476
+ JSType primitive_type;
477
+ jthrowable java_exception;
478
+
479
+ message_jstr = linebuf_jstr = filename_jstr = java_exception = NULL;
480
+
481
+ /* Get the Java JNI environment */
482
+ jEnv = jsj_env->jEnv;
483
+
484
+ cx = jsj_env->cx;
485
+ /* Get the pending JS exception if it exists */
486
+ if (cx&&JS_IsExceptionPending(cx)) {
487
+ if (!JS_GetPendingException(cx, &pending_exception))
488
+ goto out_of_memory;
489
+
490
+ /* Find out the JSTYPE of this jsval. */
491
+ primitive_type = JS_TypeOfValue(cx, pending_exception);
492
+
493
+ /* Convert jsval exception to a java object and then use it to
494
+ create an instance of JSException. */
495
+ if (!jsj_ConvertJSValueToJavaObject(cx, jEnv,
496
+ pending_exception,
497
+ jsj_get_jlObject_descriptor(cx, jEnv),
498
+ &dummy_cost, &java_obj,
499
+ &is_local_refp))
500
+ goto done;
501
+
502
+ java_exception = (*jEnv)->NewObject(jEnv, njJSException,
503
+ njJSException_JSException_wrap,
504
+ primitive_type, java_obj);
505
+ if (is_local_refp)
506
+ (*jEnv)->DeleteLocalRef(jEnv, java_obj);
507
+ if (!java_exception)
508
+ goto out_of_memory;
509
+
510
+ /* Throw the newly-created JSException */
511
+ if ((*jEnv)->Throw(jEnv, java_exception) < 0) {
512
+ JS_ASSERT(0);
513
+ jsj_LogError("Couldn't throw JSException\n");
514
+ goto done;
515
+ }
516
+ JS_ClearPendingException(cx);
517
+ return;
518
+ }
519
+ if (!jsj_env->pending_js_errors) {
520
+ #ifdef DEBUG
521
+ /* Any exception should be cleared as soon as it's detected, so there
522
+ shouldn't be any pending. */
523
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
524
+ /* A Java exception occurred, but nobody in JS-land noticed. */
525
+ JS_ASSERT(0);
526
+ (*jEnv)->ExceptionClear(jEnv);
527
+ }
528
+ #endif
529
+ return;
530
+ }
531
+
532
+ /* Get the deepest (oldest) saved JS error */
533
+ /* XXX - What's the right thing to do about newer errors ?
534
+ For now we just throw them away */
535
+ error = jsj_env->pending_js_errors;
536
+ while (error->next)
537
+ error = error->next;
538
+
539
+ /*
540
+ * If the JS error was originally the result of a Java exception, rethrow
541
+ * the original exception.
542
+ */
543
+ if (error->java_exception) {
544
+ (*jEnv)->Throw(jEnv, error->java_exception);
545
+ goto done;
546
+ }
547
+
548
+ /* Propagate any JS errors that did not originate as Java exceptions into
549
+ Java as an instance of netscape.javascript.JSException */
550
+
551
+ /* First, marshall the arguments to the JSException constructor */
552
+ message_jstr = NULL;
553
+ if (error->message) {
554
+ message_jstr = (*jEnv)->NewStringUTF(jEnv, error->message);
555
+ if (!message_jstr)
556
+ goto out_of_memory;
557
+ }
558
+
559
+ report = &error->report;
560
+
561
+ filename_jstr = NULL;
562
+ if (report->filename) {
563
+ filename_jstr = (*jEnv)->NewStringUTF(jEnv, report->filename);
564
+ if (!filename_jstr)
565
+ goto out_of_memory;
566
+ }
567
+
568
+ linebuf_jstr = NULL;
569
+ if (report->linebuf) {
570
+ linebuf_jstr = (*jEnv)->NewStringUTF(jEnv, report->linebuf);
571
+ if (!linebuf_jstr)
572
+ goto out_of_memory;
573
+ }
574
+
575
+ lineno = report->lineno;
576
+ index = report->linebuf ? report->tokenptr - report->linebuf : 0;
577
+
578
+ /* Call the JSException constructor */
579
+ java_exception = (*jEnv)->NewObject(jEnv, njJSException, njJSException_JSException,
580
+ message_jstr, filename_jstr, lineno, linebuf_jstr, index);
581
+ if (!java_exception)
582
+ goto out_of_memory;
583
+
584
+ /* Throw the newly-created JSException */
585
+ if ((*jEnv)->Throw(jEnv, java_exception) < 0) {
586
+ JS_ASSERT(0);
587
+ jsj_UnexpectedJavaError(cx, jEnv, "Couldn't throw JSException\n");
588
+ }
589
+ goto done;
590
+
591
+ out_of_memory:
592
+ /* No recovery possible */
593
+ JS_ASSERT(0);
594
+ jsj_LogError("Out of memory while attempting to throw JSException\n");
595
+
596
+ done:
597
+ jsj_ClearPendingJSErrors(jsj_env);
598
+ /*
599
+ * Release local references to Java objects, since some JVMs seem reticent
600
+ * about collecting them otherwise.
601
+ */
602
+ if (message_jstr)
603
+ (*jEnv)->DeleteLocalRef(jEnv, message_jstr);
604
+ if (filename_jstr)
605
+ (*jEnv)->DeleteLocalRef(jEnv, filename_jstr);
606
+ if (linebuf_jstr)
607
+ (*jEnv)->DeleteLocalRef(jEnv, linebuf_jstr);
608
+ if (java_exception)
609
+ (*jEnv)->DeleteLocalRef(jEnv, java_exception);
610
+ }
611
+
612
+ /*
613
+ * This function is called up returning from Java back into JS as a result of
614
+ * a thrown netscape.javascript.JSException, which itself must have been caused
615
+ * by a JS error when Java called into JS. The original JS error is
616
+ * reconstituted from the JSException and re-reported as a JS error.
617
+ *
618
+ * Returns JS_FALSE if an internal error occurs, JS_TRUE otherwise.
619
+ */
620
+ JSBool
621
+ jsj_ReportUncaughtJSException(JSContext *cx, JNIEnv *jEnv, jthrowable java_exception)
622
+ {
623
+ JSBool success;
624
+ JSErrorReport report;
625
+ const char *linebuf, *filename, *message, *tokenptr;
626
+ jint lineno, token_index;
627
+ jstring linebuf_jstr, filename_jstr, message_jstr;
628
+
629
+ /* Initialize everything to NULL */
630
+ memset(&report, 0, sizeof(JSErrorReport));
631
+ success = JS_FALSE;
632
+ filename_jstr = linebuf_jstr = message_jstr = NULL;
633
+ filename = message = linebuf = tokenptr = NULL;
634
+
635
+ lineno = (*jEnv)->GetIntField(jEnv, java_exception, njJSException_lineno);
636
+ report.lineno = lineno;
637
+
638
+ filename_jstr = (*jEnv)->GetObjectField(jEnv, java_exception, njJSException_filename);
639
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
640
+ jsj_UnexpectedJavaError(cx, jEnv, "Unable to access filename field of a JSException");
641
+ goto done;
642
+ }
643
+ if (filename_jstr)
644
+ filename = (*jEnv)->GetStringUTFChars(jEnv, filename_jstr, 0);
645
+ report.filename = filename;
646
+
647
+ linebuf_jstr = (*jEnv)->GetObjectField(jEnv, java_exception, njJSException_source);
648
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
649
+ jsj_UnexpectedJavaError(cx, jEnv, "Unable to access source field of a JSException");
650
+ goto done;
651
+ }
652
+ if (linebuf_jstr)
653
+ linebuf = (*jEnv)->GetStringUTFChars(jEnv, linebuf_jstr, 0);
654
+ report.linebuf = linebuf;
655
+
656
+ token_index = (*jEnv)->GetIntField(jEnv, java_exception, njJSException_lineno);
657
+ report.tokenptr = linebuf + token_index;
658
+
659
+ message_jstr = (*jEnv)->CallObjectMethod(jEnv, java_exception, jlThrowable_getMessage);
660
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
661
+ jsj_UnexpectedJavaError(cx, jEnv, "Unable to access message of a JSException");
662
+ goto done;
663
+ }
664
+ if (message_jstr)
665
+ message = (*jEnv)->GetStringUTFChars(jEnv, message_jstr, 0);
666
+
667
+ js_ReportErrorAgain(cx, message, &report);
668
+
669
+ success = JS_TRUE;
670
+
671
+ done:
672
+
673
+ if (filename_jstr && filename)
674
+ (*jEnv)->ReleaseStringUTFChars(jEnv, filename_jstr, filename);
675
+ if (linebuf_jstr && linebuf)
676
+ (*jEnv)->ReleaseStringUTFChars(jEnv, linebuf_jstr, linebuf);
677
+ if (message_jstr && message)
678
+ (*jEnv)->ReleaseStringUTFChars(jEnv, message_jstr, message);
679
+ return success;
680
+ }
681
+
682
+
683
+
684
+ /*************** Utilities for calling JavaScript from Java *****************/
685
+
686
+ /*
687
+ * This routine is called just prior to invoking any JS API function from
688
+ * Java. It performs a common set of chores, such as obtaining the LiveConnect
689
+ * state for the invoking Java thread and determining the JSContext to be
690
+ * used for this thread.
691
+ *
692
+ * Returns NULL on failure.
693
+ */
694
+
695
+
696
+ JSJavaThreadState *
697
+ jsj_enter_js(JNIEnv *jEnv, void* applet_obj, jobject java_wrapper_obj,
698
+ JSContext **cxp, JSObject **js_objp, JSErrorReporter *old_error_reporterp,
699
+ void **pNSIPrincipaArray, int numPrincipals, void *pNSISecurityContext)
700
+ {
701
+ JSContext *cx;
702
+ char *err_msg;
703
+ JSObject *js_obj;
704
+ JSJavaThreadState *jsj_env;
705
+
706
+ cx = NULL;
707
+ err_msg = NULL;
708
+
709
+ /* Invoke callback, presumably used to implement concurrency constraints */
710
+ if (JSJ_callbacks && JSJ_callbacks->enter_js_from_java) {
711
+ #ifdef OJI
712
+ if (!JSJ_callbacks->enter_js_from_java(jEnv, &err_msg, pNSIPrincipaArray, numPrincipals, pNSISecurityContext,applet_obj))
713
+ #else
714
+ if (!JSJ_callbacks->enter_js_from_java(jEnv, &err_msg))
715
+ #endif
716
+ goto entry_failure;
717
+ }
718
+
719
+ /* Check the JSObject pointer in the wrapper object. */
720
+ if (js_objp) {
721
+
722
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
723
+ #if JS_BYTES_PER_LONG == 8
724
+ js_obj = (JSObject *)((*jEnv)->GetLongField(jEnv, java_wrapper_obj, njJSObject_long_internal));
725
+ #else
726
+ js_obj = (JSObject *)((*jEnv)->GetIntField(jEnv, java_wrapper_obj, njJSObject_internal));
727
+ #endif
728
+ #else /* !PRESERVE_JSOBJECT_IDENTITY */
729
+ js_obj = jsj_UnwrapJSObjectWrapper(jEnv, java_wrapper_obj);
730
+ #endif /* PRESERVE_JSOBJECT_IDENTITY */
731
+
732
+ JS_ASSERT(js_obj);
733
+ if (!js_obj)
734
+ goto error;
735
+ *js_objp = js_obj;
736
+ }
737
+
738
+ /* Get the per-thread state corresponding to the current Java thread */
739
+ jsj_env = jsj_MapJavaThreadToJSJavaThreadState(jEnv, &err_msg);
740
+ if (!jsj_env)
741
+ goto error;
742
+
743
+ /* Get the JSContext that we're supposed to use for this Java thread */
744
+ cx = jsj_env->cx;
745
+ if (!cx) {
746
+ /* We called spontaneously into JS from Java, rather than from JS into
747
+ Java and back into JS. Invoke a callback to obtain/create a
748
+ JSContext for us to use. */
749
+ if (JSJ_callbacks && JSJ_callbacks->map_jsj_thread_to_js_context) {
750
+ #ifdef OJI
751
+ cx = JSJ_callbacks->map_jsj_thread_to_js_context(jsj_env,
752
+ applet_obj,
753
+ jEnv, &err_msg);
754
+ #else
755
+ cx = JSJ_callbacks->map_jsj_thread_to_js_context(jsj_env,
756
+ jEnv, &err_msg);
757
+ #endif
758
+ if (!cx)
759
+ goto error;
760
+ } else {
761
+ err_msg = JS_smprintf("Unable to find/create JavaScript execution "
762
+ "context for JNI thread 0x%08x", jEnv);
763
+ goto error;
764
+ }
765
+ }
766
+ *cxp = cx;
767
+
768
+ /*
769
+ * Capture all JS error reports so that they can be thrown into the Java
770
+ * caller as an instance of netscape.javascript.JSException.
771
+ */
772
+ *old_error_reporterp =
773
+ JS_SetErrorReporter(cx, capture_js_error_reports_for_java);
774
+
775
+ #ifdef JSJ_THREADSAFE
776
+ JS_BeginRequest(cx);
777
+ #endif
778
+
779
+ return jsj_env;
780
+
781
+ error:
782
+ /* Invoke callback, presumably used to implement concurrency constraints */
783
+ if (JSJ_callbacks && JSJ_callbacks->exit_js)
784
+ JSJ_callbacks->exit_js(jEnv, cx);
785
+
786
+ entry_failure:
787
+ if (err_msg) {
788
+ if (cx)
789
+ JS_ReportError(cx, err_msg);
790
+ else
791
+ jsj_LogError(err_msg);
792
+ free(err_msg);
793
+ }
794
+
795
+ return NULL;
796
+ }
797
+
798
+ /*
799
+ * This utility function is called just prior to returning into Java from JS.
800
+ */
801
+ JSBool
802
+ jsj_exit_js(JSContext *cx, JSJavaThreadState *jsj_env, JSErrorReporter original_reporter)
803
+ {
804
+ JNIEnv *jEnv;
805
+
806
+ #ifdef JSJ_THREADSAFE
807
+ JS_EndRequest(cx);
808
+ #endif
809
+
810
+ /* Restore the JS error reporter */
811
+ JS_SetErrorReporter(cx, original_reporter);
812
+
813
+ jEnv = jsj_env->jEnv;
814
+
815
+ #ifdef DEBUG
816
+ /* Any Java exceptions should have been noticed and reported already */
817
+ if ((*jEnv)->ExceptionOccurred(jEnv)) {
818
+ JS_ASSERT(0);
819
+ jsj_LogError("Unhandled Java exception detected");
820
+ return JS_FALSE;
821
+ }
822
+ #endif
823
+
824
+ /*
825
+ * Convert reported JS errors to JSExceptions, unless the errors were
826
+ * themselves the result of Java exceptions, in which case the original
827
+ * Java exception is simply propagated.
828
+ */
829
+ throw_any_pending_js_error_as_a_java_exception(jsj_env);
830
+
831
+ /* Invoke callback, presumably used to implement concurrency constraints */
832
+ if (JSJ_callbacks && JSJ_callbacks->exit_js)
833
+ JSJ_callbacks->exit_js(jEnv, cx);
834
+
835
+ return JS_TRUE;
836
+ }
837
+
838
+
839
+ /* Get the JavaClassDescriptor that corresponds to java.lang.Object */
840
+ JavaClassDescriptor *
841
+ jsj_get_jlObject_descriptor(JSContext *cx, JNIEnv *jEnv)
842
+ {
843
+ /* The JavaClassDescriptor for java.lang.Object */
844
+ static JavaClassDescriptor *jlObject_descriptor = NULL;
845
+
846
+ if (!jlObject_descriptor)
847
+ jlObject_descriptor = jsj_GetJavaClassDescriptor(cx, jEnv, jlObject);
848
+ return jlObject_descriptor;
849
+ }
850
+
851
+ /****************** Implementation of methods of JSObject *******************/
852
+
853
+ #ifdef XP_MAC
854
+ #pragma export on
855
+ #endif
856
+
857
+ /*
858
+ * Class: netscape_javascript_JSObject
859
+ * Method: initClass
860
+ * Signature: ()V
861
+ */
862
+ JNIEXPORT void JNICALL
863
+ Java_netscape_javascript_JSObject_initClass(JNIEnv *jEnv, jclass java_class)
864
+ {
865
+ jsj_init_js_obj_reflections_table();
866
+ }
867
+
868
+ /*
869
+ * Class: netscape_javascript_JSObject
870
+ * Method: getMember
871
+ * Signature: (Ljava/lang/String;)Ljava/lang/Object;
872
+ */
873
+ JNIEXPORT jobject JNICALL
874
+ Java_netscape_javascript_JSObject_getMember(JNIEnv *jEnv,
875
+ jobject java_wrapper_obj,
876
+ jstring property_name_jstr)
877
+ {
878
+ JSContext *cx = NULL;
879
+ JSObject *js_obj;
880
+ jsval js_val;
881
+ int dummy_cost;
882
+ JSBool dummy_bool;
883
+ const jchar *property_name_ucs2;
884
+ jsize property_name_len;
885
+ JSErrorReporter saved_reporter;
886
+ jobject member;
887
+ jboolean is_copy;
888
+ JSJavaThreadState *jsj_env;
889
+
890
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
891
+ if (!jsj_env)
892
+ return NULL;
893
+
894
+ property_name_ucs2 = NULL;
895
+ if (!property_name_jstr) {
896
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
897
+ JSJMSG_NULL_MEMBER_NAME);
898
+ member = NULL;
899
+ goto done;
900
+ }
901
+
902
+ /* Get the Unicode string for the JS property name */
903
+ property_name_ucs2 = (*jEnv)->GetStringChars(jEnv, property_name_jstr, &is_copy);
904
+ if (!property_name_ucs2) {
905
+ JS_ASSERT(0);
906
+ goto done;
907
+ }
908
+ property_name_len = (*jEnv)->GetStringLength(jEnv, property_name_jstr);
909
+
910
+ if (!JS_GetUCProperty(cx, js_obj, property_name_ucs2, property_name_len, &js_val))
911
+ goto done;
912
+
913
+ jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val,
914
+ jsj_get_jlObject_descriptor(cx, jEnv),
915
+ &dummy_cost, &member, &dummy_bool);
916
+
917
+ done:
918
+ if (property_name_ucs2)
919
+ (*jEnv)->ReleaseStringChars(jEnv, property_name_jstr, property_name_ucs2);
920
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
921
+ return NULL;
922
+
923
+ return member;
924
+ }
925
+
926
+ /*
927
+ * Class: netscape_javascript_JSObject
928
+ * Method: getSlot
929
+ * Signature: (I)Ljava/lang/Object;
930
+ */
931
+ JNIEXPORT jobject JNICALL
932
+ Java_netscape_javascript_JSObject_getSlot(JNIEnv *jEnv,
933
+ jobject java_wrapper_obj,
934
+ jint slot)
935
+ {
936
+ JSContext *cx = NULL;
937
+ JSObject *js_obj;
938
+ jsval js_val;
939
+ int dummy_cost;
940
+ JSBool dummy_bool;
941
+ JSErrorReporter saved_reporter;
942
+ jobject member;
943
+ JSJavaThreadState *jsj_env;
944
+
945
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
946
+ if (!jsj_env)
947
+ return NULL;
948
+
949
+
950
+ if (!JS_GetElement(cx, js_obj, slot, &js_val))
951
+ goto done;
952
+ if (!jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val, jsj_get_jlObject_descriptor(cx, jEnv),
953
+ &dummy_cost, &member, &dummy_bool))
954
+ goto done;
955
+
956
+ done:
957
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
958
+ return NULL;
959
+
960
+ return member;
961
+ }
962
+
963
+ /*
964
+ * Class: netscape_javascript_JSObject
965
+ * Method: setMember
966
+ * Signature: (Ljava/lang/String;Ljava/lang/Object;)V
967
+ */
968
+ JNIEXPORT void JNICALL
969
+ Java_netscape_javascript_JSObject_setMember(JNIEnv *jEnv,
970
+ jobject java_wrapper_obj,
971
+ jstring property_name_jstr,
972
+ jobject java_obj)
973
+ {
974
+ JSContext *cx = NULL;
975
+ JSObject *js_obj;
976
+ jsval js_val;
977
+ const jchar *property_name_ucs2;
978
+ jsize property_name_len;
979
+ JSErrorReporter saved_reporter;
980
+ jboolean is_copy;
981
+ JSJavaThreadState *jsj_env;
982
+
983
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
984
+ if (!jsj_env)
985
+ return;
986
+
987
+ property_name_ucs2 = NULL;
988
+ if (!property_name_jstr) {
989
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
990
+ JSJMSG_NULL_MEMBER_NAME);
991
+ goto done;
992
+ }
993
+
994
+ /* Get the Unicode string for the JS property name */
995
+ property_name_ucs2 = (*jEnv)->GetStringChars(jEnv, property_name_jstr, &is_copy);
996
+ if (!property_name_ucs2) {
997
+ JS_ASSERT(0);
998
+ goto done;
999
+ }
1000
+ property_name_len = (*jEnv)->GetStringLength(jEnv, property_name_jstr);
1001
+
1002
+ if (!jsj_ConvertJavaObjectToJSValue(cx, jEnv, java_obj, &js_val))
1003
+ goto done;
1004
+
1005
+ JS_SetUCProperty(cx, js_obj, property_name_ucs2, property_name_len, &js_val);
1006
+
1007
+ done:
1008
+ if (property_name_ucs2)
1009
+ (*jEnv)->ReleaseStringChars(jEnv, property_name_jstr, property_name_ucs2);
1010
+ jsj_exit_js(cx, jsj_env, saved_reporter);
1011
+ }
1012
+
1013
+ /*
1014
+ * Class: netscape_javascript_JSObject
1015
+ * Method: setSlot
1016
+ * Signature: (ILjava/lang/Object;)V
1017
+ */
1018
+ JNIEXPORT void JNICALL
1019
+ Java_netscape_javascript_JSObject_setSlot(JNIEnv *jEnv,
1020
+ jobject java_wrapper_obj,
1021
+ jint slot,
1022
+ jobject java_obj)
1023
+ {
1024
+ JSContext *cx = NULL;
1025
+ JSObject *js_obj;
1026
+ jsval js_val;
1027
+ JSErrorReporter saved_reporter;
1028
+ JSJavaThreadState *jsj_env;
1029
+
1030
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1031
+ if (!jsj_env)
1032
+ return;
1033
+
1034
+ if (!jsj_ConvertJavaObjectToJSValue(cx, jEnv, java_obj, &js_val))
1035
+ goto done;
1036
+ JS_SetElement(cx, js_obj, slot, &js_val);
1037
+
1038
+ done:
1039
+ jsj_exit_js(cx, jsj_env, saved_reporter);
1040
+ }
1041
+
1042
+ /*
1043
+ * Class: netscape_javascript_JSObject
1044
+ * Method: removeMember
1045
+ * Signature: (Ljava/lang/String;)V
1046
+ */
1047
+ JNIEXPORT void JNICALL
1048
+ Java_netscape_javascript_JSObject_removeMember(JNIEnv *jEnv,
1049
+ jobject java_wrapper_obj,
1050
+ jstring property_name_jstr)
1051
+ {
1052
+ JSContext *cx = NULL;
1053
+ JSObject *js_obj;
1054
+ jsval js_val;
1055
+ const jchar *property_name_ucs2;
1056
+ jsize property_name_len;
1057
+ JSErrorReporter saved_reporter;
1058
+ jboolean is_copy;
1059
+ JSJavaThreadState *jsj_env;
1060
+
1061
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1062
+ if (!jsj_env)
1063
+ return;
1064
+
1065
+ if (!property_name_jstr) {
1066
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
1067
+ JSJMSG_NULL_MEMBER_NAME);
1068
+ goto done;
1069
+ }
1070
+ /* Get the Unicode string for the JS property name */
1071
+ property_name_ucs2 = (*jEnv)->GetStringChars(jEnv, property_name_jstr, &is_copy);
1072
+ if (!property_name_ucs2) {
1073
+ JS_ASSERT(0);
1074
+ goto done;
1075
+ }
1076
+ property_name_len = (*jEnv)->GetStringLength(jEnv, property_name_jstr);
1077
+
1078
+ JS_DeleteUCProperty2(cx, js_obj, property_name_ucs2, property_name_len, &js_val);
1079
+
1080
+ (*jEnv)->ReleaseStringChars(jEnv, property_name_jstr, property_name_ucs2);
1081
+
1082
+ done:
1083
+ jsj_exit_js(cx, jsj_env, saved_reporter);
1084
+ return;
1085
+ }
1086
+
1087
+ /*
1088
+ * Class: netscape_javascript_JSObject
1089
+ * Method: call
1090
+ * Signature: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
1091
+ */
1092
+ JNIEXPORT jobject JNICALL
1093
+ Java_netscape_javascript_JSObject_call(JNIEnv *jEnv, jobject java_wrapper_obj,
1094
+ jstring function_name_jstr, jobjectArray java_args)
1095
+ {
1096
+ int i, argc, arg_num;
1097
+ jsval *argv;
1098
+ JSContext *cx = NULL;
1099
+ JSObject *js_obj;
1100
+ jsval js_val, function_val;
1101
+ int dummy_cost;
1102
+ JSBool dummy_bool;
1103
+ const jchar *function_name_ucs2;
1104
+ jsize function_name_len;
1105
+ JSErrorReporter saved_reporter;
1106
+ jboolean is_copy;
1107
+ jobject result;
1108
+ JSJavaThreadState *jsj_env;
1109
+
1110
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1111
+ if (!jsj_env)
1112
+ return NULL;
1113
+
1114
+ function_name_ucs2 = NULL;
1115
+ result = NULL;
1116
+ if (!function_name_jstr) {
1117
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
1118
+ JSJMSG_NULL_FUNCTION_NAME);
1119
+ goto done;
1120
+ }
1121
+
1122
+ /* Get the function name to eval as raw Unicode characters */
1123
+ function_name_ucs2 = (*jEnv)->GetStringChars(jEnv, function_name_jstr, &is_copy);
1124
+ if (!function_name_ucs2) {
1125
+ JS_ASSERT(0);
1126
+ goto done;
1127
+ }
1128
+ function_name_len = (*jEnv)->GetStringLength(jEnv, function_name_jstr);
1129
+
1130
+ /* Allocate space for JS arguments */
1131
+ if (java_args) {
1132
+ argc = (*jEnv)->GetArrayLength(jEnv, java_args);
1133
+ argv = (jsval*)JS_malloc(cx, argc * sizeof(jsval));
1134
+ } else {
1135
+ argc = 0;
1136
+ argv = 0;
1137
+ }
1138
+
1139
+ /* Convert arguments from Java to JS values */
1140
+ for (arg_num = 0; arg_num < argc; arg_num++) {
1141
+ jobject arg = (*jEnv)->GetObjectArrayElement(jEnv, java_args, arg_num);
1142
+
1143
+ if (!jsj_ConvertJavaObjectToJSValue(cx, jEnv, arg, &argv[arg_num]))
1144
+ goto cleanup_argv;
1145
+ JS_AddNamedRoot(cx, &argv[arg_num], "&argv[arg_num]");
1146
+ }
1147
+
1148
+ if (!JS_GetUCProperty(cx, js_obj, function_name_ucs2, function_name_len,
1149
+ &function_val))
1150
+ goto cleanup_argv;
1151
+
1152
+ if (!JS_CallFunctionValue(cx, js_obj, function_val, argc, argv, &js_val))
1153
+ goto cleanup_argv;
1154
+
1155
+ jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val, jsj_get_jlObject_descriptor(cx, jEnv),
1156
+ &dummy_cost, &result, &dummy_bool);
1157
+
1158
+ cleanup_argv:
1159
+ if (argv) {
1160
+ for (i = 0; i < arg_num; i++)
1161
+ JS_RemoveRoot(cx, &argv[i]);
1162
+ JS_free(cx, argv);
1163
+ }
1164
+
1165
+ done:
1166
+ if (function_name_ucs2)
1167
+ (*jEnv)->ReleaseStringChars(jEnv, function_name_jstr, function_name_ucs2);
1168
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
1169
+ return NULL;
1170
+
1171
+ return result;
1172
+ }
1173
+
1174
+ /*
1175
+ * Class: netscape_javascript_JSObject
1176
+ * Method: eval
1177
+ * Signature: (Ljava/lang/String;)Ljava/lang/Object;
1178
+ */
1179
+ JNIEXPORT jobject JNICALL
1180
+ Java_netscape_javascript_JSObject_eval(JNIEnv *jEnv,
1181
+ jobject java_wrapper_obj,
1182
+ jstring eval_jstr)
1183
+ {
1184
+ const char *codebase;
1185
+ JSPrincipals *principals;
1186
+ JSContext *cx = NULL;
1187
+ JSBool eval_succeeded;
1188
+ JSObject *js_obj;
1189
+ jsval js_val;
1190
+ int dummy_cost;
1191
+ JSBool dummy_bool;
1192
+ const jchar *eval_ucs2;
1193
+ jsize eval_len;
1194
+ JSErrorReporter saved_reporter;
1195
+ jboolean is_copy;
1196
+ jobject result;
1197
+ JSJavaThreadState *jsj_env;
1198
+
1199
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1200
+ if (!jsj_env)
1201
+ return NULL;
1202
+
1203
+ result = NULL;
1204
+ eval_ucs2 = NULL;
1205
+ if (!eval_jstr) {
1206
+ JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,
1207
+ JSJMSG_NULL_EVAL_ARG);
1208
+ goto done;
1209
+ }
1210
+
1211
+ /* Get the string to eval as raw Unicode characters */
1212
+ eval_ucs2 = (*jEnv)->GetStringChars(jEnv, eval_jstr, &is_copy);
1213
+ if (!eval_ucs2) {
1214
+ JS_ASSERT(0);
1215
+ goto done;
1216
+ }
1217
+ eval_len = (*jEnv)->GetStringLength(jEnv, eval_jstr);
1218
+
1219
+ /* Set up security stuff */
1220
+ principals = NULL;
1221
+ if (JSJ_callbacks && JSJ_callbacks->get_JSPrincipals_from_java_caller)
1222
+ principals = JSJ_callbacks->get_JSPrincipals_from_java_caller(jEnv, cx, NULL, 0, NULL);
1223
+ codebase = principals ? principals->codebase : NULL;
1224
+
1225
+ /* Have the JS engine evaluate the unicode string */
1226
+ eval_succeeded = JS_EvaluateUCScriptForPrincipals(cx, js_obj, principals,
1227
+ eval_ucs2, eval_len,
1228
+ codebase, 0, &js_val);
1229
+ if (!eval_succeeded)
1230
+ goto done;
1231
+
1232
+ /* Convert result to a subclass of java.lang.Object */
1233
+ jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val, jsj_get_jlObject_descriptor(cx, jEnv),
1234
+ &dummy_cost, &result, &dummy_bool);
1235
+
1236
+ done:
1237
+ if (eval_ucs2)
1238
+ (*jEnv)->ReleaseStringChars(jEnv, eval_jstr, eval_ucs2);
1239
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
1240
+ return NULL;
1241
+
1242
+ return result;
1243
+ }
1244
+
1245
+ /*
1246
+ * Class: netscape_javascript_JSObject
1247
+ * Method: toString
1248
+ * Signature: ()Ljava/lang/String;
1249
+ */
1250
+ JNIEXPORT jstring JNICALL
1251
+ Java_netscape_javascript_JSObject_toString(JNIEnv *jEnv,
1252
+ jobject java_wrapper_obj)
1253
+ {
1254
+ jstring result;
1255
+ JSContext *cx = NULL;
1256
+ JSObject *js_obj;
1257
+ JSString *jsstr;
1258
+ JSErrorReporter saved_reporter;
1259
+ JSJavaThreadState *jsj_env;
1260
+
1261
+ jsj_env = jsj_enter_js(jEnv, NULL, java_wrapper_obj, &cx, &js_obj, &saved_reporter, NULL, 0, NULL);
1262
+ if (!jsj_env)
1263
+ return NULL;
1264
+
1265
+ result = NULL;
1266
+ jsstr = JS_ValueToString(cx, OBJECT_TO_JSVAL(js_obj));
1267
+ if (jsstr)
1268
+ result = jsj_ConvertJSStringToJavaString(cx, jEnv, jsstr);
1269
+ if (!result)
1270
+ result = (*jEnv)->NewStringUTF(jEnv, "*JavaObject*");
1271
+
1272
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
1273
+ return NULL;
1274
+
1275
+ return result;
1276
+ }
1277
+
1278
+ /*
1279
+ * Class: netscape_javascript_JSObject
1280
+ * Method: getWindow
1281
+ * Signature: (Ljava/applet/Applet;)Lnetscape/javascript/JSObject;
1282
+ */
1283
+ JNIEXPORT jobject JNICALL
1284
+ Java_netscape_javascript_JSObject_getWindow(JNIEnv *jEnv,
1285
+ jclass js_object_class,
1286
+ jobject java_applet_obj)
1287
+ {
1288
+ char *err_msg;
1289
+ JSContext *cx = NULL;
1290
+ JSObject *js_obj = NULL;
1291
+ jsval js_val;
1292
+ int dummy_cost;
1293
+ JSBool dummy_bool;
1294
+ JSErrorReporter saved_reporter;
1295
+ jobject java_obj;
1296
+ JSJavaThreadState *jsj_env;
1297
+
1298
+ jsj_env = jsj_enter_js(jEnv, java_applet_obj, NULL, &cx, NULL, &saved_reporter, NULL, 0, NULL);
1299
+ if (!jsj_env)
1300
+ return NULL;
1301
+
1302
+ err_msg = NULL;
1303
+ java_obj = NULL;
1304
+ if (JSJ_callbacks && JSJ_callbacks->map_java_object_to_js_object)
1305
+ js_obj = JSJ_callbacks->map_java_object_to_js_object(jEnv, java_applet_obj, &err_msg);
1306
+ if (!js_obj) {
1307
+ if (err_msg) {
1308
+ JS_ReportError(cx, err_msg);
1309
+ free(err_msg);
1310
+ }
1311
+ goto done;
1312
+ }
1313
+ js_val = OBJECT_TO_JSVAL(js_obj);
1314
+ jsj_ConvertJSValueToJavaObject(cx, jEnv, js_val, jsj_get_jlObject_descriptor(cx, jEnv),
1315
+ &dummy_cost, &java_obj, &dummy_bool);
1316
+ done:
1317
+ if (!jsj_exit_js(cx, jsj_env, saved_reporter))
1318
+ return NULL;
1319
+
1320
+ return java_obj;
1321
+ }
1322
+
1323
+ /*
1324
+ * Class: netscape_javascript_JSObject
1325
+ * Method: finalize
1326
+ * Signature: ()V
1327
+ */
1328
+ JNIEXPORT void JNICALL
1329
+ Java_netscape_javascript_JSObject_finalize(JNIEnv *jEnv, jobject java_wrapper_obj)
1330
+ {
1331
+ JSBool success;
1332
+ JSObjectHandle *handle;
1333
+
1334
+ success = JS_FALSE;
1335
+
1336
+ #if JS_BYTES_PER_LONG == 8
1337
+ handle = (JSObjectHandle *)((*jEnv)->GetLongField(jEnv, java_wrapper_obj, njJSObject_long_internal));
1338
+ #else
1339
+ handle = (JSObjectHandle *)((*jEnv)->GetIntField(jEnv, java_wrapper_obj, njJSObject_internal));
1340
+ #endif
1341
+ JS_ASSERT(handle);
1342
+ if (!handle)
1343
+ return;
1344
+
1345
+ success = JS_RemoveRootRT(handle->rt, &handle->js_obj);
1346
+ free(handle);
1347
+
1348
+ JS_ASSERT(success);
1349
+ }
1350
+
1351
+ /*
1352
+ * Class: netscape_javascript_JSObject
1353
+ * Method: equals
1354
+ * Signature: (Ljava/lang/Object;)Z
1355
+ */
1356
+
1357
+ JNIEXPORT jboolean JNICALL
1358
+ Java_netscape_javascript_JSObject_equals(JNIEnv *jEnv,
1359
+ jobject java_wrapper_obj,
1360
+ jobject comparison_obj)
1361
+ {
1362
+ #ifdef PRESERVE_JSOBJECT_IDENTITY
1363
+ # error "Missing code should be added here"
1364
+ #else
1365
+ JSObject *js_obj1, *js_obj2;
1366
+
1367
+ /* Check that we're comparing with another netscape.javascript.JSObject */
1368
+ if (!comparison_obj)
1369
+ return 0;
1370
+ if (!(*jEnv)->IsInstanceOf(jEnv, comparison_obj, njJSObject))
1371
+ return 0;
1372
+
1373
+ js_obj1 = jsj_UnwrapJSObjectWrapper(jEnv, java_wrapper_obj);
1374
+ js_obj2 = jsj_UnwrapJSObjectWrapper(jEnv, comparison_obj);
1375
+
1376
+ return (js_obj1 == js_obj2);
1377
+ #endif /* PRESERVE_JSOBJECT_IDENTITY */
1378
+ }
1379
+