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,1100 @@
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 the GNU General Public License Version 2 or later (the "GPL"), or
28
+ * 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
+ * PerlConnect module.
42
+ */
43
+
44
+ /*
45
+ The first two headers are from the Perl distribution.
46
+ Play with "perl -MExtUtils::Embed -e ccopts -e ldopts"
47
+ to find out which directories should be included. Refer
48
+ to perlembed man page for more info.
49
+ */
50
+ #include "EXTERN.h"
51
+ #include "perl.h"
52
+ #include "XSUB.h"
53
+
54
+ #include <jsapi.h>
55
+ #include <string.h>
56
+
57
+ /*---------------------------------------------------------------------------*/
58
+ /* PerlConnect. Provides means for OO JS <==> Perl communications */
59
+ /* See README.html for more info on PerlConnect. Look for TODO in this file */
60
+ /* for things that are bogus or not completely implemented. Has been tested */
61
+ /* with 5.004 only */
62
+ /*---------------------------------------------------------------------------*/
63
+
64
+ /* Forward declarations */
65
+ static JSBool PerlConstruct(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *v);
66
+ static void PerlFinalize(JSContext *cx, JSObject *obj);
67
+ static JSBool perl_eval(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval);
68
+ static JSBool perl_call(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval);
69
+ static JSBool perl_use(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval);
70
+ static JSBool use(JSContext *cx, JSObject *obj, int argc, jsval *argv, const char* t);
71
+ static JSBool PMGetProperty(JSContext *cx, JSObject *obj, jsval name, jsval* rval);
72
+ static JSBool PMSetProperty(JSContext *cx, JSObject *obj, jsval name, jsval *rval);
73
+ static JSBool PerlToString(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval);
74
+ static JSBool processReturn(JSContext *cx, JSObject *obj, jsval* rval);
75
+ static JSBool checkError(JSContext *cx);
76
+ static JSBool PMToString(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval);
77
+ static JSBool PVToString(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval);
78
+ static SV* PVGetRef(JSContext *cx, JSObject *obj);
79
+ static JSBool PVGetProperty(JSContext *cx, JSObject *obj, jsval name, jsval *rval);
80
+ static JSBool PVSetProperty(JSContext *cx, JSObject *obj, jsval name, jsval *rval);
81
+ static JSBool PVGetElement(JSContext *cx, JSObject *obj, jsint index, jsval *rval);
82
+ static JSBool PVSetElement(JSContext *cx, JSObject *obj, jsint index, jsval v);
83
+ static JSBool PVGetKey(JSContext *cx, JSObject *obj, char* name, jsval *rval);
84
+ static JSBool PVSetKey(JSContext *cx, JSObject *obj, char* name, jsval v);
85
+ static JSBool PVConvert(JSContext *cx, JSObject *obj, JSType type, jsval *v);
86
+ static void PVFinalize(JSContext *cx, JSObject *obj);
87
+ /* Exported functions */
88
+ JS_EXPORT_API(JSObject*) JS_InitPerlClass(JSContext *cx, JSObject *obj);
89
+ JS_EXPORT_API(JSBool) JSVALToSV(JSContext *cx, JSObject *obj, jsval v, SV** sv);
90
+ JS_EXPORT_API(JSBool) SVToJSVAL(JSContext *cx, JSObject *obj, SV *ref, jsval *rval);
91
+
92
+ /*
93
+ The following is required by the Perl dynamic loading mechanism to
94
+ link with modules that use C properly. See perlembed man page for details.
95
+ This allows things like sockets to be called via PerlConnect.
96
+ */
97
+ #ifdef __cplusplus
98
+ # define EXTERN_C extern "C"
99
+ #else
100
+ # define EXTERN_C extern
101
+ #endif
102
+
103
+ EXTERN_C void boot_DynaLoader _((CV* cv));
104
+ EXTERN_C void
105
+ xs_init()
106
+ {
107
+ newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__);
108
+ }
109
+
110
+ /* These properties are not processed by the getter for PerlValue */
111
+ static char* predefined_methods[] = {"toString", "valueOf", "type", "length"};
112
+
113
+ /* Represents a perl interpreter */
114
+ JSClass perlClass = {
115
+ "Perl", JSCLASS_HAS_PRIVATE,
116
+ JS_PropertyStub, JS_PropertyStub, PMGetProperty, /*PMSetProperty*/JS_PropertyStub,
117
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, PerlFinalize
118
+ };
119
+
120
+ static JSFunctionSpec perlMethods[] = {
121
+ {"toString", (JSNative)PerlToString, 0},
122
+ {"eval", (JSNative)perl_eval, 0},
123
+ {"call", (JSNative)perl_call, 0},
124
+ {"use", (JSNative)perl_use, 0},
125
+ { NULL, NULL,0 }
126
+ };
127
+
128
+
129
+ /* Represents a Perl module */
130
+ JSClass perlModuleClass = {
131
+ "PerlModule", JSCLASS_HAS_PRIVATE,
132
+ JS_PropertyStub, JS_PropertyStub, PMGetProperty, JS_PropertyStub,
133
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub
134
+ };
135
+
136
+ JSFunctionSpec perlModuleMethods[] = {
137
+ {"toString", (JSNative)PMToString, 0},
138
+ { NULL, NULL,0 }
139
+ };
140
+
141
+
142
+ /* Represents a value returned from Perl */
143
+ JSClass perlValueClass = {
144
+ "PerlValue", JSCLASS_HAS_PRIVATE,
145
+ JS_PropertyStub, JS_PropertyStub, PVGetProperty, PVSetProperty,
146
+ JS_EnumerateStub, JS_ResolveStub, PVConvert, PVFinalize
147
+ };
148
+
149
+ JSFunctionSpec perlValueMethods[] = {
150
+ {"toString", (JSNative)PVToString, 0},
151
+ { NULL, NULL, 0}
152
+ };
153
+
154
+ /*
155
+ Initializes Perl class. Should be called by applications that
156
+ want to enable PerlConnect. This will probably preload the Perl
157
+ DLL even though Perl might not actually be used. We may postpone
158
+ this and load the DLL at runtime after the constructor is called.
159
+ */
160
+ static JSObject*
161
+ js_InitPerlClass(JSContext *cx, JSObject *obj)
162
+ {
163
+ jsval v;
164
+ JSObject *module;
165
+ JSString *mainString = JS_NewStringCopyZ(cx, "main");
166
+ if (!mainString)
167
+ return NULL;
168
+ v = STRING_TO_JSVAL(mainString);
169
+ module = JS_NewObject(cx, &perlModuleClass, NULL, obj);
170
+ if (!module)
171
+ return NULL;
172
+
173
+ if (!JS_DefineFunctions(cx, module, perlModuleMethods))
174
+ return NULL;
175
+
176
+ JS_SetProperty(cx, module, "path", &v);
177
+
178
+ return JS_InitClass(cx, obj, module, &perlClass, PerlConstruct, 0,
179
+ NULL, NULL, NULL, NULL);
180
+ }
181
+
182
+ /* Public wrapper for the function above */
183
+ JSObject*
184
+ JS_InitPerlClass(JSContext *cx, JSObject *obj)
185
+ {
186
+ return js_InitPerlClass(cx, obj);
187
+ }
188
+
189
+ /*
190
+ Perl constructor. Allocates a new interpreter and defines methods on it.
191
+ The constuctor is sort of bogus in that it doesn't create a new namespace
192
+ and all the variables defined in one instance of the Perl object will be
193
+ visible in others. In the future, I think it may be a good idea to use
194
+ Safe.pm to provide independent contexts for different Perl objects and
195
+ prohibit certain operations (like exit(), alarm(), die(), etc.). Or we
196
+ may simple disallow calling the constuctor more than once.
197
+ */
198
+ static JSBool
199
+ PerlConstruct(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *v)
200
+ {
201
+ PerlInterpreter *perl;
202
+ JSObject *perlObject;
203
+ JSBool ok;
204
+ char *embedding[] = {"", "-e", "0"};
205
+ char *t = "use PerlConnect qw(perl_eval perl_resolve perl_call $js $ver);";
206
+
207
+ /* create a new interpreter */
208
+ perl = perl_alloc();
209
+
210
+ if(perl==NULL){
211
+ JS_ReportError(cx, "Can't allocate a new interpreter");
212
+ return JS_FALSE;
213
+ }
214
+
215
+ perl_construct(perl);
216
+ if(perl_parse(perl, xs_init, 3, embedding, NULL)){
217
+ JS_ReportError(cx, "Parsing failed");
218
+ return JS_FALSE;
219
+ }
220
+ if(perl_run(perl)){
221
+ JS_ReportError(cx, "Run failed");
222
+ return JS_FALSE;
223
+ }
224
+ ok = use(cx, obj, argc, argv, t);
225
+
226
+ /* make it into an object */
227
+ perlObject = JS_NewObject(cx, &perlClass, NULL, NULL);
228
+ if(!perlObject)
229
+ return JS_FALSE;
230
+ if(!JS_DefineFunctions(cx, perlObject, perlMethods))
231
+ return JS_FALSE;
232
+ JS_SetPrivate(cx, perlObject, perl);
233
+ *v = OBJECT_TO_JSVAL(perlObject);
234
+ return ok;
235
+ }
236
+
237
+ /* Destructor. Deallocates the interpreter */
238
+ static void
239
+ PerlFinalize(JSContext *cx, JSObject *obj)
240
+ {
241
+ PerlInterpreter *perl = JS_GetPrivate(cx, obj);
242
+ if (perl) {
243
+ perl_destruct(perl);
244
+ perl_free(perl);
245
+ }
246
+ /* return JS_TRUE; */
247
+ }
248
+
249
+ /*
250
+ Returns a string representation of the Perl interpreter.
251
+ Can add printing of the Perl version, @ISA, etc., like the
252
+ output produced by perl -V. Can also make certain variables
253
+ available off the Perl object, like Perl.version, etc.
254
+ */
255
+ static JSBool
256
+ PerlToString(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval){
257
+ JSString *imported;
258
+ SV* sv = perl_get_sv("JS::ver", FALSE);
259
+ if (!sv) {
260
+ JS_ReportOutOfMemory(cx);
261
+ return JS_FALSE;
262
+ }
263
+ imported = JS_NewStringCopyZ(cx, SvPV(sv, PL_na));
264
+ if (!imported)
265
+ return JS_FALSE;
266
+ *rval = STRING_TO_JSVAL(imported);
267
+ return JS_TRUE;
268
+ }
269
+
270
+ /*
271
+ Evaluates the first parameter in Perl and put the eval's
272
+ return value into *rval. The return value is of type PerlValue.
273
+ This procedure uses JS::perl_eval. Example of use of perl.eval():
274
+ p = new Perl();
275
+ str = p.eval("'-' x 80"); // str contains 80 dashes
276
+ */
277
+ static JSBool
278
+ perl_eval(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval)
279
+ {
280
+ char *statement;
281
+ char *args[] = {NULL, NULL}; /* two elements */
282
+
283
+ if(argc!=1){
284
+ JS_ReportError(cx, "Perl.eval expects one parameter");
285
+ return JS_FALSE;
286
+ }
287
+ statement = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
288
+
289
+ args[0] = statement;
290
+ perl_call_argv("JS::perl_eval", G_SCALAR|G_KEEPERR|G_EVAL, args);
291
+ return processReturn(cx, obj, rval);
292
+ }
293
+
294
+ /*
295
+ Call the perl procedure specified as the first argument and
296
+ pass all the other arguments as parameters. The return value
297
+ is returned in *rval. Example of use of perl.call():
298
+ p = new Perl('Time::gmtime');
299
+ time = p.call("Time::gmtime::gmtime"); // time is now the following array:
300
+ // [40,42,1,22,6,98,3,202,0]
301
+ NB: The full function name has to be supplied, i.e. Time::gmtime::gmtime
302
+ instead of gmtime unless gmtime is exported into the current package.
303
+
304
+ This method is also used when one uses the full package name syntax like
305
+ this:
306
+ p = new Perl("Sys::Hostname", "JS")
307
+ result = p.JS.c(1, 2, 4)
308
+ p.hostname()
309
+
310
+ This gets called from PMGetProperty, which creates a
311
+ function whose native method is perl_call. Also see
312
+ JS::perl_call.
313
+ */
314
+ static JSBool
315
+ perl_call(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval)
316
+ {
317
+ JSBool ok;
318
+ int count, i;
319
+ char* fun_name;
320
+ SV *sv;
321
+ dSP;
322
+
323
+ /* Differetiate between direct and method-like call */
324
+ if((JS_TypeOfValue(cx, argv[-2]) == JSTYPE_FUNCTION) &&
325
+ strcmp("call", JS_GetFunctionName(JS_ValueToFunction(cx, argv[-2])))){
326
+ fun_name = (char*)JS_GetFunctionName(JS_GetPrivate(cx, JSVAL_TO_OBJECT(argv[-2])));
327
+ i=0;
328
+ }else{
329
+ fun_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
330
+ i=1;
331
+ }
332
+
333
+ PUSHMARK(sp);
334
+ XPUSHs(sv_2mortal(newSVpv(fun_name,0)));
335
+
336
+ for(;i<argc;i++){
337
+ JSVALToSV(cx, obj, argv[i], &sv);
338
+ XPUSHs(sv);
339
+ }
340
+ PUTBACK;
341
+
342
+ count = perl_call_sv(newSVpv("JS::perl_call", 0), G_KEEPERR|G_SCALAR|G_EVAL|G_DISCARD);
343
+ if(count!=0){
344
+ JS_ReportError(cx, "Implementation error: count=%d, must be 0!\n", count);
345
+ return JS_FALSE;
346
+ }
347
+ ok = processReturn(cx, obj, rval);
348
+
349
+ return ok;
350
+ }
351
+
352
+ /*
353
+ Loads Perl libraries specified as arguments.
354
+ */
355
+ static JSBool
356
+ perl_use(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval)
357
+ {
358
+ return use(cx, obj, argc, argv, NULL);
359
+ }
360
+
361
+ /*
362
+ Utility function used by perl_use and Perl's constructor.
363
+ Executes use lib1; use lib2, etc. in the current interpreter.
364
+ */
365
+ static JSBool
366
+ use(JSContext *cx, JSObject *obj, int argc, jsval *argv, const char* t){
367
+ char *evalStr = JS_malloc(cx, t?strlen(t)+1:1);
368
+ int i;
369
+
370
+ if (!evalStr)
371
+ return JS_FALSE;
372
+
373
+ strcpy(evalStr, t?t:"");
374
+
375
+ for(i=0;i<argc;i++){
376
+ char *arg = JS_GetStringBytes(JS_ValueToString(cx, argv[i])), *tmp, old[256];
377
+
378
+ /* call use() on every parameter */
379
+ strcpy(old, evalStr);
380
+ JS_free(cx, evalStr);
381
+ tmp = JS_malloc(cx, strlen(old)+strlen(arg)+6);
382
+ if (!tmp)
383
+ return JS_FALSE;
384
+ sprintf(tmp, "%suse %s;", old, arg);
385
+ evalStr = tmp;
386
+ }
387
+
388
+ perl_eval_sv(newSVpv(evalStr, 0), G_KEEPERR);
389
+
390
+ checkError(cx);
391
+ JS_free(cx, evalStr);
392
+ return JS_TRUE;
393
+ }
394
+
395
+ /*
396
+ Looks at $@ to see if there was an error. Used by
397
+ perl_eval, perl_call, etc.
398
+ */
399
+ static JSBool
400
+ checkError(JSContext *cx)
401
+ {
402
+ if(SvTRUE(GvSV(PL_errgv))){
403
+ JS_ReportError(cx, "perl eval failed: %s",
404
+ SvPV(GvSV(PL_errgv), PL_na));
405
+ /* clear error status. there should be a way to do this faster */
406
+ perl_eval_sv(newSVpv("undef $@;", 0), G_KEEPERR);
407
+ return JS_FALSE;
408
+ }
409
+ return JS_TRUE;
410
+ }
411
+
412
+ /*
413
+ Take the value of $JS::js and convert in to a jsval. It's stotred
414
+ in *rval. perl_eval and perl_call use $JS::js to store return results.
415
+ */
416
+ static JSBool
417
+ processReturn(JSContext *cx, JSObject *obj, jsval* rval)
418
+ {
419
+ SV *js;
420
+
421
+ js = perl_get_sv("JS::js", FALSE);
422
+
423
+ if(!js || !SvOK(js)){
424
+ *rval = JSVAL_VOID;
425
+ /* XXX isn't this wrong? */
426
+ return JS_FALSE;
427
+ }
428
+ if(!SvROK(js)){
429
+ JS_ReportError(cx, "$js (%s) must be of reference type", SvPV(js,PL_na));
430
+ return JS_FALSE;
431
+ }
432
+
433
+ checkError(cx);
434
+
435
+ return SVToJSVAL(cx, obj, js, rval);
436
+ }
437
+
438
+ /*
439
+ Implements namespace-like syntax that maps Perl packages to
440
+ JS objects. One can say
441
+ p = new Perl('Foo::Bar')
442
+ and then call
443
+ a = p.Foo.Bar.f()
444
+ or access variables exported from those packages like this:
445
+ a = p.Foo.Bar["$var"]
446
+ this syntax will also work:
447
+ a = p.Foo.Bar.$var
448
+ but if you want to access non-scalar values, you must use the subscript syntax:
449
+ p.Foo.Bar["@arr"]
450
+ and
451
+ p.Foo.Bar["%hash"]
452
+ */
453
+ static JSBool
454
+ PMGetProperty(JSContext *cx, JSObject *obj, jsval name, jsval *rval)
455
+ {
456
+ char *last = JS_GetStringBytes(JS_ValueToString(cx, name)), *path, package[256];
457
+ char *args[] = {NULL, NULL};
458
+ char *predefined_methods[] = {"toString", "eval", "call", "use", "path"};
459
+ int count;
460
+ SV *js;
461
+ jsval v;
462
+ int i;
463
+
464
+ for(i=0;i<sizeof(predefined_methods)/sizeof(char*);i++){
465
+ if(!strcmp(predefined_methods[i], last)){
466
+ return JS_TRUE;
467
+ }
468
+ }
469
+
470
+ JS_GetProperty(cx, obj, "path", &v);
471
+ path = JS_GetStringBytes(JS_ValueToString(cx, v));
472
+ sprintf(package, "%s::%s", path, last);
473
+ args[0] = package;
474
+
475
+ count = perl_call_argv("JS::perl_resolve", G_KEEPERR|G_SCALAR|G_EVAL|G_DISCARD, args);
476
+ if(count!=0){
477
+ JS_ReportError(cx, "Implementation error: count=%d, must be 0!\n", count);
478
+ return JS_FALSE;
479
+ }
480
+
481
+ checkError(cx);
482
+
483
+ js = perl_get_sv("JS::js", FALSE);
484
+
485
+ if(js && SvOK(js)){
486
+ if(SvROK(js)){
487
+ SVToJSVAL(cx, obj, js, rval);
488
+ }else{
489
+ /* defined function */
490
+ if(SvIV(js) == 1){
491
+ JSFunction *f = JS_NewFunction(cx, (JSNative)perl_call, 0, 0, NULL, package);
492
+ if (!f) {
493
+ return JS_FALSE;
494
+ }
495
+ *rval = OBJECT_TO_JSVAL(JS_GetFunctionObject(f));
496
+ }else
497
+ if(SvIV(js) == 2){
498
+ JSObject *module;
499
+ JSString *packageString;
500
+ module = JS_NewObject(cx, &perlModuleClass, NULL, obj);
501
+ packageString = JS_NewStringCopyZ(cx,package);
502
+ if (!module || !packageString) {
503
+ return JS_FALSE;
504
+ }
505
+ v = (js && SvTRUE(js))?STRING_TO_JSVAL(packageString):JSVAL_VOID;
506
+ JS_SetProperty(cx, module, "path", &v);
507
+ *rval = OBJECT_TO_JSVAL(module);
508
+ }else{
509
+ JS_ReportError(cx, "Symbol %s is not defined", package);
510
+ *rval = JSVAL_VOID;
511
+ }
512
+ }
513
+ return JS_TRUE;
514
+ }else{
515
+ JS_ReportError(cx, "failure");
516
+ return JS_FALSE;
517
+ }
518
+ }
519
+
520
+ /*
521
+ Gets called when a Perl value gets assigned to like this:
522
+ p.Foo.Bar["$var"] = 100
523
+ */
524
+ static JSBool
525
+ PMSetProperty(JSContext *cx, JSObject *obj, jsval name, jsval *rval)
526
+ {
527
+ /* TODO: just call SVToJSVAL() and make the assignment. */
528
+ return JS_TRUE;
529
+ }
530
+
531
+ /*
532
+ toString() for PerlModule. Prints the path the module represents.
533
+ Note that the path doesn't necessarily have to be valid. We don't
534
+ have a way to check that until we call a function from that package.
535
+ TODO: In 5.005 exists Foo::{Bar::} checks is Foo::{Bar::} exists.
536
+ We can use this to validate package names.
537
+ */
538
+ static JSBool
539
+ PMToString(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval){
540
+ char str[256];
541
+ JSString *s, *newString;
542
+ jsval v;
543
+
544
+ JS_GetProperty(cx, obj, "path", &v);
545
+ s = JSVAL_TO_STRING(v);
546
+ sprintf(str, "[PerlModule %s]", JS_GetStringBytes(s));
547
+ newString = JS_NewStringCopyZ(cx, str);
548
+ if (!newString)
549
+ return JS_FALSE;
550
+ *rval = STRING_TO_JSVAL(newString);
551
+ return JS_TRUE;
552
+ }
553
+
554
+ /*
555
+ Helped method. Retrieves the Perl reference stored
556
+ in PerlValue object as private data.
557
+ */
558
+
559
+ #include <stdio.h>
560
+
561
+ static SV*
562
+ PVGetRef(JSContext *cx, JSObject *obj)
563
+ {
564
+ SV* ref;
565
+
566
+ ref = (SV*)JS_GetInstancePrivate(cx, obj, &perlValueClass, NULL);
567
+
568
+ if(!ref || !SvOK(ref) || !SvROK(ref)){
569
+ JS_ReportError(cx, "Can't extract ref");
570
+ return NULL;
571
+ }
572
+ return ref;
573
+ }
574
+
575
+ static JSBool
576
+ PVCallStub (JSContext *cx, JSObject *obj, uintN argc,
577
+ jsval *argv, jsval *rval) {
578
+ JSFunction *fun;
579
+ int i, cnt;
580
+ I32 ax;
581
+ SV *sv, *perl_object;
582
+ GV *gv;
583
+ HV *stash;
584
+ char *name;
585
+
586
+ dSP;
587
+
588
+ fun = JS_ValueToFunction(cx, argv[-2]);
589
+ perl_object = PVGetRef(cx, obj);
590
+
591
+ fun = JS_ValueToFunction(cx, argv[-2]);
592
+ name = (char*) JS_GetFunctionName(fun);
593
+
594
+ stash = SvSTASH(SvRV(perl_object));
595
+ gv = gv_fetchmeth(stash, name, strlen(name), 0);
596
+ /* cnt = perl_call_pv(method_name, 0); */
597
+ /* start of perl call stuff */
598
+ if (! gv) {
599
+ char msg[256];
600
+ sprintf(msg, "Method ``%s'' not defined", name);
601
+ JS_ReportError(cx, msg);
602
+ return JS_FALSE;
603
+ }
604
+
605
+ ENTER;
606
+ SAVETMPS;
607
+ PUSHMARK(SP);
608
+ //SvREFCNT_inc(perl_object);
609
+ XPUSHs(perl_object); /* self for perl object method */
610
+ for (i = 0; i < argc; i++) {
611
+ //sv = sv_newmortal();
612
+ JSVALToSV(cx, obj, argv[i], &sv);
613
+ //sv_2mortal(sv);
614
+ XPUSHs(sv);
615
+ }
616
+ PUTBACK;
617
+
618
+ cnt = perl_call_sv((SV*)GvCV(gv), G_ARRAY | G_KEEPERR | G_EVAL);
619
+
620
+ //SvREFCNT_dec(perl_object);
621
+
622
+ SPAGAIN;
623
+ /* adjust stack for use of ST macro (see perlcall) */
624
+ SP -= cnt;
625
+ ax = (SP - PL_stack_base) + 1;
626
+
627
+ /* read value(s) */
628
+ if (cnt == 1) {
629
+ SVToJSVAL(cx, obj, ST(0), rval);
630
+ } else {
631
+ JSObject *jsarr;
632
+ jsval val;
633
+ int i;
634
+ jsarr = JS_NewArrayObject(cx, 0, NULL);
635
+ for (i = 0; i < cnt; i++) {
636
+ SVToJSVAL(cx, JS_GetGlobalObject(cx), ST(i), &val);
637
+ JS_DefineElement(cx, jsarr, i, val, NULL, NULL, 0);
638
+ }
639
+ *rval = OBJECT_TO_JSVAL(jsarr);
640
+ }
641
+ PUTBACK;
642
+
643
+ FREETMPS;
644
+ LEAVE;
645
+
646
+ //return(JS_TRUE);
647
+ return checkError(cx);
648
+ }
649
+
650
+ /*
651
+ Retrieve property from PerlValue object by its name. Tries
652
+ to look at the PerlValue object both as a hash and array.
653
+ If the index is numerical, then it looks at the array part
654
+ first. *rval contains the result.
655
+ */
656
+ /* __PH__
657
+ ...but. PVGetproperty now firstly looks for method in given
658
+ object package. If such method if found, then is returned
659
+ universal method stub. Sideeffect of this behavior is, that
660
+ method are looked first before properties of the same name.
661
+
662
+ Second problem is security. In this way any perl method could
663
+ be called. We pay security leak for this. May be we could
664
+ support some Perl exporting process (via some package global
665
+ array).
666
+ */
667
+ static JSBool
668
+ PVGetProperty(JSContext *cx, JSObject *obj, jsval name, jsval *rval)
669
+ {
670
+ char* str;
671
+
672
+ /* __PH__ array properties should be served first */
673
+ if(JSVAL_IS_INT(name)){
674
+ int32 ip;
675
+
676
+ JS_ValueToInt32(cx, name, &ip);
677
+ PVGetElement(cx, obj, ip, rval);
678
+ if(*rval!=JSVAL_VOID){
679
+ return JS_TRUE;
680
+ }
681
+ }
682
+
683
+ str = JS_GetStringBytes(JS_ValueToString(cx, name));
684
+
685
+ /* __PH__ may, be */
686
+ if(!strcmp(str, "length")){
687
+ SV* sv = SvRV(PVGetRef(cx, obj));
688
+
689
+ if(SvTYPE(sv)==SVt_PVAV){
690
+ *rval = INT_TO_JSVAL(av_len((AV*)sv)+1);
691
+ return JS_TRUE;
692
+ }else
693
+ if(SvTYPE(sv)==SVt_PVHV){
694
+ *rval = INT_TO_JSVAL(av_len((AV*)sv)+1);
695
+ return JS_TRUE;
696
+ }else{
697
+ *rval = INT_TO_JSVAL(0);
698
+ return JS_TRUE;
699
+ }
700
+ }else{
701
+ int i;
702
+ /* __PH__ predefined methods NUST win */
703
+ for(i=0; i < sizeof(predefined_methods)/sizeof(char*); i++){
704
+ if(!strcmp(predefined_methods[i], str)){
705
+ return JS_TRUE;
706
+ }
707
+ }
708
+
709
+ /* __PH__ properties in hash should be served at last (possibly) */
710
+ PVGetKey(cx, obj, str, rval);
711
+ if (*rval!=JSVAL_VOID) {
712
+ return JS_TRUE;
713
+ } else {
714
+ #if 0
715
+ char* str = JS_GetStringBytes(JS_ValueToString(cx, name));
716
+ JS_ReportError(cx, "Perl: can't get property '%s'", str);
717
+ return JS_FALSE;
718
+ #else
719
+ /* when Volodya does another job, we may experiment :-) */
720
+ char* str = JS_GetStringBytes(JS_ValueToString(cx, name));
721
+ /* great, but who will dispose it? (GC of JS??) */
722
+ JSFunction *fun = JS_NewFunction(cx, PVCallStub, 0, 0, NULL, str);
723
+ *rval = OBJECT_TO_JSVAL(JS_GetFunctionObject(fun));
724
+ return(JS_TRUE);
725
+ #endif
726
+ }
727
+ }
728
+ return JS_TRUE;
729
+ }
730
+
731
+ /*
732
+ Set property of PerlValue object. Like GetProperty is looks at
733
+ both array and hash components.
734
+ */
735
+ static JSBool
736
+ PVSetProperty(JSContext *cx, JSObject *obj, jsval name, jsval *rval)
737
+ {
738
+ char* str = JS_GetStringBytes(JS_ValueToString(cx, name));
739
+
740
+ if(JSVAL_IS_INT(name)){
741
+ int32 ip;
742
+
743
+ JS_ValueToInt32(cx, name, &ip);
744
+ if(PVSetElement(cx, obj, ip, *rval)) return JS_TRUE;
745
+ }
746
+ return PVSetKey(cx, obj, str, *rval);
747
+ }
748
+
749
+ /*
750
+ Retrieve numerical property of a PerlValue object.
751
+ If the object doesn't contain an array, or the
752
+ property doesn't exist, NULL is returned.
753
+ */
754
+ static JSBool
755
+ PVGetElement(JSContext *cx, JSObject *obj, jsint index, jsval *rval)
756
+ {
757
+ SV *ref, **sv;
758
+ AV *list;
759
+
760
+ *rval = JSVAL_VOID;
761
+
762
+ ref = PVGetRef(cx, obj);
763
+
764
+ if(SvTYPE(SvRV(ref)) != SVt_PVAV){
765
+ return JS_FALSE;
766
+ }
767
+
768
+ list = (AV*)SvRV(ref);
769
+
770
+ if(!list){
771
+ return JS_FALSE;
772
+ }
773
+ sv = av_fetch(list, (I32)index, 0);
774
+ if(!sv){
775
+ return JS_FALSE;
776
+ }
777
+ //return SVToJSVAL(cx, obj, newRV_inc(*sv), rval);
778
+ return SVToJSVAL(cx, obj, *sv, rval);
779
+ }
780
+
781
+ /*
782
+ Set a numeric property of a PerlValue object.
783
+ If the object doesn't contain an array or the
784
+ index doesn't exist, JS_FALSE is returned.
785
+ */
786
+ static JSBool
787
+ PVSetElement(JSContext *cx, JSObject *obj, jsint index, jsval v)
788
+ {
789
+ SV *ref, **sv, *s;
790
+ AV *list;
791
+
792
+ ref = PVGetRef(cx, obj);
793
+
794
+ if(SvTYPE(SvRV(ref)) != SVt_PVAV){
795
+ return JS_FALSE;
796
+ }
797
+
798
+ list = (AV*)SvRV(ref);
799
+
800
+ if(!list) return JS_FALSE;
801
+ JSVALToSV(cx, obj, v, &s);
802
+ sv = av_store(list, (I32)index, s);
803
+ if(!sv) return JS_FALSE;
804
+ return JS_TRUE;
805
+ }
806
+
807
+ /*
808
+ Retrieve property. If the object doesn't contain an hash, or the
809
+ property doesn't exist, NULL is returned.
810
+ */
811
+ static JSBool
812
+ PVGetKey(JSContext *cx, JSObject *obj, char* name, jsval *rval)
813
+ {
814
+ SV *ref, **sv;
815
+ HV *hash;
816
+
817
+ *rval = JSVAL_VOID;
818
+ ref = PVGetRef(cx, obj);
819
+
820
+ if(SvTYPE(SvRV(ref)) != SVt_PVHV){
821
+ return JS_FALSE;
822
+ }
823
+
824
+ hash = (HV*)SvRV(ref);
825
+
826
+ if(!hash){
827
+ return JS_FALSE;
828
+ }
829
+ sv = hv_fetch(hash, name, strlen(name), 0);
830
+ if(!sv){
831
+ return JS_FALSE;
832
+ }
833
+ return SVToJSVAL(cx, obj, newRV_inc(*sv), rval);
834
+ }
835
+
836
+ /*
837
+ Get property of a PerlValue object.
838
+ If the object doesn't contain a hash or the
839
+ property doesn't exist, JS_FALSE is returned.
840
+ */
841
+ static JSBool
842
+ PVSetKey(JSContext *cx, JSObject *obj, char* name, jsval v)
843
+ {
844
+ SV *ref, **sv, *s;
845
+ HV *hash;
846
+
847
+ ref = PVGetRef(cx, obj);
848
+
849
+ if(SvTYPE(SvRV(ref)) != SVt_PVHV){
850
+ return JS_FALSE;
851
+ }
852
+
853
+ hash = (HV*)SvRV(ref);
854
+
855
+ if(!hash) return JS_FALSE;
856
+ JSVALToSV(cx, obj, v, &s);
857
+ sv = hv_store(hash, name, strlen(name), s, 0);
858
+ if(!sv) return JS_FALSE;
859
+ else return JS_TRUE;
860
+ }
861
+
862
+ /*
863
+ toString() method for PerlValue. For arrays uses array's methods.
864
+ If this fails, the type of the value gets returned. TODO: It's actually
865
+ better to use a Perl module like Data::Dumpvar.pm to print complex
866
+ data structures recursively.
867
+ */
868
+ static JSBool
869
+ PVToString(JSContext *cx, JSObject *obj, int argc, jsval *argv, jsval* rval)
870
+ {
871
+ SV* ref = PVGetRef(cx, obj);
872
+ SV* sv = SvRV(ref);
873
+ svtype type = SvTYPE(sv);
874
+ /*jsval args[]= {STRING_TO_JSVAL(JS_NewStringCopyZ(cx, "JS::Object::toString")),
875
+ OBJECT_TO_JSVAL(obj)};*/
876
+ jsval v;
877
+ /*return perl_call(cx, obj, 2, args, rval);*/
878
+
879
+ if (type==SVt_PVAV) {
880
+ JSObject *arrayObject = JS_NewArrayObject(cx,0,NULL);
881
+ JSFunction *fun;
882
+
883
+ JS_GetProperty(cx, arrayObject, "toString", &v);
884
+ fun = JS_ValueToFunction(cx, v);
885
+ return JS_CallFunction(cx, obj, fun, 0, NULL, rval);
886
+ }
887
+ {
888
+ char out[256];
889
+ JSString *newString;
890
+ JS_GetProperty(cx, obj, "type", &v);
891
+ if(!JSVAL_IS_VOID(v))
892
+ sprintf(out, "[%s]", JS_GetStringBytes(JSVAL_TO_STRING(v)));
893
+ else
894
+ strcpy(out, "[PerlValue]");
895
+ newString = JS_NewStringCopyZ(cx, out);
896
+ if (!newString)
897
+ return JS_FALSE;
898
+ *rval = STRING_TO_JSVAL(newString);
899
+ }
900
+ return JS_TRUE;
901
+ }
902
+
903
+ static JSBool
904
+ PVConvert (JSContext *cx, JSObject *obj, JSType type, jsval *rval)
905
+ {
906
+ *rval = OBJECT_TO_JSVAL(obj);
907
+ return JS_TRUE;
908
+ }
909
+
910
+ /*
911
+ Takes care of GC in Perl: we need to decrement Perl's
912
+ reference count when PV goes out of scope.
913
+ */
914
+
915
+ /* #include <stdio.h> */
916
+
917
+ static void
918
+ PVFinalize (JSContext *cx, JSObject *obj)
919
+ {
920
+ /* SV* sv = SvRV(PVGetRef(cx, obj)); */
921
+ SV *sv;
922
+
923
+ if ( obj ) {
924
+ sv = PVGetRef(cx, obj);
925
+
926
+ /* SV *sv = PVGetRef(cx, obj);
927
+ if ( SvROK(sv) ) sv = SvRV( sv ); _PH_ test*/
928
+
929
+ /* TODO: GC */
930
+ if(sv && SvREFCNT(sv) > 0){
931
+ /*fprintf(stderr, "Finalization: %d references left", SvREFCNT(sv));*/
932
+ SvREFCNT_dec(sv);
933
+ /*fprintf(stderr, "Finalization: %d references left", SvREFCNT(sv));*/
934
+ }
935
+ }
936
+ /* return JS_TRUE; */
937
+ }
938
+
939
+ /*
940
+ Convert a jsval to a SV* (scalar value pointer).
941
+ Used for parameter passing. This function is also
942
+ used by the Perl part of PerlConnect.
943
+ */
944
+
945
+ JSBool
946
+ JSVALToSV(JSContext *cx, JSObject *obj, jsval v, SV** sv)
947
+ {
948
+ //*sv = &sv_undef; //__PH__??
949
+ if(JSVAL_IS_PRIMITIVE(v)){
950
+ if(JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v)){
951
+ *sv = &PL_sv_undef;
952
+ //printf("===> JSVALToSV: VOID\n");
953
+ }else
954
+ if(JSVAL_IS_INT(v)){
955
+ *sv = sv_newmortal();
956
+ sv_setiv(*sv, JSVAL_TO_INT(v));
957
+ //*sv = newSViv(JSVAL_TO_INT(v));
958
+ //printf("===> JSVALToSV: INT\n");
959
+ }else
960
+ if(JSVAL_IS_DOUBLE(v)){
961
+ *sv = sv_newmortal();
962
+ sv_setnv(*sv, *JSVAL_TO_DOUBLE(v));
963
+ //*sv = newSVnv(*JSVAL_TO_DOUBLE(v));
964
+ //printf("===> JSVALToSV: DOUBLE\n");
965
+ }else
966
+ if(JSVAL_IS_STRING(v)){
967
+ *sv = sv_newmortal();
968
+ sv_setpv(*sv, JS_GetStringBytes(JSVAL_TO_STRING(v)));
969
+ //*sv = newSViv(0);
970
+ //sv_setpv(*sv, JS_GetStringBytes(JSVAL_TO_STRING(v)));
971
+ //printf("===> JSVALToSV: CHAR\n");
972
+ }else{
973
+ warn("Unknown primitive type");
974
+ }
975
+ }else{
976
+ if(JSVAL_IS_OBJECT(v)){
977
+ JSObject *object = JSVAL_TO_OBJECT(v);
978
+ if(JS_InstanceOf(cx, object, &perlValueClass, NULL)){
979
+ *sv = PVGetRef(cx, object);
980
+ }else{
981
+ if(JS_IsArrayObject(cx, object)){
982
+ *sv = sv_newmortal();
983
+ sv_setref_pv(*sv, "JS::Object", (void*)object);
984
+ sv_magic(SvRV(*sv), sv_2mortal(newSViv((IV)cx)),
985
+ '~', NULL, 0);
986
+ /* printf("===> JSVALToSV: ARRAY\n); */
987
+ }else{
988
+ *sv = sv_newmortal();
989
+ sv_setref_pv(*sv, "JS::Object", (void*)object);
990
+ sv_magic(SvRV(*sv), sv_2mortal(newSViv((IV)cx)),
991
+ '~', NULL, 0);
992
+ //printf("===> JSVALToSV: JS OBJECT\n");
993
+ }
994
+ }
995
+ }else{
996
+ warn("Type conversion is not supported");
997
+ *sv = &PL_sv_undef; //__PH__??
998
+ return JS_FALSE;
999
+ }
1000
+ }
1001
+ return JS_TRUE;
1002
+ }
1003
+
1004
+ /*
1005
+ Converts a reference Perl value to a jsval. If ref points
1006
+ to an immediate value, the value itself is returned in rval.
1007
+ O.w. a PerlValue object is returned. This function is also
1008
+ used by the Perl part of PerlConnect.
1009
+ */
1010
+
1011
+ #define SV_BIND_TO_OBJECT(sv) (sv_isobject(sv) || (SvROK(sv) && (\
1012
+ SvTYPE(SvRV(sv)) == SVt_RV ||\
1013
+ SvTYPE(SvRV(sv)) == SVt_PVAV ||\
1014
+ SvTYPE(SvRV(sv)) == SVt_PVHV ||\
1015
+ SvTYPE(SvRV(sv)) == SVt_PVCV\
1016
+ )))
1017
+
1018
+ JSBool
1019
+ SVToJSVAL(JSContext *cx, JSObject *obj, SV *ref, jsval *rval) {
1020
+ SV *sv;
1021
+ char* name=NULL;
1022
+ JSBool ok = JS_TRUE;
1023
+
1024
+ /* we'll use the dereferrenced value (excpet for object) */
1025
+ if( SvROK(ref) ) {
1026
+ sv = SvRV(ref);
1027
+ }else{
1028
+ sv = ref;
1029
+ }
1030
+
1031
+ /* printf("+++> In SVToJSVAL value %s, type=%d\n", SvPV(sv, PL_na), SvTYPE(sv)); */
1032
+
1033
+ if ( ! SvOK( ref ) ){
1034
+ *rval = JSVAL_VOID;
1035
+ /* printf("---> SVToJSVAL returning VOID\n"); */
1036
+ } else
1037
+ if ( SV_BIND_TO_OBJECT(ref) ) {
1038
+ JSObject *perlValue, *prototype = NULL;
1039
+ JSString *nameString;
1040
+
1041
+ /*svtype type = SvTYPE(sv);
1042
+ switch(type){
1043
+ case SVt_RV: name = "Perl Reference"; break;
1044
+ case SVt_PVAV: name = "Perl Array"; break;
1045
+ case SVt_PVHV: name = "Perl Hash"; break;
1046
+ case SVt_PVCV: name = "Perl Code Reference"; break;
1047
+ case SVt_PVMG: name = "Perl Magic"; break;
1048
+ default:
1049
+ warn("Unsupported type in SVToJSVAL: %d", type);
1050
+ *rval = JSVAL_VOID;
1051
+ return JS_FALSE;
1052
+ }*/
1053
+
1054
+ /* printf("---> SVToJSVAL returning object\n"); */
1055
+ name = "Perl Value";
1056
+ /* __PH__ */
1057
+ SvREFCNT_inc(ref);
1058
+
1059
+ if (SvTYPE(sv) == SVt_PVAV) {
1060
+ prototype = JS_NewArrayObject(cx, 0, NULL);
1061
+ if (!prototype)
1062
+ return JS_FALSE;
1063
+ }
1064
+
1065
+ perlValue = JS_DefineObject(cx, obj, "PerlValue",
1066
+ &perlValueClass, prototype,
1067
+ JSPROP_ENUMERATE);
1068
+ if (!perlValue)
1069
+ return JS_FALSE;
1070
+ JS_SetPrivate(cx, perlValue, ref);
1071
+ if (!JS_DefineFunctions(cx, perlValue, perlValueMethods))
1072
+ return JS_FALSE;
1073
+ if (name) {
1074
+ nameString = JS_NewStringCopyZ(cx, name);
1075
+ if (!nameString)
1076
+ return JS_FALSE;
1077
+ }
1078
+ if (!JS_DefineProperty(cx, perlValue, "type",
1079
+ name?STRING_TO_JSVAL(nameString):JSVAL_VOID,
1080
+ NULL, NULL, JSPROP_PERMANENT|JSPROP_READONLY))
1081
+ return JS_FALSE;
1082
+ *rval = OBJECT_TO_JSVAL(perlValue);
1083
+ } else
1084
+ if(SvIOK(sv)){
1085
+ *rval = INT_TO_JSVAL(SvIV(sv));
1086
+ /* printf("---> SVToJSVAL returning INTEGER\n"); */
1087
+ } else
1088
+ if(SvNOK(sv)){
1089
+ ok = JS_NewDoubleValue(cx, SvNV(sv), rval);
1090
+ /* printf("---> SVToJSVAL returning DOUBLE\n"); */
1091
+ } else
1092
+ if(SvPOK(sv)){
1093
+ *rval = STRING_TO_JSVAL((JS_NewStringCopyZ(cx, SvPV(sv, PL_na))));
1094
+ /* printf("---> SVToJSVAL returning CHAR\n\n"); */
1095
+ } else {
1096
+ *rval = JSVAL_VOID; /* shouldn't happen */
1097
+ /* printf("---> SVToJSVAL returning VOID (panic)\n"); */
1098
+ }
1099
+ return ok;
1100
+ }