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,1148 @@
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
+ * IBM Corp.
26
+ *
27
+ * Alternatively, the contents of this file may be used under the terms of
28
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
29
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30
+ * in which case the provisions of the GPL or the LGPL are applicable instead
31
+ * of those above. If you wish to allow use of your version of this file only
32
+ * under the terms of either the GPL or the LGPL, and not to allow others to
33
+ * use your version of this file under the terms of the MPL, indicate your
34
+ * decision by deleting the provisions above and replace them with the notice
35
+ * and other provisions required by the GPL or the LGPL. If you do not delete
36
+ * the provisions above, a recipient may use your version of this file under
37
+ * the terms of any one of the MPL, the GPL or the LGPL.
38
+ *
39
+ * ***** END LICENSE BLOCK ***** */
40
+
41
+ /*
42
+ * JS number type and wrapper class.
43
+ */
44
+ #include "jsstddef.h"
45
+ #if defined(XP_WIN) || defined(XP_OS2)
46
+ #include <float.h>
47
+ #endif
48
+ #include <locale.h>
49
+ #include <limits.h>
50
+ #include <math.h>
51
+ #include <stdlib.h>
52
+ #include <string.h>
53
+ #include "jstypes.h"
54
+ #include "jsutil.h" /* Added by JSIFY */
55
+ #include "jsapi.h"
56
+ #include "jsatom.h"
57
+ #include "jscntxt.h"
58
+ #include "jsconfig.h"
59
+ #include "jsdtoa.h"
60
+ #include "jsgc.h"
61
+ #include "jsinterp.h"
62
+ #include "jsnum.h"
63
+ #include "jsobj.h"
64
+ #include "jsopcode.h"
65
+ #include "jsprf.h"
66
+ #include "jsstr.h"
67
+
68
+ static JSBool
69
+ num_isNaN(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
70
+ {
71
+ jsdouble x;
72
+
73
+ if (!js_ValueToNumber(cx, argv[0], &x))
74
+ return JS_FALSE;
75
+ *rval = BOOLEAN_TO_JSVAL(JSDOUBLE_IS_NaN(x));
76
+ return JS_TRUE;
77
+ }
78
+
79
+ static JSBool
80
+ num_isFinite(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
81
+ {
82
+ jsdouble x;
83
+
84
+ if (!js_ValueToNumber(cx, argv[0], &x))
85
+ return JS_FALSE;
86
+ *rval = BOOLEAN_TO_JSVAL(JSDOUBLE_IS_FINITE(x));
87
+ return JS_TRUE;
88
+ }
89
+
90
+ static JSBool
91
+ num_parseFloat(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
92
+ {
93
+ JSString *str;
94
+ jsdouble d;
95
+ const jschar *bp, *ep;
96
+
97
+ str = js_ValueToString(cx, argv[0]);
98
+ if (!str)
99
+ return JS_FALSE;
100
+ /* XXXbe js_strtod shouldn't require NUL termination */
101
+ bp = js_UndependString(cx, str);
102
+ if (!bp)
103
+ return JS_FALSE;
104
+ if (!js_strtod(cx, bp, &ep, &d))
105
+ return JS_FALSE;
106
+ if (ep == bp) {
107
+ *rval = DOUBLE_TO_JSVAL(cx->runtime->jsNaN);
108
+ return JS_TRUE;
109
+ }
110
+ return js_NewNumberValue(cx, d, rval);
111
+ }
112
+
113
+ /* See ECMA 15.1.2.2. */
114
+ static JSBool
115
+ num_parseInt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
116
+ {
117
+ JSString *str;
118
+ jsint radix;
119
+ jsdouble d;
120
+ const jschar *bp, *ep;
121
+
122
+ str = js_ValueToString(cx, argv[0]);
123
+ if (!str)
124
+ return JS_FALSE;
125
+
126
+ if (argc > 1) {
127
+ if (!js_ValueToECMAInt32(cx, argv[1], &radix))
128
+ return JS_FALSE;
129
+ } else
130
+ radix = 0;
131
+
132
+ if (radix != 0 && (radix < 2 || radix > 36)) {
133
+ *rval = DOUBLE_TO_JSVAL(cx->runtime->jsNaN);
134
+ return JS_TRUE;
135
+ }
136
+ /* XXXbe js_strtointeger shouldn't require NUL termination */
137
+ bp = js_UndependString(cx, str);
138
+ if (!bp)
139
+ return JS_FALSE;
140
+ if (!js_strtointeger(cx, bp, &ep, radix, &d))
141
+ return JS_FALSE;
142
+ if (ep == bp) {
143
+ *rval = DOUBLE_TO_JSVAL(cx->runtime->jsNaN);
144
+ return JS_TRUE;
145
+ }
146
+ return js_NewNumberValue(cx, d, rval);
147
+ }
148
+
149
+ const char js_Infinity_str[] = "Infinity";
150
+ const char js_NaN_str[] = "NaN";
151
+ const char js_isNaN_str[] = "isNaN";
152
+ const char js_isFinite_str[] = "isFinite";
153
+ const char js_parseFloat_str[] = "parseFloat";
154
+ const char js_parseInt_str[] = "parseInt";
155
+
156
+ static JSFunctionSpec number_functions[] = {
157
+ {"isNaN", num_isNaN, 1,0,0},
158
+ {"isFinite", num_isFinite, 1,0,0},
159
+ {"parseFloat", num_parseFloat, 1,0,0},
160
+ {"parseInt", num_parseInt, 2,0,0},
161
+ {0,0,0,0,0}
162
+ };
163
+
164
+ static JSClass number_class = {
165
+ "Number",
166
+ JSCLASS_HAS_PRIVATE,
167
+ JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
168
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
169
+ JSCLASS_NO_OPTIONAL_MEMBERS
170
+ };
171
+
172
+ static JSBool
173
+ Number(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
174
+ {
175
+ jsdouble d;
176
+ jsval v;
177
+
178
+ if (argc != 0) {
179
+ if (!js_ValueToNumber(cx, argv[0], &d))
180
+ return JS_FALSE;
181
+ } else {
182
+ d = 0.0;
183
+ }
184
+ if (!js_NewNumberValue(cx, d, &v))
185
+ return JS_FALSE;
186
+ if (!(cx->fp->flags & JSFRAME_CONSTRUCTING)) {
187
+ *rval = v;
188
+ return JS_TRUE;
189
+ }
190
+ OBJ_SET_SLOT(cx, obj, JSSLOT_PRIVATE, v);
191
+ return JS_TRUE;
192
+ }
193
+
194
+ #if JS_HAS_TOSOURCE
195
+ static JSBool
196
+ num_toSource(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
197
+ {
198
+ jsval v;
199
+ jsdouble d;
200
+ char numBuf[DTOSTR_STANDARD_BUFFER_SIZE], *numStr;
201
+ char buf[64];
202
+ JSString *str;
203
+
204
+ if (!JS_InstanceOf(cx, obj, &number_class, argv))
205
+ return JS_FALSE;
206
+ v = OBJ_GET_SLOT(cx, obj, JSSLOT_PRIVATE);
207
+ JS_ASSERT(JSVAL_IS_NUMBER(v));
208
+ d = JSVAL_IS_INT(v) ? (jsdouble)JSVAL_TO_INT(v) : *JSVAL_TO_DOUBLE(v);
209
+ numStr = JS_dtostr(numBuf, sizeof numBuf, DTOSTR_STANDARD, 0, d);
210
+ if (!numStr) {
211
+ JS_ReportOutOfMemory(cx);
212
+ return JS_FALSE;
213
+ }
214
+ JS_snprintf(buf, sizeof buf, "(new %s(%s))", number_class.name, numStr);
215
+ str = JS_NewStringCopyZ(cx, buf);
216
+ if (!str)
217
+ return JS_FALSE;
218
+ *rval = STRING_TO_JSVAL(str);
219
+ return JS_TRUE;
220
+ }
221
+ #endif
222
+
223
+ /* The buf must be big enough for MIN_INT to fit including '-' and '\0'. */
224
+ static char *
225
+ IntToString(jsint i, char *buf, size_t bufSize)
226
+ {
227
+ char *cp;
228
+ jsuint u;
229
+
230
+ u = (i < 0) ? -i : i;
231
+
232
+ cp = buf + bufSize; /* one past last buffer cell */
233
+ *--cp = '\0'; /* null terminate the string to be */
234
+
235
+ /*
236
+ * Build the string from behind. We use multiply and subtraction
237
+ * instead of modulus because that's much faster.
238
+ */
239
+ do {
240
+ jsuint newu = u / 10;
241
+ *--cp = (char)(u - newu * 10) + '0';
242
+ u = newu;
243
+ } while (u != 0);
244
+
245
+ if (i < 0)
246
+ *--cp = '-';
247
+
248
+ return cp;
249
+ }
250
+
251
+ static JSBool
252
+ num_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
253
+ {
254
+ jsval v;
255
+ jsdouble d;
256
+ jsint base;
257
+ JSString *str;
258
+
259
+ if (!JS_InstanceOf(cx, obj, &number_class, argv))
260
+ return JS_FALSE;
261
+ v = OBJ_GET_SLOT(cx, obj, JSSLOT_PRIVATE);
262
+ JS_ASSERT(JSVAL_IS_NUMBER(v));
263
+ d = JSVAL_IS_INT(v) ? (jsdouble)JSVAL_TO_INT(v) : *JSVAL_TO_DOUBLE(v);
264
+ base = 10;
265
+ if (argc != 0) {
266
+ if (!js_ValueToECMAInt32(cx, argv[0], &base))
267
+ return JS_FALSE;
268
+ if (base < 2 || base > 36) {
269
+ char numBuf[12];
270
+ char *numStr = IntToString(base, numBuf, sizeof numBuf);
271
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_BAD_RADIX,
272
+ numStr);
273
+ return JS_FALSE;
274
+ }
275
+ }
276
+ if (base == 10)
277
+ str = js_NumberToString(cx, d);
278
+ else {
279
+ char *dStr = JS_dtobasestr(base, d);
280
+ if (!dStr) {
281
+ JS_ReportOutOfMemory(cx);
282
+ return JS_FALSE;
283
+ }
284
+ str = JS_NewStringCopyZ(cx, dStr);
285
+ free(dStr);
286
+ }
287
+ if (!str)
288
+ return JS_FALSE;
289
+ *rval = STRING_TO_JSVAL(str);
290
+ return JS_TRUE;
291
+ }
292
+
293
+ static JSBool
294
+ num_toLocaleString(JSContext *cx, JSObject *obj, uintN argc,
295
+ jsval *argv, jsval *rval)
296
+ {
297
+ char thousandsLength, decimalLength;
298
+ const char *numGrouping, *tmpGroup;
299
+ JSRuntime *rt;
300
+ JSString *numStr, *str;
301
+ char *num, *buf, *dec, *end, *tmpSrc, *tmpDest;
302
+ int digits, size, remainder, nrepeat;
303
+
304
+ /*
305
+ * Create the string, move back to bytes to make string twiddling
306
+ * a bit easier and so we can insert platform charset seperators.
307
+ */
308
+ if (!num_toString(cx, obj, 0, argv, rval))
309
+ return JS_FALSE;
310
+ JS_ASSERT(JSVAL_IS_STRING(*rval));
311
+ numStr = JSVAL_TO_STRING(*rval);
312
+ num = js_GetStringBytes(numStr);
313
+
314
+ /* Find bit before the decimal. */
315
+ dec = strchr(num, '.');
316
+ digits = dec ? dec - num : (int)strlen(num);
317
+ end = num + digits;
318
+
319
+ rt = cx->runtime;
320
+ thousandsLength = strlen(rt->thousandsSeparator);
321
+ decimalLength = strlen(rt->decimalSeparator);
322
+
323
+ /* Figure out how long resulting string will be. */
324
+ size = digits + (dec ? decimalLength + strlen(dec + 1) : 0);
325
+
326
+ numGrouping = tmpGroup = rt->numGrouping;
327
+ remainder = digits;
328
+ if (*num == '-')
329
+ remainder--;
330
+
331
+ while (*tmpGroup != CHAR_MAX && *tmpGroup != '\0') {
332
+ if (*tmpGroup >= remainder)
333
+ break;
334
+ size += thousandsLength;
335
+ remainder -= *tmpGroup;
336
+ tmpGroup++;
337
+ }
338
+ if (*tmpGroup == '\0' && *numGrouping != '\0') {
339
+ nrepeat = (remainder - 1) / tmpGroup[-1];
340
+ size += thousandsLength * nrepeat;
341
+ remainder -= nrepeat * tmpGroup[-1];
342
+ } else {
343
+ nrepeat = 0;
344
+ }
345
+ tmpGroup--;
346
+
347
+ buf = (char *)JS_malloc(cx, size + 1);
348
+ if (!buf)
349
+ return JS_FALSE;
350
+
351
+ tmpDest = buf;
352
+ tmpSrc = num;
353
+
354
+ while (*tmpSrc == '-' || remainder--)
355
+ *tmpDest++ = *tmpSrc++;
356
+ while (tmpSrc < end) {
357
+ strcpy(tmpDest, rt->thousandsSeparator);
358
+ tmpDest += thousandsLength;
359
+ memcpy(tmpDest, tmpSrc, *tmpGroup);
360
+ tmpDest += *tmpGroup;
361
+ tmpSrc += *tmpGroup;
362
+ if (--nrepeat < 0)
363
+ tmpGroup--;
364
+ }
365
+
366
+ if (dec) {
367
+ strcpy(tmpDest, rt->decimalSeparator);
368
+ tmpDest += decimalLength;
369
+ strcpy(tmpDest, dec + 1);
370
+ } else {
371
+ *tmpDest++ = '\0';
372
+ }
373
+
374
+ str = JS_NewString(cx, buf, size);
375
+ if (!str) {
376
+ JS_free(cx, buf);
377
+ return JS_FALSE;
378
+ }
379
+
380
+ *rval = STRING_TO_JSVAL(str);
381
+
382
+ return JS_TRUE;
383
+ }
384
+
385
+ static JSBool
386
+ num_valueOf(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
387
+ {
388
+ if (!JS_InstanceOf(cx, obj, &number_class, argv))
389
+ return JS_FALSE;
390
+ *rval = OBJ_GET_SLOT(cx, obj, JSSLOT_PRIVATE);
391
+ return JS_TRUE;
392
+ }
393
+
394
+
395
+ #if JS_HAS_NUMBER_FORMATS
396
+ #define MAX_PRECISION 100
397
+
398
+ static JSBool
399
+ num_to(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval, JSDToStrMode zeroArgMode,
400
+ JSDToStrMode oneArgMode, jsint precisionMin, jsint precisionMax, jsint precisionOffset)
401
+ {
402
+ jsval v;
403
+ jsdouble d, precision;
404
+ JSString *str;
405
+ char buf[DTOSTR_VARIABLE_BUFFER_SIZE(MAX_PRECISION+1)], *numStr; /* Use MAX_PRECISION+1 because precisionOffset can be 1 */
406
+
407
+ if (!JS_InstanceOf(cx, obj, &number_class, argv))
408
+ return JS_FALSE;
409
+ v = OBJ_GET_SLOT(cx, obj, JSSLOT_PRIVATE);
410
+ JS_ASSERT(JSVAL_IS_NUMBER(v));
411
+ d = JSVAL_IS_INT(v) ? (jsdouble)JSVAL_TO_INT(v) : *JSVAL_TO_DOUBLE(v);
412
+
413
+ if (JSVAL_IS_VOID(argv[0])) {
414
+ precision = 0.0;
415
+ oneArgMode = zeroArgMode;
416
+ } else {
417
+ if (!js_ValueToNumber(cx, argv[0], &precision))
418
+ return JS_FALSE;
419
+ precision = js_DoubleToInteger(precision);
420
+ if (precision < precisionMin || precision > precisionMax) {
421
+ numStr = JS_dtostr(buf, sizeof buf, DTOSTR_STANDARD, 0, precision);
422
+ if (!numStr)
423
+ JS_ReportOutOfMemory(cx);
424
+ else
425
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_PRECISION_RANGE, numStr);
426
+ return JS_FALSE;
427
+ }
428
+ }
429
+
430
+ numStr = JS_dtostr(buf, sizeof buf, oneArgMode, (jsint)precision + precisionOffset, d);
431
+ if (!numStr) {
432
+ JS_ReportOutOfMemory(cx);
433
+ return JS_FALSE;
434
+ }
435
+ str = JS_NewStringCopyZ(cx, numStr);
436
+ if (!str)
437
+ return JS_FALSE;
438
+ *rval = STRING_TO_JSVAL(str);
439
+ return JS_TRUE;
440
+ }
441
+
442
+ static JSBool
443
+ num_toFixed(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
444
+ {
445
+ /* We allow a larger range of precision than ECMA requires; this is permitted by ECMA. */
446
+ return num_to(cx, obj, argc, argv, rval, DTOSTR_FIXED, DTOSTR_FIXED, -20, MAX_PRECISION, 0);
447
+ }
448
+
449
+ static JSBool
450
+ num_toExponential(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
451
+ {
452
+ /* We allow a larger range of precision than ECMA requires; this is permitted by ECMA. */
453
+ return num_to(cx, obj, argc, argv, rval, DTOSTR_STANDARD_EXPONENTIAL, DTOSTR_EXPONENTIAL, 0, MAX_PRECISION, 1);
454
+ }
455
+
456
+ static JSBool
457
+ num_toPrecision(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
458
+ {
459
+ /* We allow a larger range of precision than ECMA requires; this is permitted by ECMA. */
460
+ return num_to(cx, obj, argc, argv, rval, DTOSTR_STANDARD, DTOSTR_PRECISION, 1, MAX_PRECISION, 0);
461
+ }
462
+ #endif /* JS_HAS_NUMBER_FORMATS */
463
+
464
+
465
+ static JSFunctionSpec number_methods[] = {
466
+ #if JS_HAS_TOSOURCE
467
+ {js_toSource_str, num_toSource, 0,0,0},
468
+ #endif
469
+ {js_toString_str, num_toString, 0,0,0},
470
+ {js_toLocaleString_str, num_toLocaleString, 0,0,0},
471
+ {js_valueOf_str, num_valueOf, 0,0,0},
472
+ #if JS_HAS_NUMBER_FORMATS
473
+ {"toFixed", num_toFixed, 1,0,0},
474
+ {"toExponential", num_toExponential, 1,0,0},
475
+ {"toPrecision", num_toPrecision, 1,0,0},
476
+ #endif
477
+ {0,0,0,0,0}
478
+ };
479
+
480
+ /* NB: Keep this in synch with number_constants[]. */
481
+ enum nc_slot {
482
+ NC_NaN,
483
+ NC_POSITIVE_INFINITY,
484
+ NC_NEGATIVE_INFINITY,
485
+ NC_MAX_VALUE,
486
+ NC_MIN_VALUE,
487
+ NC_LIMIT
488
+ };
489
+
490
+ /*
491
+ * Some to most C compilers forbid spelling these at compile time, or barf
492
+ * if you try, so all but MAX_VALUE are set up by js_InitRuntimeNumberState
493
+ * using union jsdpun.
494
+ */
495
+ static JSConstDoubleSpec number_constants[] = {
496
+ {0, js_NaN_str, 0,{0,0,0}},
497
+ {0, "POSITIVE_INFINITY", 0,{0,0,0}},
498
+ {0, "NEGATIVE_INFINITY", 0,{0,0,0}},
499
+ {1.7976931348623157E+308, "MAX_VALUE", 0,{0,0,0}},
500
+ {0, "MIN_VALUE", 0,{0,0,0}},
501
+ {0,0,0,{0,0,0}}
502
+ };
503
+
504
+ static jsdouble NaN;
505
+
506
+
507
+ #if (defined XP_WIN || defined XP_OS2) && \
508
+ !defined __MWERKS__ && \
509
+ (defined _M_IX86 || \
510
+ (defined __GNUC__ && !defined __MINGW32__))
511
+
512
+ /*
513
+ * Set the exception mask to mask all exceptions and set the FPU precision
514
+ * to 53 bit mantissa.
515
+ * On Alpha platform this is handled via Compiler option.
516
+ */
517
+ #define FIX_FPU() _control87(MCW_EM | PC_53, MCW_EM | MCW_PC)
518
+
519
+ #else
520
+
521
+ #define FIX_FPU() ((void)0)
522
+
523
+ #endif
524
+
525
+ JSBool
526
+ js_InitRuntimeNumberState(JSContext *cx)
527
+ {
528
+ JSRuntime *rt;
529
+ jsdpun u;
530
+ struct lconv *locale;
531
+
532
+ rt = cx->runtime;
533
+ JS_ASSERT(!rt->jsNaN);
534
+
535
+ FIX_FPU();
536
+
537
+ u.s.hi = JSDOUBLE_HI32_EXPMASK | JSDOUBLE_HI32_MANTMASK;
538
+ u.s.lo = 0xffffffff;
539
+ number_constants[NC_NaN].dval = NaN = u.d;
540
+ rt->jsNaN = js_NewDouble(cx, NaN);
541
+ if (!rt->jsNaN || !js_LockGCThing(cx, rt->jsNaN))
542
+ return JS_FALSE;
543
+
544
+ u.s.hi = JSDOUBLE_HI32_EXPMASK;
545
+ u.s.lo = 0x00000000;
546
+ number_constants[NC_POSITIVE_INFINITY].dval = u.d;
547
+ rt->jsPositiveInfinity = js_NewDouble(cx, u.d);
548
+ if (!rt->jsPositiveInfinity ||
549
+ !js_LockGCThing(cx, rt->jsPositiveInfinity)) {
550
+ return JS_FALSE;
551
+ }
552
+
553
+ u.s.hi = JSDOUBLE_HI32_SIGNBIT | JSDOUBLE_HI32_EXPMASK;
554
+ u.s.lo = 0x00000000;
555
+ number_constants[NC_NEGATIVE_INFINITY].dval = u.d;
556
+ rt->jsNegativeInfinity = js_NewDouble(cx, u.d);
557
+ if (!rt->jsNegativeInfinity ||
558
+ !js_LockGCThing(cx, rt->jsNegativeInfinity)) {
559
+ return JS_FALSE;
560
+ }
561
+
562
+ u.s.hi = 0;
563
+ u.s.lo = 1;
564
+ number_constants[NC_MIN_VALUE].dval = u.d;
565
+
566
+ locale = localeconv();
567
+ rt->thousandsSeparator =
568
+ JS_strdup(cx, locale->thousands_sep ? locale->thousands_sep : "'");
569
+ rt->decimalSeparator =
570
+ JS_strdup(cx, locale->decimal_point ? locale->decimal_point : ".");
571
+ rt->numGrouping =
572
+ JS_strdup(cx, locale->grouping ? locale->grouping : "\3\0");
573
+
574
+ return rt->thousandsSeparator && rt->decimalSeparator && rt->numGrouping;
575
+ }
576
+
577
+ void
578
+ js_FinishRuntimeNumberState(JSContext *cx)
579
+ {
580
+ JSRuntime *rt = cx->runtime;
581
+
582
+ js_UnlockGCThingRT(rt, rt->jsNaN);
583
+ js_UnlockGCThingRT(rt, rt->jsNegativeInfinity);
584
+ js_UnlockGCThingRT(rt, rt->jsPositiveInfinity);
585
+
586
+ rt->jsNaN = NULL;
587
+ rt->jsNegativeInfinity = NULL;
588
+ rt->jsPositiveInfinity = NULL;
589
+
590
+ JS_free(cx, (void *)rt->thousandsSeparator);
591
+ JS_free(cx, (void *)rt->decimalSeparator);
592
+ JS_free(cx, (void *)rt->numGrouping);
593
+ rt->thousandsSeparator = rt->decimalSeparator = rt->numGrouping = NULL;
594
+ }
595
+
596
+ JSObject *
597
+ js_InitNumberClass(JSContext *cx, JSObject *obj)
598
+ {
599
+ JSObject *proto, *ctor;
600
+ JSRuntime *rt;
601
+
602
+ /* XXX must do at least once per new thread, so do it per JSContext... */
603
+ FIX_FPU();
604
+
605
+ if (!JS_DefineFunctions(cx, obj, number_functions))
606
+ return NULL;
607
+
608
+ proto = JS_InitClass(cx, obj, NULL, &number_class, Number, 1,
609
+ NULL, number_methods, NULL, NULL);
610
+ if (!proto || !(ctor = JS_GetConstructor(cx, proto)))
611
+ return NULL;
612
+ OBJ_SET_SLOT(cx, proto, JSSLOT_PRIVATE, JSVAL_ZERO);
613
+ if (!JS_DefineConstDoubles(cx, ctor, number_constants))
614
+ return NULL;
615
+
616
+ /* ECMA 15.1.1.1 */
617
+ rt = cx->runtime;
618
+ if (!JS_DefineProperty(cx, obj, js_NaN_str, DOUBLE_TO_JSVAL(rt->jsNaN),
619
+ NULL, NULL, JSPROP_PERMANENT)) {
620
+ return NULL;
621
+ }
622
+
623
+ /* ECMA 15.1.1.2 */
624
+ if (!JS_DefineProperty(cx, obj, js_Infinity_str,
625
+ DOUBLE_TO_JSVAL(rt->jsPositiveInfinity),
626
+ NULL, NULL, JSPROP_PERMANENT)) {
627
+ return NULL;
628
+ }
629
+ return proto;
630
+ }
631
+
632
+ jsdouble *
633
+ js_NewDouble(JSContext *cx, jsdouble d)
634
+ {
635
+ jsdouble *dp;
636
+
637
+ dp = (jsdouble *) js_AllocGCThing(cx, GCX_DOUBLE);
638
+ if (!dp)
639
+ return NULL;
640
+ *dp = d;
641
+ return dp;
642
+ }
643
+
644
+ void
645
+ js_FinalizeDouble(JSContext *cx, jsdouble *dp)
646
+ {
647
+ *dp = NaN;
648
+ }
649
+
650
+ JSBool
651
+ js_NewDoubleValue(JSContext *cx, jsdouble d, jsval *rval)
652
+ {
653
+ jsdouble *dp;
654
+
655
+ dp = js_NewDouble(cx, d);
656
+ if (!dp)
657
+ return JS_FALSE;
658
+ *rval = DOUBLE_TO_JSVAL(dp);
659
+ return JS_TRUE;
660
+ }
661
+
662
+ JSBool
663
+ js_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval)
664
+ {
665
+ jsint i;
666
+
667
+ if (JSDOUBLE_IS_INT(d, i) && INT_FITS_IN_JSVAL(i)) {
668
+ *rval = INT_TO_JSVAL(i);
669
+ } else {
670
+ if (!js_NewDoubleValue(cx, d, rval))
671
+ return JS_FALSE;
672
+ }
673
+ return JS_TRUE;
674
+ }
675
+
676
+ JSObject *
677
+ js_NumberToObject(JSContext *cx, jsdouble d)
678
+ {
679
+ JSObject *obj;
680
+ jsval v;
681
+
682
+ obj = js_NewObject(cx, &number_class, NULL, NULL);
683
+ if (!obj)
684
+ return NULL;
685
+ if (!js_NewNumberValue(cx, d, &v)) {
686
+ cx->newborn[GCX_OBJECT] = NULL;
687
+ return NULL;
688
+ }
689
+ OBJ_SET_SLOT(cx, obj, JSSLOT_PRIVATE, v);
690
+ return obj;
691
+ }
692
+
693
+ JSString *
694
+ js_NumberToString(JSContext *cx, jsdouble d)
695
+ {
696
+ jsint i;
697
+ char buf[DTOSTR_STANDARD_BUFFER_SIZE];
698
+ char *numStr;
699
+
700
+ if (JSDOUBLE_IS_INT(d, i))
701
+ numStr = IntToString(i, buf, sizeof buf);
702
+ else {
703
+ numStr = JS_dtostr(buf, sizeof buf, DTOSTR_STANDARD, 0, d);
704
+ if (!numStr) {
705
+ JS_ReportOutOfMemory(cx);
706
+ return NULL;
707
+ }
708
+ }
709
+ return JS_NewStringCopyZ(cx, numStr);
710
+ }
711
+
712
+ JSBool
713
+ js_ValueToNumber(JSContext *cx, jsval v, jsdouble *dp)
714
+ {
715
+ JSObject *obj;
716
+ JSString *str;
717
+ const jschar *bp, *ep;
718
+
719
+ if (JSVAL_IS_OBJECT(v)) {
720
+ obj = JSVAL_TO_OBJECT(v);
721
+ if (!obj) {
722
+ *dp = 0;
723
+ return JS_TRUE;
724
+ }
725
+ if (!OBJ_DEFAULT_VALUE(cx, obj, JSTYPE_NUMBER, &v))
726
+ return JS_FALSE;
727
+ }
728
+ if (JSVAL_IS_INT(v)) {
729
+ *dp = (jsdouble)JSVAL_TO_INT(v);
730
+ } else if (JSVAL_IS_DOUBLE(v)) {
731
+ *dp = *JSVAL_TO_DOUBLE(v);
732
+ } else if (JSVAL_IS_STRING(v)) {
733
+ str = JSVAL_TO_STRING(v);
734
+ /*
735
+ * Note that ECMA doesn't treat a string beginning with a '0' as an
736
+ * octal number here. This works because all such numbers will be
737
+ * interpreted as decimal by js_strtod and will never get passed to
738
+ * js_strtointeger (which would interpret them as octal).
739
+ */
740
+ /* XXXbe js_strtod shouldn't require NUL termination */
741
+ bp = js_UndependString(cx, str);
742
+ if (!bp)
743
+ return JS_FALSE;
744
+ if ((!js_strtod(cx, bp, &ep, dp) ||
745
+ js_SkipWhiteSpace(ep) != bp + str->length) &&
746
+ (!js_strtointeger(cx, bp, &ep, 0, dp) ||
747
+ js_SkipWhiteSpace(ep) != bp + str->length)) {
748
+ goto badstr;
749
+ }
750
+ } else if (JSVAL_IS_BOOLEAN(v)) {
751
+ *dp = JSVAL_TO_BOOLEAN(v) ? 1 : 0;
752
+ } else {
753
+ #if JS_BUG_FALLIBLE_TONUM
754
+ str = js_DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, NULL);
755
+ badstr:
756
+ if (str) {
757
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_NAN,
758
+ JS_GetStringBytes(str));
759
+
760
+ }
761
+ return JS_FALSE;
762
+ #else
763
+ badstr:
764
+ *dp = *cx->runtime->jsNaN;
765
+ #endif
766
+ }
767
+ return JS_TRUE;
768
+ }
769
+
770
+ JSBool
771
+ js_ValueToECMAInt32(JSContext *cx, jsval v, int32 *ip)
772
+ {
773
+ jsdouble d;
774
+
775
+ if (!js_ValueToNumber(cx, v, &d))
776
+ return JS_FALSE;
777
+ return js_DoubleToECMAInt32(cx, d, ip);
778
+ }
779
+
780
+ JSBool
781
+ js_DoubleToECMAInt32(JSContext *cx, jsdouble d, int32 *ip)
782
+ {
783
+ jsdouble two32 = 4294967296.0;
784
+ jsdouble two31 = 2147483648.0;
785
+
786
+ if (!JSDOUBLE_IS_FINITE(d) || d == 0) {
787
+ *ip = 0;
788
+ return JS_TRUE;
789
+ }
790
+ d = fmod(d, two32);
791
+ d = (d >= 0) ? floor(d) : ceil(d) + two32;
792
+ if (d >= two31)
793
+ *ip = (int32)(d - two32);
794
+ else
795
+ *ip = (int32)d;
796
+ return JS_TRUE;
797
+ }
798
+
799
+ JSBool
800
+ js_ValueToECMAUint32(JSContext *cx, jsval v, uint32 *ip)
801
+ {
802
+ jsdouble d;
803
+
804
+ if (!js_ValueToNumber(cx, v, &d))
805
+ return JS_FALSE;
806
+ return js_DoubleToECMAUint32(cx, d, ip);
807
+ }
808
+
809
+ JSBool
810
+ js_DoubleToECMAUint32(JSContext *cx, jsdouble d, uint32 *ip)
811
+ {
812
+ JSBool neg;
813
+ jsdouble two32 = 4294967296.0;
814
+
815
+ if (!JSDOUBLE_IS_FINITE(d) || d == 0) {
816
+ *ip = 0;
817
+ return JS_TRUE;
818
+ }
819
+
820
+ neg = (d < 0);
821
+ d = floor(neg ? -d : d);
822
+ d = neg ? -d : d;
823
+
824
+ d = fmod(d, two32);
825
+
826
+ d = (d >= 0) ? d : d + two32;
827
+ *ip = (uint32)d;
828
+ return JS_TRUE;
829
+ }
830
+
831
+ JSBool
832
+ js_ValueToInt32(JSContext *cx, jsval v, int32 *ip)
833
+ {
834
+ jsdouble d;
835
+ JSString *str;
836
+
837
+ if (JSVAL_IS_INT(v)) {
838
+ *ip = JSVAL_TO_INT(v);
839
+ return JS_TRUE;
840
+ }
841
+ if (!js_ValueToNumber(cx, v, &d))
842
+ return JS_FALSE;
843
+ if (JSDOUBLE_IS_NaN(d) || d <= -2147483649.0 || 2147483648.0 <= d) {
844
+ str = js_DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, v, NULL);
845
+ if (str) {
846
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
847
+ JSMSG_CANT_CONVERT, JS_GetStringBytes(str));
848
+
849
+ }
850
+ return JS_FALSE;
851
+ }
852
+ *ip = (int32)floor(d + 0.5); /* Round to nearest */
853
+ return JS_TRUE;
854
+ }
855
+
856
+ JSBool
857
+ js_ValueToUint16(JSContext *cx, jsval v, uint16 *ip)
858
+ {
859
+ jsdouble d;
860
+ jsuint i, m;
861
+ JSBool neg;
862
+
863
+ if (!js_ValueToNumber(cx, v, &d))
864
+ return JS_FALSE;
865
+ if (d == 0 || !JSDOUBLE_IS_FINITE(d)) {
866
+ *ip = 0;
867
+ return JS_TRUE;
868
+ }
869
+ i = (jsuint)d;
870
+ if ((jsdouble)i == d) {
871
+ *ip = (uint16)i;
872
+ return JS_TRUE;
873
+ }
874
+ neg = (d < 0);
875
+ d = floor(neg ? -d : d);
876
+ d = neg ? -d : d;
877
+ m = JS_BIT(16);
878
+ d = fmod(d, (double)m);
879
+ if (d < 0)
880
+ d += m;
881
+ *ip = (uint16) d;
882
+ return JS_TRUE;
883
+ }
884
+
885
+ jsdouble
886
+ js_DoubleToInteger(jsdouble d)
887
+ {
888
+ JSBool neg;
889
+
890
+ if (d == 0)
891
+ return d;
892
+ if (!JSDOUBLE_IS_FINITE(d)) {
893
+ if (JSDOUBLE_IS_NaN(d))
894
+ return 0;
895
+ return d;
896
+ }
897
+ neg = (d < 0);
898
+ d = floor(neg ? -d : d);
899
+ return neg ? -d : d;
900
+ }
901
+
902
+
903
+ JSBool
904
+ js_strtod(JSContext *cx, const jschar *s, const jschar **ep, jsdouble *dp)
905
+ {
906
+ char cbuf[32];
907
+ size_t i;
908
+ char *cstr, *istr, *estr;
909
+ JSBool negative;
910
+ jsdouble d;
911
+ const jschar *s1 = js_SkipWhiteSpace(s);
912
+ size_t length = js_strlen(s1);
913
+
914
+ /* Use cbuf to avoid malloc */
915
+ if (length >= sizeof cbuf) {
916
+ cstr = (char *) JS_malloc(cx, length + 1);
917
+ if (!cstr)
918
+ return JS_FALSE;
919
+ } else {
920
+ cstr = cbuf;
921
+ }
922
+
923
+ for (i = 0; i <= length; i++) {
924
+ if (s1[i] >> 8) {
925
+ cstr[i] = 0;
926
+ break;
927
+ }
928
+ cstr[i] = (char)s1[i];
929
+ }
930
+
931
+ istr = cstr;
932
+ if ((negative = (*istr == '-')) != 0 || *istr == '+')
933
+ istr++;
934
+ if (!strncmp(istr, js_Infinity_str, sizeof js_Infinity_str - 1)) {
935
+ d = *(negative ? cx->runtime->jsNegativeInfinity : cx->runtime->jsPositiveInfinity);
936
+ estr = istr + 8;
937
+ } else {
938
+ int err;
939
+ d = JS_strtod(cstr, &estr, &err);
940
+ if (err == JS_DTOA_ENOMEM) {
941
+ JS_ReportOutOfMemory(cx);
942
+ if (cstr != cbuf)
943
+ JS_free(cx, cstr);
944
+ return JS_FALSE;
945
+ }
946
+ if (err == JS_DTOA_ERANGE) {
947
+ if (d == HUGE_VAL)
948
+ d = *cx->runtime->jsPositiveInfinity;
949
+ else if (d == -HUGE_VAL)
950
+ d = *cx->runtime->jsNegativeInfinity;
951
+ }
952
+ #ifdef HPUX
953
+ if (d == 0.0 && negative) {
954
+ /*
955
+ * "-0", "-1e-2000" come out as positive zero
956
+ * here on HPUX. Force a negative zero instead.
957
+ */
958
+ JSDOUBLE_HI32(d) = JSDOUBLE_HI32_SIGNBIT;
959
+ JSDOUBLE_LO32(d) = 0;
960
+ }
961
+ #endif
962
+ }
963
+
964
+ i = estr - cstr;
965
+ if (cstr != cbuf)
966
+ JS_free(cx, cstr);
967
+ *ep = i ? s1 + i : s;
968
+ *dp = d;
969
+ return JS_TRUE;
970
+ }
971
+
972
+ struct BinaryDigitReader
973
+ {
974
+ uintN base; /* Base of number; must be a power of 2 */
975
+ uintN digit; /* Current digit value in radix given by base */
976
+ uintN digitMask; /* Mask to extract the next bit from digit */
977
+ const jschar *digits; /* Pointer to the remaining digits */
978
+ const jschar *end; /* Pointer to first non-digit */
979
+ };
980
+
981
+ /* Return the next binary digit from the number or -1 if done */
982
+ static intN GetNextBinaryDigit(struct BinaryDigitReader *bdr)
983
+ {
984
+ intN bit;
985
+
986
+ if (bdr->digitMask == 0) {
987
+ uintN c;
988
+
989
+ if (bdr->digits == bdr->end)
990
+ return -1;
991
+
992
+ c = *bdr->digits++;
993
+ if ('0' <= c && c <= '9')
994
+ bdr->digit = c - '0';
995
+ else if ('a' <= c && c <= 'z')
996
+ bdr->digit = c - 'a' + 10;
997
+ else bdr->digit = c - 'A' + 10;
998
+ bdr->digitMask = bdr->base >> 1;
999
+ }
1000
+ bit = (bdr->digit & bdr->digitMask) != 0;
1001
+ bdr->digitMask >>= 1;
1002
+ return bit;
1003
+ }
1004
+
1005
+ JSBool
1006
+ js_strtointeger(JSContext *cx, const jschar *s, const jschar **ep, jsint base, jsdouble *dp)
1007
+ {
1008
+ JSBool negative;
1009
+ jsdouble value;
1010
+ const jschar *start;
1011
+ const jschar *s1 = js_SkipWhiteSpace(s);
1012
+
1013
+ if ((negative = (*s1 == '-')) != 0 || *s1 == '+')
1014
+ s1++;
1015
+
1016
+ if (base == 0) {
1017
+ /* No base supplied, or some base that evaluated to 0. */
1018
+ if (*s1 == '0') {
1019
+ /* It's either hex or octal; only increment char if str isn't '0' */
1020
+ if (s1[1] == 'X' || s1[1] == 'x') { /* Hex */
1021
+ s1 += 2;
1022
+ base = 16;
1023
+ } else { /* Octal */
1024
+ base = 8;
1025
+ }
1026
+ } else {
1027
+ base = 10; /* Default to decimal. */
1028
+ }
1029
+ } else if (base == 16 && *s1 == '0' && (s1[1] == 'X' || s1[1] == 'x')) {
1030
+ /* If base is 16, ignore hex prefix. */
1031
+ s1 += 2;
1032
+ }
1033
+
1034
+ /*
1035
+ * Done with the preliminaries; find some prefix of the string that's
1036
+ * a number in the given base.
1037
+ */
1038
+ start = s1; /* Mark - if string is empty, we return NaN. */
1039
+ value = 0.0;
1040
+ for (;;) {
1041
+ uintN digit;
1042
+ jschar c = *s1;
1043
+ if ('0' <= c && c <= '9')
1044
+ digit = c - '0';
1045
+ else if ('a' <= c && c <= 'z')
1046
+ digit = c - 'a' + 10;
1047
+ else if ('A' <= c && c <= 'Z')
1048
+ digit = c - 'A' + 10;
1049
+ else
1050
+ break;
1051
+ if (digit >= (uintN)base)
1052
+ break;
1053
+ value = value * base + digit;
1054
+ s1++;
1055
+ }
1056
+
1057
+ if (value >= 9007199254740992.0) {
1058
+ if (base == 10) {
1059
+ /*
1060
+ * If we're accumulating a decimal number and the number is >=
1061
+ * 2^53, then the result from the repeated multiply-add above may
1062
+ * be inaccurate. Call JS_strtod to get the correct answer.
1063
+ */
1064
+ size_t i;
1065
+ size_t length = s1 - start;
1066
+ char *cstr = (char *) JS_malloc(cx, length + 1);
1067
+ char *estr;
1068
+ int err=0;
1069
+
1070
+ if (!cstr)
1071
+ return JS_FALSE;
1072
+ for (i = 0; i != length; i++)
1073
+ cstr[i] = (char)start[i];
1074
+ cstr[length] = 0;
1075
+
1076
+ value = JS_strtod(cstr, &estr, &err);
1077
+ if (err == JS_DTOA_ENOMEM) {
1078
+ JS_ReportOutOfMemory(cx);
1079
+ JS_free(cx, cstr);
1080
+ return JS_FALSE;
1081
+ }
1082
+ if (err == JS_DTOA_ERANGE && value == HUGE_VAL)
1083
+ value = *cx->runtime->jsPositiveInfinity;
1084
+ JS_free(cx, cstr);
1085
+ } else if ((base & (base - 1)) == 0) {
1086
+ /*
1087
+ * The number may also be inaccurate for power-of-two bases. This
1088
+ * happens if the addition in value * base + digit causes a round-
1089
+ * down to an even least significant mantissa bit when the first
1090
+ * dropped bit is a one. If any of the following digits in the
1091
+ * number (which haven't been added in yet) are nonzero, then the
1092
+ * correct action would have been to round up instead of down. An
1093
+ * example occurs when reading the number 0x1000000000000081, which
1094
+ * rounds to 0x1000000000000000 instead of 0x1000000000000100.
1095
+ */
1096
+ struct BinaryDigitReader bdr;
1097
+ intN bit, bit2;
1098
+ intN j;
1099
+
1100
+ bdr.base = base;
1101
+ bdr.digitMask = 0;
1102
+ bdr.digits = start;
1103
+ bdr.end = s1;
1104
+ value = 0.0;
1105
+
1106
+ /* Skip leading zeros. */
1107
+ do {
1108
+ bit = GetNextBinaryDigit(&bdr);
1109
+ } while (bit == 0);
1110
+
1111
+ if (bit == 1) {
1112
+ /* Gather the 53 significant bits (including the leading 1) */
1113
+ value = 1.0;
1114
+ for (j = 52; j; j--) {
1115
+ bit = GetNextBinaryDigit(&bdr);
1116
+ if (bit < 0)
1117
+ goto done;
1118
+ value = value*2 + bit;
1119
+ }
1120
+ /* bit2 is the 54th bit (the first dropped from the mantissa) */
1121
+ bit2 = GetNextBinaryDigit(&bdr);
1122
+ if (bit2 >= 0) {
1123
+ jsdouble factor = 2.0;
1124
+ intN sticky = 0; /* sticky is 1 if any bit beyond the 54th is 1 */
1125
+ intN bit3;
1126
+
1127
+ while ((bit3 = GetNextBinaryDigit(&bdr)) >= 0) {
1128
+ sticky |= bit3;
1129
+ factor *= 2;
1130
+ }
1131
+ value += bit2 & (bit | sticky);
1132
+ value *= factor;
1133
+ }
1134
+ done:;
1135
+ }
1136
+ }
1137
+ }
1138
+ /* We don't worry about inaccurate numbers for any other base. */
1139
+
1140
+ if (s1 == start) {
1141
+ *dp = 0.0;
1142
+ *ep = s;
1143
+ } else {
1144
+ *dp = negative ? -value : value;
1145
+ *ep = s1;
1146
+ }
1147
+ return JS_TRUE;
1148
+ }