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,1284 @@
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 script operations.
42
+ */
43
+ #include "jsstddef.h"
44
+ #include <string.h>
45
+ #include "jstypes.h"
46
+ #include "jsutil.h" /* Added by JSIFY */
47
+ #include "jsprf.h"
48
+ #include "jsapi.h"
49
+ #include "jsatom.h"
50
+ #include "jscntxt.h"
51
+ #include "jsconfig.h"
52
+ #include "jsdbgapi.h"
53
+ #include "jsemit.h"
54
+ #include "jsfun.h"
55
+ #include "jsinterp.h"
56
+ #include "jslock.h"
57
+ #include "jsnum.h"
58
+ #include "jsopcode.h"
59
+ #include "jsscript.h"
60
+ #if JS_HAS_XDR
61
+ #include "jsxdrapi.h"
62
+ #endif
63
+
64
+ #if JS_HAS_SCRIPT_OBJECT
65
+
66
+ #if JS_HAS_TOSOURCE
67
+ static JSBool
68
+ script_toSource(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
69
+ jsval *rval)
70
+ {
71
+ JSScript *script;
72
+ size_t i, j, k, n;
73
+ char buf[16];
74
+ jschar *s, *t;
75
+ uint32 indent;
76
+ JSString *str;
77
+
78
+ if (!JS_InstanceOf(cx, obj, &js_ScriptClass, argv))
79
+ return JS_FALSE;
80
+ script = (JSScript *) JS_GetPrivate(cx, obj);
81
+
82
+ /* Let n count the source string length, j the "front porch" length. */
83
+ j = JS_snprintf(buf, sizeof buf, "(new %s(", js_ScriptClass.name);
84
+ n = j + 2;
85
+ if (!script) {
86
+ /* Let k count the constructor argument string length. */
87
+ k = 0;
88
+ s = NULL; /* quell GCC overwarning */
89
+ } else {
90
+ indent = 0;
91
+ if (argc && !js_ValueToECMAUint32(cx, argv[0], &indent))
92
+ return JS_FALSE;
93
+ str = JS_DecompileScript(cx, script, "Script.prototype.toSource",
94
+ (uintN)indent);
95
+ if (!str)
96
+ return JS_FALSE;
97
+ str = js_QuoteString(cx, str, '\'');
98
+ if (!str)
99
+ return JS_FALSE;
100
+ s = JSSTRING_CHARS(str);
101
+ k = JSSTRING_LENGTH(str);
102
+ n += k;
103
+ }
104
+
105
+ /* Allocate the source string and copy into it. */
106
+ t = (jschar *) JS_malloc(cx, (n + 1) * sizeof(jschar));
107
+ if (!t)
108
+ return JS_FALSE;
109
+ for (i = 0; i < j; i++)
110
+ t[i] = buf[i];
111
+ for (j = 0; j < k; i++, j++)
112
+ t[i] = s[j];
113
+ t[i++] = ')';
114
+ t[i++] = ')';
115
+ t[i] = 0;
116
+
117
+ /* Create and return a JS string for t. */
118
+ str = JS_NewUCString(cx, t, n);
119
+ if (!str) {
120
+ JS_free(cx, t);
121
+ return JS_FALSE;
122
+ }
123
+ *rval = STRING_TO_JSVAL(str);
124
+ return JS_TRUE;
125
+ }
126
+ #endif /* JS_HAS_TOSOURCE */
127
+
128
+ static JSBool
129
+ script_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
130
+ jsval *rval)
131
+ {
132
+ JSScript *script;
133
+ uint32 indent;
134
+ JSString *str;
135
+
136
+ if (!JS_InstanceOf(cx, obj, &js_ScriptClass, argv))
137
+ return JS_FALSE;
138
+ script = (JSScript *) JS_GetPrivate(cx, obj);
139
+ if (!script) {
140
+ *rval = STRING_TO_JSVAL(cx->runtime->emptyString);
141
+ return JS_TRUE;
142
+ }
143
+
144
+ indent = 0;
145
+ if (argc && !js_ValueToECMAUint32(cx, argv[0], &indent))
146
+ return JS_FALSE;
147
+ str = JS_DecompileScript(cx, script, "Script.prototype.toString",
148
+ (uintN)indent);
149
+ if (!str)
150
+ return JS_FALSE;
151
+ *rval = STRING_TO_JSVAL(str);
152
+ return JS_TRUE;
153
+ }
154
+
155
+ static JSBool
156
+ script_compile(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
157
+ jsval *rval)
158
+ {
159
+ JSScript *oldscript, *script;
160
+ JSString *str;
161
+ JSStackFrame *fp, *caller;
162
+ JSObject *scopeobj;
163
+ const char *file;
164
+ uintN line;
165
+ JSPrincipals *principals;
166
+
167
+ /* Make sure obj is a Script object. */
168
+ if (!JS_InstanceOf(cx, obj, &js_ScriptClass, argv))
169
+ return JS_FALSE;
170
+
171
+ /* If no args, leave private undefined and return early. */
172
+ if (argc == 0)
173
+ goto out;
174
+
175
+ /* Otherwise, the first arg is the script source to compile. */
176
+ str = js_ValueToString(cx, argv[0]);
177
+ if (!str)
178
+ return JS_FALSE;
179
+
180
+ /* Compile using the caller's scope chain, which js_Invoke passes to fp. */
181
+ fp = cx->fp;
182
+ caller = JS_GetScriptedCaller(cx, fp);
183
+ JS_ASSERT(!caller || fp->scopeChain == caller->scopeChain);
184
+
185
+ scopeobj = NULL;
186
+ if (argc >= 2) {
187
+ if (!js_ValueToObject(cx, argv[1], &scopeobj))
188
+ return JS_FALSE;
189
+ argv[1] = OBJECT_TO_JSVAL(scopeobj);
190
+ }
191
+ if (caller) {
192
+ if (!scopeobj)
193
+ scopeobj = caller->scopeChain;
194
+
195
+ file = caller->script->filename;
196
+ line = js_PCToLineNumber(cx, caller->script, caller->pc);
197
+ principals = JS_EvalFramePrincipals(cx, fp, caller);
198
+ } else {
199
+ file = NULL;
200
+ line = 0;
201
+ principals = NULL;
202
+ }
203
+
204
+ /*
205
+ * Compile the new script using the caller's scope chain, a la eval().
206
+ * Unlike jsobj.c:obj_eval, however, we do not set JSFRAME_EVAL in fp's
207
+ * flags, because compilation is here separated from execution, and the
208
+ * run-time scope chain may not match the compile-time. JSFRAME_EVAL is
209
+ * tested in jsemit.c and jsscan.c to optimize based on identity of run-
210
+ * and compile-time scope.
211
+ */
212
+ script = JS_CompileUCScriptForPrincipals(cx, scopeobj, principals,
213
+ JSSTRING_CHARS(str),
214
+ JSSTRING_LENGTH(str),
215
+ file, line);
216
+ if (!script)
217
+ return JS_FALSE;
218
+
219
+ /* Swap script for obj's old script, if any. */
220
+ oldscript = (JSScript *) JS_GetPrivate(cx, obj);
221
+ if (!JS_SetPrivate(cx, obj, script)) {
222
+ js_DestroyScript(cx, script);
223
+ return JS_FALSE;
224
+ }
225
+ if (oldscript)
226
+ js_DestroyScript(cx, oldscript);
227
+
228
+ script->object = obj;
229
+ out:
230
+ /* Return the object. */
231
+ *rval = OBJECT_TO_JSVAL(obj);
232
+ return JS_TRUE;
233
+ }
234
+
235
+ static JSBool
236
+ script_exec(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
237
+ {
238
+ JSScript *script;
239
+ JSObject *scopeobj, *parent;
240
+ JSStackFrame *fp, *caller;
241
+
242
+ if (!JS_InstanceOf(cx, obj, &js_ScriptClass, argv))
243
+ return JS_FALSE;
244
+ script = (JSScript *) JS_GetPrivate(cx, obj);
245
+ if (!script)
246
+ return JS_TRUE;
247
+
248
+ scopeobj = NULL;
249
+ if (argc) {
250
+ if (!js_ValueToObject(cx, argv[0], &scopeobj))
251
+ return JS_FALSE;
252
+ argv[0] = OBJECT_TO_JSVAL(scopeobj);
253
+ }
254
+
255
+ /*
256
+ * Emulate eval() by using caller's this, var object, sharp array, etc.,
257
+ * all propagated by js_Execute via a non-null fourth (down) argument to
258
+ * js_Execute. If there is no scripted caller, js_Execute uses its second
259
+ * (chain) argument to set the exec frame's varobj, thisp, and scopeChain.
260
+ *
261
+ * Unlike eval, which the compiler detects, Script.prototype.exec may be
262
+ * called from a lightweight function, or even from native code (in which
263
+ * case fp->varobj and fp->scopeChain are null). If exec is called from
264
+ * a lightweight function, we will need to get a Call object representing
265
+ * its frame, to act as the var object and scope chain head.
266
+ */
267
+ fp = cx->fp;
268
+ caller = JS_GetScriptedCaller(cx, fp);
269
+ if (caller && !caller->varobj) {
270
+ /* Called from a lightweight function. */
271
+ JS_ASSERT(caller->fun && !(caller->fun->flags & JSFUN_HEAVYWEIGHT));
272
+
273
+ /* Scope chain links from Call object to callee's parent. */
274
+ parent = OBJ_GET_PARENT(cx, JSVAL_TO_OBJECT(caller->argv[-2]));
275
+ if (!js_GetCallObject(cx, caller, parent))
276
+ return JS_FALSE;
277
+ }
278
+
279
+ if (!scopeobj) {
280
+ /* No scope object passed in: try to use the caller's scope chain. */
281
+ if (caller) {
282
+ /*
283
+ * Load caller->scopeChain after the conditional js_GetCallObject
284
+ * call above, which resets scopeChain as well as varobj.
285
+ */
286
+ scopeobj = caller->scopeChain;
287
+ } else {
288
+ /*
289
+ * Called from native code, so we don't know what scope object to
290
+ * use. We could use parent (see above), but Script.prototype.exec
291
+ * might be a shared/sealed "superglobal" method. A more general
292
+ * approach would use cx->globalObject, which will be the same as
293
+ * exec.__parent__ in the non-superglobal case. In the superglobal
294
+ * case it's the right object: the global, not the superglobal.
295
+ */
296
+ scopeobj = cx->globalObject;
297
+ }
298
+ }
299
+
300
+ return js_Execute(cx, scopeobj, script, caller, JSFRAME_EVAL, rval);
301
+ }
302
+
303
+ #if JS_HAS_XDR
304
+
305
+ static JSBool
306
+ XDRAtomListElement(JSXDRState *xdr, JSAtomListElement *ale)
307
+ {
308
+ jsval value;
309
+ jsatomid index;
310
+
311
+ if (xdr->mode == JSXDR_ENCODE)
312
+ value = ATOM_KEY(ALE_ATOM(ale));
313
+
314
+ index = ALE_INDEX(ale);
315
+ if (!JS_XDRUint32(xdr, &index))
316
+ return JS_FALSE;
317
+ ALE_SET_INDEX(ale, index);
318
+
319
+ if (!JS_XDRValue(xdr, &value))
320
+ return JS_FALSE;
321
+
322
+ if (xdr->mode == JSXDR_DECODE) {
323
+ if (!ALE_SET_ATOM(ale, js_AtomizeValue(xdr->cx, value, 0)))
324
+ return JS_FALSE;
325
+ }
326
+ return JS_TRUE;
327
+ }
328
+
329
+ static JSBool
330
+ XDRAtomMap(JSXDRState *xdr, JSAtomMap *map)
331
+ {
332
+ uint32 length;
333
+ uintN i;
334
+ JSBool ok;
335
+
336
+ if (xdr->mode == JSXDR_ENCODE)
337
+ length = map->length;
338
+
339
+ if (!JS_XDRUint32(xdr, &length))
340
+ return JS_FALSE;
341
+
342
+ if (xdr->mode == JSXDR_DECODE) {
343
+ JSContext *cx;
344
+ void *mark;
345
+ JSAtomList al;
346
+ JSAtomListElement *ale;
347
+
348
+ cx = xdr->cx;
349
+ mark = JS_ARENA_MARK(&cx->tempPool);
350
+ ATOM_LIST_INIT(&al);
351
+ for (i = 0; i < length; i++) {
352
+ JS_ARENA_ALLOCATE_TYPE(ale, JSAtomListElement, &cx->tempPool);
353
+ if (!ale ||
354
+ !XDRAtomListElement(xdr, ale)) {
355
+ if (!ale)
356
+ JS_ReportOutOfMemory(cx);
357
+ JS_ARENA_RELEASE(&cx->tempPool, mark);
358
+ return JS_FALSE;
359
+ }
360
+ ALE_SET_NEXT(ale, al.list);
361
+ al.count++;
362
+ al.list = ale;
363
+ }
364
+ ok = js_InitAtomMap(cx, map, &al);
365
+ JS_ARENA_RELEASE(&cx->tempPool, mark);
366
+ return ok;
367
+ }
368
+
369
+ if (xdr->mode == JSXDR_ENCODE) {
370
+ JSAtomListElement ale;
371
+
372
+ for (i = 0; i < map->length; i++) {
373
+ ALE_SET_ATOM(&ale, map->vector[i]);
374
+ ALE_SET_INDEX(&ale, i);
375
+ if (!XDRAtomListElement(xdr, &ale))
376
+ return JS_FALSE;
377
+ }
378
+ }
379
+ return JS_TRUE;
380
+ }
381
+
382
+ JSBool
383
+ js_XDRScript(JSXDRState *xdr, JSScript **scriptp, JSBool *hasMagic)
384
+ {
385
+ JSContext *cx;
386
+ JSScript *script, *newscript;
387
+ uint32 length, lineno, depth, magic, nsrcnotes, ntrynotes;
388
+ uint32 prologLength, version;
389
+ JSBool filenameWasSaved;
390
+ jssrcnote *notes, *sn;
391
+
392
+ cx = xdr->cx;
393
+ script = *scriptp;
394
+ nsrcnotes = ntrynotes = 0;
395
+ filenameWasSaved = JS_FALSE;
396
+ notes = NULL;
397
+
398
+ /*
399
+ * Encode prologLength and version after script->length (_2 or greater),
400
+ * but decode both new (>= _2) and old, prolog&version-free (_1) scripts.
401
+ * Version _3 supports principals serialization. Version _4 reorders the
402
+ * nsrcnotes and ntrynotes fields to come before everything except magic,
403
+ * length, prologLength, and version, so that srcnote and trynote storage
404
+ * can be allocated as part of the JSScript (along with bytecode storage).
405
+ */
406
+ if (xdr->mode == JSXDR_ENCODE)
407
+ magic = JSXDR_MAGIC_SCRIPT_CURRENT;
408
+ if (!JS_XDRUint32(xdr, &magic))
409
+ return JS_FALSE;
410
+ if (magic != JSXDR_MAGIC_SCRIPT_4 &&
411
+ magic != JSXDR_MAGIC_SCRIPT_3 &&
412
+ magic != JSXDR_MAGIC_SCRIPT_2 &&
413
+ magic != JSXDR_MAGIC_SCRIPT_1) {
414
+ if (!hasMagic) {
415
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
416
+ JSMSG_BAD_SCRIPT_MAGIC);
417
+ return JS_FALSE;
418
+ }
419
+ *hasMagic = JS_FALSE;
420
+ return JS_TRUE;
421
+ }
422
+ if (hasMagic)
423
+ *hasMagic = JS_TRUE;
424
+
425
+ if (xdr->mode == JSXDR_ENCODE) {
426
+ length = script->length;
427
+ prologLength = PTRDIFF(script->main, script->code, jsbytecode);
428
+ JS_ASSERT((int16)script->version != JSVERSION_UNKNOWN);
429
+ version = (uint32)script->version | (script->numGlobalVars << 16);
430
+ lineno = (uint32)script->lineno;
431
+ depth = (uint32)script->depth;
432
+
433
+ /* Count the srcnotes, keeping notes pointing at the first one. */
434
+ notes = SCRIPT_NOTES(script);
435
+ for (sn = notes; !SN_IS_TERMINATOR(sn); sn = SN_NEXT(sn))
436
+ continue;
437
+ nsrcnotes = PTRDIFF(sn, notes, jssrcnote);
438
+ nsrcnotes++; /* room for the terminator */
439
+
440
+ /* Count the trynotes. */
441
+ if (script->trynotes) {
442
+ while (script->trynotes[ntrynotes].catchStart)
443
+ ntrynotes++;
444
+ ntrynotes++; /* room for the end marker */
445
+ }
446
+ }
447
+
448
+ if (!JS_XDRUint32(xdr, &length))
449
+ return JS_FALSE;
450
+ if (magic >= JSXDR_MAGIC_SCRIPT_2) {
451
+ if (!JS_XDRUint32(xdr, &prologLength))
452
+ return JS_FALSE;
453
+ if (!JS_XDRUint32(xdr, &version))
454
+ return JS_FALSE;
455
+
456
+ /* To fuse allocations, we need srcnote and trynote counts early. */
457
+ if (magic >= JSXDR_MAGIC_SCRIPT_4) {
458
+ if (!JS_XDRUint32(xdr, &nsrcnotes))
459
+ return JS_FALSE;
460
+ if (!JS_XDRUint32(xdr, &ntrynotes))
461
+ return JS_FALSE;
462
+ }
463
+ }
464
+
465
+ if (xdr->mode == JSXDR_DECODE) {
466
+ script = js_NewScript(cx, length, nsrcnotes, ntrynotes);
467
+ if (!script)
468
+ return JS_FALSE;
469
+ if (magic >= JSXDR_MAGIC_SCRIPT_2) {
470
+ script->main += prologLength;
471
+ script->version = (JSVersion) (version & 0xffff);
472
+ script->numGlobalVars = (uint16) (version >> 16);
473
+
474
+ /* If we know nsrcnotes, we allocated space for notes in script. */
475
+ if (magic >= JSXDR_MAGIC_SCRIPT_4)
476
+ notes = SCRIPT_NOTES(script);
477
+ }
478
+ *scriptp = script;
479
+ }
480
+
481
+ /*
482
+ * Control hereafter must goto error on failure, in order for the DECODE
483
+ * case to destroy script and conditionally free notes, which if non-null
484
+ * in the (DECODE and magic < _4) case must point at a temporary vector
485
+ * allocated just below.
486
+ */
487
+ if (!JS_XDRBytes(xdr, (char *)script->code, length * sizeof(jsbytecode)) ||
488
+ !XDRAtomMap(xdr, &script->atomMap)) {
489
+ goto error;
490
+ }
491
+
492
+ if (magic < JSXDR_MAGIC_SCRIPT_4) {
493
+ if (!JS_XDRUint32(xdr, &nsrcnotes))
494
+ goto error;
495
+ if (xdr->mode == JSXDR_DECODE) {
496
+ notes = (jssrcnote *) JS_malloc(cx, nsrcnotes * sizeof(jssrcnote));
497
+ if (!notes)
498
+ goto error;
499
+ }
500
+ }
501
+
502
+ if (!JS_XDRBytes(xdr, (char *)notes, nsrcnotes * sizeof(jssrcnote)) ||
503
+ !JS_XDRCStringOrNull(xdr, (char **)&script->filename) ||
504
+ !JS_XDRUint32(xdr, &lineno) ||
505
+ !JS_XDRUint32(xdr, &depth) ||
506
+ (magic < JSXDR_MAGIC_SCRIPT_4 && !JS_XDRUint32(xdr, &ntrynotes))) {
507
+ goto error;
508
+ }
509
+
510
+ /* Script principals transcoding support comes with versions >= _3. */
511
+ if (magic >= JSXDR_MAGIC_SCRIPT_3) {
512
+ JSPrincipals *principals;
513
+ uint32 encodeable;
514
+
515
+ if (xdr->mode == JSXDR_ENCODE) {
516
+ principals = script->principals;
517
+ encodeable = (cx->runtime->principalsTranscoder != NULL);
518
+ if (!JS_XDRUint32(xdr, &encodeable))
519
+ goto error;
520
+ if (encodeable &&
521
+ !cx->runtime->principalsTranscoder(xdr, &principals)) {
522
+ goto error;
523
+ }
524
+ } else {
525
+ if (!JS_XDRUint32(xdr, &encodeable))
526
+ goto error;
527
+ if (encodeable) {
528
+ if (!cx->runtime->principalsTranscoder) {
529
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
530
+ JSMSG_CANT_DECODE_PRINCIPALS);
531
+ goto error;
532
+ }
533
+ if (!cx->runtime->principalsTranscoder(xdr, &principals))
534
+ goto error;
535
+ script->principals = principals;
536
+ }
537
+ }
538
+ }
539
+
540
+ if (xdr->mode == JSXDR_DECODE) {
541
+ const char *filename = script->filename;
542
+ if (filename) {
543
+ filename = js_SaveScriptFilename(cx, filename);
544
+ if (!filename)
545
+ goto error;
546
+ JS_free(cx, (void *) script->filename);
547
+ script->filename = filename;
548
+ filenameWasSaved = JS_TRUE;
549
+ }
550
+ script->lineno = (uintN)lineno;
551
+ script->depth = (uintN)depth;
552
+
553
+ if (magic < JSXDR_MAGIC_SCRIPT_4) {
554
+ /*
555
+ * Argh, we have to reallocate script, copy notes into the extra
556
+ * space after the bytecodes, and free the temporary notes vector.
557
+ * First, add enough slop to nsrcnotes so we can align the address
558
+ * after the srcnotes of the first trynote.
559
+ */
560
+ uint32 osrcnotes = nsrcnotes;
561
+
562
+ if (ntrynotes)
563
+ nsrcnotes += JSTRYNOTE_ALIGNMASK;
564
+ newscript = (JSScript *) JS_realloc(cx, script,
565
+ sizeof(JSScript) +
566
+ length * sizeof(jsbytecode) +
567
+ nsrcnotes * sizeof(jssrcnote) +
568
+ ntrynotes * sizeof(JSTryNote));
569
+ if (!newscript)
570
+ goto error;
571
+
572
+ *scriptp = script = newscript;
573
+ script->code = (jsbytecode *)(script + 1);
574
+ script->main = script->code + prologLength;
575
+ memcpy(script->code + length, notes, osrcnotes * sizeof(jssrcnote));
576
+ JS_free(cx, (void *) notes);
577
+ notes = NULL;
578
+ if (ntrynotes) {
579
+ script->trynotes = (JSTryNote *)
580
+ ((jsword)(SCRIPT_NOTES(script) + nsrcnotes) &
581
+ ~(jsword)JSTRYNOTE_ALIGNMASK);
582
+ memset(script->trynotes, 0, ntrynotes * sizeof(JSTryNote));
583
+ }
584
+ }
585
+ }
586
+
587
+ while (ntrynotes) {
588
+ JSTryNote *tn = &script->trynotes[--ntrynotes];
589
+ uint32 start = (uint32) tn->start,
590
+ catchLength = (uint32) tn->length,
591
+ catchStart = (uint32) tn->catchStart;
592
+
593
+ if (!JS_XDRUint32(xdr, &start) ||
594
+ !JS_XDRUint32(xdr, &catchLength) ||
595
+ !JS_XDRUint32(xdr, &catchStart)) {
596
+ goto error;
597
+ }
598
+ tn->start = (ptrdiff_t) start;
599
+ tn->length = (ptrdiff_t) catchLength;
600
+ tn->catchStart = (ptrdiff_t) catchStart;
601
+ }
602
+ return JS_TRUE;
603
+
604
+ error:
605
+ if (xdr->mode == JSXDR_DECODE) {
606
+ if (script->filename && !filenameWasSaved) {
607
+ JS_free(cx, (void *) script->filename);
608
+ script->filename = NULL;
609
+ }
610
+ if (notes && magic < JSXDR_MAGIC_SCRIPT_4)
611
+ JS_free(cx, (void *) notes);
612
+ js_DestroyScript(cx, script);
613
+ *scriptp = NULL;
614
+ }
615
+ return JS_FALSE;
616
+ }
617
+
618
+ #if JS_HAS_XDR_FREEZE_THAW
619
+ /*
620
+ * These cannot be exposed to web content, and chrome does not need them, so
621
+ * we take them out of the Mozilla client altogether. Fortunately, there is
622
+ * no way to serialize a native function (see fun_xdrObject in jsfun.c).
623
+ */
624
+
625
+ static JSBool
626
+ script_freeze(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
627
+ jsval *rval)
628
+ {
629
+ JSXDRState *xdr;
630
+ JSScript *script;
631
+ JSBool ok, hasMagic;
632
+ uint32 len;
633
+ void *buf;
634
+ JSString *str;
635
+
636
+ if (!JS_InstanceOf(cx, obj, &js_ScriptClass, argv))
637
+ return JS_FALSE;
638
+ script = (JSScript *) JS_GetPrivate(cx, obj);
639
+ if (!script)
640
+ return JS_TRUE;
641
+
642
+ /* create new XDR */
643
+ xdr = JS_XDRNewMem(cx, JSXDR_ENCODE);
644
+ if (!xdr)
645
+ return JS_FALSE;
646
+
647
+ /* write */
648
+ ok = js_XDRScript(xdr, &script, &hasMagic);
649
+ if (!ok)
650
+ goto out;
651
+ if (!hasMagic) {
652
+ *rval = JSVAL_VOID;
653
+ goto out;
654
+ }
655
+
656
+ buf = JS_XDRMemGetData(xdr, &len);
657
+ if (!buf) {
658
+ ok = JS_FALSE;
659
+ goto out;
660
+ }
661
+
662
+ JS_ASSERT((jsword)buf % sizeof(jschar) == 0);
663
+ len /= sizeof(jschar);
664
+ str = JS_NewUCStringCopyN(cx, (jschar *)buf, len);
665
+ if (!str) {
666
+ ok = JS_FALSE;
667
+ goto out;
668
+ }
669
+
670
+ #if IS_BIG_ENDIAN
671
+ {
672
+ jschar *chars;
673
+ uint32 i;
674
+
675
+ /* Swap bytes in Unichars to keep frozen strings machine-independent. */
676
+ chars = JS_GetStringChars(str);
677
+ for (i = 0; i < len; i++)
678
+ chars[i] = JSXDR_SWAB16(chars[i]);
679
+ }
680
+ #endif
681
+ *rval = STRING_TO_JSVAL(str);
682
+
683
+ out:
684
+ JS_XDRDestroy(xdr);
685
+ return ok;
686
+ }
687
+
688
+ static JSBool
689
+ script_thaw(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
690
+ jsval *rval)
691
+ {
692
+ JSXDRState *xdr;
693
+ JSString *str;
694
+ void *buf;
695
+ uint32 len;
696
+ JSScript *script, *oldscript;
697
+ JSBool ok, hasMagic;
698
+
699
+ if (!JS_InstanceOf(cx, obj, &js_ScriptClass, argv))
700
+ return JS_FALSE;
701
+
702
+ if (argc == 0)
703
+ return JS_TRUE;
704
+ str = js_ValueToString(cx, argv[0]);
705
+ if (!str)
706
+ return JS_FALSE;
707
+
708
+ /* create new XDR */
709
+ xdr = JS_XDRNewMem(cx, JSXDR_DECODE);
710
+ if (!xdr)
711
+ return JS_FALSE;
712
+
713
+ buf = JS_GetStringChars(str);
714
+ len = JS_GetStringLength(str);
715
+ #if IS_BIG_ENDIAN
716
+ {
717
+ jschar *from, *to;
718
+ uint32 i;
719
+
720
+ /* Swap bytes in Unichars to keep frozen strings machine-independent. */
721
+ from = (jschar *)buf;
722
+ to = (jschar *) JS_malloc(cx, len * sizeof(jschar));
723
+ if (!to) {
724
+ JS_XDRDestroy(xdr);
725
+ return JS_FALSE;
726
+ }
727
+ for (i = 0; i < len; i++)
728
+ to[i] = JSXDR_SWAB16(from[i]);
729
+ buf = (char *)to;
730
+ }
731
+ #endif
732
+ len *= sizeof(jschar);
733
+ JS_XDRMemSetData(xdr, buf, len);
734
+
735
+ /* XXXbe should magic mismatch be error, or false return value? */
736
+ ok = js_XDRScript(xdr, &script, &hasMagic);
737
+ if (!ok)
738
+ goto out;
739
+ if (!hasMagic) {
740
+ *rval = JSVAL_FALSE;
741
+ goto out;
742
+ }
743
+
744
+ /* Swap script for obj's old script, if any. */
745
+ oldscript = (JSScript *) JS_GetPrivate(cx, obj);
746
+ ok = JS_SetPrivate(cx, obj, script);
747
+ if (!ok) {
748
+ JS_free(cx, script);
749
+ goto out;
750
+ }
751
+ if (oldscript)
752
+ js_DestroyScript(cx, oldscript);
753
+
754
+ script->object = obj;
755
+ js_CallNewScriptHook(cx, script, NULL);
756
+
757
+ out:
758
+ /*
759
+ * We reset the buffer to be NULL so that it doesn't free the chars
760
+ * memory owned by str (argv[0]).
761
+ */
762
+ JS_XDRMemSetData(xdr, NULL, 0);
763
+ JS_XDRDestroy(xdr);
764
+ #if IS_BIG_ENDIAN
765
+ JS_free(cx, buf);
766
+ #endif
767
+ *rval = JSVAL_TRUE;
768
+ return ok;
769
+ }
770
+
771
+ static const char js_thaw_str[] = "thaw";
772
+
773
+ #endif /* JS_HAS_XDR_FREEZE_THAW */
774
+ #endif /* JS_HAS_XDR */
775
+
776
+ static JSFunctionSpec script_methods[] = {
777
+ #if JS_HAS_TOSOURCE
778
+ {js_toSource_str, script_toSource, 0,0,0},
779
+ #endif
780
+ {js_toString_str, script_toString, 0,0,0},
781
+ {"compile", script_compile, 2,0,0},
782
+ {"exec", script_exec, 1,0,0},
783
+ #if JS_HAS_XDR_FREEZE_THAW
784
+ {"freeze", script_freeze, 0,0,0},
785
+ {js_thaw_str, script_thaw, 1,0,0},
786
+ #endif /* JS_HAS_XDR_FREEZE_THAW */
787
+ {0,0,0,0,0}
788
+ };
789
+
790
+ #endif /* JS_HAS_SCRIPT_OBJECT */
791
+
792
+ static void
793
+ script_finalize(JSContext *cx, JSObject *obj)
794
+ {
795
+ JSScript *script;
796
+
797
+ script = (JSScript *) JS_GetPrivate(cx, obj);
798
+ if (script)
799
+ js_DestroyScript(cx, script);
800
+ }
801
+
802
+ static JSBool
803
+ script_call(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
804
+ {
805
+ #if JS_HAS_SCRIPT_OBJECT
806
+ return script_exec(cx, JSVAL_TO_OBJECT(argv[-2]), argc, argv, rval);
807
+ #else
808
+ return JS_FALSE;
809
+ #endif
810
+ }
811
+
812
+ static uint32
813
+ script_mark(JSContext *cx, JSObject *obj, void *arg)
814
+ {
815
+ JSScript *script;
816
+
817
+ script = (JSScript *) JS_GetPrivate(cx, obj);
818
+ if (script)
819
+ js_MarkScript(cx, script, arg);
820
+ return 0;
821
+ }
822
+
823
+ JS_FRIEND_DATA(JSClass) js_ScriptClass = {
824
+ js_Script_str,
825
+ JSCLASS_HAS_PRIVATE,
826
+ JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
827
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, script_finalize,
828
+ NULL, NULL, script_call, NULL,/*XXXbe xdr*/
829
+ NULL, NULL, script_mark, 0
830
+ };
831
+
832
+ #if JS_HAS_SCRIPT_OBJECT
833
+
834
+ static JSBool
835
+ Script(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
836
+ {
837
+ /* If not constructing, replace obj with a new Script object. */
838
+ if (!(cx->fp->flags & JSFRAME_CONSTRUCTING)) {
839
+ obj = js_NewObject(cx, &js_ScriptClass, NULL, NULL);
840
+ if (!obj)
841
+ return JS_FALSE;
842
+ }
843
+ return script_compile(cx, obj, argc, argv, rval);
844
+ }
845
+
846
+ #if JS_HAS_XDR_FREEZE_THAW
847
+
848
+ static JSBool
849
+ script_static_thaw(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
850
+ jsval *rval)
851
+ {
852
+ obj = js_NewObject(cx, &js_ScriptClass, NULL, NULL);
853
+ if (!obj)
854
+ return JS_FALSE;
855
+ if (!script_thaw(cx, obj, argc, argv, rval))
856
+ return JS_FALSE;
857
+ *rval = OBJECT_TO_JSVAL(obj);
858
+ return JS_TRUE;
859
+ }
860
+
861
+ static JSFunctionSpec script_static_methods[] = {
862
+ {js_thaw_str, script_static_thaw, 1,0,0},
863
+ {0,0,0,0,0}
864
+ };
865
+
866
+ #else /* !JS_HAS_XDR_FREEZE_THAW */
867
+
868
+ #define script_static_methods NULL
869
+
870
+ #endif /* !JS_HAS_XDR_FREEZE_THAW */
871
+
872
+ JSObject *
873
+ js_InitScriptClass(JSContext *cx, JSObject *obj)
874
+ {
875
+ return JS_InitClass(cx, obj, NULL, &js_ScriptClass, Script, 1,
876
+ NULL, script_methods, NULL, script_static_methods);
877
+ }
878
+
879
+ #endif /* JS_HAS_SCRIPT_OBJECT */
880
+
881
+ /*
882
+ * Shared script filename management.
883
+ */
884
+ JS_STATIC_DLL_CALLBACK(int)
885
+ js_compare_strings(const void *k1, const void *k2)
886
+ {
887
+ return strcmp(k1, k2) == 0;
888
+ }
889
+
890
+ /* Shared with jsatom.c to save code space. */
891
+ extern void * JS_DLL_CALLBACK
892
+ js_alloc_table_space(void *priv, size_t size);
893
+
894
+ extern void JS_DLL_CALLBACK
895
+ js_free_table_space(void *priv, void *item);
896
+
897
+ /* NB: This struct overlays JSHashEntry -- see jshash.h, do not reorganize. */
898
+ typedef struct ScriptFilenameEntry {
899
+ JSHashEntry *next; /* hash chain linkage */
900
+ JSHashNumber keyHash; /* key hash function result */
901
+ const void *key; /* ptr to filename, below */
902
+ JSPackedBool mark; /* mark flag, for GC */
903
+ char filename[3]; /* two or more bytes, NUL-terminated */
904
+ } ScriptFilenameEntry;
905
+
906
+ JS_STATIC_DLL_CALLBACK(JSHashEntry *)
907
+ js_alloc_sftbl_entry(void *priv, const void *key)
908
+ {
909
+ size_t nbytes = offsetof(ScriptFilenameEntry, filename) + strlen(key) + 1;
910
+
911
+ return (JSHashEntry *) malloc(JS_MAX(nbytes, sizeof(JSHashEntry)));
912
+ }
913
+
914
+ JS_STATIC_DLL_CALLBACK(void)
915
+ js_free_sftbl_entry(void *priv, JSHashEntry *he, uintN flag)
916
+ {
917
+ if (flag != HT_FREE_ENTRY)
918
+ return;
919
+ free(he);
920
+ }
921
+
922
+ static JSHashAllocOps table_alloc_ops = {
923
+ js_alloc_table_space, js_free_table_space,
924
+ js_alloc_sftbl_entry, js_free_sftbl_entry
925
+ };
926
+
927
+ JSBool
928
+ js_InitRuntimeScriptState(JSContext *cx)
929
+ {
930
+ JSRuntime *rt = cx->runtime;
931
+
932
+ #ifdef JS_THREADSAFE
933
+ /* Must come through here once in primordial thread to init safely! */
934
+ if (!rt->scriptFilenameTableLock) {
935
+ rt->scriptFilenameTableLock = JS_NEW_LOCK();
936
+ if (!rt->scriptFilenameTableLock)
937
+ return JS_FALSE;
938
+ }
939
+ #endif
940
+ if (!rt->scriptFilenameTable) {
941
+ JS_ACQUIRE_LOCK(rt->scriptFilenameTableLock);
942
+ if (!rt->scriptFilenameTable) {
943
+ rt->scriptFilenameTable =
944
+ JS_NewHashTable(16, JS_HashString, js_compare_strings, NULL,
945
+ &table_alloc_ops, NULL);
946
+ }
947
+ JS_RELEASE_LOCK(rt->scriptFilenameTableLock);
948
+ if (!rt->scriptFilenameTable) {
949
+ js_FinishRuntimeScriptState(cx); /* free lock if threadsafe */
950
+ return JS_FALSE;
951
+ }
952
+ }
953
+ return JS_TRUE;
954
+ }
955
+
956
+ void
957
+ js_FinishRuntimeScriptState(JSContext *cx)
958
+ {
959
+ JSRuntime *rt = cx->runtime;
960
+
961
+ if (rt->scriptFilenameTable) {
962
+ JS_HashTableDestroy(rt->scriptFilenameTable);
963
+ rt->scriptFilenameTable = NULL;
964
+ }
965
+ #ifdef JS_THREADSAFE
966
+ if (rt->scriptFilenameTableLock) {
967
+ JS_DESTROY_LOCK(rt->scriptFilenameTableLock);
968
+ rt->scriptFilenameTableLock = NULL;
969
+ }
970
+ #endif
971
+ }
972
+
973
+ #ifdef DEBUG_brendan
974
+ size_t sftbl_savings = 0;
975
+ #endif
976
+
977
+ const char *
978
+ js_SaveScriptFilename(JSContext *cx, const char *filename)
979
+ {
980
+ JSRuntime *rt = cx->runtime;
981
+ JSHashTable *table;
982
+ JSHashNumber hash;
983
+ JSHashEntry **hep;
984
+ ScriptFilenameEntry *sfe;
985
+
986
+ JS_ACQUIRE_LOCK(rt->scriptFilenameTableLock);
987
+ table = rt->scriptFilenameTable;
988
+ hash = JS_HashString(filename);
989
+ hep = JS_HashTableRawLookup(table, hash, filename);
990
+ sfe = (ScriptFilenameEntry *) *hep;
991
+ #ifdef DEBUG_brendan
992
+ if (sfe)
993
+ sftbl_savings += strlen(sfe->filename);
994
+ #endif
995
+ if (!sfe) {
996
+ sfe = (ScriptFilenameEntry *)
997
+ JS_HashTableRawAdd(table, hep, hash, filename, NULL);
998
+ if (sfe) {
999
+ sfe->key = strcpy(sfe->filename, filename);
1000
+ JS_ASSERT(!sfe->mark);
1001
+ }
1002
+ }
1003
+ JS_RELEASE_LOCK(rt->scriptFilenameTableLock);
1004
+ if (!sfe) {
1005
+ JS_ReportOutOfMemory(cx);
1006
+ return NULL;
1007
+ }
1008
+ return sfe->filename;
1009
+ }
1010
+
1011
+ void
1012
+ js_MarkScriptFilename(const char *filename)
1013
+ {
1014
+ ScriptFilenameEntry *sfe;
1015
+
1016
+ /*
1017
+ * Back up from filename by its offset within its hash table entry.
1018
+ * The sfe->key member, redundant given sfe->filename but required by
1019
+ * the old jshash.c code, here gives us a useful sanity check. This
1020
+ * assertion will very likely botch if someone tries to mark a string
1021
+ * that wasn't allocated as an sfe->filename.
1022
+ */
1023
+ sfe = (ScriptFilenameEntry *)
1024
+ (filename - offsetof(ScriptFilenameEntry, filename));
1025
+ JS_ASSERT(sfe->key == sfe->filename);
1026
+ sfe->mark = JS_TRUE;
1027
+ }
1028
+
1029
+ JS_STATIC_DLL_CALLBACK(intN)
1030
+ js_script_filename_sweeper(JSHashEntry *he, intN i, void *arg)
1031
+ {
1032
+ ScriptFilenameEntry *sfe = (ScriptFilenameEntry *) he;
1033
+
1034
+ if (!sfe->mark)
1035
+ return HT_ENUMERATE_REMOVE;
1036
+ sfe->mark = JS_FALSE;
1037
+ return HT_ENUMERATE_NEXT;
1038
+ }
1039
+
1040
+ void
1041
+ js_SweepScriptFilenames(JSRuntime *rt)
1042
+ {
1043
+ JS_HashTableEnumerateEntries(rt->scriptFilenameTable,
1044
+ js_script_filename_sweeper,
1045
+ rt);
1046
+ #ifdef DEBUG_brendan
1047
+ printf("script filename table savings so far: %u\n", sftbl_savings);
1048
+ #endif
1049
+ }
1050
+
1051
+ JSScript *
1052
+ js_NewScript(JSContext *cx, uint32 length, uint32 nsrcnotes, uint32 ntrynotes)
1053
+ {
1054
+ JSScript *script;
1055
+
1056
+ /* Round up source note count to align script->trynotes for its type. */
1057
+ if (ntrynotes)
1058
+ nsrcnotes += JSTRYNOTE_ALIGNMASK;
1059
+ script = (JSScript *) JS_malloc(cx,
1060
+ sizeof(JSScript) +
1061
+ length * sizeof(jsbytecode) +
1062
+ nsrcnotes * sizeof(jssrcnote) +
1063
+ ntrynotes * sizeof(JSTryNote));
1064
+ if (!script)
1065
+ return NULL;
1066
+ memset(script, 0, sizeof(JSScript));
1067
+ script->code = script->main = (jsbytecode *)(script + 1);
1068
+ script->length = length;
1069
+ script->version = cx->version;
1070
+ if (ntrynotes) {
1071
+ script->trynotes = (JSTryNote *)
1072
+ ((jsword)(SCRIPT_NOTES(script) + nsrcnotes) &
1073
+ ~(jsword)JSTRYNOTE_ALIGNMASK);
1074
+ memset(script->trynotes, 0, ntrynotes * sizeof(JSTryNote));
1075
+ }
1076
+ return script;
1077
+ }
1078
+
1079
+ JS_FRIEND_API(JSScript *)
1080
+ js_NewScriptFromCG(JSContext *cx, JSCodeGenerator *cg, JSFunction *fun)
1081
+ {
1082
+ uint32 mainLength, prologLength, nsrcnotes, ntrynotes;
1083
+ JSScript *script;
1084
+ const char *filename;
1085
+
1086
+ mainLength = CG_OFFSET(cg);
1087
+ prologLength = CG_PROLOG_OFFSET(cg);
1088
+ CG_COUNT_FINAL_SRCNOTES(cg, nsrcnotes);
1089
+ CG_COUNT_FINAL_TRYNOTES(cg, ntrynotes);
1090
+ script = js_NewScript(cx, prologLength + mainLength, nsrcnotes, ntrynotes);
1091
+ if (!script)
1092
+ return NULL;
1093
+
1094
+ /* Now that we have script, error control flow must go to label bad. */
1095
+ script->main += prologLength;
1096
+ memcpy(script->code, CG_PROLOG_BASE(cg), prologLength * sizeof(jsbytecode));
1097
+ memcpy(script->main, CG_BASE(cg), mainLength * sizeof(jsbytecode));
1098
+ script->numGlobalVars = cg->treeContext.numGlobalVars;
1099
+ if (!js_InitAtomMap(cx, &script->atomMap, &cg->atomList))
1100
+ goto bad;
1101
+
1102
+ filename = cg->filename;
1103
+ if (filename) {
1104
+ script->filename = js_SaveScriptFilename(cx, filename);
1105
+ if (!script->filename)
1106
+ goto bad;
1107
+ }
1108
+ script->lineno = cg->firstLine;
1109
+ script->depth = cg->maxStackDepth;
1110
+ if (cg->principals) {
1111
+ script->principals = cg->principals;
1112
+ JSPRINCIPALS_HOLD(cx, script->principals);
1113
+ }
1114
+
1115
+ if (!js_FinishTakingSrcNotes(cx, cg, SCRIPT_NOTES(script)))
1116
+ goto bad;
1117
+ if (script->trynotes)
1118
+ js_FinishTakingTryNotes(cx, cg, script->trynotes);
1119
+
1120
+ /* Tell the debugger about this compiled script. */
1121
+ js_CallNewScriptHook(cx, script, fun);
1122
+ return script;
1123
+
1124
+ bad:
1125
+ js_DestroyScript(cx, script);
1126
+ return NULL;
1127
+ }
1128
+
1129
+ JS_FRIEND_API(void)
1130
+ js_CallNewScriptHook(JSContext *cx, JSScript *script, JSFunction *fun)
1131
+ {
1132
+ JSRuntime *rt;
1133
+ JSNewScriptHook hook;
1134
+
1135
+ rt = cx->runtime;
1136
+ hook = rt->newScriptHook;
1137
+ if (hook) {
1138
+ JS_KEEP_ATOMS(rt);
1139
+ hook(cx, script->filename, script->lineno, script, fun,
1140
+ rt->newScriptHookData);
1141
+ JS_UNKEEP_ATOMS(rt);
1142
+ }
1143
+ }
1144
+
1145
+ void
1146
+ js_DestroyScript(JSContext *cx, JSScript *script)
1147
+ {
1148
+ JSRuntime *rt;
1149
+ JSDestroyScriptHook hook;
1150
+
1151
+ rt = cx->runtime;
1152
+ hook = rt->destroyScriptHook;
1153
+ if (hook)
1154
+ hook(cx, script, rt->destroyScriptHookData);
1155
+
1156
+ JS_ClearScriptTraps(cx, script);
1157
+ js_FreeAtomMap(cx, &script->atomMap);
1158
+ if (script->principals)
1159
+ JSPRINCIPALS_DROP(cx, script->principals);
1160
+ JS_free(cx, script);
1161
+ }
1162
+
1163
+ void
1164
+ js_MarkScript(JSContext *cx, JSScript *script, void *arg)
1165
+ {
1166
+ JSAtomMap *map;
1167
+ uintN i, length;
1168
+ JSAtom **vector;
1169
+
1170
+ map = &script->atomMap;
1171
+ length = map->length;
1172
+ vector = map->vector;
1173
+ for (i = 0; i < length; i++)
1174
+ GC_MARK_ATOM(cx, vector[i], arg);
1175
+
1176
+ if (script->filename)
1177
+ js_MarkScriptFilename(script->filename);
1178
+ }
1179
+
1180
+ jssrcnote *
1181
+ js_GetSrcNote(JSScript *script, jsbytecode *pc)
1182
+ {
1183
+ jssrcnote *sn;
1184
+ ptrdiff_t offset, target;
1185
+
1186
+ target = PTRDIFF(pc, script->code, jsbytecode);
1187
+ if ((uint32)target >= script->length)
1188
+ return NULL;
1189
+ offset = 0;
1190
+ for (sn = SCRIPT_NOTES(script); !SN_IS_TERMINATOR(sn); sn = SN_NEXT(sn)) {
1191
+ offset += SN_DELTA(sn);
1192
+ if (offset == target && SN_IS_GETTABLE(sn))
1193
+ return sn;
1194
+ }
1195
+ return NULL;
1196
+ }
1197
+
1198
+ uintN
1199
+ js_PCToLineNumber(JSContext *cx, JSScript *script, jsbytecode *pc)
1200
+ {
1201
+ JSAtom *atom;
1202
+ JSFunction *fun;
1203
+ uintN lineno;
1204
+ ptrdiff_t offset, target;
1205
+ jssrcnote *sn;
1206
+ JSSrcNoteType type;
1207
+
1208
+ /*
1209
+ * Special case: function definition needs no line number note because
1210
+ * the function's script contains its starting line number.
1211
+ */
1212
+ if (*pc == JSOP_DEFFUN) {
1213
+ atom = GET_ATOM(cx, script, pc);
1214
+ fun = (JSFunction *) JS_GetPrivate(cx, ATOM_TO_OBJECT(atom));
1215
+ JS_ASSERT(fun->interpreted);
1216
+ return fun->u.script->lineno;
1217
+ }
1218
+
1219
+ /*
1220
+ * General case: walk through source notes accumulating their deltas,
1221
+ * keeping track of line-number notes, until we pass the note for pc's
1222
+ * offset within script->code.
1223
+ */
1224
+ lineno = script->lineno;
1225
+ offset = 0;
1226
+ target = PTRDIFF(pc, script->code, jsbytecode);
1227
+ for (sn = SCRIPT_NOTES(script); !SN_IS_TERMINATOR(sn); sn = SN_NEXT(sn)) {
1228
+ offset += SN_DELTA(sn);
1229
+ type = (JSSrcNoteType) SN_TYPE(sn);
1230
+ if (type == SRC_SETLINE) {
1231
+ if (offset <= target)
1232
+ lineno = (uintN) js_GetSrcNoteOffset(sn, 0);
1233
+ } else if (type == SRC_NEWLINE) {
1234
+ if (offset <= target)
1235
+ lineno++;
1236
+ }
1237
+ if (offset > target)
1238
+ break;
1239
+ }
1240
+ return lineno;
1241
+ }
1242
+
1243
+ jsbytecode *
1244
+ js_LineNumberToPC(JSScript *script, uintN target)
1245
+ {
1246
+ ptrdiff_t offset;
1247
+ uintN lineno;
1248
+ jssrcnote *sn;
1249
+ JSSrcNoteType type;
1250
+
1251
+ offset = 0;
1252
+ lineno = script->lineno;
1253
+ for (sn = SCRIPT_NOTES(script); !SN_IS_TERMINATOR(sn); sn = SN_NEXT(sn)) {
1254
+ if (lineno >= target)
1255
+ break;
1256
+ offset += SN_DELTA(sn);
1257
+ type = (JSSrcNoteType) SN_TYPE(sn);
1258
+ if (type == SRC_SETLINE) {
1259
+ lineno = (uintN) js_GetSrcNoteOffset(sn, 0);
1260
+ } else if (type == SRC_NEWLINE) {
1261
+ lineno++;
1262
+ }
1263
+ }
1264
+ return script->code + offset;
1265
+ }
1266
+
1267
+ uintN
1268
+ js_GetScriptLineExtent(JSScript *script)
1269
+ {
1270
+ uintN lineno;
1271
+ jssrcnote *sn;
1272
+ JSSrcNoteType type;
1273
+
1274
+ lineno = script->lineno;
1275
+ for (sn = SCRIPT_NOTES(script); !SN_IS_TERMINATOR(sn); sn = SN_NEXT(sn)) {
1276
+ type = (JSSrcNoteType) SN_TYPE(sn);
1277
+ if (type == SRC_SETLINE) {
1278
+ lineno = (uintN) js_GetSrcNoteOffset(sn, 0);
1279
+ } else if (type == SRC_NEWLINE) {
1280
+ lineno++;
1281
+ }
1282
+ }
1283
+ return 1 + lineno - script->lineno;
1284
+ }