distil 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (552) hide show
  1. data/Rakefile +28 -0
  2. data/VERSION +1 -0
  3. data/bin/distil +45 -0
  4. data/distil.gemspec +586 -0
  5. data/lib/bootstrap-template.js +56 -0
  6. data/lib/configurable.rb +125 -0
  7. data/lib/file-set.rb +42 -0
  8. data/lib/file-types/css-file.rb +75 -0
  9. data/lib/file-types/html-file.rb +11 -0
  10. data/lib/file-types/javascript-file.rb +98 -0
  11. data/lib/file-types/json-file.rb +14 -0
  12. data/lib/file-types/nib-file.rb +9 -0
  13. data/lib/jsdoc.conf +18 -0
  14. data/lib/jsl.conf +121 -0
  15. data/lib/project.rb +96 -0
  16. data/lib/source-file.rb +181 -0
  17. data/lib/target.rb +96 -0
  18. data/lib/task.rb +239 -0
  19. data/lib/tasks/copy-task.rb +21 -0
  20. data/lib/tasks/css-task.rb +18 -0
  21. data/lib/tasks/javascript-task.rb +125 -0
  22. data/lib/tasks/multiple-output-task.rb +134 -0
  23. data/lib/tasks/nib-task.rb +83 -0
  24. data/lib/tasks/output-task.rb +73 -0
  25. data/lib/tasks/single-output-task.rb +83 -0
  26. data/lib/tasks/test-task.rb +280 -0
  27. data/lib/test/HtmlTestReporter.js +127 -0
  28. data/lib/test/Test.js +248 -0
  29. data/lib/test/TestReporter.js +79 -0
  30. data/lib/test/TestRunner.js +132 -0
  31. data/lib/test/browser.rb +97 -0
  32. data/lib/test/scriptwrapper.html +10 -0
  33. data/lib/test/unittest.html +127 -0
  34. data/vendor/Makefile +35 -0
  35. data/vendor/extconf.rb +3 -0
  36. data/vendor/jsdoc-extras/plugins/distil-plugin.js +142 -0
  37. data/vendor/jsdoc-extras/plugins/interface-plugin.js +36 -0
  38. data/vendor/jsdoc-extras/templates/coherent/allclasses.tmpl +17 -0
  39. data/vendor/jsdoc-extras/templates/coherent/allfiles.tmpl +53 -0
  40. data/vendor/jsdoc-extras/templates/coherent/class.tmpl +803 -0
  41. data/vendor/jsdoc-extras/templates/coherent/index.tmpl +37 -0
  42. data/vendor/jsdoc-extras/templates/coherent/publish.js +242 -0
  43. data/vendor/jsdoc-extras/templates/coherent/showdown.js +421 -0
  44. data/vendor/jsdoc-extras/templates/coherent/static/code-footer.html +3 -0
  45. data/vendor/jsdoc-extras/templates/coherent/static/code-header.html +7 -0
  46. data/vendor/jsdoc-extras/templates/coherent/static/default.css +297 -0
  47. data/vendor/jsdoc-extras/templates/coherent/static/header.html +2 -0
  48. data/vendor/jsdoc-extras/templates/coherent/static/index.html +19 -0
  49. data/vendor/jsdoc-extras/templates/coherent/symbol.tmpl +35 -0
  50. data/vendor/jsdoc-toolkit/README.txt +183 -0
  51. data/vendor/jsdoc-toolkit/app/frame/Chain.js +102 -0
  52. data/vendor/jsdoc-toolkit/app/frame/Dumper.js +144 -0
  53. data/vendor/jsdoc-toolkit/app/frame/Hash.js +84 -0
  54. data/vendor/jsdoc-toolkit/app/frame/Link.js +171 -0
  55. data/vendor/jsdoc-toolkit/app/frame/Namespace.js +10 -0
  56. data/vendor/jsdoc-toolkit/app/frame/Opt.js +134 -0
  57. data/vendor/jsdoc-toolkit/app/frame/Reflection.js +26 -0
  58. data/vendor/jsdoc-toolkit/app/frame/String.js +93 -0
  59. data/vendor/jsdoc-toolkit/app/frame/Testrun.js +129 -0
  60. data/vendor/jsdoc-toolkit/app/frame.js +33 -0
  61. data/vendor/jsdoc-toolkit/app/handlers/FOODOC.js +26 -0
  62. data/vendor/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js +159 -0
  63. data/vendor/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js +16 -0
  64. data/vendor/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js +292 -0
  65. data/vendor/jsdoc-toolkit/app/handlers/XMLDOC.js +26 -0
  66. data/vendor/jsdoc-toolkit/app/lib/JSDOC/DocComment.js +204 -0
  67. data/vendor/jsdoc-toolkit/app/lib/JSDOC/DocTag.js +300 -0
  68. data/vendor/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js +126 -0
  69. data/vendor/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js +109 -0
  70. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Lang.js +144 -0
  71. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Parser.js +144 -0
  72. data/vendor/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js +33 -0
  73. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Symbol.js +644 -0
  74. data/vendor/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js +241 -0
  75. data/vendor/jsdoc-toolkit/app/lib/JSDOC/TextStream.js +41 -0
  76. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Token.js +18 -0
  77. data/vendor/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js +332 -0
  78. data/vendor/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js +133 -0
  79. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Util.js +32 -0
  80. data/vendor/jsdoc-toolkit/app/lib/JSDOC/Walker.js +499 -0
  81. data/vendor/jsdoc-toolkit/app/lib/JSDOC.js +106 -0
  82. data/vendor/jsdoc-toolkit/app/main.js +129 -0
  83. data/vendor/jsdoc-toolkit/app/plugins/commentSrcJson.js +20 -0
  84. data/vendor/jsdoc-toolkit/app/plugins/frameworkPrototype.js +16 -0
  85. data/vendor/jsdoc-toolkit/app/plugins/functionCall.js +10 -0
  86. data/vendor/jsdoc-toolkit/app/plugins/publishSrcHilite.js +54 -0
  87. data/vendor/jsdoc-toolkit/app/plugins/symbolLink.js +10 -0
  88. data/vendor/jsdoc-toolkit/app/plugins/tagParamConfig.js +31 -0
  89. data/vendor/jsdoc-toolkit/app/plugins/tagSynonyms.js +43 -0
  90. data/vendor/jsdoc-toolkit/app/run.js +348 -0
  91. data/vendor/jsdoc-toolkit/app/t/TestDoc.js +144 -0
  92. data/vendor/jsdoc-toolkit/app/t/runner.js +13 -0
  93. data/vendor/jsdoc-toolkit/app/test/addon.js +24 -0
  94. data/vendor/jsdoc-toolkit/app/test/anon_inner.js +14 -0
  95. data/vendor/jsdoc-toolkit/app/test/augments.js +31 -0
  96. data/vendor/jsdoc-toolkit/app/test/augments2.js +26 -0
  97. data/vendor/jsdoc-toolkit/app/test/borrows.js +46 -0
  98. data/vendor/jsdoc-toolkit/app/test/borrows2.js +23 -0
  99. data/vendor/jsdoc-toolkit/app/test/config.js +22 -0
  100. data/vendor/jsdoc-toolkit/app/test/constructs.js +18 -0
  101. data/vendor/jsdoc-toolkit/app/test/encoding.js +10 -0
  102. data/vendor/jsdoc-toolkit/app/test/encoding_other.js +12 -0
  103. data/vendor/jsdoc-toolkit/app/test/event.js +54 -0
  104. data/vendor/jsdoc-toolkit/app/test/exports.js +14 -0
  105. data/vendor/jsdoc-toolkit/app/test/functions_anon.js +39 -0
  106. data/vendor/jsdoc-toolkit/app/test/functions_nested.js +33 -0
  107. data/vendor/jsdoc-toolkit/app/test/global.js +13 -0
  108. data/vendor/jsdoc-toolkit/app/test/globals.js +25 -0
  109. data/vendor/jsdoc-toolkit/app/test/ignore.js +10 -0
  110. data/vendor/jsdoc-toolkit/app/test/inner.js +16 -0
  111. data/vendor/jsdoc-toolkit/app/test/jsdoc_test.js +477 -0
  112. data/vendor/jsdoc-toolkit/app/test/lend.js +33 -0
  113. data/vendor/jsdoc-toolkit/app/test/memberof.js +19 -0
  114. data/vendor/jsdoc-toolkit/app/test/memberof2.js +38 -0
  115. data/vendor/jsdoc-toolkit/app/test/memberof3.js +33 -0
  116. data/vendor/jsdoc-toolkit/app/test/memberof_constructor.js +17 -0
  117. data/vendor/jsdoc-toolkit/app/test/module.js +17 -0
  118. data/vendor/jsdoc-toolkit/app/test/name.js +19 -0
  119. data/vendor/jsdoc-toolkit/app/test/namespace_nested.js +23 -0
  120. data/vendor/jsdoc-toolkit/app/test/nocode.js +13 -0
  121. data/vendor/jsdoc-toolkit/app/test/oblit_anon.js +20 -0
  122. data/vendor/jsdoc-toolkit/app/test/overview.js +20 -0
  123. data/vendor/jsdoc-toolkit/app/test/param_inline.js +37 -0
  124. data/vendor/jsdoc-toolkit/app/test/params_optional.js +8 -0
  125. data/vendor/jsdoc-toolkit/app/test/prototype.js +17 -0
  126. data/vendor/jsdoc-toolkit/app/test/prototype_nested.js +9 -0
  127. data/vendor/jsdoc-toolkit/app/test/prototype_oblit.js +13 -0
  128. data/vendor/jsdoc-toolkit/app/test/prototype_oblit_constructor.js +24 -0
  129. data/vendor/jsdoc-toolkit/app/test/public.js +10 -0
  130. data/vendor/jsdoc-toolkit/app/test/scripts/code.js +5 -0
  131. data/vendor/jsdoc-toolkit/app/test/scripts/notcode.txt +5 -0
  132. data/vendor/jsdoc-toolkit/app/test/shared.js +42 -0
  133. data/vendor/jsdoc-toolkit/app/test/shared2.js +2 -0
  134. data/vendor/jsdoc-toolkit/app/test/shortcuts.js +22 -0
  135. data/vendor/jsdoc-toolkit/app/test/static_this.js +13 -0
  136. data/vendor/jsdoc-toolkit/app/test/synonyms.js +31 -0
  137. data/vendor/jsdoc-toolkit/app/test/tosource.js +23 -0
  138. data/vendor/jsdoc-toolkit/app/test/variable_redefine.js +14 -0
  139. data/vendor/jsdoc-toolkit/app/test.js +342 -0
  140. data/vendor/jsdoc-toolkit/changes.txt +116 -0
  141. data/vendor/jsdoc-toolkit/conf/sample.conf +31 -0
  142. data/vendor/jsdoc-toolkit/java/build.xml +36 -0
  143. data/vendor/jsdoc-toolkit/java/build_1.4.xml +36 -0
  144. data/vendor/jsdoc-toolkit/java/classes/js.jar +0 -0
  145. data/vendor/jsdoc-toolkit/java/src/JsDebugRun.java +21 -0
  146. data/vendor/jsdoc-toolkit/java/src/JsRun.java +21 -0
  147. data/vendor/jsdoc-toolkit/jsdebug.jar +0 -0
  148. data/vendor/jsdoc-toolkit/jsrun.jar +0 -0
  149. data/vendor/jsdoc-toolkit/jsrun.sh +53 -0
  150. data/vendor/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl +17 -0
  151. data/vendor/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl +56 -0
  152. data/vendor/jsdoc-toolkit/templates/jsdoc/class.tmpl +649 -0
  153. data/vendor/jsdoc-toolkit/templates/jsdoc/index.tmpl +39 -0
  154. data/vendor/jsdoc-toolkit/templates/jsdoc/publish.js +201 -0
  155. data/vendor/jsdoc-toolkit/templates/jsdoc/static/code-footer.html +3 -0
  156. data/vendor/jsdoc-toolkit/templates/jsdoc/static/code-header.html +14 -0
  157. data/vendor/jsdoc-toolkit/templates/jsdoc/static/default.css +162 -0
  158. data/vendor/jsdoc-toolkit/templates/jsdoc/static/header.html +2 -0
  159. data/vendor/jsdoc-toolkit/templates/jsdoc/static/index.html +19 -0
  160. data/vendor/jsdoc-toolkit/templates/jsdoc/symbol.tmpl +35 -0
  161. data/vendor/jsl-0.3.0/src/JavaScriptLintAPI.cpp +333 -0
  162. data/vendor/jsl-0.3.0/src/JavaScriptLintAPI.h +86 -0
  163. data/vendor/jsl-0.3.0/src/Makefile.in +375 -0
  164. data/vendor/jsl-0.3.0/src/Makefile.ref +372 -0
  165. data/vendor/jsl-0.3.0/src/README.html +826 -0
  166. data/vendor/jsl-0.3.0/src/SpiderMonkey.rsp +12 -0
  167. data/vendor/jsl-0.3.0/src/_jsl_online.php +223 -0
  168. data/vendor/jsl-0.3.0/src/config/AIX4.1.mk +65 -0
  169. data/vendor/jsl-0.3.0/src/config/AIX4.2.mk +64 -0
  170. data/vendor/jsl-0.3.0/src/config/AIX4.3.mk +65 -0
  171. data/vendor/jsl-0.3.0/src/config/Darwin.mk +81 -0
  172. data/vendor/jsl-0.3.0/src/config/Darwin1.3.mk +81 -0
  173. data/vendor/jsl-0.3.0/src/config/Darwin1.4.mk +41 -0
  174. data/vendor/jsl-0.3.0/src/config/Darwin5.2.mk +81 -0
  175. data/vendor/jsl-0.3.0/src/config/Darwin5.3.mk +81 -0
  176. data/vendor/jsl-0.3.0/src/config/HP-UXB.10.10.mk +77 -0
  177. data/vendor/jsl-0.3.0/src/config/HP-UXB.10.20.mk +77 -0
  178. data/vendor/jsl-0.3.0/src/config/HP-UXB.11.00.mk +80 -0
  179. data/vendor/jsl-0.3.0/src/config/IRIX.mk +87 -0
  180. data/vendor/jsl-0.3.0/src/config/IRIX5.3.mk +44 -0
  181. data/vendor/jsl-0.3.0/src/config/IRIX6.1.mk +44 -0
  182. data/vendor/jsl-0.3.0/src/config/IRIX6.2.mk +44 -0
  183. data/vendor/jsl-0.3.0/src/config/IRIX6.3.mk +44 -0
  184. data/vendor/jsl-0.3.0/src/config/IRIX6.5.mk +44 -0
  185. data/vendor/jsl-0.3.0/src/config/Linux_All.mk +103 -0
  186. data/vendor/jsl-0.3.0/src/config/Mac_OS10.0.mk +82 -0
  187. data/vendor/jsl-0.3.0/src/config/OSF1V4.0.mk +72 -0
  188. data/vendor/jsl-0.3.0/src/config/OSF1V5.0.mk +69 -0
  189. data/vendor/jsl-0.3.0/src/config/SunOS4.1.4.mk +101 -0
  190. data/vendor/jsl-0.3.0/src/config/SunOS5.3.mk +91 -0
  191. data/vendor/jsl-0.3.0/src/config/SunOS5.4.mk +92 -0
  192. data/vendor/jsl-0.3.0/src/config/SunOS5.5.1.mk +44 -0
  193. data/vendor/jsl-0.3.0/src/config/SunOS5.5.mk +87 -0
  194. data/vendor/jsl-0.3.0/src/config/SunOS5.6.mk +89 -0
  195. data/vendor/jsl-0.3.0/src/config/SunOS5.7.mk +44 -0
  196. data/vendor/jsl-0.3.0/src/config/SunOS5.8.mk +44 -0
  197. data/vendor/jsl-0.3.0/src/config/SunOS5.9.mk +44 -0
  198. data/vendor/jsl-0.3.0/src/config/WINNT4.0.mk +112 -0
  199. data/vendor/jsl-0.3.0/src/config/WINNT5.0.mk +112 -0
  200. data/vendor/jsl-0.3.0/src/config/WINNT5.1.mk +112 -0
  201. data/vendor/jsl-0.3.0/src/config/WINNT5.2.mk +112 -0
  202. data/vendor/jsl-0.3.0/src/config/dgux.mk +64 -0
  203. data/vendor/jsl-0.3.0/src/config.mk +166 -0
  204. data/vendor/jsl-0.3.0/src/editline/Makefile.ref +144 -0
  205. data/vendor/jsl-0.3.0/src/editline/README +83 -0
  206. data/vendor/jsl-0.3.0/src/editline/editline.3 +175 -0
  207. data/vendor/jsl-0.3.0/src/editline/editline.c +1369 -0
  208. data/vendor/jsl-0.3.0/src/editline/editline.h +135 -0
  209. data/vendor/jsl-0.3.0/src/editline/sysunix.c +182 -0
  210. data/vendor/jsl-0.3.0/src/editline/unix.h +82 -0
  211. data/vendor/jsl-0.3.0/src/fdlibm/Makefile.in +127 -0
  212. data/vendor/jsl-0.3.0/src/fdlibm/Makefile.ref +192 -0
  213. data/vendor/jsl-0.3.0/src/fdlibm/e_acos.c +147 -0
  214. data/vendor/jsl-0.3.0/src/fdlibm/e_acosh.c +105 -0
  215. data/vendor/jsl-0.3.0/src/fdlibm/e_asin.c +156 -0
  216. data/vendor/jsl-0.3.0/src/fdlibm/e_atan2.c +165 -0
  217. data/vendor/jsl-0.3.0/src/fdlibm/e_atanh.c +110 -0
  218. data/vendor/jsl-0.3.0/src/fdlibm/e_cosh.c +133 -0
  219. data/vendor/jsl-0.3.0/src/fdlibm/e_exp.c +202 -0
  220. data/vendor/jsl-0.3.0/src/fdlibm/e_fmod.c +184 -0
  221. data/vendor/jsl-0.3.0/src/fdlibm/e_gamma.c +71 -0
  222. data/vendor/jsl-0.3.0/src/fdlibm/e_gamma_r.c +70 -0
  223. data/vendor/jsl-0.3.0/src/fdlibm/e_hypot.c +173 -0
  224. data/vendor/jsl-0.3.0/src/fdlibm/e_j0.c +524 -0
  225. data/vendor/jsl-0.3.0/src/fdlibm/e_j1.c +523 -0
  226. data/vendor/jsl-0.3.0/src/fdlibm/e_jn.c +315 -0
  227. data/vendor/jsl-0.3.0/src/fdlibm/e_lgamma.c +71 -0
  228. data/vendor/jsl-0.3.0/src/fdlibm/e_lgamma_r.c +347 -0
  229. data/vendor/jsl-0.3.0/src/fdlibm/e_log.c +184 -0
  230. data/vendor/jsl-0.3.0/src/fdlibm/e_log10.c +134 -0
  231. data/vendor/jsl-0.3.0/src/fdlibm/e_pow.c +386 -0
  232. data/vendor/jsl-0.3.0/src/fdlibm/e_rem_pio2.c +221 -0
  233. data/vendor/jsl-0.3.0/src/fdlibm/e_remainder.c +120 -0
  234. data/vendor/jsl-0.3.0/src/fdlibm/e_scalb.c +89 -0
  235. data/vendor/jsl-0.3.0/src/fdlibm/e_sinh.c +122 -0
  236. data/vendor/jsl-0.3.0/src/fdlibm/e_sqrt.c +497 -0
  237. data/vendor/jsl-0.3.0/src/fdlibm/fdlibm.dsp +160 -0
  238. data/vendor/jsl-0.3.0/src/fdlibm/fdlibm.h +273 -0
  239. data/vendor/jsl-0.3.0/src/fdlibm/fdlibm.mak +1453 -0
  240. data/vendor/jsl-0.3.0/src/fdlibm/fdlibm.mdp +0 -0
  241. data/vendor/jsl-0.3.0/src/fdlibm/k_cos.c +134 -0
  242. data/vendor/jsl-0.3.0/src/fdlibm/k_rem_pio2.c +354 -0
  243. data/vendor/jsl-0.3.0/src/fdlibm/k_sin.c +114 -0
  244. data/vendor/jsl-0.3.0/src/fdlibm/k_standard.c +785 -0
  245. data/vendor/jsl-0.3.0/src/fdlibm/k_tan.c +170 -0
  246. data/vendor/jsl-0.3.0/src/fdlibm/s_asinh.c +101 -0
  247. data/vendor/jsl-0.3.0/src/fdlibm/s_atan.c +175 -0
  248. data/vendor/jsl-0.3.0/src/fdlibm/s_cbrt.c +133 -0
  249. data/vendor/jsl-0.3.0/src/fdlibm/s_ceil.c +120 -0
  250. data/vendor/jsl-0.3.0/src/fdlibm/s_copysign.c +72 -0
  251. data/vendor/jsl-0.3.0/src/fdlibm/s_cos.c +118 -0
  252. data/vendor/jsl-0.3.0/src/fdlibm/s_erf.c +356 -0
  253. data/vendor/jsl-0.3.0/src/fdlibm/s_expm1.c +267 -0
  254. data/vendor/jsl-0.3.0/src/fdlibm/s_fabs.c +70 -0
  255. data/vendor/jsl-0.3.0/src/fdlibm/s_finite.c +71 -0
  256. data/vendor/jsl-0.3.0/src/fdlibm/s_floor.c +121 -0
  257. data/vendor/jsl-0.3.0/src/fdlibm/s_frexp.c +99 -0
  258. data/vendor/jsl-0.3.0/src/fdlibm/s_ilogb.c +85 -0
  259. data/vendor/jsl-0.3.0/src/fdlibm/s_isnan.c +74 -0
  260. data/vendor/jsl-0.3.0/src/fdlibm/s_ldexp.c +66 -0
  261. data/vendor/jsl-0.3.0/src/fdlibm/s_lib_version.c +73 -0
  262. data/vendor/jsl-0.3.0/src/fdlibm/s_log1p.c +211 -0
  263. data/vendor/jsl-0.3.0/src/fdlibm/s_logb.c +79 -0
  264. data/vendor/jsl-0.3.0/src/fdlibm/s_matherr.c +64 -0
  265. data/vendor/jsl-0.3.0/src/fdlibm/s_modf.c +132 -0
  266. data/vendor/jsl-0.3.0/src/fdlibm/s_nextafter.c +124 -0
  267. data/vendor/jsl-0.3.0/src/fdlibm/s_rint.c +131 -0
  268. data/vendor/jsl-0.3.0/src/fdlibm/s_scalbn.c +107 -0
  269. data/vendor/jsl-0.3.0/src/fdlibm/s_signgam.c +40 -0
  270. data/vendor/jsl-0.3.0/src/fdlibm/s_significand.c +68 -0
  271. data/vendor/jsl-0.3.0/src/fdlibm/s_sin.c +118 -0
  272. data/vendor/jsl-0.3.0/src/fdlibm/s_tan.c +112 -0
  273. data/vendor/jsl-0.3.0/src/fdlibm/s_tanh.c +122 -0
  274. data/vendor/jsl-0.3.0/src/fdlibm/w_acos.c +78 -0
  275. data/vendor/jsl-0.3.0/src/fdlibm/w_acosh.c +78 -0
  276. data/vendor/jsl-0.3.0/src/fdlibm/w_asin.c +80 -0
  277. data/vendor/jsl-0.3.0/src/fdlibm/w_atan2.c +79 -0
  278. data/vendor/jsl-0.3.0/src/fdlibm/w_atanh.c +81 -0
  279. data/vendor/jsl-0.3.0/src/fdlibm/w_cosh.c +77 -0
  280. data/vendor/jsl-0.3.0/src/fdlibm/w_exp.c +88 -0
  281. data/vendor/jsl-0.3.0/src/fdlibm/w_fmod.c +78 -0
  282. data/vendor/jsl-0.3.0/src/fdlibm/w_gamma.c +85 -0
  283. data/vendor/jsl-0.3.0/src/fdlibm/w_gamma_r.c +81 -0
  284. data/vendor/jsl-0.3.0/src/fdlibm/w_hypot.c +78 -0
  285. data/vendor/jsl-0.3.0/src/fdlibm/w_j0.c +105 -0
  286. data/vendor/jsl-0.3.0/src/fdlibm/w_j1.c +106 -0
  287. data/vendor/jsl-0.3.0/src/fdlibm/w_jn.c +128 -0
  288. data/vendor/jsl-0.3.0/src/fdlibm/w_lgamma.c +85 -0
  289. data/vendor/jsl-0.3.0/src/fdlibm/w_lgamma_r.c +81 -0
  290. data/vendor/jsl-0.3.0/src/fdlibm/w_log.c +78 -0
  291. data/vendor/jsl-0.3.0/src/fdlibm/w_log10.c +81 -0
  292. data/vendor/jsl-0.3.0/src/fdlibm/w_pow.c +99 -0
  293. data/vendor/jsl-0.3.0/src/fdlibm/w_remainder.c +77 -0
  294. data/vendor/jsl-0.3.0/src/fdlibm/w_scalb.c +95 -0
  295. data/vendor/jsl-0.3.0/src/fdlibm/w_sinh.c +77 -0
  296. data/vendor/jsl-0.3.0/src/fdlibm/w_sqrt.c +77 -0
  297. data/vendor/jsl-0.3.0/src/js.c +2447 -0
  298. data/vendor/jsl-0.3.0/src/js.dsp +420 -0
  299. data/vendor/jsl-0.3.0/src/js.mak +4025 -0
  300. data/vendor/jsl-0.3.0/src/js.mdp +0 -0
  301. data/vendor/jsl-0.3.0/src/js.msg +291 -0
  302. data/vendor/jsl-0.3.0/src/js.pkg +2 -0
  303. data/vendor/jsl-0.3.0/src/js3240.rc +79 -0
  304. data/vendor/jsl-0.3.0/src/jsOS240.def +654 -0
  305. data/vendor/jsl-0.3.0/src/jsapi.c +4405 -0
  306. data/vendor/jsl-0.3.0/src/jsapi.h +1856 -0
  307. data/vendor/jsl-0.3.0/src/jsarena.c +567 -0
  308. data/vendor/jsl-0.3.0/src/jsarena.h +302 -0
  309. data/vendor/jsl-0.3.0/src/jsarray.c +1428 -0
  310. data/vendor/jsl-0.3.0/src/jsarray.h +77 -0
  311. data/vendor/jsl-0.3.0/src/jsatom.c +927 -0
  312. data/vendor/jsl-0.3.0/src/jsatom.h +426 -0
  313. data/vendor/jsl-0.3.0/src/jsbit.h +113 -0
  314. data/vendor/jsl-0.3.0/src/jsbool.c +220 -0
  315. data/vendor/jsl-0.3.0/src/jsbool.h +62 -0
  316. data/vendor/jsl-0.3.0/src/jsclist.h +139 -0
  317. data/vendor/jsl-0.3.0/src/jscntxt.c +1036 -0
  318. data/vendor/jsl-0.3.0/src/jscntxt.h +608 -0
  319. data/vendor/jsl-0.3.0/src/jscompat.h +57 -0
  320. data/vendor/jsl-0.3.0/src/jsconfig.h +489 -0
  321. data/vendor/jsl-0.3.0/src/jsconfig.mk +181 -0
  322. data/vendor/jsl-0.3.0/src/jscpucfg.c +377 -0
  323. data/vendor/jsl-0.3.0/src/jscpucfg.h +204 -0
  324. data/vendor/jsl-0.3.0/src/jsdate.c +2238 -0
  325. data/vendor/jsl-0.3.0/src/jsdate.h +118 -0
  326. data/vendor/jsl-0.3.0/src/jsdbgapi.c +1260 -0
  327. data/vendor/jsl-0.3.0/src/jsdbgapi.h +345 -0
  328. data/vendor/jsl-0.3.0/src/jsdhash.c +763 -0
  329. data/vendor/jsl-0.3.0/src/jsdhash.h +579 -0
  330. data/vendor/jsl-0.3.0/src/jsdtoa.c +3135 -0
  331. data/vendor/jsl-0.3.0/src/jsdtoa.h +130 -0
  332. data/vendor/jsl-0.3.0/src/jsemit.c +4851 -0
  333. data/vendor/jsl-0.3.0/src/jsemit.h +576 -0
  334. data/vendor/jsl-0.3.0/src/jsexn.c +1084 -0
  335. data/vendor/jsl-0.3.0/src/jsexn.h +102 -0
  336. data/vendor/jsl-0.3.0/src/jsfile.c +2610 -0
  337. data/vendor/jsl-0.3.0/src/jsfile.h +50 -0
  338. data/vendor/jsl-0.3.0/src/jsfile.msg +89 -0
  339. data/vendor/jsl-0.3.0/src/jsfun.c +2015 -0
  340. data/vendor/jsl-0.3.0/src/jsfun.h +158 -0
  341. data/vendor/jsl-0.3.0/src/jsgc.c +1441 -0
  342. data/vendor/jsl-0.3.0/src/jsgc.h +230 -0
  343. data/vendor/jsl-0.3.0/src/jshash.c +471 -0
  344. data/vendor/jsl-0.3.0/src/jshash.h +152 -0
  345. data/vendor/jsl-0.3.0/src/jsify.pl +485 -0
  346. data/vendor/jsl-0.3.0/src/jsinterp.c +4797 -0
  347. data/vendor/jsl-0.3.0/src/jsinterp.h +302 -0
  348. data/vendor/jsl-0.3.0/src/jsl-test.js +28 -0
  349. data/vendor/jsl-0.3.0/src/jsl.c +2371 -0
  350. data/vendor/jsl-0.3.0/src/jsl.conf +127 -0
  351. data/vendor/jsl-0.3.0/src/jsl.conf.old +124 -0
  352. data/vendor/jsl-0.3.0/src/jsl.dsp +242 -0
  353. data/vendor/jsl-0.3.0/src/jsl.dsw +59 -0
  354. data/vendor/jsl-0.3.0/src/jslibmath.h +290 -0
  355. data/vendor/jsl-0.3.0/src/jslock.c +1261 -0
  356. data/vendor/jsl-0.3.0/src/jslock.h +289 -0
  357. data/vendor/jsl-0.3.0/src/jslocko.asm +59 -0
  358. data/vendor/jsl-0.3.0/src/jslog2.c +83 -0
  359. data/vendor/jsl-0.3.0/src/jslong.c +281 -0
  360. data/vendor/jsl-0.3.0/src/jslong.h +437 -0
  361. data/vendor/jsl-0.3.0/src/jsmath.c +477 -0
  362. data/vendor/jsl-0.3.0/src/jsmath.h +55 -0
  363. data/vendor/jsl-0.3.0/src/jsnum.c +1148 -0
  364. data/vendor/jsl-0.3.0/src/jsnum.h +257 -0
  365. data/vendor/jsl-0.3.0/src/jsobj.c +4066 -0
  366. data/vendor/jsl-0.3.0/src/jsobj.h +475 -0
  367. data/vendor/jsl-0.3.0/src/jsopcode.c +2730 -0
  368. data/vendor/jsl-0.3.0/src/jsopcode.h +275 -0
  369. data/vendor/jsl-0.3.0/src/jsopcode.tbl +344 -0
  370. data/vendor/jsl-0.3.0/src/jsosdep.h +127 -0
  371. data/vendor/jsl-0.3.0/src/jsotypes.h +211 -0
  372. data/vendor/jsl-0.3.0/src/jsparse.c +4438 -0
  373. data/vendor/jsl-0.3.0/src/jsparse.h +345 -0
  374. data/vendor/jsl-0.3.0/src/jsprf.c +1212 -0
  375. data/vendor/jsl-0.3.0/src/jsprf.h +148 -0
  376. data/vendor/jsl-0.3.0/src/jsprvtd.h +174 -0
  377. data/vendor/jsl-0.3.0/src/jspubtd.h +586 -0
  378. data/vendor/jsl-0.3.0/src/jsregexp.c +3831 -0
  379. data/vendor/jsl-0.3.0/src/jsregexp.h +180 -0
  380. data/vendor/jsl-0.3.0/src/jsscan.c +1814 -0
  381. data/vendor/jsl-0.3.0/src/jsscan.h +267 -0
  382. data/vendor/jsl-0.3.0/src/jsscope.c +1639 -0
  383. data/vendor/jsl-0.3.0/src/jsscope.h +389 -0
  384. data/vendor/jsl-0.3.0/src/jsscript.c +1284 -0
  385. data/vendor/jsl-0.3.0/src/jsscript.h +179 -0
  386. data/vendor/jsl-0.3.0/src/jsshell.msg +50 -0
  387. data/vendor/jsl-0.3.0/src/jsstddef.h +83 -0
  388. data/vendor/jsl-0.3.0/src/jsstr.c +4502 -0
  389. data/vendor/jsl-0.3.0/src/jsstr.h +448 -0
  390. data/vendor/jsl-0.3.0/src/jstypes.h +391 -0
  391. data/vendor/jsl-0.3.0/src/jsutil.c +157 -0
  392. data/vendor/jsl-0.3.0/src/jsutil.h +75 -0
  393. data/vendor/jsl-0.3.0/src/jsxdrapi.c +686 -0
  394. data/vendor/jsl-0.3.0/src/jsxdrapi.h +193 -0
  395. data/vendor/jsl-0.3.0/src/liveconnect/LiveConnect.dsp +157 -0
  396. data/vendor/jsl-0.3.0/src/liveconnect/LiveConnectShell.dsp +120 -0
  397. data/vendor/jsl-0.3.0/src/liveconnect/LiveConnectShell.dsw +44 -0
  398. data/vendor/jsl-0.3.0/src/liveconnect/Makefile.in +106 -0
  399. data/vendor/jsl-0.3.0/src/liveconnect/Makefile.ref +169 -0
  400. data/vendor/jsl-0.3.0/src/liveconnect/README.html +719 -0
  401. data/vendor/jsl-0.3.0/src/liveconnect/_jni/netscape_javascript_JSException.h +14 -0
  402. data/vendor/jsl-0.3.0/src/liveconnect/_jni/netscape_javascript_JSObject.h +155 -0
  403. data/vendor/jsl-0.3.0/src/liveconnect/classes/Makefile.in +89 -0
  404. data/vendor/jsl-0.3.0/src/liveconnect/classes/Makefile.ref +57 -0
  405. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/Makefile.ref +47 -0
  406. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSException.java +140 -0
  407. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSObject.java +183 -0
  408. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSProxy.java +58 -0
  409. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSRunnable.java +70 -0
  410. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/JSUtil.java +59 -0
  411. data/vendor/jsl-0.3.0/src/liveconnect/classes/netscape/javascript/Makefile.ref +53 -0
  412. data/vendor/jsl-0.3.0/src/liveconnect/config/AIX4.1.mk +45 -0
  413. data/vendor/jsl-0.3.0/src/liveconnect/config/AIX4.2.mk +45 -0
  414. data/vendor/jsl-0.3.0/src/liveconnect/config/AIX4.3.mk +50 -0
  415. data/vendor/jsl-0.3.0/src/liveconnect/config/HP-UXB.10.10.mk +43 -0
  416. data/vendor/jsl-0.3.0/src/liveconnect/config/HP-UXB.10.20.mk +43 -0
  417. data/vendor/jsl-0.3.0/src/liveconnect/config/HP-UXB.11.00.mk +43 -0
  418. data/vendor/jsl-0.3.0/src/liveconnect/config/IRIX6.2.mk +43 -0
  419. data/vendor/jsl-0.3.0/src/liveconnect/config/IRIX6.3.mk +43 -0
  420. data/vendor/jsl-0.3.0/src/liveconnect/config/IRIX6.5.mk +43 -0
  421. data/vendor/jsl-0.3.0/src/liveconnect/config/Linux_All.mk +73 -0
  422. data/vendor/jsl-0.3.0/src/liveconnect/config/OSF1V4.0.mk +65 -0
  423. data/vendor/jsl-0.3.0/src/liveconnect/config/OSF1V5.0.mk +62 -0
  424. data/vendor/jsl-0.3.0/src/liveconnect/config/SunOS5.5.1.mk +55 -0
  425. data/vendor/jsl-0.3.0/src/liveconnect/config/SunOS5.6.mk +39 -0
  426. data/vendor/jsl-0.3.0/src/liveconnect/config/SunOS5.7.mk +39 -0
  427. data/vendor/jsl-0.3.0/src/liveconnect/config/SunOS5.8.mk +39 -0
  428. data/vendor/jsl-0.3.0/src/liveconnect/config/WINNT4.0.mk +53 -0
  429. data/vendor/jsl-0.3.0/src/liveconnect/jsj.c +884 -0
  430. data/vendor/jsl-0.3.0/src/liveconnect/jsj.msg +98 -0
  431. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JSObject.c +1379 -0
  432. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaArray.c +481 -0
  433. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaClass.c +749 -0
  434. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaMember.c +186 -0
  435. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaObject.c +1099 -0
  436. data/vendor/jsl-0.3.0/src/liveconnect/jsj_JavaPackage.c +548 -0
  437. data/vendor/jsl-0.3.0/src/liveconnect/jsj_array.c +207 -0
  438. data/vendor/jsl-0.3.0/src/liveconnect/jsj_class.c +765 -0
  439. data/vendor/jsl-0.3.0/src/liveconnect/jsj_convert.c +954 -0
  440. data/vendor/jsl-0.3.0/src/liveconnect/jsj_field.c +421 -0
  441. data/vendor/jsl-0.3.0/src/liveconnect/jsj_hash.c +504 -0
  442. data/vendor/jsl-0.3.0/src/liveconnect/jsj_hash.h +161 -0
  443. data/vendor/jsl-0.3.0/src/liveconnect/jsj_method.c +1823 -0
  444. data/vendor/jsl-0.3.0/src/liveconnect/jsj_nodl.c +1 -0
  445. data/vendor/jsl-0.3.0/src/liveconnect/jsj_private.h +689 -0
  446. data/vendor/jsl-0.3.0/src/liveconnect/jsj_simpleapi.c +219 -0
  447. data/vendor/jsl-0.3.0/src/liveconnect/jsj_utils.c +513 -0
  448. data/vendor/jsl-0.3.0/src/liveconnect/jsjava.h +313 -0
  449. data/vendor/jsl-0.3.0/src/liveconnect/liveconnect.pkg +3 -0
  450. data/vendor/jsl-0.3.0/src/liveconnect/netscape_javascript_JSObject.h +155 -0
  451. data/vendor/jsl-0.3.0/src/liveconnect/nsCLiveconnect.cpp +785 -0
  452. data/vendor/jsl-0.3.0/src/liveconnect/nsCLiveconnect.h +197 -0
  453. data/vendor/jsl-0.3.0/src/liveconnect/nsCLiveconnectFactory.cpp +163 -0
  454. data/vendor/jsl-0.3.0/src/liveconnect/nsCLiveconnectFactory.h +76 -0
  455. data/vendor/jsl-0.3.0/src/liveconnect/nsILiveconnect.h +195 -0
  456. data/vendor/jsl-0.3.0/src/liveconnect/nsISecureLiveconnect.h +84 -0
  457. data/vendor/jsl-0.3.0/src/liveconnect/nsISecurityContext.h +135 -0
  458. data/vendor/jsl-0.3.0/src/liveconnect/win32.order +6 -0
  459. data/vendor/jsl-0.3.0/src/lock_SunOS.s +114 -0
  460. data/vendor/jsl-0.3.0/src/perfect.js +39 -0
  461. data/vendor/jsl-0.3.0/src/perlconnect/JS.def +6 -0
  462. data/vendor/jsl-0.3.0/src/perlconnect/JS.dsp +107 -0
  463. data/vendor/jsl-0.3.0/src/perlconnect/JS.pm +318 -0
  464. data/vendor/jsl-0.3.0/src/perlconnect/JS.xs +1050 -0
  465. data/vendor/jsl-0.3.0/src/perlconnect/Makefile.PL +67 -0
  466. data/vendor/jsl-0.3.0/src/perlconnect/Makefile.ref +152 -0
  467. data/vendor/jsl-0.3.0/src/perlconnect/PerlConnect.dsp +103 -0
  468. data/vendor/jsl-0.3.0/src/perlconnect/PerlConnect.dsw +59 -0
  469. data/vendor/jsl-0.3.0/src/perlconnect/PerlConnect.pm +126 -0
  470. data/vendor/jsl-0.3.0/src/perlconnect/PerlConnectShell.dsp +89 -0
  471. data/vendor/jsl-0.3.0/src/perlconnect/README.html +345 -0
  472. data/vendor/jsl-0.3.0/src/perlconnect/bg.jpg +0 -0
  473. data/vendor/jsl-0.3.0/src/perlconnect/jsperl.c +1100 -0
  474. data/vendor/jsl-0.3.0/src/perlconnect/jsperl.h +52 -0
  475. data/vendor/jsl-0.3.0/src/perlconnect/jsperlbuild.pl +81 -0
  476. data/vendor/jsl-0.3.0/src/perlconnect/jsperlpvt.h +57 -0
  477. data/vendor/jsl-0.3.0/src/perlconnect/test.js +73 -0
  478. data/vendor/jsl-0.3.0/src/perlconnect/test.pl +244 -0
  479. data/vendor/jsl-0.3.0/src/perlconnect/typemap +121 -0
  480. data/vendor/jsl-0.3.0/src/plify_jsdhash.sed +31 -0
  481. data/vendor/jsl-0.3.0/src/prmjtime.c +646 -0
  482. data/vendor/jsl-0.3.0/src/prmjtime.h +95 -0
  483. data/vendor/jsl-0.3.0/src/resource.h +15 -0
  484. data/vendor/jsl-0.3.0/src/rules.mk +193 -0
  485. data/vendor/jsl-0.3.0/src/win32.order +391 -0
  486. data/vendor/jsl-0.3.0/tests/conf/always_use_option_explicit.js +4 -0
  487. data/vendor/jsl-0.3.0/tests/conf/define.js +8 -0
  488. data/vendor/jsl-0.3.0/tests/conf/jscript_function_extensions-1.js +7 -0
  489. data/vendor/jsl-0.3.0/tests/conf/jscript_function_extensions-2.js +8 -0
  490. data/vendor/jsl-0.3.0/tests/conf/jscript_function_extensions-3.js +27 -0
  491. data/vendor/jsl-0.3.0/tests/conf/jscript_function_extensions-4.js +4 -0
  492. data/vendor/jsl-0.3.0/tests/conf/lambda_assign_requires_semicolon.js +24 -0
  493. data/vendor/jsl-0.3.0/tests/conf/legacy_control_comments.js +8 -0
  494. data/vendor/jsl-0.3.0/tests/control_comments/control_comments.js +33 -0
  495. data/vendor/jsl-0.3.0/tests/control_comments/declare.js +26 -0
  496. data/vendor/jsl-0.3.0/tests/control_comments/import-overflow.js +9 -0
  497. data/vendor/jsl-0.3.0/tests/control_comments/import.js +5 -0
  498. data/vendor/jsl-0.3.0/tests/control_comments/import2.js +2 -0
  499. data/vendor/jsl-0.3.0/tests/control_comments/invalid_fallthru.js +13 -0
  500. data/vendor/jsl-0.3.0/tests/control_comments/option_explicit-with.js +12 -0
  501. data/vendor/jsl-0.3.0/tests/control_comments/option_explicit.js +64 -0
  502. data/vendor/jsl-0.3.0/tests/errors/unterminated_comment.js +8 -0
  503. data/vendor/jsl-0.3.0/tests/html/script_tag_in_js_literal.html +14 -0
  504. data/vendor/jsl-0.3.0/tests/run_tests.pl +71 -0
  505. data/vendor/jsl-0.3.0/tests/warnings/ambiguous_else_stmt.js +21 -0
  506. data/vendor/jsl-0.3.0/tests/warnings/ambiguous_nested_stmt.js +66 -0
  507. data/vendor/jsl-0.3.0/tests/warnings/ambiguous_newline.js +261 -0
  508. data/vendor/jsl-0.3.0/tests/warnings/anon_no_return_value.js +26 -0
  509. data/vendor/jsl-0.3.0/tests/warnings/assign_to_function_call.js +16 -0
  510. data/vendor/jsl-0.3.0/tests/warnings/block_without_braces.js +13 -0
  511. data/vendor/jsl-0.3.0/tests/warnings/comma_separated_stmts.js +17 -0
  512. data/vendor/jsl-0.3.0/tests/warnings/comparison_type_conv.js +44 -0
  513. data/vendor/jsl-0.3.0/tests/warnings/default_not_at_end.js +15 -0
  514. data/vendor/jsl-0.3.0/tests/warnings/dup_option_explicit.js +5 -0
  515. data/vendor/jsl-0.3.0/tests/warnings/duplicate_case_in_switch.js +62 -0
  516. data/vendor/jsl-0.3.0/tests/warnings/duplicate_formal.js +5 -0
  517. data/vendor/jsl-0.3.0/tests/warnings/empty_statement.js +29 -0
  518. data/vendor/jsl-0.3.0/tests/warnings/equal_as_assign.js +7 -0
  519. data/vendor/jsl-0.3.0/tests/warnings/inc_dec_within_stmt-ignore.js +21 -0
  520. data/vendor/jsl-0.3.0/tests/warnings/inc_dec_within_stmt.js +63 -0
  521. data/vendor/jsl-0.3.0/tests/warnings/jsl_cc_not_understood.js +5 -0
  522. data/vendor/jsl-0.3.0/tests/warnings/leading_decimal_point.js +7 -0
  523. data/vendor/jsl-0.3.0/tests/warnings/legacy_cc_not_understood.js +9 -0
  524. data/vendor/jsl-0.3.0/tests/warnings/meaningless_block.js +12 -0
  525. data/vendor/jsl-0.3.0/tests/warnings/misplaced_regex.js +20 -0
  526. data/vendor/jsl-0.3.0/tests/warnings/missing_break.js +87 -0
  527. data/vendor/jsl-0.3.0/tests/warnings/missing_break_for_last_case.js +19 -0
  528. data/vendor/jsl-0.3.0/tests/warnings/missing_default_case.js +51 -0
  529. data/vendor/jsl-0.3.0/tests/warnings/missing_option_explicit.js +5 -0
  530. data/vendor/jsl-0.3.0/tests/warnings/missing_semicolon.js +19 -0
  531. data/vendor/jsl-0.3.0/tests/warnings/multiple_plus_minus.js +10 -0
  532. data/vendor/jsl-0.3.0/tests/warnings/nested_comment.js +6 -0
  533. data/vendor/jsl-0.3.0/tests/warnings/no_return_value.js +25 -0
  534. data/vendor/jsl-0.3.0/tests/warnings/octal_number.js +5 -0
  535. data/vendor/jsl-0.3.0/tests/warnings/parseint_missing_radix.js +15 -0
  536. data/vendor/jsl-0.3.0/tests/warnings/partial_option_explicit.js +5 -0
  537. data/vendor/jsl-0.3.0/tests/warnings/redeclared_var.js +10 -0
  538. data/vendor/jsl-0.3.0/tests/warnings/spidermonkey/bad_backref.js +5 -0
  539. data/vendor/jsl-0.3.0/tests/warnings/spidermonkey/deprecated_usage.js +11 -0
  540. data/vendor/jsl-0.3.0/tests/warnings/spidermonkey/invalid_backref.js +5 -0
  541. data/vendor/jsl-0.3.0/tests/warnings/spidermonkey/trailing_comma.js +5 -0
  542. data/vendor/jsl-0.3.0/tests/warnings/trailing_comma_in_array.js +8 -0
  543. data/vendor/jsl-0.3.0/tests/warnings/trailing_decimal_point.js +7 -0
  544. data/vendor/jsl-0.3.0/tests/warnings/unreachable_code.js +29 -0
  545. data/vendor/jsl-0.3.0/tests/warnings/use_of_label.js +19 -0
  546. data/vendor/jsl-0.3.0/tests/warnings/useless_assign.js +20 -0
  547. data/vendor/jsl-0.3.0/tests/warnings/useless_comparison.js +55 -0
  548. data/vendor/jsl-0.3.0/tests/warnings/useless_void.js +6 -0
  549. data/vendor/jsl-0.3.0/tests/warnings/var_hides_arg.js +4 -0
  550. data/vendor/jsl-0.3.0/tests/warnings/with_statement.js +7 -0
  551. data/vendor/yuicompressor-2.4.2.jar +0 -0
  552. metadata +605 -0
@@ -0,0 +1,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
+ }