distil 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,927 @@
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
+ * JS atom table.
42
+ */
43
+ #include "jsstddef.h"
44
+ #include <stdlib.h>
45
+ #include <string.h>
46
+ #include "jstypes.h"
47
+ #include "jsutil.h" /* Added by JSIFY */
48
+ #include "jshash.h" /* Added by JSIFY */
49
+ #include "jsprf.h"
50
+ #include "jsapi.h"
51
+ #include "jsatom.h"
52
+ #include "jscntxt.h"
53
+ #include "jsgc.h"
54
+ #include "jslock.h"
55
+ #include "jsnum.h"
56
+ #include "jsopcode.h"
57
+ #include "jsstr.h"
58
+
59
+ JS_FRIEND_API(const char *)
60
+ js_AtomToPrintableString(JSContext *cx, JSAtom *atom)
61
+ {
62
+ JSString *str;
63
+ const char *bytes;
64
+
65
+ str = js_QuoteString(cx, ATOM_TO_STRING(atom), 0);
66
+ if (!str)
67
+ return NULL;
68
+ bytes = js_GetStringBytes(str);
69
+ if (!bytes)
70
+ JS_ReportOutOfMemory(cx);
71
+ return bytes;
72
+ }
73
+
74
+ extern const char js_Error_str[]; /* trivial, from jsexn.h */
75
+
76
+ /*
77
+ * Keep this in sync with jspubtd.h -- an assertion below will insist that
78
+ * its length match the JSType enum's JSTYPE_LIMIT limit value.
79
+ */
80
+ const char *js_type_str[] = {
81
+ "undefined",
82
+ "object",
83
+ "function",
84
+ "string",
85
+ "number",
86
+ "boolean",
87
+ };
88
+
89
+ const char *js_boolean_str[] = {
90
+ js_false_str,
91
+ js_true_str
92
+ };
93
+
94
+ const char js_Arguments_str[] = "Arguments";
95
+ const char js_Array_str[] = "Array";
96
+ const char js_Boolean_str[] = "Boolean";
97
+ const char js_Call_str[] = "Call";
98
+ const char js_Date_str[] = "Date";
99
+ const char js_Function_str[] = "Function";
100
+ const char js_Math_str[] = "Math";
101
+ const char js_Number_str[] = "Number";
102
+ const char js_Object_str[] = "Object";
103
+ const char js_RegExp_str[] = "RegExp";
104
+ const char js_Script_str[] = "Script";
105
+ const char js_String_str[] = "String";
106
+ const char js_anonymous_str[] = "anonymous";
107
+ const char js_arguments_str[] = "arguments";
108
+ const char js_arity_str[] = "arity";
109
+ const char js_callee_str[] = "callee";
110
+ const char js_caller_str[] = "caller";
111
+ const char js_class_prototype_str[] = "prototype";
112
+ const char js_constructor_str[] = "constructor";
113
+ const char js_count_str[] = "__count__";
114
+ const char js_eval_str[] = "eval";
115
+ const char js_getter_str[] = "getter";
116
+ const char js_get_str[] = "get";
117
+ const char js_index_str[] = "index";
118
+ const char js_input_str[] = "input";
119
+ const char js_length_str[] = "length";
120
+ const char js_name_str[] = "name";
121
+ const char js_noSuchMethod_str[] = "__noSuchMethod__";
122
+ const char js_parent_str[] = "__parent__";
123
+ const char js_proto_str[] = "__proto__";
124
+ const char js_setter_str[] = "setter";
125
+ const char js_set_str[] = "set";
126
+ const char js_toSource_str[] = "toSource";
127
+ const char js_toString_str[] = "toString";
128
+ const char js_toLocaleString_str[] = "toLocaleString";
129
+ const char js_valueOf_str[] = "valueOf";
130
+
131
+ #ifdef NARCISSUS
132
+ const char js_call_str[] = "__call__";
133
+ const char js_construct_str[] = "__construct__";
134
+ const char js_hasInstance_str[] = "__hasInstance__";
135
+ const char js_ExecutionContext_str[] = "ExecutionContext";
136
+ const char js_current_str[] = "current";
137
+ #endif
138
+
139
+ #define HASH_OBJECT(o) ((JSHashNumber)(o) >> JSVAL_TAGBITS)
140
+ #define HASH_INT(i) ((JSHashNumber)(i))
141
+ #define HASH_DOUBLE(dp) ((JSHashNumber)(JSDOUBLE_HI32(*dp) ^ JSDOUBLE_LO32(*dp)))
142
+ #define HASH_BOOLEAN(b) ((JSHashNumber)(b))
143
+
144
+ JS_STATIC_DLL_CALLBACK(JSHashNumber)
145
+ js_hash_atom_key(const void *key)
146
+ {
147
+ jsval v;
148
+ jsdouble *dp;
149
+
150
+ /* Order JSVAL_IS_* tests by likelihood of success. */
151
+ v = (jsval)key;
152
+ if (JSVAL_IS_STRING(v))
153
+ return js_HashString(JSVAL_TO_STRING(v));
154
+ if (JSVAL_IS_INT(v))
155
+ return HASH_INT(JSVAL_TO_INT(v));
156
+ if (JSVAL_IS_DOUBLE(v)) {
157
+ dp = JSVAL_TO_DOUBLE(v);
158
+ return HASH_DOUBLE(dp);
159
+ }
160
+ if (JSVAL_IS_OBJECT(v))
161
+ return HASH_OBJECT(JSVAL_TO_OBJECT(v));
162
+ if (JSVAL_IS_BOOLEAN(v))
163
+ return HASH_BOOLEAN(JSVAL_TO_BOOLEAN(v));
164
+ return (JSHashNumber)v;
165
+ }
166
+
167
+ JS_STATIC_DLL_CALLBACK(intN)
168
+ js_compare_atom_keys(const void *k1, const void *k2)
169
+ {
170
+ jsval v1, v2;
171
+
172
+ v1 = (jsval)k1, v2 = (jsval)k2;
173
+ if (JSVAL_IS_STRING(v1) && JSVAL_IS_STRING(v2))
174
+ return !js_CompareStrings(JSVAL_TO_STRING(v1), JSVAL_TO_STRING(v2));
175
+ if (JSVAL_IS_DOUBLE(v1) && JSVAL_IS_DOUBLE(v2)) {
176
+ double d1 = *JSVAL_TO_DOUBLE(v1);
177
+ double d2 = *JSVAL_TO_DOUBLE(v2);
178
+ if (JSDOUBLE_IS_NaN(d1))
179
+ return JSDOUBLE_IS_NaN(d2);
180
+ #if defined(XP_WIN)
181
+ /* XXX MSVC miscompiles such that (NaN == 0) */
182
+ if (JSDOUBLE_IS_NaN(d2))
183
+ return JS_FALSE;
184
+ #endif
185
+ return d1 == d2;
186
+ }
187
+ return v1 == v2;
188
+ }
189
+
190
+ JS_STATIC_DLL_CALLBACK(int)
191
+ js_compare_stub(const void *v1, const void *v2)
192
+ {
193
+ return 1;
194
+ }
195
+
196
+ /* These next two are exported to jsscript.c and used similarly there. */
197
+ void * JS_DLL_CALLBACK
198
+ js_alloc_table_space(void *priv, size_t size)
199
+ {
200
+ return malloc(size);
201
+ }
202
+
203
+ void JS_DLL_CALLBACK
204
+ js_free_table_space(void *priv, void *item)
205
+ {
206
+ free(item);
207
+ }
208
+
209
+ JS_STATIC_DLL_CALLBACK(JSHashEntry *)
210
+ js_alloc_atom(void *priv, const void *key)
211
+ {
212
+ JSAtomState *state = (JSAtomState *) priv;
213
+ JSAtom *atom;
214
+
215
+ atom = (JSAtom *) malloc(sizeof(JSAtom));
216
+ if (!atom)
217
+ return NULL;
218
+ #ifdef JS_THREADSAFE
219
+ state->tablegen++;
220
+ #endif
221
+ atom->entry.key = key;
222
+ atom->entry.value = NULL;
223
+ atom->flags = 0;
224
+ atom->number = state->number++;
225
+ return &atom->entry;
226
+ }
227
+
228
+ JS_STATIC_DLL_CALLBACK(void)
229
+ js_free_atom(void *priv, JSHashEntry *he, uintN flag)
230
+ {
231
+ if (flag != HT_FREE_ENTRY)
232
+ return;
233
+ #ifdef JS_THREADSAFE
234
+ ((JSAtomState *)priv)->tablegen++;
235
+ #endif
236
+ free(he);
237
+ }
238
+
239
+ static JSHashAllocOps atom_alloc_ops = {
240
+ js_alloc_table_space, js_free_table_space,
241
+ js_alloc_atom, js_free_atom
242
+ };
243
+
244
+ #define JS_ATOM_HASH_SIZE 1024
245
+
246
+ JSBool
247
+ js_InitAtomState(JSContext *cx, JSAtomState *state)
248
+ {
249
+ state->table = JS_NewHashTable(JS_ATOM_HASH_SIZE, js_hash_atom_key,
250
+ js_compare_atom_keys, js_compare_stub,
251
+ &atom_alloc_ops, state);
252
+ if (!state->table) {
253
+ JS_ReportOutOfMemory(cx);
254
+ return JS_FALSE;
255
+ }
256
+
257
+ state->runtime = cx->runtime;
258
+ #ifdef JS_THREADSAFE
259
+ js_InitLock(&state->lock);
260
+ state->tablegen = 0;
261
+ #endif
262
+
263
+ if (!js_InitPinnedAtoms(cx, state)) {
264
+ js_FreeAtomState(cx, state);
265
+ return JS_FALSE;
266
+ }
267
+ return JS_TRUE;
268
+ }
269
+
270
+ JSBool
271
+ js_InitPinnedAtoms(JSContext *cx, JSAtomState *state)
272
+ {
273
+ uintN i;
274
+
275
+ #define FROB(lval,str) \
276
+ JS_BEGIN_MACRO \
277
+ if (!(state->lval = js_Atomize(cx, str, strlen(str), ATOM_PINNED))) \
278
+ return JS_FALSE; \
279
+ JS_END_MACRO
280
+
281
+ JS_ASSERT(sizeof js_type_str / sizeof js_type_str[0] == JSTYPE_LIMIT);
282
+ for (i = 0; i < JSTYPE_LIMIT; i++)
283
+ FROB(typeAtoms[i], js_type_str[i]);
284
+
285
+ FROB(booleanAtoms[0], js_false_str);
286
+ FROB(booleanAtoms[1], js_true_str);
287
+ FROB(nullAtom, js_null_str);
288
+
289
+ FROB(ArgumentsAtom, js_Arguments_str);
290
+ FROB(ArrayAtom, js_Array_str);
291
+ FROB(BooleanAtom, js_Boolean_str);
292
+ FROB(CallAtom, js_Call_str);
293
+ FROB(DateAtom, js_Date_str);
294
+ FROB(ErrorAtom, js_Error_str);
295
+ FROB(FunctionAtom, js_Function_str);
296
+ FROB(MathAtom, js_Math_str);
297
+ FROB(NumberAtom, js_Number_str);
298
+ FROB(ObjectAtom, js_Object_str);
299
+ FROB(RegExpAtom, js_RegExp_str);
300
+ FROB(ScriptAtom, js_Script_str);
301
+ FROB(StringAtom, js_String_str);
302
+ FROB(anonymousAtom, js_anonymous_str);
303
+ FROB(argumentsAtom, js_arguments_str);
304
+ FROB(arityAtom, js_arity_str);
305
+ FROB(calleeAtom, js_callee_str);
306
+ FROB(callerAtom, js_caller_str);
307
+ FROB(classPrototypeAtom, js_class_prototype_str);
308
+ FROB(constructorAtom, js_constructor_str);
309
+ FROB(countAtom, js_count_str);
310
+ FROB(evalAtom, js_eval_str);
311
+ FROB(getAtom, js_get_str);
312
+ FROB(getterAtom, js_getter_str);
313
+ FROB(indexAtom, js_index_str);
314
+ FROB(inputAtom, js_input_str);
315
+ FROB(lengthAtom, js_length_str);
316
+ FROB(nameAtom, js_name_str);
317
+ FROB(noSuchMethodAtom, js_noSuchMethod_str);
318
+ FROB(parentAtom, js_parent_str);
319
+ FROB(protoAtom, js_proto_str);
320
+ FROB(setAtom, js_set_str);
321
+ FROB(setterAtom, js_setter_str);
322
+ FROB(toSourceAtom, js_toSource_str);
323
+ FROB(toStringAtom, js_toString_str);
324
+ FROB(toLocaleStringAtom, js_toLocaleString_str);
325
+ FROB(valueOfAtom, js_valueOf_str);
326
+
327
+ #ifdef NARCISSUS
328
+ FROB(callAtom, js_call_str);
329
+ FROB(constructAtom, js_construct_str);
330
+ FROB(hasInstanceAtom, js_hasInstance_str);
331
+ FROB(ExecutionContextAtom, js_ExecutionContext_str);
332
+ FROB(currentAtom, js_current_str);
333
+ #endif
334
+
335
+ #undef FROB
336
+
337
+ memset(&state->lazy, 0, sizeof state->lazy);
338
+ return JS_TRUE;
339
+ }
340
+
341
+ /* NB: cx unused; js_FinishAtomState calls us with null cx. */
342
+ void
343
+ js_FreeAtomState(JSContext *cx, JSAtomState *state)
344
+ {
345
+ if (state->table)
346
+ JS_HashTableDestroy(state->table);
347
+ #ifdef JS_THREADSAFE
348
+ js_FinishLock(&state->lock);
349
+ #endif
350
+ memset(state, 0, sizeof *state);
351
+ }
352
+
353
+ typedef struct UninternArgs {
354
+ JSRuntime *rt;
355
+ jsatomid leaks;
356
+ } UninternArgs;
357
+
358
+ JS_STATIC_DLL_CALLBACK(intN)
359
+ js_atom_uninterner(JSHashEntry *he, intN i, void *arg)
360
+ {
361
+ JSAtom *atom;
362
+ UninternArgs *args;
363
+
364
+ atom = (JSAtom *)he;
365
+ args = (UninternArgs *)arg;
366
+ if (ATOM_IS_STRING(atom))
367
+ js_FinalizeStringRT(args->rt, ATOM_TO_STRING(atom));
368
+ else if (ATOM_IS_OBJECT(atom))
369
+ args->leaks++;
370
+ return HT_ENUMERATE_NEXT;
371
+ }
372
+
373
+ void
374
+ js_FinishAtomState(JSAtomState *state)
375
+ {
376
+ UninternArgs args;
377
+
378
+ if (!state->table)
379
+ return;
380
+ args.rt = state->runtime;
381
+ args.leaks = 0;
382
+ JS_HashTableEnumerateEntries(state->table, js_atom_uninterner, &args);
383
+ #ifdef DEBUG
384
+ if (args.leaks != 0) {
385
+ fprintf(stderr,
386
+ "JS engine warning: %lu atoms remain after destroying the JSRuntime.\n"
387
+ " These atoms may point to freed memory. Things reachable\n"
388
+ " through them have not been finalized.\n",
389
+ (unsigned long) args.leaks);
390
+ }
391
+ #endif
392
+ js_FreeAtomState(NULL, state);
393
+ }
394
+
395
+ typedef struct MarkArgs {
396
+ uintN gcflags;
397
+ JSGCThingMarker mark;
398
+ void *data;
399
+ } MarkArgs;
400
+
401
+ JS_STATIC_DLL_CALLBACK(intN)
402
+ js_atom_marker(JSHashEntry *he, intN i, void *arg)
403
+ {
404
+ JSAtom *atom;
405
+ MarkArgs *args;
406
+ jsval key;
407
+
408
+ atom = (JSAtom *)he;
409
+ args = (MarkArgs *)arg;
410
+ if ((atom->flags & (ATOM_PINNED | ATOM_INTERNED)) ||
411
+ (args->gcflags & GC_KEEP_ATOMS)) {
412
+ atom->flags |= ATOM_MARK;
413
+ key = ATOM_KEY(atom);
414
+ if (JSVAL_IS_GCTHING(key))
415
+ args->mark(JSVAL_TO_GCTHING(key), args->data);
416
+ }
417
+ return HT_ENUMERATE_NEXT;
418
+ }
419
+
420
+ void
421
+ js_MarkAtomState(JSAtomState *state, uintN gcflags, JSGCThingMarker mark,
422
+ void *data)
423
+ {
424
+ MarkArgs args;
425
+
426
+ if (!state->table)
427
+ return;
428
+ args.gcflags = gcflags;
429
+ args.mark = mark;
430
+ args.data = data;
431
+ JS_HashTableEnumerateEntries(state->table, js_atom_marker, &args);
432
+ }
433
+
434
+ JS_STATIC_DLL_CALLBACK(intN)
435
+ js_atom_sweeper(JSHashEntry *he, intN i, void *arg)
436
+ {
437
+ JSAtom *atom;
438
+ JSAtomState *state;
439
+
440
+ atom = (JSAtom *)he;
441
+ if (atom->flags & ATOM_MARK) {
442
+ atom->flags &= ~ATOM_MARK;
443
+ state = (JSAtomState *)arg;
444
+ state->liveAtoms++;
445
+ return HT_ENUMERATE_NEXT;
446
+ }
447
+ JS_ASSERT((atom->flags & (ATOM_PINNED | ATOM_INTERNED)) == 0);
448
+ atom->entry.key = NULL;
449
+ atom->flags = 0;
450
+ return HT_ENUMERATE_REMOVE;
451
+ }
452
+
453
+ void
454
+ js_SweepAtomState(JSAtomState *state)
455
+ {
456
+ state->liveAtoms = 0;
457
+ if (state->table)
458
+ JS_HashTableEnumerateEntries(state->table, js_atom_sweeper, state);
459
+ }
460
+
461
+ JS_STATIC_DLL_CALLBACK(intN)
462
+ js_atom_unpinner(JSHashEntry *he, intN i, void *arg)
463
+ {
464
+ JSAtom *atom;
465
+
466
+ atom = (JSAtom *)he;
467
+ atom->flags &= ~ATOM_PINNED;
468
+ return HT_ENUMERATE_NEXT;
469
+ }
470
+
471
+ void
472
+ js_UnpinPinnedAtoms(JSAtomState *state)
473
+ {
474
+ if (state->table)
475
+ JS_HashTableEnumerateEntries(state->table, js_atom_unpinner, NULL);
476
+ }
477
+
478
+ static JSAtom *
479
+ js_AtomizeHashedKey(JSContext *cx, jsval key, JSHashNumber keyHash, uintN flags)
480
+ {
481
+ JSAtomState *state;
482
+ JSHashTable *table;
483
+ JSHashEntry *he, **hep;
484
+ JSAtom *atom;
485
+
486
+ state = &cx->runtime->atomState;
487
+ JS_LOCK(&state->lock, cx);
488
+ table = state->table;
489
+ hep = JS_HashTableRawLookup(table, keyHash, (void *)key);
490
+ if ((he = *hep) == NULL) {
491
+ he = JS_HashTableRawAdd(table, hep, keyHash, (void *)key, NULL);
492
+ if (!he) {
493
+ JS_ReportOutOfMemory(cx);
494
+ atom = NULL;
495
+ goto out;
496
+ }
497
+ }
498
+
499
+ atom = (JSAtom *)he;
500
+ atom->flags |= flags;
501
+ cx->lastAtom = atom;
502
+ out:
503
+ JS_UNLOCK(&state->lock,cx);
504
+ return atom;
505
+ }
506
+
507
+ JSAtom *
508
+ js_AtomizeObject(JSContext *cx, JSObject *obj, uintN flags)
509
+ {
510
+ jsval key;
511
+ JSHashNumber keyHash;
512
+
513
+ /* XXX must be set in the following order or MSVC1.52 will crash */
514
+ keyHash = HASH_OBJECT(obj);
515
+ key = OBJECT_TO_JSVAL(obj);
516
+ return js_AtomizeHashedKey(cx, key, keyHash, flags);
517
+ }
518
+
519
+ JSAtom *
520
+ js_AtomizeBoolean(JSContext *cx, JSBool b, uintN flags)
521
+ {
522
+ jsval key;
523
+ JSHashNumber keyHash;
524
+
525
+ key = BOOLEAN_TO_JSVAL(b);
526
+ keyHash = HASH_BOOLEAN(b);
527
+ return js_AtomizeHashedKey(cx, key, keyHash, flags);
528
+ }
529
+
530
+ JSAtom *
531
+ js_AtomizeInt(JSContext *cx, jsint i, uintN flags)
532
+ {
533
+ jsval key;
534
+ JSHashNumber keyHash;
535
+
536
+ key = INT_TO_JSVAL(i);
537
+ keyHash = HASH_INT(i);
538
+ return js_AtomizeHashedKey(cx, key, keyHash, flags);
539
+ }
540
+
541
+ /* Worst-case alignment grain and aligning macro for 2x-sized buffer. */
542
+ #define ALIGNMENT(t) JS_MAX(JSVAL_ALIGN, sizeof(t))
543
+ #define ALIGN(b,t) ((t*) &(b)[ALIGNMENT(t) - (jsuword)(b) % ALIGNMENT(t)])
544
+
545
+ JSAtom *
546
+ js_AtomizeDouble(JSContext *cx, jsdouble d, uintN flags)
547
+ {
548
+ jsdouble *dp;
549
+ JSHashNumber keyHash;
550
+ jsval key;
551
+ JSAtomState *state;
552
+ JSHashTable *table;
553
+ JSHashEntry *he, **hep;
554
+ JSAtom *atom;
555
+ char buf[2 * ALIGNMENT(double)];
556
+
557
+ dp = ALIGN(buf, double);
558
+ *dp = d;
559
+ keyHash = HASH_DOUBLE(dp);
560
+ key = DOUBLE_TO_JSVAL(dp);
561
+ state = &cx->runtime->atomState;
562
+ JS_LOCK(&state->lock, cx);
563
+ table = state->table;
564
+ hep = JS_HashTableRawLookup(table, keyHash, (void *)key);
565
+ if ((he = *hep) == NULL) {
566
+ #ifdef JS_THREADSAFE
567
+ uint32 gen = state->tablegen;
568
+ #endif
569
+ JS_UNLOCK(&state->lock,cx);
570
+ if (!js_NewDoubleValue(cx, d, &key))
571
+ return NULL;
572
+ JS_LOCK(&state->lock, cx);
573
+ #ifdef JS_THREADSAFE
574
+ if (state->tablegen != gen) {
575
+ hep = JS_HashTableRawLookup(table, keyHash, (void *)key);
576
+ if ((he = *hep) != NULL) {
577
+ atom = (JSAtom *)he;
578
+ goto out;
579
+ }
580
+ }
581
+ #endif
582
+ he = JS_HashTableRawAdd(table, hep, keyHash, (void *)key, NULL);
583
+ if (!he) {
584
+ JS_ReportOutOfMemory(cx);
585
+ atom = NULL;
586
+ goto out;
587
+ }
588
+ }
589
+
590
+ atom = (JSAtom *)he;
591
+ atom->flags |= flags;
592
+ cx->lastAtom = atom;
593
+ out:
594
+ JS_UNLOCK(&state->lock,cx);
595
+ return atom;
596
+ }
597
+
598
+ JSAtom *
599
+ js_AtomizeString(JSContext *cx, JSString *str, uintN flags)
600
+ {
601
+ JSHashNumber keyHash;
602
+ jsval key;
603
+ JSAtomState *state;
604
+ JSHashTable *table;
605
+ JSHashEntry *he, **hep;
606
+ JSAtom *atom;
607
+
608
+ keyHash = js_HashString(str);
609
+ key = STRING_TO_JSVAL(str);
610
+ state = &cx->runtime->atomState;
611
+ JS_LOCK(&state->lock, cx);
612
+ table = state->table;
613
+ hep = JS_HashTableRawLookup(table, keyHash, (void *)key);
614
+ if ((he = *hep) == NULL) {
615
+ #ifdef JS_THREADSAFE
616
+ uint32 gen = state->tablegen;
617
+ JS_UNLOCK(&state->lock, cx);
618
+ #endif
619
+
620
+ if (flags & ATOM_TMPSTR) {
621
+ str = (flags & ATOM_NOCOPY)
622
+ ? js_NewString(cx, str->chars, str->length, 0)
623
+ : js_NewStringCopyN(cx, str->chars, str->length, 0);
624
+ if (!str)
625
+ return NULL;
626
+ key = STRING_TO_JSVAL(str);
627
+ } else {
628
+ if (!JS_MakeStringImmutable(cx, str))
629
+ return NULL;
630
+ }
631
+
632
+ #ifdef JS_THREADSAFE
633
+ JS_LOCK(&state->lock, cx);
634
+ if (state->tablegen != gen) {
635
+ hep = JS_HashTableRawLookup(table, keyHash, (void *)key);
636
+ if ((he = *hep) != NULL) {
637
+ atom = (JSAtom *)he;
638
+ if (flags & ATOM_NOCOPY)
639
+ str->chars = NULL;
640
+ goto out;
641
+ }
642
+ }
643
+ #endif
644
+
645
+ he = JS_HashTableRawAdd(table, hep, keyHash, (void *)key, NULL);
646
+ if (!he) {
647
+ JS_ReportOutOfMemory(cx);
648
+ atom = NULL;
649
+ goto out;
650
+ }
651
+ }
652
+
653
+ atom = (JSAtom *)he;
654
+ atom->flags |= flags & (ATOM_PINNED | ATOM_INTERNED);
655
+ cx->lastAtom = atom;
656
+ out:
657
+ JS_UNLOCK(&state->lock,cx);
658
+ return atom;
659
+ }
660
+
661
+ JS_FRIEND_API(JSAtom *)
662
+ js_Atomize(JSContext *cx, const char *bytes, size_t length, uintN flags)
663
+ {
664
+ jschar *chars;
665
+ JSString *str;
666
+ JSAtom *atom;
667
+ char buf[2 * ALIGNMENT(JSString)];
668
+
669
+ /*
670
+ * Avoiding the malloc in js_InflateString on shorter strings saves us
671
+ * over 20,000 malloc calls on mozilla browser startup. This compares to
672
+ * only 131 calls where the string is longer than a 31 char (net) buffer.
673
+ * The vast majority of atomized strings are already in the hashtable. So
674
+ * js_AtomizeString rarely has to copy the temp string we make.
675
+ */
676
+ #define ATOMIZE_BUF_MAX 32
677
+ jschar inflated[ATOMIZE_BUF_MAX];
678
+
679
+ if (length < ATOMIZE_BUF_MAX) {
680
+ js_InflateStringToBuffer(inflated, bytes, length);
681
+ chars = inflated;
682
+ } else {
683
+ chars = js_InflateString(cx, bytes, length);
684
+ if (!chars)
685
+ return NULL;
686
+ flags |= ATOM_NOCOPY;
687
+ }
688
+
689
+ str = ALIGN(buf, JSString);
690
+
691
+ str->chars = chars;
692
+ str->length = length;
693
+ atom = js_AtomizeString(cx, str, ATOM_TMPSTR | flags);
694
+ if (chars != inflated && (!atom || ATOM_TO_STRING(atom)->chars != chars))
695
+ JS_free(cx, chars);
696
+ return atom;
697
+ }
698
+
699
+ JS_FRIEND_API(JSAtom *)
700
+ js_AtomizeChars(JSContext *cx, const jschar *chars, size_t length, uintN flags)
701
+ {
702
+ JSString *str;
703
+ char buf[2 * ALIGNMENT(JSString)];
704
+
705
+ str = ALIGN(buf, JSString);
706
+ str->chars = (jschar *)chars;
707
+ str->length = length;
708
+ return js_AtomizeString(cx, str, ATOM_TMPSTR | flags);
709
+ }
710
+
711
+ JSAtom *
712
+ js_AtomizeValue(JSContext *cx, jsval value, uintN flags)
713
+ {
714
+ if (JSVAL_IS_STRING(value))
715
+ return js_AtomizeString(cx, JSVAL_TO_STRING(value), flags);
716
+ if (JSVAL_IS_INT(value))
717
+ return js_AtomizeInt(cx, JSVAL_TO_INT(value), flags);
718
+ if (JSVAL_IS_DOUBLE(value))
719
+ return js_AtomizeDouble(cx, *JSVAL_TO_DOUBLE(value), flags);
720
+ if (JSVAL_IS_OBJECT(value))
721
+ return js_AtomizeObject(cx, JSVAL_TO_OBJECT(value), flags);
722
+ if (JSVAL_IS_BOOLEAN(value))
723
+ return js_AtomizeBoolean(cx, JSVAL_TO_BOOLEAN(value), flags);
724
+ return js_AtomizeHashedKey(cx, value, (JSHashNumber)value, flags);
725
+ }
726
+
727
+ JSAtom *
728
+ js_ValueToStringAtom(JSContext *cx, jsval v)
729
+ {
730
+ JSString *str;
731
+
732
+ str = js_ValueToString(cx, v);
733
+ if (!str)
734
+ return NULL;
735
+ return js_AtomizeString(cx, str, 0);
736
+ }
737
+
738
+ JS_STATIC_DLL_CALLBACK(JSHashNumber)
739
+ js_hash_atom_ptr(const void *key)
740
+ {
741
+ const JSAtom *atom = key;
742
+ return atom->number;
743
+ }
744
+
745
+ JS_STATIC_DLL_CALLBACK(void *)
746
+ js_alloc_temp_space(void *priv, size_t size)
747
+ {
748
+ JSContext *cx = priv;
749
+ void *space;
750
+
751
+ JS_ARENA_ALLOCATE(space, &cx->tempPool, size);
752
+ if (!space)
753
+ JS_ReportOutOfMemory(cx);
754
+ return space;
755
+ }
756
+
757
+ JS_STATIC_DLL_CALLBACK(void)
758
+ js_free_temp_space(void *priv, void *item)
759
+ {
760
+ }
761
+
762
+ JS_STATIC_DLL_CALLBACK(JSHashEntry *)
763
+ js_alloc_temp_entry(void *priv, const void *key)
764
+ {
765
+ JSContext *cx = priv;
766
+ JSAtomListElement *ale;
767
+
768
+ JS_ARENA_ALLOCATE_TYPE(ale, JSAtomListElement, &cx->tempPool);
769
+ if (!ale) {
770
+ JS_ReportOutOfMemory(cx);
771
+ return NULL;
772
+ }
773
+ return &ale->entry;
774
+ }
775
+
776
+ JS_STATIC_DLL_CALLBACK(void)
777
+ js_free_temp_entry(void *priv, JSHashEntry *he, uintN flag)
778
+ {
779
+ }
780
+
781
+ static JSHashAllocOps temp_alloc_ops = {
782
+ js_alloc_temp_space, js_free_temp_space,
783
+ js_alloc_temp_entry, js_free_temp_entry
784
+ };
785
+
786
+ JSAtomListElement *
787
+ js_IndexAtom(JSContext *cx, JSAtom *atom, JSAtomList *al)
788
+ {
789
+ JSAtomListElement *ale, *ale2, *next;
790
+ JSHashEntry **hep;
791
+
792
+ ATOM_LIST_LOOKUP(ale, hep, al, atom);
793
+ if (!ale) {
794
+ if (al->count < 10) {
795
+ /* Few enough for linear search, no hash table needed. */
796
+ JS_ASSERT(!al->table);
797
+ ale = (JSAtomListElement *)js_alloc_temp_entry(cx, atom);
798
+ if (!ale)
799
+ return NULL;
800
+ ALE_SET_ATOM(ale, atom);
801
+ ALE_SET_NEXT(ale, al->list);
802
+ al->list = ale;
803
+ } else {
804
+ /* We want to hash. Have we already made a hash table? */
805
+ if (!al->table) {
806
+ /* No hash table yet, so hep had better be null! */
807
+ JS_ASSERT(!hep);
808
+ al->table = JS_NewHashTable(8, js_hash_atom_ptr,
809
+ JS_CompareValues, JS_CompareValues,
810
+ &temp_alloc_ops, cx);
811
+ if (!al->table)
812
+ return NULL;
813
+
814
+ /* Insert each ale on al->list into the new hash table. */
815
+ for (ale2 = al->list; ale2; ale2 = next) {
816
+ next = ALE_NEXT(ale2);
817
+ ale2->entry.keyHash = ALE_ATOM(ale2)->number;
818
+ hep = JS_HashTableRawLookup(al->table, ale2->entry.keyHash,
819
+ ale2->entry.key);
820
+ ALE_SET_NEXT(ale2, *hep);
821
+ *hep = &ale2->entry;
822
+ }
823
+ al->list = NULL;
824
+
825
+ /* Set hep for insertion of atom's ale, immediately below. */
826
+ hep = JS_HashTableRawLookup(al->table, atom->number, atom);
827
+ }
828
+
829
+ /* Finally, add an entry for atom into the hash bucket at hep. */
830
+ ale = (JSAtomListElement *)
831
+ JS_HashTableRawAdd(al->table, hep, atom->number, atom, NULL);
832
+ if (!ale)
833
+ return NULL;
834
+ }
835
+
836
+ ALE_SET_INDEX(ale, al->count++);
837
+ }
838
+ return ale;
839
+ }
840
+
841
+ JS_FRIEND_API(JSAtom *)
842
+ js_GetAtom(JSContext *cx, JSAtomMap *map, jsatomid i)
843
+ {
844
+ JSAtom *atom;
845
+ static JSAtom dummy;
846
+
847
+ JS_ASSERT(map->vector && i < map->length);
848
+ if (!map->vector || i >= map->length) {
849
+ char numBuf[12];
850
+ JS_snprintf(numBuf, sizeof numBuf, "%lu", (unsigned long)i);
851
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
852
+ JSMSG_BAD_ATOMIC_NUMBER, numBuf);
853
+ return &dummy;
854
+ }
855
+ atom = map->vector[i];
856
+ JS_ASSERT(atom);
857
+ return atom;
858
+ }
859
+
860
+ JS_STATIC_DLL_CALLBACK(intN)
861
+ js_map_atom(JSHashEntry *he, intN i, void *arg)
862
+ {
863
+ JSAtomListElement *ale = (JSAtomListElement *)he;
864
+ JSAtom **vector = arg;
865
+
866
+ vector[ALE_INDEX(ale)] = ALE_ATOM(ale);
867
+ return HT_ENUMERATE_NEXT;
868
+ }
869
+
870
+ #ifdef DEBUG
871
+ jsrefcount js_atom_map_count;
872
+ jsrefcount js_atom_map_hash_table_count;
873
+ #endif
874
+
875
+ JS_FRIEND_API(JSBool)
876
+ js_InitAtomMap(JSContext *cx, JSAtomMap *map, JSAtomList *al)
877
+ {
878
+ JSAtom **vector;
879
+ JSAtomListElement *ale;
880
+ uint32 count;
881
+
882
+ #ifdef DEBUG
883
+ JS_ATOMIC_INCREMENT(&js_atom_map_count);
884
+ #endif
885
+ ale = al->list;
886
+ if (!ale && !al->table) {
887
+ map->vector = NULL;
888
+ map->length = 0;
889
+ return JS_TRUE;
890
+ }
891
+
892
+ count = al->count;
893
+ if (count >= ATOM_INDEX_LIMIT) {
894
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
895
+ JSMSG_TOO_MANY_LITERALS);
896
+ return JS_FALSE;
897
+ }
898
+ vector = (JSAtom **) JS_malloc(cx, (size_t) count * sizeof *vector);
899
+ if (!vector)
900
+ return JS_FALSE;
901
+
902
+ if (al->table) {
903
+ #ifdef DEBUG
904
+ JS_ATOMIC_INCREMENT(&js_atom_map_hash_table_count);
905
+ #endif
906
+ JS_HashTableEnumerateEntries(al->table, js_map_atom, vector);
907
+ } else {
908
+ do {
909
+ vector[ALE_INDEX(ale)] = ALE_ATOM(ale);
910
+ } while ((ale = ALE_NEXT(ale)) != NULL);
911
+ }
912
+ ATOM_LIST_INIT(al);
913
+
914
+ map->vector = vector;
915
+ map->length = (jsatomid)count;
916
+ return JS_TRUE;
917
+ }
918
+
919
+ JS_FRIEND_API(void)
920
+ js_FreeAtomMap(JSContext *cx, JSAtomMap *map)
921
+ {
922
+ if (map->vector) {
923
+ JS_free(cx, map->vector);
924
+ map->vector = NULL;
925
+ }
926
+ map->length = 0;
927
+ }