coffeecake 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1336) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/README.markdown +28 -0
  4. data/Rakefile +2 -0
  5. data/bin/ck +16 -0
  6. data/coffeecake.gemspec +21 -0
  7. data/lib/coffeecake.rb +4 -0
  8. data/lib/coffeecake/generators.rb +12 -0
  9. data/lib/coffeecake/generators/new_generator.rb +55 -0
  10. data/lib/coffeecake/templates/.gitkeep +0 -0
  11. data/lib/coffeecake/templates/README.markdown +56 -0
  12. data/lib/coffeecake/templates/SpecHelper.tt +0 -0
  13. data/lib/coffeecake/templates/docs_readme +5 -0
  14. data/lib/coffeecake/templates/jasmine.tt +18 -0
  15. data/lib/coffeecake/templates/lib.tt +3 -0
  16. data/lib/coffeecake/templates/spec.tt +3 -0
  17. data/lib/coffeecake/version.rb +3 -0
  18. data/lib/thor_register_patch.rb +16 -0
  19. data/node_modules/.bin/cake +7 -0
  20. data/node_modules/.bin/coffee +7 -0
  21. data/node_modules/.bin/docco +8 -0
  22. data/node_modules/.bin/jasmine +26 -0
  23. data/node_modules/.bin/jasmine-node +7 -0
  24. data/node_modules/.bin/uglifycss +127 -0
  25. data/node_modules/.bin/uglifyjs +317 -0
  26. data/node_modules/coffee-script/.npmignore +11 -0
  27. data/node_modules/coffee-script/LICENSE +22 -0
  28. data/node_modules/coffee-script/README +51 -0
  29. data/node_modules/coffee-script/Rakefile +78 -0
  30. data/node_modules/coffee-script/bin/cake +7 -0
  31. data/node_modules/coffee-script/bin/coffee +7 -0
  32. data/node_modules/coffee-script/extras/jsl.conf +44 -0
  33. data/node_modules/coffee-script/lib/coffee-script/browser.js +74 -0
  34. data/node_modules/coffee-script/lib/coffee-script/cake.js +89 -0
  35. data/node_modules/coffee-script/lib/coffee-script/coffee-script.js +148 -0
  36. data/node_modules/coffee-script/lib/coffee-script/command.js +310 -0
  37. data/node_modules/coffee-script/lib/coffee-script/grammar.js +588 -0
  38. data/node_modules/coffee-script/lib/coffee-script/helpers.js +72 -0
  39. data/node_modules/coffee-script/lib/coffee-script/index.js +10 -0
  40. data/node_modules/coffee-script/lib/coffee-script/lexer.js +687 -0
  41. data/node_modules/coffee-script/lib/coffee-script/nodes.js +2481 -0
  42. data/node_modules/coffee-script/lib/coffee-script/optparse.js +122 -0
  43. data/node_modules/coffee-script/lib/coffee-script/parser.js +670 -0
  44. data/node_modules/coffee-script/lib/coffee-script/repl.js +149 -0
  45. data/node_modules/coffee-script/lib/coffee-script/rewriter.js +288 -0
  46. data/node_modules/coffee-script/lib/coffee-script/scope.js +124 -0
  47. data/node_modules/coffee-script/npm-install-45965.sh +282 -0
  48. data/node_modules/coffee-script/package.json +31 -0
  49. data/node_modules/docco/.gitignore +3 -0
  50. data/node_modules/docco/Cakefile +27 -0
  51. data/node_modules/docco/README +13 -0
  52. data/node_modules/docco/bin/docco +8 -0
  53. data/node_modules/docco/index.html +143 -0
  54. data/node_modules/docco/lib/docco.js +155 -0
  55. data/node_modules/docco/package.json +21 -0
  56. data/node_modules/docco/resources/docco.css +186 -0
  57. data/node_modules/docco/resources/docco.jst +58 -0
  58. data/node_modules/docco/src/docco.coffee +204 -0
  59. data/node_modules/docco/vendor/showdown.js +1298 -0
  60. data/node_modules/jasmine-jquery/.gitignore +3 -0
  61. data/node_modules/jasmine-jquery/MIT.LICENSE +20 -0
  62. data/node_modules/jasmine-jquery/README.markdown +174 -0
  63. data/node_modules/jasmine-jquery/SpecRunner.html +24 -0
  64. data/node_modules/jasmine-jquery/index.js +15 -0
  65. data/node_modules/jasmine-jquery/lib/jasmine-jquery.js +288 -0
  66. data/node_modules/jasmine-jquery/package.json +19 -0
  67. data/node_modules/jasmine-jquery/spec/fixtures/real_non_mocked_fixture.html +1 -0
  68. data/node_modules/jasmine-jquery/spec/suites/jasmine-jquery-spec.js +691 -0
  69. data/node_modules/jasmine-node/.gitignore +10 -0
  70. data/node_modules/jasmine-node/LICENSE +22 -0
  71. data/node_modules/jasmine-node/README.md +35 -0
  72. data/node_modules/jasmine-node/bin/jasmine-node +7 -0
  73. data/node_modules/jasmine-node/lib/jasmine-node/cli.js +110 -0
  74. data/node_modules/jasmine-node/lib/jasmine-node/index.js +171 -0
  75. data/node_modules/jasmine-node/lib/jasmine-node/jasmine-2.0.0.rc1.js +2479 -0
  76. data/node_modules/jasmine-node/lib/jasmine-node/reporter.js +177 -0
  77. data/node_modules/jasmine-node/package.json +22 -0
  78. data/node_modules/jasmine-node/spec/CoffeeSpec.coffee +4 -0
  79. data/node_modules/jasmine-node/spec/SampleSpecs.js +15 -0
  80. data/node_modules/jasmine-node/spec/TestSpec.js +5 -0
  81. data/node_modules/jasmine-node/spec/helper_spec.js +7 -0
  82. data/node_modules/jasmine-node/spec/include/include_spec.js +7 -0
  83. data/node_modules/jasmine-node/spec/include/lib/test.js +3 -0
  84. data/node_modules/jasmine-node/spec/nested.js/NestedSpec.js +5 -0
  85. data/node_modules/jasmine-node/spec/nested/NestedSpec.js +5 -0
  86. data/node_modules/jasmine-node/spec/nested/uber-nested/UberNestedSpec.js +11 -0
  87. data/node_modules/jasmine-node/spec/sample_helper.js +19 -0
  88. data/node_modules/jasmine-node/specs.sh +2 -0
  89. data/node_modules/jasmine-reporters/.gitignore +1 -0
  90. data/node_modules/jasmine-reporters/.gitmodules +3 -0
  91. data/node_modules/jasmine-reporters/LICENSE +21 -0
  92. data/node_modules/jasmine-reporters/README.markdown +52 -0
  93. data/node_modules/jasmine-reporters/ext/env.rhino.1.2.js +13989 -0
  94. data/node_modules/jasmine-reporters/ext/jasmine-html.js +182 -0
  95. data/node_modules/jasmine-reporters/ext/jasmine.css +166 -0
  96. data/node_modules/jasmine-reporters/ext/jasmine.js +2421 -0
  97. data/node_modules/jasmine-reporters/ext/jline.jar +0 -0
  98. data/node_modules/jasmine-reporters/ext/js.jar +0 -0
  99. data/node_modules/jasmine-reporters/ext/phantomjs/.gitignore +10 -0
  100. data/node_modules/jasmine-reporters/ext/phantomjs/ChangeLog +57 -0
  101. data/node_modules/jasmine-reporters/ext/phantomjs/LICENSE.BSD +22 -0
  102. data/node_modules/jasmine-reporters/ext/phantomjs/README.md +28 -0
  103. data/node_modules/jasmine-reporters/ext/phantomjs/examples/arguments.coffee +6 -0
  104. data/node_modules/jasmine-reporters/ext/phantomjs/examples/arguments.js +8 -0
  105. data/node_modules/jasmine-reporters/ext/phantomjs/examples/colorwheel.coffee +45 -0
  106. data/node_modules/jasmine-reporters/ext/phantomjs/examples/colorwheel.js +52 -0
  107. data/node_modules/jasmine-reporters/ext/phantomjs/examples/countdown.coffee +8 -0
  108. data/node_modules/jasmine-reporters/ext/phantomjs/examples/countdown.js +8 -0
  109. data/node_modules/jasmine-reporters/ext/phantomjs/examples/cycle_multiple_urls.js +64 -0
  110. data/node_modules/jasmine-reporters/ext/phantomjs/examples/direction.coffee +28 -0
  111. data/node_modules/jasmine-reporters/ext/phantomjs/examples/direction.js +34 -0
  112. data/node_modules/jasmine-reporters/ext/phantomjs/examples/extract-text.coffee +81 -0
  113. data/node_modules/jasmine-reporters/ext/phantomjs/examples/extract-text.js +121 -0
  114. data/node_modules/jasmine-reporters/ext/phantomjs/examples/fibo.coffee +8 -0
  115. data/node_modules/jasmine-reporters/ext/phantomjs/examples/fibo.js +9 -0
  116. data/node_modules/jasmine-reporters/ext/phantomjs/examples/follow.coffee +36 -0
  117. data/node_modules/jasmine-reporters/ext/phantomjs/examples/follow.js +37 -0
  118. data/node_modules/jasmine-reporters/ext/phantomjs/examples/hello.coffee +2 -0
  119. data/node_modules/jasmine-reporters/ext/phantomjs/examples/hello.js +2 -0
  120. data/node_modules/jasmine-reporters/ext/phantomjs/examples/ipgeocode.coffee +13 -0
  121. data/node_modules/jasmine-reporters/ext/phantomjs/examples/ipgeocode.js +14 -0
  122. data/node_modules/jasmine-reporters/ext/phantomjs/examples/loadspeed.coffee +17 -0
  123. data/node_modules/jasmine-reporters/ext/phantomjs/examples/loadspeed.js +20 -0
  124. data/node_modules/jasmine-reporters/ext/phantomjs/examples/movies.coffee +13 -0
  125. data/node_modules/jasmine-reporters/ext/phantomjs/examples/movies.js +14 -0
  126. data/node_modules/jasmine-reporters/ext/phantomjs/examples/pizza.coffee +10 -0
  127. data/node_modules/jasmine-reporters/ext/phantomjs/examples/pizza.js +12 -0
  128. data/node_modules/jasmine-reporters/ext/phantomjs/examples/rasterize.coffee +21 -0
  129. data/node_modules/jasmine-reporters/ext/phantomjs/examples/rasterize.js +22 -0
  130. data/node_modules/jasmine-reporters/ext/phantomjs/examples/run-jasmine.js +26 -0
  131. data/node_modules/jasmine-reporters/ext/phantomjs/examples/run-qunit.js +24 -0
  132. data/node_modules/jasmine-reporters/ext/phantomjs/examples/seasonfood.coffee +17 -0
  133. data/node_modules/jasmine-reporters/ext/phantomjs/examples/seasonfood.js +19 -0
  134. data/node_modules/jasmine-reporters/ext/phantomjs/examples/technews.coffee +13 -0
  135. data/node_modules/jasmine-reporters/ext/phantomjs/examples/technews.js +14 -0
  136. data/node_modules/jasmine-reporters/ext/phantomjs/examples/tweets.coffee +8 -0
  137. data/node_modules/jasmine-reporters/ext/phantomjs/examples/tweets.js +12 -0
  138. data/node_modules/jasmine-reporters/ext/phantomjs/examples/useragent.coffee +7 -0
  139. data/node_modules/jasmine-reporters/ext/phantomjs/examples/useragent.js +8 -0
  140. data/node_modules/jasmine-reporters/ext/phantomjs/examples/version.coffee +5 -0
  141. data/node_modules/jasmine-reporters/ext/phantomjs/examples/version.js +5 -0
  142. data/node_modules/jasmine-reporters/ext/phantomjs/examples/waitfor.coffee +40 -0
  143. data/node_modules/jasmine-reporters/ext/phantomjs/examples/waitfor.js +43 -0
  144. data/node_modules/jasmine-reporters/ext/phantomjs/examples/weather.coffee +35 -0
  145. data/node_modules/jasmine-reporters/ext/phantomjs/examples/weather.js +42 -0
  146. data/node_modules/jasmine-reporters/ext/phantomjs/phantomjs.pro +3 -0
  147. data/node_modules/jasmine-reporters/ext/phantomjs/python/INSTALL +20 -0
  148. data/node_modules/jasmine-reporters/ext/phantomjs/python/LICENSE +674 -0
  149. data/node_modules/jasmine-reporters/ext/phantomjs/python/README +56 -0
  150. data/node_modules/jasmine-reporters/ext/phantomjs/python/csconverter.py +41 -0
  151. data/node_modules/jasmine-reporters/ext/phantomjs/python/networkaccessmanager.py +84 -0
  152. data/node_modules/jasmine-reporters/ext/phantomjs/python/phantom.py +384 -0
  153. data/node_modules/jasmine-reporters/ext/phantomjs/python/plugincontroller.py +98 -0
  154. data/node_modules/jasmine-reporters/ext/phantomjs/python/plugins/__init__.py +1 -0
  155. data/node_modules/jasmine-reporters/ext/phantomjs/python/pyphantomjs.py +154 -0
  156. data/node_modules/jasmine-reporters/ext/phantomjs/python/resources.py +4160 -0
  157. data/node_modules/jasmine-reporters/ext/phantomjs/python/resources.qrc +6 -0
  158. data/node_modules/jasmine-reporters/ext/phantomjs/python/resources/coffee-script.js +8 -0
  159. data/node_modules/jasmine-reporters/ext/phantomjs/python/resources/pyphantomjs-icon.ico +0 -0
  160. data/node_modules/jasmine-reporters/ext/phantomjs/python/resources/pyphantomjs-icon.png +0 -0
  161. data/node_modules/jasmine-reporters/ext/phantomjs/python/tools/build_resources.sh +14 -0
  162. data/node_modules/jasmine-reporters/ext/phantomjs/python/tools/setup.py +52 -0
  163. data/node_modules/jasmine-reporters/ext/phantomjs/python/utils.py +126 -0
  164. data/node_modules/jasmine-reporters/ext/phantomjs/python/webpage.py +67 -0
  165. data/node_modules/jasmine-reporters/ext/phantomjs/src/coffee-script.js +8 -0
  166. data/node_modules/jasmine-reporters/ext/phantomjs/src/consts.h +39 -0
  167. data/node_modules/jasmine-reporters/ext/phantomjs/src/csconverter.cpp +61 -0
  168. data/node_modules/jasmine-reporters/ext/phantomjs/src/csconverter.h +47 -0
  169. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/config.h +1 -0
  170. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/egif_lib.c +1111 -0
  171. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gif.pri +20 -0
  172. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gif_err.c +120 -0
  173. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gif_hash.c +160 -0
  174. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gif_hash.h +59 -0
  175. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gif_lib.h +336 -0
  176. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gif_lib_private.h +59 -0
  177. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gifalloc.c +443 -0
  178. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gifwriter.cpp +126 -0
  179. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/gifwriter.h +38 -0
  180. data/node_modules/jasmine-reporters/ext/phantomjs/src/gif/quantize.c +330 -0
  181. data/node_modules/jasmine-reporters/ext/phantomjs/src/main.cpp +64 -0
  182. data/node_modules/jasmine-reporters/ext/phantomjs/src/networkaccessmanager.cpp +119 -0
  183. data/node_modules/jasmine-reporters/ext/phantomjs/src/networkaccessmanager.h +53 -0
  184. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantom.cpp +494 -0
  185. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantom.h +117 -0
  186. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantomjs-icon.png +0 -0
  187. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantomjs.pro +32 -0
  188. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantomjs.qrc +7 -0
  189. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantomjs_os2.ico +0 -0
  190. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantomjs_os2.rc +1 -0
  191. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantomjs_win.ico +0 -0
  192. data/node_modules/jasmine-reporters/ext/phantomjs/src/phantomjs_win.rc +1 -0
  193. data/node_modules/jasmine-reporters/ext/phantomjs/src/usage.txt +11 -0
  194. data/node_modules/jasmine-reporters/ext/phantomjs/src/utils.cpp +74 -0
  195. data/node_modules/jasmine-reporters/ext/phantomjs/src/utils.h +50 -0
  196. data/node_modules/jasmine-reporters/ext/phantomjs/src/webpage.cpp +87 -0
  197. data/node_modules/jasmine-reporters/ext/phantomjs/src/webpage.h +61 -0
  198. data/node_modules/jasmine-reporters/package.json +15 -0
  199. data/node_modules/jasmine-reporters/src/jasmine.console_reporter.js +132 -0
  200. data/node_modules/jasmine-reporters/src/jasmine.junit_reporter.js +199 -0
  201. data/node_modules/jasmine-reporters/src/load_reporters.js +2 -0
  202. data/node_modules/jasmine-reporters/test/JUnitXmlReporterSpec.js +214 -0
  203. data/node_modules/jasmine-reporters/test/console_reporter.html +36 -0
  204. data/node_modules/jasmine-reporters/test/envjs.bootstrap.js +14 -0
  205. data/node_modules/jasmine-reporters/test/envjs.runner.sh +7 -0
  206. data/node_modules/jasmine-reporters/test/junit_xml_reporter.html +23 -0
  207. data/node_modules/jasmine-reporters/test/phantomjs-testrunner.js +39 -0
  208. data/node_modules/jasmine-reporters/test/phantomjs.runner.sh +30 -0
  209. data/node_modules/jasmine-reporters/test/pyphantomjs-plugins/saveToFile/__init__.py +1 -0
  210. data/node_modules/jasmine-reporters/test/pyphantomjs-plugins/saveToFile/saveToFile.py +46 -0
  211. data/node_modules/jasmine-runner/README.md +42 -0
  212. data/node_modules/jasmine-runner/TODO.md +16 -0
  213. data/node_modules/jasmine-runner/bin/jasmine +26 -0
  214. data/node_modules/jasmine-runner/lib/ServerRoutes.js +70 -0
  215. data/node_modules/jasmine-runner/lib/TestRunner.js +29 -0
  216. data/node_modules/jasmine-runner/lib/browser.js +14 -0
  217. data/node_modules/jasmine-runner/lib/config.js +21 -0
  218. data/node_modules/jasmine-runner/lib/jasmine-runner.js +83 -0
  219. data/node_modules/jasmine-runner/lib/monitor.js +34 -0
  220. data/node_modules/jasmine-runner/lib/notify.js +48 -0
  221. data/node_modules/jasmine-runner/lib/public/control-frame.js +57 -0
  222. data/node_modules/jasmine-runner/lib/public/jasmine-html.js +188 -0
  223. data/node_modules/jasmine-runner/lib/public/jasmine.css +166 -0
  224. data/node_modules/jasmine-runner/lib/public/jasmine.js +2421 -0
  225. data/node_modules/jasmine-runner/lib/public/jquery-1.4.3.js +166 -0
  226. data/node_modules/jasmine-runner/lib/public/json2.js +482 -0
  227. data/node_modules/jasmine-runner/lib/public/run.js +6 -0
  228. data/node_modules/jasmine-runner/lib/reporters.js +31 -0
  229. data/node_modules/jasmine-runner/lib/server-worker.js +18 -0
  230. data/node_modules/jasmine-runner/lib/server.js +27 -0
  231. data/node_modules/jasmine-runner/lib/template/jasmine.json +18 -0
  232. data/node_modules/jasmine-runner/lib/template/public/javascript/Player.js +22 -0
  233. data/node_modules/jasmine-runner/lib/template/public/javascript/Song.js +7 -0
  234. data/node_modules/jasmine-runner/lib/template/spec/PlayerSpec.coffee +45 -0
  235. data/node_modules/jasmine-runner/lib/template/spec/PlayerSpec.js +58 -0
  236. data/node_modules/jasmine-runner/lib/template/spec/SpecHelper.js +9 -0
  237. data/node_modules/jasmine-runner/lib/testserver.js +26 -0
  238. data/node_modules/jasmine-runner/lib/views/control-frame.jade +7 -0
  239. data/node_modules/jasmine-runner/lib/views/index.jade +18 -0
  240. data/node_modules/jasmine-runner/node_modules/.bin/cake +7 -0
  241. data/node_modules/jasmine-runner/node_modules/.bin/coffee +7 -0
  242. data/node_modules/jasmine-runner/node_modules/.bin/express +451 -0
  243. data/node_modules/jasmine-runner/node_modules/.bin/jade +92 -0
  244. data/node_modules/jasmine-runner/node_modules/.bin/vows +421 -0
  245. data/node_modules/jasmine-runner/node_modules/coffee-script/.npmignore +11 -0
  246. data/node_modules/jasmine-runner/node_modules/coffee-script/LICENSE +22 -0
  247. data/node_modules/jasmine-runner/node_modules/coffee-script/README +47 -0
  248. data/node_modules/jasmine-runner/node_modules/coffee-script/Rakefile +78 -0
  249. data/node_modules/jasmine-runner/node_modules/coffee-script/bin/cake +7 -0
  250. data/node_modules/jasmine-runner/node_modules/coffee-script/bin/coffee +7 -0
  251. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/browser.js +52 -0
  252. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/cake.js +76 -0
  253. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/coffee-script.js +82 -0
  254. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/command.js +269 -0
  255. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/grammar.js +586 -0
  256. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/helpers.js +66 -0
  257. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/index.js +8 -0
  258. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/lexer.js +638 -0
  259. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/nodes.js +2181 -0
  260. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/optparse.js +111 -0
  261. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/parser.js +656 -0
  262. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/repl.js +47 -0
  263. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/rewriter.js +353 -0
  264. data/node_modules/jasmine-runner/node_modules/coffee-script/lib/scope.js +120 -0
  265. data/node_modules/jasmine-runner/node_modules/coffee-script/package.json +22 -0
  266. data/node_modules/jasmine-runner/node_modules/colors/MIT-LICENSE.txt +20 -0
  267. data/node_modules/jasmine-runner/node_modules/colors/ReadMe.md +30 -0
  268. data/node_modules/jasmine-runner/node_modules/colors/colors.js +75 -0
  269. data/node_modules/jasmine-runner/node_modules/colors/example.js +6 -0
  270. data/node_modules/jasmine-runner/node_modules/colors/package.json +14 -0
  271. data/node_modules/jasmine-runner/node_modules/express/.npmignore +7 -0
  272. data/node_modules/jasmine-runner/node_modules/express/History.md +630 -0
  273. data/node_modules/jasmine-runner/node_modules/express/LICENSE +22 -0
  274. data/node_modules/jasmine-runner/node_modules/express/Makefile +39 -0
  275. data/node_modules/jasmine-runner/node_modules/express/Readme.md +102 -0
  276. data/node_modules/jasmine-runner/node_modules/express/bin/express +451 -0
  277. data/node_modules/jasmine-runner/node_modules/express/index.js +2 -0
  278. data/node_modules/jasmine-runner/node_modules/express/lib/express.js +78 -0
  279. data/node_modules/jasmine-runner/node_modules/express/lib/http.js +503 -0
  280. data/node_modules/jasmine-runner/node_modules/express/lib/https.js +52 -0
  281. data/node_modules/jasmine-runner/node_modules/express/lib/request.js +289 -0
  282. data/node_modules/jasmine-runner/node_modules/express/lib/response.js +423 -0
  283. data/node_modules/jasmine-runner/node_modules/express/lib/router/index.js +329 -0
  284. data/node_modules/jasmine-runner/node_modules/express/lib/router/methods.js +70 -0
  285. data/node_modules/jasmine-runner/node_modules/express/lib/router/route.js +71 -0
  286. data/node_modules/jasmine-runner/node_modules/express/lib/utils.js +122 -0
  287. data/node_modules/jasmine-runner/node_modules/express/lib/view.js +413 -0
  288. data/node_modules/jasmine-runner/node_modules/express/lib/view/partial.js +40 -0
  289. data/node_modules/jasmine-runner/node_modules/express/lib/view/view.js +206 -0
  290. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/.npmignore +11 -0
  291. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/LICENSE +24 -0
  292. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/index.js +2 -0
  293. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/cache.js +81 -0
  294. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/connect.js +106 -0
  295. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/http.js +215 -0
  296. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/https.js +47 -0
  297. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/index.js +46 -0
  298. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/basicAuth.js +93 -0
  299. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +92 -0
  300. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/compiler.js +163 -0
  301. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js +46 -0
  302. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/csrf.js +105 -0
  303. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/directory.js +222 -0
  304. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js +100 -0
  305. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/favicon.js +76 -0
  306. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/limit.js +82 -0
  307. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/logger.js +299 -0
  308. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js +38 -0
  309. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/profiler.js +100 -0
  310. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/query.js +40 -0
  311. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/responseTime.js +34 -0
  312. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/router.js +379 -0
  313. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/session.js +346 -0
  314. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/session/cookie.js +126 -0
  315. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/session/memory.js +131 -0
  316. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/session/session.js +137 -0
  317. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/session/store.js +87 -0
  318. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/static.js +225 -0
  319. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +175 -0
  320. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/middleware/vhost.js +44 -0
  321. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/patch.js +79 -0
  322. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/directory.html +75 -0
  323. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/error.html +13 -0
  324. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/favicon.ico +0 -0
  325. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page.png +0 -0
  326. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_add.png +0 -0
  327. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png +0 -0
  328. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_code.png +0 -0
  329. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png +0 -0
  330. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_delete.png +0 -0
  331. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_edit.png +0 -0
  332. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_error.png +0 -0
  333. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png +0 -0
  334. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_find.png +0 -0
  335. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_gear.png +0 -0
  336. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_go.png +0 -0
  337. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_green.png +0 -0
  338. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_key.png +0 -0
  339. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png +0 -0
  340. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_link.png +0 -0
  341. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png +0 -0
  342. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png +0 -0
  343. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_red.png +0 -0
  344. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png +0 -0
  345. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_save.png +0 -0
  346. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white.png +0 -0
  347. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png +0 -0
  348. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png +0 -0
  349. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png +0 -0
  350. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png +0 -0
  351. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png +0 -0
  352. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png +0 -0
  353. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png +0 -0
  354. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png +0 -0
  355. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png +0 -0
  356. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png +0 -0
  357. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png +0 -0
  358. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png +0 -0
  359. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png +0 -0
  360. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png +0 -0
  361. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png +0 -0
  362. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png +0 -0
  363. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png +0 -0
  364. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png +0 -0
  365. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png +0 -0
  366. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png +0 -0
  367. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png +0 -0
  368. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png +0 -0
  369. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png +0 -0
  370. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png +0 -0
  371. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png +0 -0
  372. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png +0 -0
  373. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png +0 -0
  374. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png +0 -0
  375. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png +0 -0
  376. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png +0 -0
  377. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png +0 -0
  378. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png +0 -0
  379. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png +0 -0
  380. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png +0 -0
  381. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png +0 -0
  382. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png +0 -0
  383. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png +0 -0
  384. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png +0 -0
  385. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png +0 -0
  386. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png +0 -0
  387. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png +0 -0
  388. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png +0 -0
  389. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png +0 -0
  390. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png +0 -0
  391. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png +0 -0
  392. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png +0 -0
  393. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png +0 -0
  394. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png +0 -0
  395. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png +0 -0
  396. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png +0 -0
  397. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png +0 -0
  398. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png +0 -0
  399. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png +0 -0
  400. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png +0 -0
  401. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png +0 -0
  402. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_word.png +0 -0
  403. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/icons/page_world.png +0 -0
  404. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/public/style.css +141 -0
  405. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/lib/utils.js +451 -0
  406. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/package.json +24 -0
  407. data/node_modules/jasmine-runner/node_modules/express/node_modules/connect/test.js +11 -0
  408. data/node_modules/jasmine-runner/node_modules/express/node_modules/mime/LICENSE +19 -0
  409. data/node_modules/jasmine-runner/node_modules/express/node_modules/mime/README.md +50 -0
  410. data/node_modules/jasmine-runner/node_modules/express/node_modules/mime/mime.js +92 -0
  411. data/node_modules/jasmine-runner/node_modules/express/node_modules/mime/package.json +22 -0
  412. data/node_modules/jasmine-runner/node_modules/express/node_modules/mime/test.js +79 -0
  413. data/node_modules/jasmine-runner/node_modules/express/node_modules/mime/types/mime.types +1479 -0
  414. data/node_modules/jasmine-runner/node_modules/express/node_modules/mime/types/node.types +43 -0
  415. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/.gitignore +1 -0
  416. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/.gitmodules +6 -0
  417. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/History.md +57 -0
  418. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/Makefile +7 -0
  419. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/Readme.md +49 -0
  420. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/benchmark.js +17 -0
  421. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/examples.js +48 -0
  422. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/index.js +2 -0
  423. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/lib/querystring.js +236 -0
  424. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/package.json +16 -0
  425. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/test/parse.test.js +156 -0
  426. data/node_modules/jasmine-runner/node_modules/express/node_modules/qs/test/stringify.test.js +95 -0
  427. data/node_modules/jasmine-runner/node_modules/express/package.json +22 -0
  428. data/node_modules/jasmine-runner/node_modules/growl/History.md +10 -0
  429. data/node_modules/jasmine-runner/node_modules/growl/Readme.md +74 -0
  430. data/node_modules/jasmine-runner/node_modules/growl/lib/growl.js +80 -0
  431. data/node_modules/jasmine-runner/node_modules/growl/package.json +6 -0
  432. data/node_modules/jasmine-runner/node_modules/growl/seed.yml +4 -0
  433. data/node_modules/jasmine-runner/node_modules/growl/test.js +17 -0
  434. data/node_modules/jasmine-runner/node_modules/jade/.gitignore +3 -0
  435. data/node_modules/jasmine-runner/node_modules/jade/.gitmodules +21 -0
  436. data/node_modules/jasmine-runner/node_modules/jade/.npmignore +4 -0
  437. data/node_modules/jasmine-runner/node_modules/jade/CNAME +1 -0
  438. data/node_modules/jasmine-runner/node_modules/jade/History.md +163 -0
  439. data/node_modules/jasmine-runner/node_modules/jade/LICENSE +22 -0
  440. data/node_modules/jasmine-runner/node_modules/jade/Makefile +25 -0
  441. data/node_modules/jasmine-runner/node_modules/jade/Readme.md +408 -0
  442. data/node_modules/jasmine-runner/node_modules/jade/api.html +850 -0
  443. data/node_modules/jasmine-runner/node_modules/jade/bin/jade +92 -0
  444. data/node_modules/jasmine-runner/node_modules/jade/index.js +2 -0
  445. data/node_modules/jasmine-runner/node_modules/jade/lib/compiler.js +273 -0
  446. data/node_modules/jasmine-runner/node_modules/jade/lib/doctypes.js +18 -0
  447. data/node_modules/jasmine-runner/node_modules/jade/lib/filters.js +70 -0
  448. data/node_modules/jasmine-runner/node_modules/jade/lib/index.js +314 -0
  449. data/node_modules/jasmine-runner/node_modules/jade/lib/jade.js +314 -0
  450. data/node_modules/jasmine-runner/node_modules/jade/lib/lexer.js +359 -0
  451. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/block.js +29 -0
  452. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/code.js +35 -0
  453. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/comment.js +32 -0
  454. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/doctype.js +29 -0
  455. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/each.js +35 -0
  456. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/filter.js +33 -0
  457. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/index.js +16 -0
  458. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/node.js +20 -0
  459. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/tag.js +80 -0
  460. data/node_modules/jasmine-runner/node_modules/jade/lib/nodes/text.js +29 -0
  461. data/node_modules/jasmine-runner/node_modules/jade/lib/parser.js +358 -0
  462. data/node_modules/jasmine-runner/node_modules/jade/lib/self-closing.js +17 -0
  463. data/node_modules/jasmine-runner/node_modules/jade/lib/utils.js +49 -0
  464. data/node_modules/jasmine-runner/node_modules/jade/package.json +9 -0
  465. data/node_modules/jasmine-runner/node_modules/libnotify/.gitignore +2 -0
  466. data/node_modules/jasmine-runner/node_modules/libnotify/README.md +59 -0
  467. data/node_modules/jasmine-runner/node_modules/libnotify/lib/libnotify.js +72 -0
  468. data/node_modules/jasmine-runner/node_modules/libnotify/package.json +11 -0
  469. data/node_modules/jasmine-runner/node_modules/libnotify/seed.yml +5 -0
  470. data/node_modules/jasmine-runner/node_modules/libnotify/test.js +5 -0
  471. data/node_modules/jasmine-runner/node_modules/socket.io/.gitignore +8 -0
  472. data/node_modules/jasmine-runner/node_modules/socket.io/Makefile +10 -0
  473. data/node_modules/jasmine-runner/node_modules/socket.io/README.md +218 -0
  474. data/node_modules/jasmine-runner/node_modules/socket.io/example/chat.html +61 -0
  475. data/node_modules/jasmine-runner/node_modules/socket.io/example/json.js +18 -0
  476. data/node_modules/jasmine-runner/node_modules/socket.io/example/server.js +58 -0
  477. data/node_modules/jasmine-runner/node_modules/socket.io/index.js +1 -0
  478. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/client.js +191 -0
  479. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/index.js +4 -0
  480. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/listener.js +166 -0
  481. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/transports/flashsocket.js +44 -0
  482. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/transports/htmlfile.js +45 -0
  483. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/transports/jsonp-polling.js +32 -0
  484. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/transports/websocket.js +137 -0
  485. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/transports/xhr-multipart.js +63 -0
  486. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/transports/xhr-polling.js +75 -0
  487. data/node_modules/jasmine-runner/node_modules/socket.io/lib/socket.io/utils.js +52 -0
  488. data/node_modules/jasmine-runner/node_modules/socket.io/package.json +17 -0
  489. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/.gitignore +3 -0
  490. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/.gitmodules +3 -0
  491. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/History.md +97 -0
  492. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/Makefile +53 -0
  493. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/Readme.md +39 -0
  494. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/bin/expresso +837 -0
  495. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/COPYING +339 -0
  496. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/Makefile.am +81 -0
  497. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/Makefile.in +884 -0
  498. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/Readme.md +8 -0
  499. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/aclocal.m4 +872 -0
  500. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/config.guess +1526 -0
  501. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/config.h.in +92 -0
  502. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/config.rpath +666 -0
  503. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/config.sub +1658 -0
  504. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/configure +7971 -0
  505. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/configure.ac +88 -0
  506. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/depcomp +589 -0
  507. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/encoding.c +315 -0
  508. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/encoding.h +33 -0
  509. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/generate-resources.c +58 -0
  510. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/global.h +29 -0
  511. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/highlight.c +478 -0
  512. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/highlight.h +37 -0
  513. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/http-connection.c +192 -0
  514. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/http-exchange.c +494 -0
  515. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/http-host.c +95 -0
  516. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/http-message.c +900 -0
  517. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/http-server.c +236 -0
  518. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/http-server.h +208 -0
  519. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/http-url.c +156 -0
  520. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/install-sh +519 -0
  521. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/instrument-js.cpp +1873 -0
  522. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/instrument-js.h +81 -0
  523. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/instrument.c +226 -0
  524. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/instrument.h +31 -0
  525. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/GNUmakefile +15 -0
  526. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/Makefile.ref +483 -0
  527. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/README.html +54 -0
  528. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/SpiderMonkey.rsp +11 -0
  529. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/aclocal.m4 +9 -0
  530. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/bench.sh +5 -0
  531. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/builtins.tbl +98 -0
  532. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config.mk +206 -0
  533. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/Makefile.in +106 -0
  534. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/Moz/Milestone.pm +232 -0
  535. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/autoconf.mk.in +349 -0
  536. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/check-sync-dirs.py +108 -0
  537. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/check-sync-exceptions +6 -0
  538. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/config.mk +884 -0
  539. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/fastcwd.pl +66 -0
  540. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/gcc_hidden.h +2 -0
  541. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/insure.mk +53 -0
  542. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/make-system-wrappers.pl +59 -0
  543. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/milestone.pl +112 -0
  544. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/milestone.txt +13 -0
  545. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/Makefile.in +84 -0
  546. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/cppsetup.c +233 -0
  547. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/def.h +184 -0
  548. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/ifparser.c +549 -0
  549. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/ifparser.h +83 -0
  550. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/imakemdep.h +733 -0
  551. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/include.c +337 -0
  552. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/main.c +860 -0
  553. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/mkdepend.man +382 -0
  554. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/parse.c +686 -0
  555. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/mkdepend/pr.c +124 -0
  556. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/nfspwd.pl +50 -0
  557. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/nsinstall.c +481 -0
  558. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/nsinstall.py +139 -0
  559. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/pathsub.c +247 -0
  560. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/pathsub.h +74 -0
  561. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/preprocessor.pl +671 -0
  562. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/revdepth-nt.pl +48 -0
  563. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/revdepth.pl +51 -0
  564. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/rules.mk +2269 -0
  565. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/system-headers +1038 -0
  566. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/version.mk +85 -0
  567. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/config/version_win.pl +423 -0
  568. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/dtoa.c +3321 -0
  569. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/editline/Makefile.ref +143 -0
  570. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/editline/README +83 -0
  571. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/editline/editline.3 +175 -0
  572. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/editline/editline.c +1368 -0
  573. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/editline/editline.h +135 -0
  574. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/editline/sysunix.c +182 -0
  575. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/editline/unix.h +82 -0
  576. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/javascript-trace.d +73 -0
  577. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jitstats.tbl +52 -0
  578. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/js-config.h.in +55 -0
  579. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/js-config.in +111 -0
  580. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/js.cpp +4050 -0
  581. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/js.mdp +0 -0
  582. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/js.msg +309 -0
  583. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/js3240.rc +79 -0
  584. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsOS240.def +654 -0
  585. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsapi.cpp +6060 -0
  586. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsapi.h +2699 -0
  587. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsarena.cpp +450 -0
  588. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsarena.h +318 -0
  589. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsarray.cpp +3426 -0
  590. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsarray.h +191 -0
  591. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsatom.cpp +1064 -0
  592. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsatom.h +458 -0
  593. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsbit.h +253 -0
  594. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsbool.cpp +182 -0
  595. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsbool.h +75 -0
  596. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsbuiltins.cpp +497 -0
  597. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsbuiltins.h +374 -0
  598. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsclist.h +139 -0
  599. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jscntxt.cpp +1394 -0
  600. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jscntxt.h +1247 -0
  601. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jscompat.h +57 -0
  602. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsconfig.mk +181 -0
  603. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jscpucfg.cpp +388 -0
  604. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jscpucfg.h +212 -0
  605. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdate.cpp +2475 -0
  606. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdate.h +124 -0
  607. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdbgapi.cpp +1954 -0
  608. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdbgapi.h +500 -0
  609. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdhash.cpp +876 -0
  610. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdhash.h +588 -0
  611. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdtoa.cpp +572 -0
  612. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdtoa.h +131 -0
  613. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdtracef.c +318 -0
  614. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsdtracef.h +81 -0
  615. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsemit.cpp +6857 -0
  616. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsemit.h +777 -0
  617. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsexn.cpp +1376 -0
  618. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsexn.h +96 -0
  619. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsfile.cpp +2736 -0
  620. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsfile.h +56 -0
  621. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsfile.msg +90 -0
  622. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsfun.cpp +2706 -0
  623. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsfun.h +296 -0
  624. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsgc.cpp +3763 -0
  625. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsgc.h +427 -0
  626. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jshash.cpp +476 -0
  627. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jshash.h +151 -0
  628. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsify.pl +483 -0
  629. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsinterp.cpp +7225 -0
  630. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsinterp.h +591 -0
  631. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsinvoke.cpp +42 -0
  632. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsiter.cpp +1050 -0
  633. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsiter.h +140 -0
  634. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jskeyword.tbl +124 -0
  635. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jskwgen.cpp +460 -0
  636. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jslibmath.h +69 -0
  637. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jslock.cpp +1417 -0
  638. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jslock.h +311 -0
  639. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jslocko.asm +60 -0
  640. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jslog2.cpp +94 -0
  641. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jslong.cpp +264 -0
  642. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jslong.h +412 -0
  643. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsmath.cpp +721 -0
  644. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsmath.h +63 -0
  645. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsnum.cpp +1338 -0
  646. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsnum.h +287 -0
  647. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsobj.cpp +5563 -0
  648. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsobj.h +735 -0
  649. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/json.cpp +954 -0
  650. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/json.h +107 -0
  651. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsopcode.cpp +5304 -0
  652. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsopcode.h +404 -0
  653. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsopcode.tbl +557 -0
  654. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsoplengen.cpp +121 -0
  655. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsotypes.h +202 -0
  656. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsparse.cpp +6822 -0
  657. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsparse.h +508 -0
  658. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsprf.cpp +1262 -0
  659. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsprf.h +150 -0
  660. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsproto.tbl +129 -0
  661. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsprvtd.h +263 -0
  662. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jspubtd.h +727 -0
  663. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsregexp.cpp +4772 -0
  664. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsregexp.h +192 -0
  665. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsreops.tbl +145 -0
  666. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsscan.cpp +2017 -0
  667. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsscan.h +389 -0
  668. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsscope.cpp +1955 -0
  669. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsscope.h +419 -0
  670. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsscript.cpp +1891 -0
  671. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsscript.h +330 -0
  672. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsshell.msg +51 -0
  673. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsstaticcheck.h +57 -0
  674. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsstddef.h +87 -0
  675. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsstr.cpp +5347 -0
  676. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsstr.h +662 -0
  677. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jstracer.cpp +8276 -0
  678. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jstracer.h +552 -0
  679. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jstypes.h +490 -0
  680. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsutil.cpp +345 -0
  681. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsutil.h +168 -0
  682. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsversion.h +243 -0
  683. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsxdrapi.cpp +800 -0
  684. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsxdrapi.h +220 -0
  685. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsxml.cpp +8343 -0
  686. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/jsxml.h +298 -0
  687. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/lock_SunOS.s +119 -0
  688. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/plify_jsdhash.sed +35 -0
  689. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/prmjtime.cpp +846 -0
  690. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/prmjtime.h +103 -0
  691. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/AIX4.1.mk +65 -0
  692. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/AIX4.2.mk +64 -0
  693. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/AIX4.3.mk +65 -0
  694. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Cygwin.mk +14 -0
  695. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Darwin.mk +85 -0
  696. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Darwin1.3.mk +81 -0
  697. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Darwin1.4.mk +41 -0
  698. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Darwin5.2.mk +81 -0
  699. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Darwin5.3.mk +81 -0
  700. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Darwin64.mk +72 -0
  701. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/HP-UXB.10.10.mk +77 -0
  702. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/HP-UXB.10.20.mk +77 -0
  703. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/HP-UXB.11.00.mk +80 -0
  704. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/IRIX.mk +87 -0
  705. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/IRIX5.3.mk +44 -0
  706. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/IRIX6.1.mk +44 -0
  707. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/IRIX6.2.mk +44 -0
  708. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/IRIX6.3.mk +44 -0
  709. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/IRIX6.5.mk +44 -0
  710. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Linux_All.mk +105 -0
  711. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/MSYS.mk +7 -0
  712. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/Mac_OS10.0.mk +82 -0
  713. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/OSF1V4.0.mk +72 -0
  714. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/OSF1V5.0.mk +69 -0
  715. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS4.1.4.mk +101 -0
  716. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.10.mk +50 -0
  717. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.3.mk +91 -0
  718. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.4.mk +92 -0
  719. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.5.1.mk +44 -0
  720. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.5.mk +87 -0
  721. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.6.mk +89 -0
  722. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.7.mk +44 -0
  723. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.8.mk +44 -0
  724. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/SunOS5.9.mk +44 -0
  725. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/WINNT4.0.mk +118 -0
  726. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/WINNT5.0.mk +118 -0
  727. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/WINNT5.1.mk +118 -0
  728. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/WINNT5.2.mk +118 -0
  729. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/WINNT6.0.mk +118 -0
  730. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/ref-config/dgux.mk +64 -0
  731. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/resource.h +15 -0
  732. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/rules.mk +206 -0
  733. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/time.sh +13 -0
  734. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/js/win32.order +384 -0
  735. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage-help.txt +12 -0
  736. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage-highlight.css +38 -0
  737. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage-ie.css +89 -0
  738. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage-overlay.js +211 -0
  739. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage-server-help.txt +17 -0
  740. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage-server.1 +79 -0
  741. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage-server.c +1307 -0
  742. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage-throbber.gif +0 -0
  743. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage.1 +52 -0
  744. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage.c +142 -0
  745. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage.css +328 -0
  746. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage.html +125 -0
  747. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage.js +1024 -0
  748. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage.jsm +22 -0
  749. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage.manifest +2 -0
  750. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/jscoverage.xul +36 -0
  751. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/m4/iconv.m4 +180 -0
  752. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/m4/lib-ld.m4 +110 -0
  753. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/m4/lib-link.m4 +709 -0
  754. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/m4/lib-prefix.m4 +185 -0
  755. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/make-bin-dist.sh.in +24 -0
  756. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/make-dist.sh.in +43 -0
  757. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/missing +367 -0
  758. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/report.js +76 -0
  759. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/resource-manager.c +59 -0
  760. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/resource-manager.h +46 -0
  761. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/stream.c +129 -0
  762. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/stream.h +57 -0
  763. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/Makefile.am +130 -0
  764. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/Makefile.in +846 -0
  765. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/asprintf.c +42 -0
  766. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/asprintf.sh +19 -0
  767. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/charset.sh +110 -0
  768. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/chunked.sh +74 -0
  769. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/common.sh +7 -0
  770. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/destination-is-existing-directory.expected.err +2 -0
  771. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/destination-is-file.expected.err +2 -0
  772. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/encoding-requires-argument.expected.err +2 -0
  773. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/encodings.c +223 -0
  774. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/encodings.sh +19 -0
  775. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/exclude-requires-argument.expected.err +2 -0
  776. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/fatal.sh +110 -0
  777. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/gethostbyname.c +53 -0
  778. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/gethostbyname.sh +25 -0
  779. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/help.sh +35 -0
  780. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/http-client-bad-body.c +98 -0
  781. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/http-client-bad-url.c +77 -0
  782. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/http-client-close-after-request.c +57 -0
  783. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/http-server-bad-body.c +97 -0
  784. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/http-server-bad-headers.c +97 -0
  785. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/http-server-charset.c +144 -0
  786. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/http-server-chunked.c +196 -0
  787. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/http-server-close-immediately.c +60 -0
  788. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/invalid-option.expected.err +2 -0
  789. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/invalid-option.sh +29 -0
  790. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-ignore.expected/ignore.js +106 -0
  791. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-ignore.sh +28 -0
  792. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-ignore/ignore.js +44 -0
  793. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-invalid.expected.err +2 -0
  794. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-invalid/javascript-invalid.js +1 -0
  795. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-setter.expected.err +1 -0
  796. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-setter/javascript-setter.js +3 -0
  797. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-utf-8.expected/javascript-utf-8.js +15 -0
  798. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-utf-8.sh +43 -0
  799. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-utf-8/javascript-utf-8.js +2 -0
  800. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-xml.expected.err +1 -0
  801. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript-xml/javascript-xml.js +8 -0
  802. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-array-comprehension.js +32 -0
  803. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-assign.js +51 -0
  804. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-colon.js +24 -0
  805. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-comma.js +12 -0
  806. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-cr.js +12 -0
  807. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-crlf.js +12 -0
  808. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-debugger.js +21 -0
  809. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-dec.js +15 -0
  810. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-delete.js +12 -0
  811. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-destructuring.js +96 -0
  812. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-do.js +28 -0
  813. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-dot.js +30 -0
  814. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-empty.js +9 -0
  815. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-for.js +51 -0
  816. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-foreach.js +16 -0
  817. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-function.js +79 -0
  818. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-generator-expression.js +45 -0
  819. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-generator.js +32 -0
  820. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-getter-setter.js +31 -0
  821. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-hook.js +15 -0
  822. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-if.js +71 -0
  823. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-in.js +19 -0
  824. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-inc.js +15 -0
  825. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-iso-8859-1.js +15 -0
  826. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-lambda.js +14 -0
  827. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-let.js +148 -0
  828. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-lf.js +12 -0
  829. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-new.js +22 -0
  830. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-number.js +57 -0
  831. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-object.js +15 -0
  832. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-op.js +108 -0
  833. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-primary.js +21 -0
  834. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-rb.js +24 -0
  835. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-rc.js +15 -0
  836. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-rp.js +12 -0
  837. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-special-characters.js +30 -0
  838. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-string.js +36 -0
  839. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-switch.js +55 -0
  840. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-throw.js +21 -0
  841. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-try.js +66 -0
  842. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-unaryop.js +27 -0
  843. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-var.js +15 -0
  844. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-while.js +79 -0
  845. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.expected/javascript-with.js +30 -0
  846. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript.sh +53 -0
  847. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-array-comprehension.js +14 -0
  848. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-assign.js +14 -0
  849. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-colon.js +7 -0
  850. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-comma.js +1 -0
  851. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-cr.js +1 -0
  852. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-crlf.js +4 -0
  853. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-debugger.js +6 -0
  854. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-dec.js +2 -0
  855. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-delete.js +1 -0
  856. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-destructuring.js +42 -0
  857. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-do.js +10 -0
  858. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-dot.js +8 -0
  859. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-empty.js +0 -0
  860. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-for.js +22 -0
  861. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-foreach.js +8 -0
  862. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-function.js +38 -0
  863. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-generator-expression.js +18 -0
  864. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-generator.js +11 -0
  865. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-getter-setter.js +19 -0
  866. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-hook.js +2 -0
  867. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-if.js +30 -0
  868. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-in.js +4 -0
  869. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-inc.js +2 -0
  870. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-iso-8859-1.js +2 -0
  871. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-lambda.js +3 -0
  872. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-let.js +79 -0
  873. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-lf.js +4 -0
  874. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-new.js +4 -0
  875. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-number.js +19 -0
  876. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-object.js +2 -0
  877. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-op.js +55 -0
  878. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-primary.js +4 -0
  879. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-rb.js +5 -0
  880. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-rc.js +7 -0
  881. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-rp.js +1 -0
  882. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-special-characters.js +11 -0
  883. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-string.js +11 -0
  884. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-switch.js +21 -0
  885. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-throw.js +6 -0
  886. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-try.js +32 -0
  887. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-unaryop.js +6 -0
  888. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-var.js +2 -0
  889. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-while.js +35 -0
  890. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/javascript/javascript-with.js +9 -0
  891. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/json-cmp.js +65 -0
  892. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/json.c +48 -0
  893. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/json.sh +19 -0
  894. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/mkdirs.c +42 -0
  895. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/mkdirs.sh +19 -0
  896. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/netcat.pl +35 -0
  897. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/no-arguments.expected.err +2 -0
  898. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/no-arguments.sh +29 -0
  899. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/no-instrument-requires-argument.expected.err +2 -0
  900. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/proxy-bad-request-body.sh +58 -0
  901. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/proxy-bad-response-body-javascript.sh +53 -0
  902. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/proxy-bad-response-body.expected.err +1 -0
  903. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/proxy-bad-response-body.sh +54 -0
  904. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/proxy-bad-response-headers.sh +53 -0
  905. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/proxy-no-server.sh +49 -0
  906. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/proxy-url.sh +67 -0
  907. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/proxy.sh +143 -0
  908. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive-crlf.sh +59 -0
  909. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive-dir-list.c +93 -0
  910. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive-dir-list.sh +19 -0
  911. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive-exclude.sh +41 -0
  912. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive-fatal.sh +40 -0
  913. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive-no-instrument.sh +41 -0
  914. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/1/1.css +3 -0
  915. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/1/1.html +12 -0
  916. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/1/1.js +12 -0
  917. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/1/2/2.css +3 -0
  918. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/1/2/2.html +11 -0
  919. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/1/2/2.js +12 -0
  920. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/image.png +0 -0
  921. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/index.html +12 -0
  922. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/script.js +19 -0
  923. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/style.css +3 -0
  924. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/unix.txt +3 -0
  925. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/windows.txt +3 -0
  926. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.expected/x +1 -0
  927. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive.sh +55 -0
  928. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/1/1.css +3 -0
  929. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/1/1.html +12 -0
  930. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/1/1.js +1 -0
  931. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/1/2/2.css +3 -0
  932. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/1/2/2.html +11 -0
  933. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/1/2/2.js +1 -0
  934. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/image.png +0 -0
  935. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/index.html +12 -0
  936. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/script.js +6 -0
  937. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/style.css +3 -0
  938. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/unix.txt +3 -0
  939. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/windows.txt +3 -0
  940. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/recursive/x +1 -0
  941. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/same-directory.expected.err +1 -0
  942. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/same-directory.sh +30 -0
  943. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-bad-requests.sh +104 -0
  944. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-close-after-request.sh +47 -0
  945. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-content-types.sh +68 -0
  946. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-directory-listing.expected +4 -0
  947. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-directory-listing.sh +57 -0
  948. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-directory-redirect.sh +50 -0
  949. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-encoded-url.sh +57 -0
  950. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-error.sh +61 -0
  951. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-help.sh +26 -0
  952. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-ip-address.sh +68 -0
  953. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-shutdown-bad-method.sh +49 -0
  954. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-shutdown.expected.err +1 -0
  955. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-shutdown.sh +42 -0
  956. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-special-file.sh +62 -0
  957. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-unreadable-directory.sh +61 -0
  958. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-unreadable-file.sh +62 -0
  959. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-verbose.expected.err +4 -0
  960. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-verbose.sh +54 -0
  961. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server-version.sh +25 -0
  962. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server.pl +61 -0
  963. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/server.sh +216 -0
  964. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/source-does-not-exist.expected.err +2 -0
  965. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/source-is-file.expected.err +2 -0
  966. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-bad-json.sh +50 -0
  967. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-bad-request-body.sh +48 -0
  968. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-bad-response-headers.sh +56 -0
  969. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-bad-source-urls.expected.err +3 -0
  970. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-bad-source-urls.expected.json +14 -0
  971. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-escaped-characters.expected.json +6 -0
  972. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-escaped-characters.js +11 -0
  973. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-escaped-characters.json +3 -0
  974. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-escaped-characters.sh +52 -0
  975. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-server-bad-body.sh +59 -0
  976. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-server-closes-immediately.sh +58 -0
  977. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-source-not-found.expected.err +1 -0
  978. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-source-not-found.expected.json +6 -0
  979. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-source-not-found.json +3 -0
  980. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-source-not-found.sh +50 -0
  981. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-source-urls.expected.err +3 -0
  982. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-source-urls.expected.json +14 -0
  983. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-unreachable-source-urls.expected.err +3 -0
  984. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-unreachable-source-urls.expected.json +14 -0
  985. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-unreadable-json.sh +66 -0
  986. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store-unwritable-json.sh +58 -0
  987. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store.expected.json +14 -0
  988. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store.json +5 -0
  989. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/store.sh +137 -0
  990. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/streams.c +107 -0
  991. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/streams.sh +19 -0
  992. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/too-many-arguments.expected.err +2 -0
  993. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/valgrind.sh +7 -0
  994. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/tests/version.sh +29 -0
  995. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/util.c +570 -0
  996. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/deps/jscoverage/util.h +133 -0
  997. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/docs/api.html +1048 -0
  998. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/docs/index.html +373 -0
  999. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/docs/index.md +290 -0
  1000. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/docs/layout/foot.html +3 -0
  1001. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/docs/layout/head.html +42 -0
  1002. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/lib/bar.js +4 -0
  1003. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/lib/foo.js +16 -0
  1004. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/package.json +12 -0
  1005. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/test/assert.test.js +84 -0
  1006. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/test/async.test.js +6 -0
  1007. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/test/bar.test.js +12 -0
  1008. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/test/foo.test.js +13 -0
  1009. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/test/http.test.js +82 -0
  1010. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/test/serial/async.test.js +38 -0
  1011. data/node_modules/jasmine-runner/node_modules/socket.io/support/expresso/test/serial/http.test.js +47 -0
  1012. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/LICENSE +27 -0
  1013. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/Makefile +8 -0
  1014. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/README.md +41 -0
  1015. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/examples/client-unix.js +12 -0
  1016. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/examples/client.js +10 -0
  1017. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/examples/server-unix.js +13 -0
  1018. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/lib/websocket.js +562 -0
  1019. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/package.json +22 -0
  1020. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/test/test-basic.js +63 -0
  1021. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/test/test-readonly-attrs.js +44 -0
  1022. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/test/test-ready-state.js +23 -0
  1023. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/test/test-unix-send-fd.js +63 -0
  1024. data/node_modules/jasmine-runner/node_modules/socket.io/support/node-websocket-client/test/test-unix-sockets.js +46 -0
  1025. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/.gitignore +1 -0
  1026. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/.gitmodules +3 -0
  1027. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/Makefile +2 -0
  1028. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/README.md +213 -0
  1029. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/io.js +24 -0
  1030. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/socket.js +157 -0
  1031. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/transport.js +141 -0
  1032. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/transports/flashsocket.js +53 -0
  1033. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/transports/htmlfile.js +73 -0
  1034. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/transports/jsonp-polling.js +116 -0
  1035. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/transports/websocket.js +60 -0
  1036. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/transports/xhr-multipart.js +36 -0
  1037. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/transports/xhr-polling.js +68 -0
  1038. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/transports/xhr.js +131 -0
  1039. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/util.js +60 -0
  1040. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/.gitignore +1 -0
  1041. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/FABridge.js +604 -0
  1042. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/README.txt +109 -0
  1043. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/WebSocketMain.swf +0 -0
  1044. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/WebSocketMainInsecure.zip +0 -0
  1045. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocket.as +461 -0
  1046. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketMain.as +94 -0
  1047. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as +19 -0
  1048. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketStateEvent.as +32 -0
  1049. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/bridge/FABridge.as +943 -0
  1050. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/build.sh +10 -0
  1051. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as +204 -0
  1052. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as +375 -0
  1053. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as +287 -0
  1054. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as +3235 -0
  1055. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as +218 -0
  1056. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as +57 -0
  1057. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as +82 -0
  1058. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as +27 -0
  1059. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as +21 -0
  1060. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as +137 -0
  1061. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as +124 -0
  1062. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as +204 -0
  1063. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as +106 -0
  1064. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as +28 -0
  1065. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as +115 -0
  1066. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as +71 -0
  1067. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as +90 -0
  1068. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as +20 -0
  1069. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as +119 -0
  1070. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as +142 -0
  1071. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as +339 -0
  1072. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as +2797 -0
  1073. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as +375 -0
  1074. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as +55 -0
  1075. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as +61 -0
  1076. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as +64 -0
  1077. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as +58 -0
  1078. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as +365 -0
  1079. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as +86 -0
  1080. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as +21 -0
  1081. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as +15 -0
  1082. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as +32 -0
  1083. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as +21 -0
  1084. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as +35 -0
  1085. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as +110 -0
  1086. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as +34 -0
  1087. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as +52 -0
  1088. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as +44 -0
  1089. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as +44 -0
  1090. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as +60 -0
  1091. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as +42 -0
  1092. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as +88 -0
  1093. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as +94 -0
  1094. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl +29 -0
  1095. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt +2304 -0
  1096. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as +1220 -0
  1097. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as +58 -0
  1098. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as +39 -0
  1099. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as +148 -0
  1100. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as +160 -0
  1101. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as +71 -0
  1102. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as +98 -0
  1103. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as +109 -0
  1104. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as +112 -0
  1105. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as +151 -0
  1106. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as +184 -0
  1107. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as +20 -0
  1108. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as +56 -0
  1109. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as +58 -0
  1110. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as +101 -0
  1111. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as +92 -0
  1112. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as +198 -0
  1113. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as +58 -0
  1114. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as +60 -0
  1115. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as +51 -0
  1116. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as +42 -0
  1117. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as +59 -0
  1118. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as +66 -0
  1119. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as +102 -0
  1120. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as +117 -0
  1121. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as +14 -0
  1122. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as +29 -0
  1123. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as +24 -0
  1124. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as +38 -0
  1125. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as +171 -0
  1126. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as +26 -0
  1127. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as +340 -0
  1128. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as +70 -0
  1129. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as +151 -0
  1130. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as +895 -0
  1131. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as +39 -0
  1132. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as +27 -0
  1133. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as +197 -0
  1134. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as +370 -0
  1135. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as +26 -0
  1136. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as +180 -0
  1137. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as +90 -0
  1138. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as +1543 -0
  1139. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as +35 -0
  1140. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as +11 -0
  1141. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as +85 -0
  1142. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as +34 -0
  1143. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as +11 -0
  1144. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as +25 -0
  1145. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as +189 -0
  1146. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as +66 -0
  1147. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as +28 -0
  1148. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as +43 -0
  1149. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as +210 -0
  1150. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as +21 -0
  1151. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as +44 -0
  1152. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as +35 -0
  1153. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as +112 -0
  1154. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as +118 -0
  1155. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as +49 -0
  1156. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as +90 -0
  1157. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as +27 -0
  1158. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as +94 -0
  1159. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as +60 -0
  1160. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/sample.html +76 -0
  1161. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/swfobject.js +4 -0
  1162. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/lib/vendor/web-socket-js/web_socket.js +388 -0
  1163. data/node_modules/jasmine-runner/node_modules/socket.io/support/socket.io-client/socket.io.js +1918 -0
  1164. data/node_modules/jasmine-runner/node_modules/socket.io/tests/index.js +17 -0
  1165. data/node_modules/jasmine-runner/node_modules/socket.io/tests/listener.js +152 -0
  1166. data/node_modules/jasmine-runner/node_modules/socket.io/tests/transports.flashsocket.js +48 -0
  1167. data/node_modules/jasmine-runner/node_modules/socket.io/tests/transports.htmlfile.js +214 -0
  1168. data/node_modules/jasmine-runner/node_modules/socket.io/tests/transports.jsonp-polling.js +148 -0
  1169. data/node_modules/jasmine-runner/node_modules/socket.io/tests/transports.websocket.js +245 -0
  1170. data/node_modules/jasmine-runner/node_modules/socket.io/tests/transports.xhr-multipart.js +215 -0
  1171. data/node_modules/jasmine-runner/node_modules/socket.io/tests/transports.xhr-polling.js +138 -0
  1172. data/node_modules/jasmine-runner/node_modules/socket.io/tests/utils.js +25 -0
  1173. data/node_modules/jasmine-runner/node_modules/vows/LICENSE +20 -0
  1174. data/node_modules/jasmine-runner/node_modules/vows/Makefile +7 -0
  1175. data/node_modules/jasmine-runner/node_modules/vows/README.md +39 -0
  1176. data/node_modules/jasmine-runner/node_modules/vows/bin/vows +421 -0
  1177. data/node_modules/jasmine-runner/node_modules/vows/lib/assert/error.js +27 -0
  1178. data/node_modules/jasmine-runner/node_modules/vows/lib/assert/macros.js +180 -0
  1179. data/node_modules/jasmine-runner/node_modules/vows/lib/vows.js +195 -0
  1180. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/console.js +93 -0
  1181. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/context.js +55 -0
  1182. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/extras.js +28 -0
  1183. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/reporters/dot-matrix.js +69 -0
  1184. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/reporters/json.js +10 -0
  1185. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/reporters/silent.js +8 -0
  1186. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/reporters/spec.js +74 -0
  1187. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/reporters/watch.js +38 -0
  1188. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/reporters/xunit.js +90 -0
  1189. data/node_modules/jasmine-runner/node_modules/vows/lib/vows/suite.js +321 -0
  1190. data/node_modules/jasmine-runner/node_modules/vows/package.json +14 -0
  1191. data/node_modules/jasmine-runner/node_modules/vows/test/assert-test.js +101 -0
  1192. data/node_modules/jasmine-runner/node_modules/vows/test/vows-test.js +373 -0
  1193. data/node_modules/jasmine-runner/node_modules/webworker/.gitignore +2 -0
  1194. data/node_modules/jasmine-runner/node_modules/webworker/LICENSE +27 -0
  1195. data/node_modules/jasmine-runner/node_modules/webworker/Makefile +15 -0
  1196. data/node_modules/jasmine-runner/node_modules/webworker/README.md +74 -0
  1197. data/node_modules/jasmine-runner/node_modules/webworker/docs/design.md +103 -0
  1198. data/node_modules/jasmine-runner/node_modules/webworker/examples/prefork/README.md +1 -0
  1199. data/node_modules/jasmine-runner/node_modules/webworker/examples/prefork/master.js +12 -0
  1200. data/node_modules/jasmine-runner/node_modules/webworker/examples/prefork/worker.js +20 -0
  1201. data/node_modules/jasmine-runner/node_modules/webworker/lib/webworker-child.js +173 -0
  1202. data/node_modules/jasmine-runner/node_modules/webworker/lib/webworker-util.js +185 -0
  1203. data/node_modules/jasmine-runner/node_modules/webworker/lib/webworker.js +304 -0
  1204. data/node_modules/jasmine-runner/node_modules/webworker/lib/ws.js +118 -0
  1205. data/node_modules/jasmine-runner/node_modules/webworker/lib/ws/connection.js +408 -0
  1206. data/node_modules/jasmine-runner/node_modules/webworker/lib/ws/manager.js +98 -0
  1207. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/LICENSE +27 -0
  1208. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/Makefile +8 -0
  1209. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/README.md +41 -0
  1210. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/examples/client-unix.js +12 -0
  1211. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/examples/client.js +10 -0
  1212. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/examples/server-unix.js +13 -0
  1213. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/lib/websocket.js +516 -0
  1214. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/package.json +22 -0
  1215. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/test/test-basic.js +63 -0
  1216. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/test/test-readonly-attrs.js +44 -0
  1217. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/test/test-ready-state.js +23 -0
  1218. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/test/test-unix-send-fd.js +63 -0
  1219. data/node_modules/jasmine-runner/node_modules/webworker/node_modules/websocket-client/test/test-unix-sockets.js +46 -0
  1220. data/node_modules/jasmine-runner/node_modules/webworker/package.json +25 -0
  1221. data/node_modules/jasmine-runner/node_modules/webworker/test/test-error.js +24 -0
  1222. data/node_modules/jasmine-runner/node_modules/webworker/test/test-fd.js +32 -0
  1223. data/node_modules/jasmine-runner/node_modules/webworker/test/test-simple.js +36 -0
  1224. data/node_modules/jasmine-runner/node_modules/webworker/test/workers/error.js +6 -0
  1225. data/node_modules/jasmine-runner/node_modules/webworker/test/workers/fd.js +17 -0
  1226. data/node_modules/jasmine-runner/node_modules/webworker/test/workers/simple.js +15 -0
  1227. data/node_modules/jasmine-runner/package.json +22 -0
  1228. data/node_modules/jasmine-runner/spec/ConsoleLoggerSpec.js +1 -0
  1229. data/node_modules/jasmine-runner/spec/ServerSpec.js +42 -0
  1230. data/node_modules/jasmine-runner/spec/TestRunner.js +72 -0
  1231. data/node_modules/jasmine-runner/spec/file.worker +8 -0
  1232. data/node_modules/jasmine-runner/spec/temp/spec/foo.spec.js +0 -0
  1233. data/node_modules/jasmine-runner/spec/temp/src/foo.hs +1 -0
  1234. data/node_modules/uglify-js/.gitignore +4 -0
  1235. data/node_modules/uglify-js/README.html +1026 -0
  1236. data/node_modules/uglify-js/README.org +571 -0
  1237. data/node_modules/uglify-js/bin/uglifyjs +317 -0
  1238. data/node_modules/uglify-js/docstyle.css +75 -0
  1239. data/node_modules/uglify-js/lib/object-ast.js +75 -0
  1240. data/node_modules/uglify-js/lib/parse-js.js +1339 -0
  1241. data/node_modules/uglify-js/lib/process.js +2001 -0
  1242. data/node_modules/uglify-js/lib/squeeze-more.js +51 -0
  1243. data/node_modules/uglify-js/package.json +24 -0
  1244. data/node_modules/uglify-js/package.json~ +24 -0
  1245. data/node_modules/uglify-js/test/beautify.js +28 -0
  1246. data/node_modules/uglify-js/test/testparser.js +403 -0
  1247. data/node_modules/uglify-js/test/unit/compress/expected/array1.js +1 -0
  1248. data/node_modules/uglify-js/test/unit/compress/expected/array2.js +1 -0
  1249. data/node_modules/uglify-js/test/unit/compress/expected/array3.js +1 -0
  1250. data/node_modules/uglify-js/test/unit/compress/expected/array4.js +1 -0
  1251. data/node_modules/uglify-js/test/unit/compress/expected/assignment.js +1 -0
  1252. data/node_modules/uglify-js/test/unit/compress/expected/concatstring.js +1 -0
  1253. data/node_modules/uglify-js/test/unit/compress/expected/const.js +1 -0
  1254. data/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js +1 -0
  1255. data/node_modules/uglify-js/test/unit/compress/expected/forstatement.js +1 -0
  1256. data/node_modules/uglify-js/test/unit/compress/expected/if.js +1 -0
  1257. data/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js +1 -0
  1258. data/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js +1 -0
  1259. data/node_modules/uglify-js/test/unit/compress/expected/issue10.js +1 -0
  1260. data/node_modules/uglify-js/test/unit/compress/expected/issue11.js +1 -0
  1261. data/node_modules/uglify-js/test/unit/compress/expected/issue13.js +1 -0
  1262. data/node_modules/uglify-js/test/unit/compress/expected/issue14.js +1 -0
  1263. data/node_modules/uglify-js/test/unit/compress/expected/issue16.js +1 -0
  1264. data/node_modules/uglify-js/test/unit/compress/expected/issue17.js +1 -0
  1265. data/node_modules/uglify-js/test/unit/compress/expected/issue20.js +1 -0
  1266. data/node_modules/uglify-js/test/unit/compress/expected/issue21.js +1 -0
  1267. data/node_modules/uglify-js/test/unit/compress/expected/issue25.js +1 -0
  1268. data/node_modules/uglify-js/test/unit/compress/expected/issue27.js +1 -0
  1269. data/node_modules/uglify-js/test/unit/compress/expected/issue28.js +1 -0
  1270. data/node_modules/uglify-js/test/unit/compress/expected/issue29.js +1 -0
  1271. data/node_modules/uglify-js/test/unit/compress/expected/issue30.js +1 -0
  1272. data/node_modules/uglify-js/test/unit/compress/expected/issue34.js +1 -0
  1273. data/node_modules/uglify-js/test/unit/compress/expected/issue4.js +1 -0
  1274. data/node_modules/uglify-js/test/unit/compress/expected/issue48.js +1 -0
  1275. data/node_modules/uglify-js/test/unit/compress/expected/issue50.js +1 -0
  1276. data/node_modules/uglify-js/test/unit/compress/expected/issue53.js +1 -0
  1277. data/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js +1 -0
  1278. data/node_modules/uglify-js/test/unit/compress/expected/issue68.js +1 -0
  1279. data/node_modules/uglify-js/test/unit/compress/expected/issue69.js +1 -0
  1280. data/node_modules/uglify-js/test/unit/compress/expected/issue9.js +1 -0
  1281. data/node_modules/uglify-js/test/unit/compress/expected/mangle.js +1 -0
  1282. data/node_modules/uglify-js/test/unit/compress/expected/null_string.js +1 -0
  1283. data/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js +1 -0
  1284. data/node_modules/uglify-js/test/unit/compress/expected/var.js +1 -0
  1285. data/node_modules/uglify-js/test/unit/compress/expected/whitespace.js +1 -0
  1286. data/node_modules/uglify-js/test/unit/compress/expected/with.js +1 -0
  1287. data/node_modules/uglify-js/test/unit/compress/test/array1.js +3 -0
  1288. data/node_modules/uglify-js/test/unit/compress/test/array2.js +4 -0
  1289. data/node_modules/uglify-js/test/unit/compress/test/array3.js +4 -0
  1290. data/node_modules/uglify-js/test/unit/compress/test/array4.js +6 -0
  1291. data/node_modules/uglify-js/test/unit/compress/test/assignment.js +20 -0
  1292. data/node_modules/uglify-js/test/unit/compress/test/concatstring.js +3 -0
  1293. data/node_modules/uglify-js/test/unit/compress/test/const.js +5 -0
  1294. data/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js +4 -0
  1295. data/node_modules/uglify-js/test/unit/compress/test/forstatement.js +10 -0
  1296. data/node_modules/uglify-js/test/unit/compress/test/if.js +6 -0
  1297. data/node_modules/uglify-js/test/unit/compress/test/ifreturn.js +9 -0
  1298. data/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js +16 -0
  1299. data/node_modules/uglify-js/test/unit/compress/test/issue10.js +1 -0
  1300. data/node_modules/uglify-js/test/unit/compress/test/issue11.js +3 -0
  1301. data/node_modules/uglify-js/test/unit/compress/test/issue13.js +1 -0
  1302. data/node_modules/uglify-js/test/unit/compress/test/issue14.js +1 -0
  1303. data/node_modules/uglify-js/test/unit/compress/test/issue16.js +1 -0
  1304. data/node_modules/uglify-js/test/unit/compress/test/issue17.js +4 -0
  1305. data/node_modules/uglify-js/test/unit/compress/test/issue20.js +1 -0
  1306. data/node_modules/uglify-js/test/unit/compress/test/issue21.js +6 -0
  1307. data/node_modules/uglify-js/test/unit/compress/test/issue25.js +7 -0
  1308. data/node_modules/uglify-js/test/unit/compress/test/issue27.js +1 -0
  1309. data/node_modules/uglify-js/test/unit/compress/test/issue28.js +3 -0
  1310. data/node_modules/uglify-js/test/unit/compress/test/issue29.js +1 -0
  1311. data/node_modules/uglify-js/test/unit/compress/test/issue30.js +3 -0
  1312. data/node_modules/uglify-js/test/unit/compress/test/issue34.js +3 -0
  1313. data/node_modules/uglify-js/test/unit/compress/test/issue4.js +3 -0
  1314. data/node_modules/uglify-js/test/unit/compress/test/issue48.js +1 -0
  1315. data/node_modules/uglify-js/test/unit/compress/test/issue50.js +9 -0
  1316. data/node_modules/uglify-js/test/unit/compress/test/issue53.js +1 -0
  1317. data/node_modules/uglify-js/test/unit/compress/test/issue54.1.js +3 -0
  1318. data/node_modules/uglify-js/test/unit/compress/test/issue68.js +5 -0
  1319. data/node_modules/uglify-js/test/unit/compress/test/issue69.js +1 -0
  1320. data/node_modules/uglify-js/test/unit/compress/test/issue9.js +4 -0
  1321. data/node_modules/uglify-js/test/unit/compress/test/mangle.js +5 -0
  1322. data/node_modules/uglify-js/test/unit/compress/test/null_string.js +1 -0
  1323. data/node_modules/uglify-js/test/unit/compress/test/strict-equals.js +3 -0
  1324. data/node_modules/uglify-js/test/unit/compress/test/var.js +3 -0
  1325. data/node_modules/uglify-js/test/unit/compress/test/whitespace.js +21 -0
  1326. data/node_modules/uglify-js/test/unit/compress/test/with.js +2 -0
  1327. data/node_modules/uglify-js/test/unit/scripts.js +55 -0
  1328. data/node_modules/uglify-js/uglify-js.js +17 -0
  1329. data/node_modules/uglifycss/README.md +21 -0
  1330. data/node_modules/uglifycss/index.js +26 -0
  1331. data/node_modules/uglifycss/package.json +15 -0
  1332. data/node_modules/uglifycss/test.js +43 -0
  1333. data/node_modules/uglifycss/tests.yui.js +42 -0
  1334. data/node_modules/uglifycss/uglifycss +127 -0
  1335. data/node_modules/uglifycss/uglifycss-lib.js +461 -0
  1336. metadata +1383 -0
@@ -0,0 +1,56 @@
1
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ *
3
+ * ***** BEGIN LICENSE BLOCK *****
4
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
+ *
6
+ * The contents of this file are subject to the Mozilla Public License Version
7
+ * 1.1 (the "License"); you may not use this file except in compliance with
8
+ * the License. You may obtain a copy of the License at
9
+ * http://www.mozilla.org/MPL/
10
+ *
11
+ * Software distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
+ * for the specific language governing rights and limitations under the
14
+ * License.
15
+ *
16
+ * The Original Code is Mozilla Communicator client code, released
17
+ * March 31, 1998.
18
+ *
19
+ * The Initial Developer of the Original Code is
20
+ * Netscape Communications Corporation.
21
+ * Portions created by the Initial Developer are Copyright (C) 1998
22
+ * the Initial Developer. All Rights Reserved.
23
+ *
24
+ * Contributor(s):
25
+ *
26
+ * Alternatively, the contents of this file may be used under the terms of
27
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
28
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29
+ * in which case the provisions of the GPL or the LGPL are applicable instead
30
+ * of those above. If you wish to allow use of your version of this file only
31
+ * under the terms of either the GPL or the LGPL, and not to allow others to
32
+ * use your version of this file under the terms of the MPL, indicate your
33
+ * decision by deleting the provisions above and replace them with the notice
34
+ * and other provisions required by the GPL or the LGPL. If you do not delete
35
+ * the provisions above, a recipient may use your version of this file under
36
+ * the terms of any one of the MPL, the GPL or the LGPL.
37
+ *
38
+ * ***** END LICENSE BLOCK ***** */
39
+
40
+ #ifndef _jsfile_h__
41
+ #define _jsfile_h__
42
+
43
+ #if JS_HAS_FILE_OBJECT
44
+
45
+ #include "jsobj.h"
46
+
47
+ extern JS_PUBLIC_API(JSObject*)
48
+ js_InitFileClass(JSContext *cx, JSObject* obj);
49
+
50
+ extern JS_PUBLIC_API(JSObject*)
51
+ js_NewFileObject(JSContext *cx, char *bytes);
52
+
53
+ extern JSClass js_FileClass;
54
+
55
+ #endif /* JS_HAS_FILE_OBJECT */
56
+ #endif /* _jsfile_h__ */
@@ -0,0 +1,90 @@
1
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ *
3
+ * ***** BEGIN LICENSE BLOCK *****
4
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
+ *
6
+ * The contents of this file are subject to the Mozilla Public License Version
7
+ * 1.1 (the "License"); you may not use this file except in compliance with
8
+ * the License. You may obtain a copy of the License at
9
+ * http://www.mozilla.org/MPL/
10
+ *
11
+ * Software distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
+ * for the specific language governing rights and limitations under the
14
+ * License.
15
+ *
16
+ * The Original Code is Mozilla Communicator client code, released
17
+ * March 31, 1998.
18
+ *
19
+ * The Initial Developer of the Original Code is
20
+ * Netscape Communications Corporation.
21
+ * Portions created by the Initial Developer are Copyright (C) 1998
22
+ * the Initial Developer. All Rights Reserved.
23
+ *
24
+ * Contributor(s):
25
+ *
26
+ * Alternatively, the contents of this file may be used under the terms of
27
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
28
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29
+ * in which case the provisions of the GPL or the LGPL are applicable instead
30
+ * of those above. If you wish to allow use of your version of this file only
31
+ * under the terms of either the GPL or the LGPL, and not to allow others to
32
+ * use your version of this file under the terms of the MPL, indicate your
33
+ * decision by deleting the provisions above and replace them with the notice
34
+ * and other provisions required by the GPL or the LGPL. If you do not delete
35
+ * the provisions above, a recipient may use your version of this file under
36
+ * the terms of any one of the MPL, the GPL or the LGPL.
37
+ *
38
+ * ***** END LICENSE BLOCK ***** */
39
+
40
+ /*
41
+ Error messages for jsfile.c. See js.msg for format specification.
42
+ */
43
+
44
+ MSG_DEF(JSFILEMSG_NOT_AN_ERROR, 0, 0, JSEXN_NONE, "<Error #0 is reserved>")
45
+ MSG_DEF(JSFILEMSG_FILE_CONSTRUCTOR_UNDEFINED_ERROR, 1, 0, JSEXN_NONE, "File constructor is undefined")
46
+ MSG_DEF(JSFILEMSG_FILE_CURRENTDIR_UNDEFINED_ERROR, 2, 0, JSEXN_NONE, "File.currentDir is undefined")
47
+ MSG_DEF(JSFILEMSG_FIRST_ARGUMENT_OPEN_NOT_STRING_ERROR, 3, 1, JSEXN_NONE, "The first argument {0} to file.open must be a string")
48
+ MSG_DEF(JSFILEMSG_SECOND_ARGUMENT_OPEN_NOT_STRING_ERROR, 4, 0, JSEXN_NONE, "The second argument to file.open must be a string")
49
+ MSG_DEF(JSFILEMSG_CANNOT_COPY_FILE_OPEN_FOR_WRITING_ERROR, 5, 1, JSEXN_NONE, "Cannot copy file {0} open for writing")
50
+ MSG_DEF(JSFILEMSG_CANNOT_ACCESS_FILE_INFO_ERROR, 6, 1, JSEXN_NONE, "Cannot access file information for {0}")
51
+ MSG_DEF(JSFILEMSG_COPY_READ_ERROR, 7, 1, JSEXN_NONE, "An error occured while attempting to read a file {0} to copy")
52
+ MSG_DEF(JSFILEMSG_COPY_WRITE_ERROR, 8, 1, JSEXN_NONE, "An error occured while attempting to copy into file {0}")
53
+ MSG_DEF(JSFILEMSG_EXPECTS_ONE_ARG_ERROR, 9, 0, JSEXN_NONE, "Operation {0} expects one argument, not {1}")
54
+ MSG_DEF(JSFILEMSG_CANNOT_FLUSH_CLOSE_FILE_ERROR, 10, 1, JSEXN_NONE, "Cannot flush closed file {0}")
55
+ MSG_DEF(JSFILEMSG_CANNOT_OPEN_WRITING_ERROR, 11, 1, JSEXN_NONE, "Cannot open file {0} for writing")
56
+ MSG_DEF(JSFILEMSG_WRITEALL_EXPECTS_ONE_ARG_ERROR, 12, 0, JSEXN_NONE, "writeAll expects one argument")
57
+ MSG_DEF(JSFILEMSG_FIRST_ARGUMENT_WRITEALL_NOT_ARRAY_ERROR, 13, 0, JSEXN_NONE, "writeAll expects an array as an argument")
58
+ MSG_DEF(JSFILEMSG_UNUSED0, 14, 0, JSEXN_NONE, "Unused error message slot")
59
+ MSG_DEF(JSFILEMSG_CANNOT_OPEN_FILE_ERROR, 15, 1, JSEXN_NONE, "Cannot open file {0}")
60
+ MSG_DEF(JSFILEMSG_FIRST_ARGUMENT_CONSTRUCTOR_NOT_STRING_ERROR, 16, 1, JSEXN_NONE, "The argument to the File constructor {0} must be a string")
61
+ MSG_DEF(JSFILEMSG_BIDIRECTIONAL_PIPE_NOT_SUPPORTED, 17, 0, JSEXN_NONE, "Bidirectional pipes are not supported")
62
+ MSG_DEF(JSFILEMSG_OPEN_MODE_NOT_SUPPORTED_WITH_PIPES, 18, 2, JSEXN_NONE, "The opening mode you have chosen {0} is not supported by the pipe you are trying to open: {1}")
63
+ MSG_DEF(JSFILEMSG_OPEN_FAILED, 19, 1, JSEXN_NONE, "open on file {0} failed")
64
+ MSG_DEF(JSFILEMSG_CLOSE_FAILED, 20, 1, JSEXN_NONE, "close on file {0} failed")
65
+ MSG_DEF(JSFILEMSG_PCLOSE_FAILED, 21, 1, JSEXN_NONE, "pclose on file {0} failed")
66
+ MSG_DEF(JSFILEMSG_REMOVE_FAILED, 22, 1, JSEXN_NONE, "remove on file {0} failed")
67
+ MSG_DEF(JSFILEMSG_CANNOT_ACCESS_FILE_STATUS, 23, 1, JSEXN_NONE, "Cannot access file status for {0}")
68
+ MSG_DEF(JSFILEMSG_RENAME_FAILED, 24, 2, JSEXN_NONE, "Cannot rename {0} to {1}")
69
+ MSG_DEF(JSFILEMSG_WRITE_FAILED, 25, 1, JSEXN_NONE, "Write failed on file {0}")
70
+ MSG_DEF(JSFILEMSG_READ_FAILED, 26, 1, JSEXN_NONE, "Read failed on file {0}")
71
+ MSG_DEF(JSFILEMSG_SKIP_FAILED, 27, 1, JSEXN_NONE, "Skip failed on file {0}")
72
+ MSG_DEF(JSFILEMSG_FIRST_ARGUMENT_MUST_BE_A_FUNCTION_OR_REGEX, 28, 1, JSEXN_NONE, "The first argument to file.list must be a function or a regex")
73
+ MSG_DEF(JSFILEMSG_CANNOT_DO_LIST_ON_A_FILE, 29, 1, JSEXN_NONE, "{0} must be a directory, cannot do list")
74
+ MSG_DEF(JSFILEMSG_NATIVE_OPERATION_IS_NOT_SUPPORTED, 30, 2, JSEXN_NONE, "Native operation {0} is not supported on {1}")
75
+ MSG_DEF(JSFILEMSG_CANNOT_SET_PRIVATE_FILE, 31, 1, JSEXN_NONE, "Cannot set private data for file {0}")
76
+ MSG_DEF(JSFILEMSG_FIRST_ARGUMENT_MUST_BE_A_NUMBER, 32, 2, JSEXN_NONE, "First argument to {0} must be a number, not {1}")
77
+ MSG_DEF(JSFILEMSG_CANNOT_WRITE, 33, 1, JSEXN_NONE, "Cannot write to {0}, file mode is different")
78
+ MSG_DEF(JSFILEMSG_CANNOT_READ, 34, 1, JSEXN_NONE, "Cannot read from {0}, file mode is different")
79
+ MSG_DEF(JSFILEMSG_CANNOT_FLUSH, 35, 1, JSEXN_NONE, "Flush failed on {0}")
80
+ MSG_DEF(JSFILEMSG_OP_FAILED, 36, 1, JSEXN_NONE, "File operation {0} failed")
81
+ MSG_DEF(JSFILEMSG_FILE_MUST_BE_OPEN, 37, 1, JSEXN_NONE, "File must be open for {0}")
82
+ MSG_DEF(JSFILEMSG_FILE_MUST_BE_CLOSED, 38, 1, JSEXN_NONE, "File must be closed for {0}")
83
+ MSG_DEF(JSFILEMSG_NO_RANDOM_ACCESS, 39, 1, JSEXN_NONE, "File {0} doesn't allow random access")
84
+ MSG_DEF(JSFILEMSG_OBJECT_CREATION_FAILED, 40, 1, JSEXN_NONE, "Couldn't create {0}")
85
+ MSG_DEF(JSFILEMSG_CANNOT_OPEN_DIR, 41, 1, JSEXN_NONE, "Couldn't open directory {0}")
86
+ MSG_DEF(JSFILEMSG_CANNOT_REPORT_POSITION, 42, 1, JSEXN_NONE, "Couldn't report position for {0}")
87
+ MSG_DEF(JSFILEMSG_CANNOT_SET_POSITION, 43, 1, JSEXN_NONE, "Couldn't set position for {0}")
88
+ MSG_DEF(JSFILEMSG_INIT_FAILED, 44, 0, JSEXN_NONE, "File class initialization failed")
89
+
90
+
@@ -0,0 +1,2706 @@
1
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
+ * vim: set ts=8 sw=4 et tw=99:
3
+ *
4
+ * ***** BEGIN LICENSE BLOCK *****
5
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6
+ *
7
+ * The contents of this file are subject to the Mozilla Public License Version
8
+ * 1.1 (the "License"); you may not use this file except in compliance with
9
+ * the License. You may obtain a copy of the License at
10
+ * http://www.mozilla.org/MPL/
11
+ *
12
+ * Software distributed under the License is distributed on an "AS IS" basis,
13
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14
+ * for the specific language governing rights and limitations under the
15
+ * License.
16
+ *
17
+ * The Original Code is Mozilla Communicator client code, released
18
+ * March 31, 1998.
19
+ *
20
+ * The Initial Developer of the Original Code is
21
+ * Netscape Communications Corporation.
22
+ * Portions created by the Initial Developer are Copyright (C) 1998
23
+ * the Initial Developer. All Rights Reserved.
24
+ *
25
+ * Contributor(s):
26
+ *
27
+ * Alternatively, the contents of this file may be used under the terms of
28
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
29
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30
+ * in which case the provisions of the GPL or the LGPL are applicable instead
31
+ * of those above. If you wish to allow use of your version of this file only
32
+ * under the terms of either the GPL or the LGPL, and not to allow others to
33
+ * use your version of this file under the terms of the MPL, indicate your
34
+ * decision by deleting the provisions above and replace them with the notice
35
+ * and other provisions required by the GPL or the LGPL. If you do not delete
36
+ * the provisions above, a recipient may use your version of this file under
37
+ * the terms of any one of the MPL, the GPL or the LGPL.
38
+ *
39
+ * ***** END LICENSE BLOCK ***** */
40
+
41
+ /*
42
+ * JS function support.
43
+ */
44
+ #include "jsstddef.h"
45
+ #include <string.h>
46
+ #include "jstypes.h"
47
+ #include "jsbit.h"
48
+ #include "jsutil.h" /* Added by JSIFY */
49
+ #include "jsapi.h"
50
+ #include "jsarray.h"
51
+ #include "jsatom.h"
52
+ #include "jsbuiltins.h"
53
+ #include "jscntxt.h"
54
+ #include "jsversion.h"
55
+ #include "jsdbgapi.h"
56
+ #include "jsemit.h"
57
+ #include "jsfun.h"
58
+ #include "jsgc.h"
59
+ #include "jsinterp.h"
60
+ #include "jslock.h"
61
+ #include "jsnum.h"
62
+ #include "jsobj.h"
63
+ #include "jsopcode.h"
64
+ #include "jsparse.h"
65
+ #include "jsscan.h"
66
+ #include "jsscope.h"
67
+ #include "jsscript.h"
68
+ #include "jsstr.h"
69
+ #include "jsexn.h"
70
+ #include "jsstaticcheck.h"
71
+
72
+ #if JS_HAS_GENERATORS
73
+ # include "jsiter.h"
74
+ #endif
75
+
76
+ #if JS_HAS_XDR
77
+ # include "jsxdrapi.h"
78
+ #endif
79
+
80
+ /* Generic function/call/arguments tinyids -- also reflected bit numbers. */
81
+ enum {
82
+ CALL_ARGUMENTS = -1, /* predefined arguments local variable */
83
+ ARGS_LENGTH = -2, /* number of actual args, arity if inactive */
84
+ ARGS_CALLEE = -3, /* reference from arguments to active funobj */
85
+ FUN_ARITY = -4, /* number of formal parameters; desired argc */
86
+ FUN_NAME = -5, /* function name, "" if anonymous */
87
+ FUN_CALLER = -6 /* Function.prototype.caller, backward compat */
88
+ };
89
+
90
+ #if JSFRAME_OVERRIDE_BITS < 8
91
+ # error "not enough override bits in JSStackFrame.flags!"
92
+ #endif
93
+
94
+ #define TEST_OVERRIDE_BIT(fp, tinyid) \
95
+ ((fp)->flags & JS_BIT(JSFRAME_OVERRIDE_SHIFT - ((tinyid) + 1)))
96
+
97
+ #define SET_OVERRIDE_BIT(fp, tinyid) \
98
+ ((fp)->flags |= JS_BIT(JSFRAME_OVERRIDE_SHIFT - ((tinyid) + 1)))
99
+
100
+ JSBool
101
+ js_GetArgsValue(JSContext *cx, JSStackFrame *fp, jsval *vp)
102
+ {
103
+ JSObject *argsobj;
104
+
105
+ if (TEST_OVERRIDE_BIT(fp, CALL_ARGUMENTS)) {
106
+ JS_ASSERT(fp->callobj);
107
+ return OBJ_GET_PROPERTY(cx, fp->callobj,
108
+ ATOM_TO_JSID(cx->runtime->atomState
109
+ .argumentsAtom),
110
+ vp);
111
+ }
112
+ argsobj = js_GetArgsObject(cx, fp);
113
+ if (!argsobj)
114
+ return JS_FALSE;
115
+ *vp = OBJECT_TO_JSVAL(argsobj);
116
+ return JS_TRUE;
117
+ }
118
+
119
+ static JSBool
120
+ MarkArgDeleted(JSContext *cx, JSStackFrame *fp, uintN slot)
121
+ {
122
+ JSObject *argsobj;
123
+ jsval bmapval, bmapint;
124
+ size_t nbits, nbytes;
125
+ jsbitmap *bitmap;
126
+
127
+ argsobj = fp->argsobj;
128
+ (void) JS_GetReservedSlot(cx, argsobj, 0, &bmapval);
129
+ nbits = fp->argc;
130
+ JS_ASSERT(slot < nbits);
131
+ if (JSVAL_IS_VOID(bmapval)) {
132
+ if (nbits <= JSVAL_INT_BITS) {
133
+ bmapint = 0;
134
+ bitmap = (jsbitmap *) &bmapint;
135
+ } else {
136
+ nbytes = JS_HOWMANY(nbits, JS_BITS_PER_WORD) * sizeof(jsbitmap);
137
+ bitmap = (jsbitmap *) JS_malloc(cx, nbytes);
138
+ if (!bitmap)
139
+ return JS_FALSE;
140
+ memset(bitmap, 0, nbytes);
141
+ bmapval = PRIVATE_TO_JSVAL(bitmap);
142
+ JS_SetReservedSlot(cx, argsobj, 0, bmapval);
143
+ }
144
+ } else {
145
+ if (nbits <= JSVAL_INT_BITS) {
146
+ bmapint = JSVAL_TO_INT(bmapval);
147
+ bitmap = (jsbitmap *) &bmapint;
148
+ } else {
149
+ bitmap = (jsbitmap *) JSVAL_TO_PRIVATE(bmapval);
150
+ }
151
+ }
152
+ JS_SET_BIT(bitmap, slot);
153
+ if (bitmap == (jsbitmap *) &bmapint) {
154
+ bmapval = INT_TO_JSVAL(bmapint);
155
+ JS_SetReservedSlot(cx, argsobj, 0, bmapval);
156
+ }
157
+ return JS_TRUE;
158
+ }
159
+
160
+ /* NB: Infallible predicate, false does not mean error/exception. */
161
+ static JSBool
162
+ ArgWasDeleted(JSContext *cx, JSStackFrame *fp, uintN slot)
163
+ {
164
+ JSObject *argsobj;
165
+ jsval bmapval, bmapint;
166
+ jsbitmap *bitmap;
167
+
168
+ argsobj = fp->argsobj;
169
+ (void) JS_GetReservedSlot(cx, argsobj, 0, &bmapval);
170
+ if (JSVAL_IS_VOID(bmapval))
171
+ return JS_FALSE;
172
+ if (fp->argc <= JSVAL_INT_BITS) {
173
+ bmapint = JSVAL_TO_INT(bmapval);
174
+ bitmap = (jsbitmap *) &bmapint;
175
+ } else {
176
+ bitmap = (jsbitmap *) JSVAL_TO_PRIVATE(bmapval);
177
+ }
178
+ return JS_TEST_BIT(bitmap, slot) != 0;
179
+ }
180
+
181
+ JSBool
182
+ js_GetArgsProperty(JSContext *cx, JSStackFrame *fp, jsid id, jsval *vp)
183
+ {
184
+ jsval val;
185
+ JSObject *obj;
186
+ uintN slot;
187
+
188
+ if (TEST_OVERRIDE_BIT(fp, CALL_ARGUMENTS)) {
189
+ JS_ASSERT(fp->callobj);
190
+ if (!OBJ_GET_PROPERTY(cx, fp->callobj,
191
+ ATOM_TO_JSID(cx->runtime->atomState
192
+ .argumentsAtom),
193
+ &val)) {
194
+ return JS_FALSE;
195
+ }
196
+ if (JSVAL_IS_PRIMITIVE(val)) {
197
+ obj = js_ValueToNonNullObject(cx, val);
198
+ if (!obj)
199
+ return JS_FALSE;
200
+ } else {
201
+ obj = JSVAL_TO_OBJECT(val);
202
+ }
203
+ return OBJ_GET_PROPERTY(cx, obj, id, vp);
204
+ }
205
+
206
+ *vp = JSVAL_VOID;
207
+ if (JSID_IS_INT(id)) {
208
+ slot = (uintN) JSID_TO_INT(id);
209
+ if (slot < fp->argc) {
210
+ if (fp->argsobj && ArgWasDeleted(cx, fp, slot))
211
+ return OBJ_GET_PROPERTY(cx, fp->argsobj, id, vp);
212
+ *vp = fp->argv[slot];
213
+ } else {
214
+ /*
215
+ * Per ECMA-262 Ed. 3, 10.1.8, last bulleted item, do not share
216
+ * storage between the formal parameter and arguments[k] for all
217
+ * fp->argc <= k && k < fp->fun->nargs. For example, in
218
+ *
219
+ * function f(x) { x = 42; return arguments[0]; }
220
+ * f();
221
+ *
222
+ * the call to f should return undefined, not 42. If fp->argsobj
223
+ * is null at this point, as it would be in the example, return
224
+ * undefined in *vp.
225
+ */
226
+ if (fp->argsobj)
227
+ return OBJ_GET_PROPERTY(cx, fp->argsobj, id, vp);
228
+ }
229
+ } else {
230
+ if (id == ATOM_TO_JSID(cx->runtime->atomState.lengthAtom)) {
231
+ if (fp->argsobj && TEST_OVERRIDE_BIT(fp, ARGS_LENGTH))
232
+ return OBJ_GET_PROPERTY(cx, fp->argsobj, id, vp);
233
+ *vp = INT_TO_JSVAL((jsint) fp->argc);
234
+ }
235
+ }
236
+ return JS_TRUE;
237
+ }
238
+
239
+ JSObject *
240
+ js_GetArgsObject(JSContext *cx, JSStackFrame *fp)
241
+ {
242
+ JSObject *argsobj, *global, *parent;
243
+
244
+ /*
245
+ * We must be in a function activation; the function must be lightweight
246
+ * or else fp must have a variable object.
247
+ */
248
+ JS_ASSERT(fp->fun && (!(fp->fun->flags & JSFUN_HEAVYWEIGHT) || fp->varobj));
249
+
250
+ /* Skip eval and debugger frames. */
251
+ while (fp->flags & JSFRAME_SPECIAL)
252
+ fp = fp->down;
253
+
254
+ /* Create an arguments object for fp only if it lacks one. */
255
+ argsobj = fp->argsobj;
256
+ if (argsobj)
257
+ return argsobj;
258
+
259
+ /* Link the new object to fp so it can get actual argument values. */
260
+ argsobj = js_NewObject(cx, &js_ArgumentsClass, NULL, NULL, 0);
261
+ if (!argsobj || !JS_SetPrivate(cx, argsobj, fp)) {
262
+ cx->weakRoots.newborn[GCX_OBJECT] = NULL;
263
+ return NULL;
264
+ }
265
+
266
+ /*
267
+ * Give arguments an intrinsic scope chain link to fp's global object.
268
+ * Since the arguments object lacks a prototype because js_ArgumentsClass
269
+ * is not initialized, js_NewObject won't assign a default parent to it.
270
+ *
271
+ * Therefore if arguments is used as the head of an eval scope chain (via
272
+ * a direct or indirect call to eval(program, arguments)), any reference
273
+ * to a standard class object in the program will fail to resolve due to
274
+ * js_GetClassPrototype not being able to find a global object containing
275
+ * the standard prototype by starting from arguments and following parent.
276
+ */
277
+ global = fp->scopeChain;
278
+ while ((parent = OBJ_GET_PARENT(cx, global)) != NULL)
279
+ global = parent;
280
+ STOBJ_SET_PARENT(argsobj, global);
281
+ fp->argsobj = argsobj;
282
+ return argsobj;
283
+ }
284
+
285
+ static JSBool
286
+ args_enumerate(JSContext *cx, JSObject *obj);
287
+
288
+ JS_FRIEND_API(JSBool)
289
+ js_PutArgsObject(JSContext *cx, JSStackFrame *fp)
290
+ {
291
+ JSObject *argsobj;
292
+ jsval bmapval, rval;
293
+ JSBool ok;
294
+ JSRuntime *rt;
295
+
296
+ /*
297
+ * Reuse args_enumerate here to reflect fp's actual arguments as indexed
298
+ * elements of argsobj. Do this first, before clearing and freeing the
299
+ * deleted argument slot bitmap, because args_enumerate depends on that.
300
+ */
301
+ argsobj = fp->argsobj;
302
+ ok = args_enumerate(cx, argsobj);
303
+
304
+ /*
305
+ * Now clear the deleted argument number bitmap slot and free the bitmap,
306
+ * if one was actually created due to 'delete arguments[0]' or similar.
307
+ */
308
+ (void) JS_GetReservedSlot(cx, argsobj, 0, &bmapval);
309
+ if (!JSVAL_IS_VOID(bmapval)) {
310
+ JS_SetReservedSlot(cx, argsobj, 0, JSVAL_VOID);
311
+ if (fp->argc > JSVAL_INT_BITS)
312
+ JS_free(cx, JSVAL_TO_PRIVATE(bmapval));
313
+ }
314
+
315
+ /*
316
+ * Now get the prototype properties so we snapshot fp->fun and fp->argc
317
+ * before fp goes away.
318
+ */
319
+ rt = cx->runtime;
320
+ ok &= js_GetProperty(cx, argsobj, ATOM_TO_JSID(rt->atomState.calleeAtom),
321
+ &rval);
322
+ ok &= js_SetProperty(cx, argsobj, ATOM_TO_JSID(rt->atomState.calleeAtom),
323
+ &rval);
324
+ ok &= js_GetProperty(cx, argsobj, ATOM_TO_JSID(rt->atomState.lengthAtom),
325
+ &rval);
326
+ ok &= js_SetProperty(cx, argsobj, ATOM_TO_JSID(rt->atomState.lengthAtom),
327
+ &rval);
328
+
329
+ /*
330
+ * Clear the private pointer to fp, which is about to go away (js_Invoke).
331
+ * Do this last because the args_enumerate and js_GetProperty calls above
332
+ * need to follow the private slot to find fp.
333
+ */
334
+ ok &= JS_SetPrivate(cx, argsobj, NULL);
335
+ fp->argsobj = NULL;
336
+ return ok;
337
+ }
338
+
339
+ static JSBool
340
+ args_delProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
341
+ {
342
+ jsint slot;
343
+ JSStackFrame *fp;
344
+
345
+ if (!JSVAL_IS_INT(id))
346
+ return JS_TRUE;
347
+ fp = (JSStackFrame *)
348
+ JS_GetInstancePrivate(cx, obj, &js_ArgumentsClass, NULL);
349
+ if (!fp)
350
+ return JS_TRUE;
351
+ JS_ASSERT(fp->argsobj);
352
+
353
+ slot = JSVAL_TO_INT(id);
354
+ switch (slot) {
355
+ case ARGS_CALLEE:
356
+ case ARGS_LENGTH:
357
+ SET_OVERRIDE_BIT(fp, slot);
358
+ break;
359
+
360
+ default:
361
+ if ((uintN)slot < fp->argc && !MarkArgDeleted(cx, fp, slot))
362
+ return JS_FALSE;
363
+ break;
364
+ }
365
+ return JS_TRUE;
366
+ }
367
+
368
+ static JSBool
369
+ args_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
370
+ {
371
+ jsint slot;
372
+ JSStackFrame *fp;
373
+
374
+ if (!JSVAL_IS_INT(id))
375
+ return JS_TRUE;
376
+ fp = (JSStackFrame *)
377
+ JS_GetInstancePrivate(cx, obj, &js_ArgumentsClass, NULL);
378
+ if (!fp)
379
+ return JS_TRUE;
380
+ JS_ASSERT(fp->argsobj);
381
+
382
+ slot = JSVAL_TO_INT(id);
383
+ switch (slot) {
384
+ case ARGS_CALLEE:
385
+ if (!TEST_OVERRIDE_BIT(fp, slot))
386
+ *vp = OBJECT_TO_JSVAL(fp->callee);
387
+ break;
388
+
389
+ case ARGS_LENGTH:
390
+ if (!TEST_OVERRIDE_BIT(fp, slot))
391
+ *vp = INT_TO_JSVAL((jsint)fp->argc);
392
+ break;
393
+
394
+ default:
395
+ if ((uintN)slot < fp->argc && !ArgWasDeleted(cx, fp, slot))
396
+ *vp = fp->argv[slot];
397
+ break;
398
+ }
399
+ return JS_TRUE;
400
+ }
401
+
402
+ static JSBool
403
+ args_setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
404
+ {
405
+ JSStackFrame *fp;
406
+ jsint slot;
407
+
408
+ if (!JSVAL_IS_INT(id))
409
+ return JS_TRUE;
410
+ fp = (JSStackFrame *)
411
+ JS_GetInstancePrivate(cx, obj, &js_ArgumentsClass, NULL);
412
+ if (!fp)
413
+ return JS_TRUE;
414
+ JS_ASSERT(fp->argsobj);
415
+
416
+ slot = JSVAL_TO_INT(id);
417
+ switch (slot) {
418
+ case ARGS_CALLEE:
419
+ case ARGS_LENGTH:
420
+ SET_OVERRIDE_BIT(fp, slot);
421
+ break;
422
+
423
+ default:
424
+ if (FUN_INTERPRETED(fp->fun) &&
425
+ (uintN)slot < fp->argc &&
426
+ !ArgWasDeleted(cx, fp, slot)) {
427
+ fp->argv[slot] = *vp;
428
+ }
429
+ break;
430
+ }
431
+ return JS_TRUE;
432
+ }
433
+
434
+ static JSBool
435
+ args_resolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,
436
+ JSObject **objp)
437
+ {
438
+ JSStackFrame *fp;
439
+ uintN slot;
440
+ JSString *str;
441
+ JSAtom *atom;
442
+ intN tinyid;
443
+ jsval value;
444
+
445
+ *objp = NULL;
446
+ fp = (JSStackFrame *)
447
+ JS_GetInstancePrivate(cx, obj, &js_ArgumentsClass, NULL);
448
+ if (!fp)
449
+ return JS_TRUE;
450
+ JS_ASSERT(fp->argsobj);
451
+
452
+ if (JSVAL_IS_INT(id)) {
453
+ slot = JSVAL_TO_INT(id);
454
+ if (slot < fp->argc && !ArgWasDeleted(cx, fp, slot)) {
455
+ /* XXX ECMA specs DontEnum, contrary to other array-like objects */
456
+ if (!js_DefineProperty(cx, obj, INT_JSVAL_TO_JSID(id),
457
+ fp->argv[slot],
458
+ args_getProperty, args_setProperty,
459
+ 0, NULL)) {
460
+ return JS_FALSE;
461
+ }
462
+ *objp = obj;
463
+ }
464
+ } else {
465
+ str = JSVAL_TO_STRING(id);
466
+ atom = cx->runtime->atomState.lengthAtom;
467
+ if (str == ATOM_TO_STRING(atom)) {
468
+ tinyid = ARGS_LENGTH;
469
+ value = INT_TO_JSVAL(fp->argc);
470
+ } else {
471
+ atom = cx->runtime->atomState.calleeAtom;
472
+ if (str == ATOM_TO_STRING(atom)) {
473
+ tinyid = ARGS_CALLEE;
474
+ value = OBJECT_TO_JSVAL(fp->callee);
475
+ } else {
476
+ atom = NULL;
477
+
478
+ /* Quell GCC overwarnings. */
479
+ tinyid = 0;
480
+ value = JSVAL_NULL;
481
+ }
482
+ }
483
+
484
+ if (atom && !TEST_OVERRIDE_BIT(fp, tinyid)) {
485
+ if (!js_DefineNativeProperty(cx, obj, ATOM_TO_JSID(atom), value,
486
+ args_getProperty, args_setProperty, 0,
487
+ SPROP_HAS_SHORTID, tinyid, NULL)) {
488
+ return JS_FALSE;
489
+ }
490
+ *objp = obj;
491
+ }
492
+ }
493
+
494
+ return JS_TRUE;
495
+ }
496
+
497
+ static JSBool
498
+ args_enumerate(JSContext *cx, JSObject *obj)
499
+ {
500
+ JSStackFrame *fp;
501
+ JSObject *pobj;
502
+ JSProperty *prop;
503
+ uintN slot, argc;
504
+
505
+ fp = (JSStackFrame *)
506
+ JS_GetInstancePrivate(cx, obj, &js_ArgumentsClass, NULL);
507
+ if (!fp)
508
+ return JS_TRUE;
509
+ JS_ASSERT(fp->argsobj);
510
+
511
+ /*
512
+ * Trigger reflection with value snapshot in args_resolve using a series
513
+ * of js_LookupProperty calls. We handle length, callee, and the indexed
514
+ * argument properties. We know that args_resolve covers all these cases
515
+ * and creates direct properties of obj, but that it may fail to resolve
516
+ * length or callee if overridden.
517
+ */
518
+ if (!js_LookupProperty(cx, obj,
519
+ ATOM_TO_JSID(cx->runtime->atomState.lengthAtom),
520
+ &pobj, &prop)) {
521
+ return JS_FALSE;
522
+ }
523
+ if (prop)
524
+ OBJ_DROP_PROPERTY(cx, pobj, prop);
525
+
526
+ if (!js_LookupProperty(cx, obj,
527
+ ATOM_TO_JSID(cx->runtime->atomState.calleeAtom),
528
+ &pobj, &prop)) {
529
+ return JS_FALSE;
530
+ }
531
+ if (prop)
532
+ OBJ_DROP_PROPERTY(cx, pobj, prop);
533
+
534
+ argc = fp->argc;
535
+ for (slot = 0; slot < argc; slot++) {
536
+ if (!js_LookupProperty(cx, obj, INT_TO_JSID((jsint)slot), &pobj, &prop))
537
+ return JS_FALSE;
538
+ if (prop)
539
+ OBJ_DROP_PROPERTY(cx, pobj, prop);
540
+ }
541
+ return JS_TRUE;
542
+ }
543
+
544
+ #if JS_HAS_GENERATORS
545
+ /*
546
+ * If a generator-iterator's arguments or call object escapes, it needs to
547
+ * mark its generator object.
548
+ */
549
+ static void
550
+ args_or_call_trace(JSTracer *trc, JSObject *obj)
551
+ {
552
+ JSStackFrame *fp;
553
+
554
+ fp = (JSStackFrame *) JS_GetPrivate(trc->context, obj);
555
+ if (fp && (fp->flags & JSFRAME_GENERATOR)) {
556
+ JS_CALL_OBJECT_TRACER(trc, FRAME_TO_GENERATOR(fp)->obj,
557
+ "FRAME_TO_GENERATOR(fp)->obj");
558
+ }
559
+ }
560
+ #else
561
+ # define args_or_call_trace NULL
562
+ #endif
563
+
564
+ /*
565
+ * The Arguments class is not initialized via JS_InitClass, and must not be,
566
+ * because its name is "Object". Per ECMA, that causes instances of it to
567
+ * delegate to the object named by Object.prototype. It also ensures that
568
+ * arguments.toString() returns "[object Object]".
569
+ *
570
+ * The JSClass functions below collaborate to lazily reflect and synchronize
571
+ * actual argument values, argument count, and callee function object stored
572
+ * in a JSStackFrame with their corresponding property values in the frame's
573
+ * arguments object.
574
+ */
575
+ JSClass js_ArgumentsClass = {
576
+ js_Object_str,
577
+ JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE | JSCLASS_HAS_RESERVED_SLOTS(1) |
578
+ JSCLASS_MARK_IS_TRACE | JSCLASS_HAS_CACHED_PROTO(JSProto_Object),
579
+ JS_PropertyStub, args_delProperty,
580
+ args_getProperty, args_setProperty,
581
+ args_enumerate, (JSResolveOp) args_resolve,
582
+ JS_ConvertStub, JS_FinalizeStub,
583
+ NULL, NULL,
584
+ NULL, NULL,
585
+ NULL, NULL,
586
+ JS_CLASS_TRACE(args_or_call_trace), NULL
587
+ };
588
+
589
+ #define JSSLOT_SCRIPTED_FUNCTION (JSSLOT_PRIVATE + 1)
590
+ #define JSSLOT_CALL_ARGUMENTS (JSSLOT_PRIVATE + 2)
591
+ #define CALL_CLASS_FIXED_RESERVED_SLOTS 2
592
+
593
+ JSObject *
594
+ js_GetCallObject(JSContext *cx, JSStackFrame *fp, JSObject *parent)
595
+ {
596
+ JSObject *callobj, *funobj;
597
+
598
+ /* Create a call object for fp only if it lacks one. */
599
+ JS_ASSERT(fp->fun);
600
+ callobj = fp->callobj;
601
+ if (callobj)
602
+ return callobj;
603
+
604
+ /* The default call parent is its function's parent (static link). */
605
+ if (!parent) {
606
+ funobj = fp->callee;
607
+ if (funobj)
608
+ parent = OBJ_GET_PARENT(cx, funobj);
609
+ }
610
+
611
+ /* Create the call object and link it to its stack frame. */
612
+ callobj = js_NewObject(cx, &js_CallClass, NULL, parent, 0);
613
+ if (!callobj)
614
+ return NULL;
615
+
616
+ JS_SetPrivate(cx, callobj, fp);
617
+ STOBJ_SET_SLOT(callobj, JSSLOT_SCRIPTED_FUNCTION,
618
+ OBJECT_TO_JSVAL(FUN_OBJECT(fp->fun)));
619
+ fp->callobj = callobj;
620
+
621
+ /* Make callobj be the scope chain and the variables object. */
622
+ JS_ASSERT(fp->scopeChain == parent);
623
+ fp->scopeChain = callobj;
624
+ fp->varobj = callobj;
625
+ return callobj;
626
+ }
627
+
628
+ JSFunction *
629
+ js_GetCallObjectFunction(JSObject *obj)
630
+ {
631
+ jsval v;
632
+
633
+ JS_ASSERT(STOBJ_GET_CLASS(obj) == &js_CallClass);
634
+ v = STOBJ_GET_SLOT(obj, JSSLOT_SCRIPTED_FUNCTION);
635
+ if (JSVAL_IS_VOID(v)) {
636
+ /* Newborn or prototype object. */
637
+ return NULL;
638
+ }
639
+ JS_ASSERT(!JSVAL_IS_PRIMITIVE(v));
640
+ return (JSFunction *) JSVAL_TO_OBJECT(v);
641
+ }
642
+
643
+ JS_FRIEND_API(JSBool)
644
+ js_PutCallObject(JSContext *cx, JSStackFrame *fp)
645
+ {
646
+ JSObject *callobj;
647
+ JSBool ok;
648
+ JSFunction *fun;
649
+ uintN n;
650
+ JSScope *scope;
651
+
652
+ /*
653
+ * Since for a call object all fixed slots happen to be taken, we can copy
654
+ * arguments and variables straight into JSObject.dslots.
655
+ */
656
+ JS_STATIC_ASSERT(JS_INITIAL_NSLOTS - JSSLOT_PRIVATE ==
657
+ 1 + CALL_CLASS_FIXED_RESERVED_SLOTS);
658
+
659
+ callobj = fp->callobj;
660
+ if (!callobj)
661
+ return JS_TRUE;
662
+
663
+ /*
664
+ * Get the arguments object to snapshot fp's actual argument values.
665
+ */
666
+ ok = JS_TRUE;
667
+ if (fp->argsobj) {
668
+ if (!TEST_OVERRIDE_BIT(fp, CALL_ARGUMENTS)) {
669
+ STOBJ_SET_SLOT(callobj, JSSLOT_CALL_ARGUMENTS,
670
+ OBJECT_TO_JSVAL(fp->argsobj));
671
+ }
672
+ ok &= js_PutArgsObject(cx, fp);
673
+ }
674
+
675
+ fun = fp->fun;
676
+ JS_ASSERT(fun == js_GetCallObjectFunction(callobj));
677
+ n = JS_GET_LOCAL_NAME_COUNT(fun);
678
+ if (n != 0) {
679
+ JS_LOCK_OBJ(cx, callobj);
680
+ n += JS_INITIAL_NSLOTS;
681
+ if (n > STOBJ_NSLOTS(callobj))
682
+ ok &= js_ReallocSlots(cx, callobj, n, JS_TRUE);
683
+ scope = OBJ_SCOPE(callobj);
684
+ if (ok) {
685
+ memcpy(callobj->dslots, fp->argv, fun->nargs * sizeof(jsval));
686
+ memcpy(callobj->dslots + fun->nargs, fp->slots,
687
+ fun->u.i.nvars * sizeof(jsval));
688
+ if (scope->object == callobj && n > scope->map.freeslot)
689
+ scope->map.freeslot = n;
690
+ }
691
+ JS_UNLOCK_SCOPE(cx, scope);
692
+ }
693
+
694
+ /*
695
+ * Clear the private pointer to fp, which is about to go away (js_Invoke).
696
+ * Do this last because js_GetProperty calls above need to follow the
697
+ * private slot to find fp.
698
+ */
699
+ JS_SetPrivate(cx, callobj, NULL);
700
+ fp->callobj = NULL;
701
+ return ok;
702
+ }
703
+
704
+ static JSBool
705
+ call_enumerate(JSContext *cx, JSObject *obj)
706
+ {
707
+ JSFunction *fun;
708
+ uintN n, i;
709
+ void *mark;
710
+ jsuword *names;
711
+ JSBool ok;
712
+ JSAtom *name;
713
+ JSObject *pobj;
714
+ JSProperty *prop;
715
+
716
+ fun = js_GetCallObjectFunction(obj);
717
+ n = JS_GET_LOCAL_NAME_COUNT(fun);
718
+ if (n == 0)
719
+ return JS_TRUE;
720
+
721
+ mark = JS_ARENA_MARK(&cx->tempPool);
722
+
723
+ MUST_FLOW_THROUGH("out");
724
+ names = js_GetLocalNameArray(cx, fun, &cx->tempPool);
725
+ if (!names) {
726
+ ok = JS_FALSE;
727
+ goto out;
728
+ }
729
+
730
+ for (i = 0; i != n; ++i) {
731
+ name = JS_LOCAL_NAME_TO_ATOM(names[i]);
732
+ if (!name)
733
+ continue;
734
+
735
+ /*
736
+ * Trigger reflection by looking up the name of the argument or
737
+ * variable.
738
+ */
739
+ ok = js_LookupProperty(cx, obj, ATOM_TO_JSID(name), &pobj, &prop);
740
+ if (!ok)
741
+ goto out;
742
+
743
+ /*
744
+ * At this point the call object always has a property corresponding
745
+ * to the local name because call_resolve creates the property using
746
+ * JSPROP_PERMANENT.
747
+ */
748
+ JS_ASSERT(prop && pobj == obj);
749
+ OBJ_DROP_PROPERTY(cx, pobj, prop);
750
+ }
751
+ ok = JS_TRUE;
752
+
753
+ out:
754
+ JS_ARENA_RELEASE(&cx->tempPool, mark);
755
+ return ok;
756
+ }
757
+
758
+ typedef enum JSCallPropertyKind {
759
+ JSCPK_ARGUMENTS,
760
+ JSCPK_ARG,
761
+ JSCPK_VAR
762
+ } JSCallPropertyKind;
763
+
764
+ static JSBool
765
+ CallPropertyOp(JSContext *cx, JSObject *obj, jsid id, jsval *vp,
766
+ JSCallPropertyKind kind, JSBool setter)
767
+ {
768
+ JSFunction *fun;
769
+ JSStackFrame *fp;
770
+ uintN i;
771
+ jsval *array;
772
+
773
+ if (STOBJ_GET_CLASS(obj) != &js_CallClass)
774
+ return JS_TRUE;
775
+
776
+ fun = js_GetCallObjectFunction(obj);
777
+ fp = (JSStackFrame *) JS_GetPrivate(cx, obj);
778
+
779
+ if (kind == JSCPK_ARGUMENTS) {
780
+ if (setter) {
781
+ if (fp)
782
+ SET_OVERRIDE_BIT(fp, CALL_ARGUMENTS);
783
+ STOBJ_SET_SLOT(obj, JSSLOT_CALL_ARGUMENTS, *vp);
784
+ } else {
785
+ if (fp && !TEST_OVERRIDE_BIT(fp, CALL_ARGUMENTS)) {
786
+ JSObject *argsobj;
787
+
788
+ argsobj = js_GetArgsObject(cx, fp);
789
+ if (!argsobj)
790
+ return JS_FALSE;
791
+ *vp = OBJECT_TO_JSVAL(argsobj);
792
+ } else {
793
+ *vp = STOBJ_GET_SLOT(obj, JSSLOT_CALL_ARGUMENTS);
794
+ }
795
+ }
796
+ return JS_TRUE;
797
+ }
798
+
799
+ JS_ASSERT((int16) JSVAL_TO_INT(id) == JSVAL_TO_INT(id));
800
+ i = (uint16) JSVAL_TO_INT(id);
801
+ JS_ASSERT_IF(kind == JSCPK_ARG, i < fun->nargs);
802
+ JS_ASSERT_IF(kind == JSCPK_VAR, i < fun->u.i.nvars);
803
+
804
+ if (!fp) {
805
+ i += CALL_CLASS_FIXED_RESERVED_SLOTS;
806
+ if (kind == JSCPK_VAR)
807
+ i += fun->nargs;
808
+ else
809
+ JS_ASSERT(kind == JSCPK_ARG);
810
+ return setter
811
+ ? JS_SetReservedSlot(cx, obj, i, *vp)
812
+ : JS_GetReservedSlot(cx, obj, i, vp);
813
+ }
814
+
815
+ if (kind == JSCPK_ARG) {
816
+ array = fp->argv;
817
+ } else {
818
+ JS_ASSERT(kind == JSCPK_VAR);
819
+ array = fp->slots;
820
+ }
821
+ if (setter)
822
+ array[i] = *vp;
823
+ else
824
+ *vp = array[i];
825
+ return JS_TRUE;
826
+ }
827
+
828
+ static JSBool
829
+ GetCallArguments(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
830
+ {
831
+ return CallPropertyOp(cx, obj, id, vp, JSCPK_ARGUMENTS, JS_FALSE);
832
+ }
833
+
834
+ static JSBool
835
+ SetCallArguments(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
836
+ {
837
+ return CallPropertyOp(cx, obj, id, vp, JSCPK_ARGUMENTS, JS_TRUE);
838
+ }
839
+
840
+ JSBool
841
+ js_GetCallArg(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
842
+ {
843
+ return CallPropertyOp(cx, obj, id, vp, JSCPK_ARG, JS_FALSE);
844
+ }
845
+
846
+ static JSBool
847
+ SetCallArg(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
848
+ {
849
+ return CallPropertyOp(cx, obj, id, vp, JSCPK_ARG, JS_TRUE);
850
+ }
851
+
852
+ JSBool
853
+ js_GetCallVar(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
854
+ {
855
+ return CallPropertyOp(cx, obj, id, vp, JSCPK_VAR, JS_FALSE);
856
+ }
857
+
858
+ static JSBool
859
+ SetCallVar(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
860
+ {
861
+ return CallPropertyOp(cx, obj, id, vp, JSCPK_VAR, JS_TRUE);
862
+ }
863
+
864
+ static JSBool
865
+ call_resolve(JSContext *cx, JSObject *obj, jsval idval, uintN flags,
866
+ JSObject **objp)
867
+ {
868
+ JSFunction *fun;
869
+ jsid id;
870
+ JSLocalKind localKind;
871
+ JSPropertyOp getter, setter;
872
+ uintN slot, attrs;
873
+
874
+ if (!JSVAL_IS_STRING(idval))
875
+ return JS_TRUE;
876
+
877
+ fun = js_GetCallObjectFunction(obj);
878
+ if (!fun)
879
+ return JS_TRUE;
880
+
881
+ if (!js_ValueToStringId(cx, idval, &id))
882
+ return JS_FALSE;
883
+
884
+ localKind = js_LookupLocal(cx, fun, JSID_TO_ATOM(id), &slot);
885
+ if (localKind != JSLOCAL_NONE) {
886
+ JS_ASSERT((uint16) slot == slot);
887
+ attrs = JSPROP_PERMANENT | JSPROP_SHARED;
888
+ if (localKind == JSLOCAL_ARG) {
889
+ JS_ASSERT(slot < fun->nargs);
890
+ getter = js_GetCallArg;
891
+ setter = SetCallArg;
892
+ } else {
893
+ JS_ASSERT(localKind == JSLOCAL_VAR || localKind == JSLOCAL_CONST);
894
+ JS_ASSERT(slot < fun->u.i.nvars);
895
+ getter = js_GetCallVar;
896
+ setter = SetCallVar;
897
+ if (localKind == JSLOCAL_CONST)
898
+ attrs |= JSPROP_READONLY;
899
+ }
900
+ if (!js_DefineNativeProperty(cx, obj, id, JSVAL_VOID, getter, setter,
901
+ attrs, SPROP_HAS_SHORTID, (int16) slot,
902
+ NULL)) {
903
+ return JS_FALSE;
904
+ }
905
+ *objp = obj;
906
+ return JS_TRUE;
907
+ }
908
+
909
+ /*
910
+ * Resolve arguments so that we never store a particular Call object's
911
+ * arguments object reference in a Call prototype's |arguments| slot.
912
+ */
913
+ if (id == ATOM_TO_JSID(cx->runtime->atomState.argumentsAtom)) {
914
+ if (!js_DefineNativeProperty(cx, obj, id, JSVAL_VOID,
915
+ GetCallArguments, SetCallArguments,
916
+ JSPROP_PERMANENT | JSPROP_SHARED,
917
+ 0, 0, NULL)) {
918
+ return JS_FALSE;
919
+ }
920
+ *objp = obj;
921
+ return JS_TRUE;
922
+ }
923
+ return JS_TRUE;
924
+ }
925
+
926
+ static JSBool
927
+ call_convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp)
928
+ {
929
+ JSStackFrame *fp;
930
+
931
+ if (type == JSTYPE_FUNCTION) {
932
+ fp = (JSStackFrame *) JS_GetPrivate(cx, obj);
933
+ if (fp) {
934
+ JS_ASSERT(fp->fun);
935
+ *vp = OBJECT_TO_JSVAL(fp->callee);
936
+ }
937
+ }
938
+ return JS_TRUE;
939
+ }
940
+
941
+ static uint32
942
+ call_reserveSlots(JSContext *cx, JSObject *obj)
943
+ {
944
+ JSFunction *fun;
945
+
946
+ fun = js_GetCallObjectFunction(obj);
947
+ return JS_GET_LOCAL_NAME_COUNT(fun);
948
+ }
949
+
950
+ JS_FRIEND_DATA(JSClass) js_CallClass = {
951
+ js_Call_str,
952
+ JSCLASS_HAS_PRIVATE |
953
+ JSCLASS_HAS_RESERVED_SLOTS(CALL_CLASS_FIXED_RESERVED_SLOTS) |
954
+ JSCLASS_NEW_RESOLVE | JSCLASS_IS_ANONYMOUS |
955
+ JSCLASS_MARK_IS_TRACE | JSCLASS_HAS_CACHED_PROTO(JSProto_Call),
956
+ JS_PropertyStub, JS_PropertyStub,
957
+ JS_PropertyStub, JS_PropertyStub,
958
+ call_enumerate, (JSResolveOp)call_resolve,
959
+ call_convert, JS_FinalizeStub,
960
+ NULL, NULL,
961
+ NULL, NULL,
962
+ NULL, NULL,
963
+ JS_CLASS_TRACE(args_or_call_trace), call_reserveSlots
964
+ };
965
+
966
+ static JSBool
967
+ fun_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
968
+ {
969
+ jsint slot;
970
+ JSFunction *fun;
971
+ JSStackFrame *fp;
972
+ JSSecurityCallbacks *callbacks;
973
+
974
+ if (!JSVAL_IS_INT(id))
975
+ return JS_TRUE;
976
+ slot = JSVAL_TO_INT(id);
977
+
978
+ /*
979
+ * Loop because getter and setter can be delegated from another class,
980
+ * but loop only for ARGS_LENGTH because we must pretend that f.length
981
+ * is in each function instance f, per ECMA-262, instead of only in the
982
+ * Function.prototype object (we use JSPROP_PERMANENT with JSPROP_SHARED
983
+ * to make it appear so).
984
+ *
985
+ * This code couples tightly to the attributes for the function_props[]
986
+ * initializers above, and to js_SetProperty and js_HasOwnProperty.
987
+ *
988
+ * It's important to allow delegating objects, even though they inherit
989
+ * this getter (fun_getProperty), to override arguments, arity, caller,
990
+ * and name. If we didn't return early for slot != ARGS_LENGTH, we would
991
+ * clobber *vp with the native property value, instead of letting script
992
+ * override that value in delegating objects.
993
+ *
994
+ * Note how that clobbering is what simulates JSPROP_READONLY for all of
995
+ * the non-standard properties when the directly addressed object (obj)
996
+ * is a function object (i.e., when this loop does not iterate).
997
+ */
998
+ while (!(fun = (JSFunction *)
999
+ JS_GetInstancePrivate(cx, obj, &js_FunctionClass, NULL))) {
1000
+ if (slot != ARGS_LENGTH)
1001
+ return JS_TRUE;
1002
+ obj = OBJ_GET_PROTO(cx, obj);
1003
+ if (!obj)
1004
+ return JS_TRUE;
1005
+ }
1006
+
1007
+ /* Find fun's top-most activation record. */
1008
+ for (fp = cx->fp; fp && (fp->fun != fun || (fp->flags & JSFRAME_SPECIAL));
1009
+ fp = fp->down) {
1010
+ continue;
1011
+ }
1012
+
1013
+ switch (slot) {
1014
+ case CALL_ARGUMENTS:
1015
+ /* Warn if strict about f.arguments or equivalent unqualified uses. */
1016
+ if (!JS_ReportErrorFlagsAndNumber(cx,
1017
+ JSREPORT_WARNING | JSREPORT_STRICT,
1018
+ js_GetErrorMessage, NULL,
1019
+ JSMSG_DEPRECATED_USAGE,
1020
+ js_arguments_str)) {
1021
+ return JS_FALSE;
1022
+ }
1023
+ if (fp) {
1024
+ if (!js_GetArgsValue(cx, fp, vp))
1025
+ return JS_FALSE;
1026
+ } else {
1027
+ *vp = JSVAL_NULL;
1028
+ }
1029
+ break;
1030
+
1031
+ case ARGS_LENGTH:
1032
+ case FUN_ARITY:
1033
+ *vp = INT_TO_JSVAL((jsint)fun->nargs);
1034
+ break;
1035
+
1036
+ case FUN_NAME:
1037
+ *vp = fun->atom
1038
+ ? ATOM_KEY(fun->atom)
1039
+ : STRING_TO_JSVAL(cx->runtime->emptyString);
1040
+ break;
1041
+
1042
+ case FUN_CALLER:
1043
+ if (fp && fp->down && fp->down->fun)
1044
+ *vp = OBJECT_TO_JSVAL(fp->down->callee);
1045
+ else
1046
+ *vp = JSVAL_NULL;
1047
+ if (!JSVAL_IS_PRIMITIVE(*vp)) {
1048
+ callbacks = JS_GetSecurityCallbacks(cx);
1049
+ if (callbacks && callbacks->checkObjectAccess) {
1050
+ id = ATOM_KEY(cx->runtime->atomState.callerAtom);
1051
+ if (!callbacks->checkObjectAccess(cx, obj, id, JSACC_READ, vp))
1052
+ return JS_FALSE;
1053
+ }
1054
+ }
1055
+ break;
1056
+
1057
+ default:
1058
+ /* XXX fun[0] and fun.arguments[0] are equivalent. */
1059
+ if (fp && fp->fun && (uintN)slot < fp->fun->nargs)
1060
+ *vp = fp->argv[slot];
1061
+ break;
1062
+ }
1063
+
1064
+ return JS_TRUE;
1065
+ }
1066
+
1067
+ /*
1068
+ * ECMA-262 specifies that length is a property of function object instances,
1069
+ * but we can avoid that space cost by delegating to a prototype property that
1070
+ * is JSPROP_PERMANENT and JSPROP_SHARED. Each fun_getProperty call computes
1071
+ * a fresh length value based on the arity of the individual function object's
1072
+ * private data.
1073
+ *
1074
+ * The extensions below other than length, i.e., the ones not in ECMA-262,
1075
+ * are neither JSPROP_READONLY nor JSPROP_SHARED, because for compatibility
1076
+ * with ECMA we must allow a delegating object to override them. Therefore to
1077
+ * avoid entraining garbage in Function.prototype slots, they must be resolved
1078
+ * in non-prototype function objects, wherefore the lazy_function_props table
1079
+ * and fun_resolve's use of it.
1080
+ */
1081
+ #define LENGTH_PROP_ATTRS (JSPROP_READONLY|JSPROP_PERMANENT|JSPROP_SHARED)
1082
+
1083
+ static JSPropertySpec function_props[] = {
1084
+ {js_length_str, ARGS_LENGTH, LENGTH_PROP_ATTRS, fun_getProperty, JS_PropertyStub},
1085
+ {0,0,0,0,0}
1086
+ };
1087
+
1088
+ typedef struct LazyFunctionProp {
1089
+ uint16 atomOffset;
1090
+ int8 tinyid;
1091
+ uint8 attrs;
1092
+ } LazyFunctionProp;
1093
+
1094
+ /* NB: no sentinel at the end -- use JS_ARRAY_LENGTH to bound loops. */
1095
+ static LazyFunctionProp lazy_function_props[] = {
1096
+ {ATOM_OFFSET(arguments), CALL_ARGUMENTS, JSPROP_PERMANENT},
1097
+ {ATOM_OFFSET(arity), FUN_ARITY, JSPROP_PERMANENT},
1098
+ {ATOM_OFFSET(caller), FUN_CALLER, JSPROP_PERMANENT},
1099
+ {ATOM_OFFSET(name), FUN_NAME, JSPROP_PERMANENT},
1100
+ };
1101
+
1102
+ static JSBool
1103
+ fun_enumerate(JSContext *cx, JSObject *obj)
1104
+ {
1105
+ jsid prototypeId;
1106
+ JSObject *pobj;
1107
+ JSProperty *prop;
1108
+
1109
+ prototypeId = ATOM_TO_JSID(cx->runtime->atomState.classPrototypeAtom);
1110
+ if (!OBJ_LOOKUP_PROPERTY(cx, obj, prototypeId, &pobj, &prop))
1111
+ return JS_FALSE;
1112
+ if (prop)
1113
+ OBJ_DROP_PROPERTY(cx, pobj, prop);
1114
+ return JS_TRUE;
1115
+ }
1116
+
1117
+ static JSBool
1118
+ fun_resolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,
1119
+ JSObject **objp)
1120
+ {
1121
+ JSFunction *fun;
1122
+ JSAtom *atom;
1123
+ uintN i;
1124
+
1125
+ if (!JSVAL_IS_STRING(id))
1126
+ return JS_TRUE;
1127
+
1128
+ fun = GET_FUNCTION_PRIVATE(cx, obj);
1129
+
1130
+ /*
1131
+ * No need to reflect fun.prototype in 'fun.prototype = ... '.
1132
+ *
1133
+ * This is not just an optimization, because we must not resolve when
1134
+ * defining hidden properties during compilation. The setup code for the
1135
+ * prototype and the lazy properties below eventually calls the property
1136
+ * hooks for the function object. That in turn calls fun_reserveSlots to
1137
+ * get the number of the reserved slots which is just the number of
1138
+ * regular expressions literals in the function. When compiling, that
1139
+ * number is not yet ready so we must make sure that fun_resolve does
1140
+ * nothing until the code for the function is generated.
1141
+ */
1142
+ if (flags & JSRESOLVE_ASSIGNING)
1143
+ return JS_TRUE;
1144
+
1145
+ /*
1146
+ * Ok, check whether id is 'prototype' and bootstrap the function object's
1147
+ * prototype property.
1148
+ */
1149
+ atom = cx->runtime->atomState.classPrototypeAtom;
1150
+ if (id == ATOM_KEY(atom)) {
1151
+ JSObject *proto;
1152
+
1153
+ /*
1154
+ * Beware of the wacky case of a user function named Object -- trying
1155
+ * to find a prototype for that will recur back here _ad perniciem_.
1156
+ */
1157
+ if (fun->atom == CLASS_ATOM(cx, Object))
1158
+ return JS_TRUE;
1159
+
1160
+ /*
1161
+ * Make the prototype object to have the same parent as the function
1162
+ * object itself.
1163
+ */
1164
+ proto = js_NewObject(cx, &js_ObjectClass, NULL, OBJ_GET_PARENT(cx, obj),
1165
+ 0);
1166
+ if (!proto)
1167
+ return JS_FALSE;
1168
+
1169
+ /*
1170
+ * ECMA (15.3.5.2) says that constructor.prototype is DontDelete for
1171
+ * user-defined functions, but DontEnum | ReadOnly | DontDelete for
1172
+ * native "system" constructors such as Object or Function. So lazily
1173
+ * set the former here in fun_resolve, but eagerly define the latter
1174
+ * in JS_InitClass, with the right attributes.
1175
+ */
1176
+ if (!js_SetClassPrototype(cx, obj, proto,
1177
+ JSPROP_ENUMERATE | JSPROP_PERMANENT)) {
1178
+ cx->weakRoots.newborn[GCX_OBJECT] = NULL;
1179
+ return JS_FALSE;
1180
+ }
1181
+ *objp = obj;
1182
+ return JS_TRUE;
1183
+ }
1184
+
1185
+ for (i = 0; i < JS_ARRAY_LENGTH(lazy_function_props); i++) {
1186
+ LazyFunctionProp *lfp = &lazy_function_props[i];
1187
+
1188
+ atom = OFFSET_TO_ATOM(cx->runtime, lfp->atomOffset);
1189
+ if (id == ATOM_KEY(atom)) {
1190
+ if (!js_DefineNativeProperty(cx, obj,
1191
+ ATOM_TO_JSID(atom), JSVAL_VOID,
1192
+ fun_getProperty, JS_PropertyStub,
1193
+ lfp->attrs, SPROP_HAS_SHORTID,
1194
+ lfp->tinyid, NULL)) {
1195
+ return JS_FALSE;
1196
+ }
1197
+ *objp = obj;
1198
+ return JS_TRUE;
1199
+ }
1200
+ }
1201
+
1202
+ return JS_TRUE;
1203
+ }
1204
+
1205
+ static JSBool
1206
+ fun_convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp)
1207
+ {
1208
+ switch (type) {
1209
+ case JSTYPE_FUNCTION:
1210
+ *vp = OBJECT_TO_JSVAL(obj);
1211
+ return JS_TRUE;
1212
+ default:
1213
+ return js_TryValueOf(cx, obj, type, vp);
1214
+ }
1215
+ }
1216
+
1217
+ #if JS_HAS_XDR
1218
+
1219
+ /* XXX store parent and proto, if defined */
1220
+ static JSBool
1221
+ fun_xdrObject(JSXDRState *xdr, JSObject **objp)
1222
+ {
1223
+ JSContext *cx;
1224
+ JSFunction *fun;
1225
+ uint32 nullAtom; /* flag to indicate if fun->atom is NULL */
1226
+ uintN nargs, nvars, n;
1227
+ uint32 localsword; /* word to xdr argument and variable counts */
1228
+ uint32 flagsword; /* originally only flags was JS_XDRUint8'd */
1229
+ JSTempValueRooter tvr;
1230
+ JSBool ok;
1231
+
1232
+ cx = xdr->cx;
1233
+ if (xdr->mode == JSXDR_ENCODE) {
1234
+ fun = GET_FUNCTION_PRIVATE(cx, *objp);
1235
+ if (!FUN_INTERPRETED(fun)) {
1236
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1237
+ JSMSG_NOT_SCRIPTED_FUNCTION,
1238
+ JS_GetFunctionName(fun));
1239
+ return JS_FALSE;
1240
+ }
1241
+ nullAtom = !fun->atom;
1242
+ nargs = fun->nargs;
1243
+ nvars = fun->u.i.nvars;
1244
+ localsword = (nargs << 16) | nvars;
1245
+ flagsword = fun->flags;
1246
+ } else {
1247
+ fun = js_NewFunction(cx, NULL, NULL, 0, JSFUN_INTERPRETED, NULL, NULL);
1248
+ if (!fun)
1249
+ return JS_FALSE;
1250
+ STOBJ_CLEAR_PARENT(FUN_OBJECT(fun));
1251
+ STOBJ_CLEAR_PROTO(FUN_OBJECT(fun));
1252
+ #ifdef __GNUC__
1253
+ nvars = nargs = 0; /* quell GCC uninitialized warning */
1254
+ #endif
1255
+ }
1256
+
1257
+ /* From here on, control flow must flow through label out. */
1258
+ JS_PUSH_TEMP_ROOT_OBJECT(cx, FUN_OBJECT(fun), &tvr);
1259
+ ok = JS_TRUE;
1260
+
1261
+ if (!JS_XDRUint32(xdr, &nullAtom))
1262
+ goto bad;
1263
+ if (!nullAtom && !js_XDRStringAtom(xdr, &fun->atom))
1264
+ goto bad;
1265
+ if (!JS_XDRUint32(xdr, &localsword) ||
1266
+ !JS_XDRUint32(xdr, &flagsword)) {
1267
+ goto bad;
1268
+ }
1269
+
1270
+ if (xdr->mode == JSXDR_DECODE) {
1271
+ nargs = localsword >> 16;
1272
+ nvars = localsword & JS_BITMASK(16);
1273
+ JS_ASSERT(flagsword | JSFUN_INTERPRETED);
1274
+ fun->flags = (uint16) flagsword;
1275
+ }
1276
+
1277
+ /* do arguments and local vars */
1278
+ n = nargs + nvars;
1279
+ if (n != 0) {
1280
+ void *mark;
1281
+ uintN i;
1282
+ uintN bitmapLength;
1283
+ uint32 *bitmap;
1284
+ jsuword *names;
1285
+ JSAtom *name;
1286
+ JSLocalKind localKind;
1287
+
1288
+ mark = JS_ARENA_MARK(&xdr->cx->tempPool);
1289
+
1290
+ /*
1291
+ * From this point the control must flow via the label release_mark.
1292
+ *
1293
+ * To xdr the names we prefix the names with a bitmap descriptor and
1294
+ * then xdr the names as strings. For argument names (indexes below
1295
+ * nargs) the corresponding bit in the bitmap is unset when the name
1296
+ * is null. Such null names are not encoded or decoded. For variable
1297
+ * names (indexes starting from nargs) bitmap's bit is set when the
1298
+ * name is declared as const, not as ordinary var.
1299
+ * */
1300
+ bitmapLength = JS_HOWMANY(n, JS_BITS_PER_UINT32);
1301
+ JS_ARENA_ALLOCATE_CAST(bitmap, uint32 *, &xdr->cx->tempPool,
1302
+ bitmapLength * sizeof *bitmap);
1303
+ if (!bitmap) {
1304
+ js_ReportOutOfScriptQuota(xdr->cx);
1305
+ ok = JS_FALSE;
1306
+ goto release_mark;
1307
+ }
1308
+ if (xdr->mode == JSXDR_ENCODE) {
1309
+ names = js_GetLocalNameArray(xdr->cx, fun, &xdr->cx->tempPool);
1310
+ if (!names) {
1311
+ ok = JS_FALSE;
1312
+ goto release_mark;
1313
+ }
1314
+ memset(bitmap, 0, bitmapLength * sizeof *bitmap);
1315
+ for (i = 0; i != n; ++i) {
1316
+ if (i < fun->nargs
1317
+ ? JS_LOCAL_NAME_TO_ATOM(names[i]) != NULL
1318
+ : JS_LOCAL_NAME_IS_CONST(names[i])) {
1319
+ bitmap[i >> JS_BITS_PER_UINT32_LOG2] |=
1320
+ JS_BIT(i & (JS_BITS_PER_UINT32 - 1));
1321
+ }
1322
+ }
1323
+ }
1324
+ #ifdef __GNUC__
1325
+ else {
1326
+ names = NULL; /* quell GCC uninitialized warning */
1327
+ }
1328
+ #endif
1329
+ for (i = 0; i != bitmapLength; ++i) {
1330
+ ok = JS_XDRUint32(xdr, &bitmap[i]);
1331
+ if (!ok)
1332
+ goto release_mark;
1333
+ }
1334
+ for (i = 0; i != n; ++i) {
1335
+ if (i < nargs &&
1336
+ !(bitmap[i >> JS_BITS_PER_UINT32_LOG2] &
1337
+ JS_BIT(i & (JS_BITS_PER_UINT32 - 1)))) {
1338
+ if (xdr->mode == JSXDR_DECODE) {
1339
+ ok = js_AddLocal(xdr->cx, fun, NULL, JSLOCAL_ARG);
1340
+ if (!ok)
1341
+ goto release_mark;
1342
+ } else {
1343
+ JS_ASSERT(!JS_LOCAL_NAME_TO_ATOM(names[i]));
1344
+ }
1345
+ continue;
1346
+ }
1347
+ if (xdr->mode == JSXDR_ENCODE)
1348
+ name = JS_LOCAL_NAME_TO_ATOM(names[i]);
1349
+ ok = js_XDRStringAtom(xdr, &name);
1350
+ if (!ok)
1351
+ goto release_mark;
1352
+ if (xdr->mode == JSXDR_DECODE) {
1353
+ localKind = (i < nargs)
1354
+ ? JSLOCAL_ARG
1355
+ : bitmap[i >> JS_BITS_PER_UINT32_LOG2] &
1356
+ JS_BIT(i & (JS_BITS_PER_UINT32 - 1))
1357
+ ? JSLOCAL_CONST
1358
+ : JSLOCAL_VAR;
1359
+ ok = js_AddLocal(xdr->cx, fun, name, localKind);
1360
+ if (!ok)
1361
+ goto release_mark;
1362
+ }
1363
+ }
1364
+ ok = JS_TRUE;
1365
+
1366
+ release_mark:
1367
+ JS_ARENA_RELEASE(&xdr->cx->tempPool, mark);
1368
+ if (!ok)
1369
+ goto out;
1370
+
1371
+ if (xdr->mode == JSXDR_DECODE)
1372
+ js_FreezeLocalNames(cx, fun);
1373
+ }
1374
+
1375
+ if (!js_XDRScript(xdr, &fun->u.i.script, NULL))
1376
+ goto bad;
1377
+
1378
+ if (xdr->mode == JSXDR_DECODE) {
1379
+ *objp = FUN_OBJECT(fun);
1380
+ #ifdef CHECK_SCRIPT_OWNER
1381
+ fun->u.i.script->owner = NULL;
1382
+ #endif
1383
+ js_CallNewScriptHook(cx, fun->u.i.script, fun);
1384
+ }
1385
+
1386
+ out:
1387
+ JS_POP_TEMP_ROOT(cx, &tvr);
1388
+ return ok;
1389
+
1390
+ bad:
1391
+ ok = JS_FALSE;
1392
+ goto out;
1393
+ }
1394
+
1395
+ #else /* !JS_HAS_XDR */
1396
+
1397
+ #define fun_xdrObject NULL
1398
+
1399
+ #endif /* !JS_HAS_XDR */
1400
+
1401
+ /*
1402
+ * [[HasInstance]] internal method for Function objects: fetch the .prototype
1403
+ * property of its 'this' parameter, and walks the prototype chain of v (only
1404
+ * if v is an object) returning true if .prototype is found.
1405
+ */
1406
+ static JSBool
1407
+ fun_hasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp)
1408
+ {
1409
+ jsval pval;
1410
+
1411
+ if (!OBJ_GET_PROPERTY(cx, obj,
1412
+ ATOM_TO_JSID(cx->runtime->atomState
1413
+ .classPrototypeAtom),
1414
+ &pval)) {
1415
+ return JS_FALSE;
1416
+ }
1417
+
1418
+ if (JSVAL_IS_PRIMITIVE(pval)) {
1419
+ /*
1420
+ * Throw a runtime error if instanceof is called on a function that
1421
+ * has a non-object as its .prototype value.
1422
+ */
1423
+ js_ReportValueError(cx, JSMSG_BAD_PROTOTYPE,
1424
+ -1, OBJECT_TO_JSVAL(obj), NULL);
1425
+ return JS_FALSE;
1426
+ }
1427
+
1428
+ return js_IsDelegate(cx, JSVAL_TO_OBJECT(pval), v, bp);
1429
+ }
1430
+
1431
+ static void
1432
+ TraceLocalNames(JSTracer *trc, JSFunction *fun);
1433
+
1434
+ static void
1435
+ DestroyLocalNames(JSContext *cx, JSFunction *fun);
1436
+
1437
+ static void
1438
+ fun_trace(JSTracer *trc, JSObject *obj)
1439
+ {
1440
+ JSFunction *fun;
1441
+
1442
+ /* A newborn function object may have a not yet initialized private slot. */
1443
+ fun = (JSFunction *) JS_GetPrivate(trc->context, obj);
1444
+ if (!fun)
1445
+ return;
1446
+
1447
+ if (FUN_OBJECT(fun) != obj) {
1448
+ /* obj is cloned function object, trace the original. */
1449
+ JS_CALL_TRACER(trc, FUN_OBJECT(fun), JSTRACE_OBJECT, "private");
1450
+ return;
1451
+ }
1452
+ if (fun->atom)
1453
+ JS_CALL_STRING_TRACER(trc, ATOM_TO_STRING(fun->atom), "atom");
1454
+ if (FUN_INTERPRETED(fun)) {
1455
+ if (fun->u.i.script)
1456
+ js_TraceScript(trc, fun->u.i.script);
1457
+ TraceLocalNames(trc, fun);
1458
+ }
1459
+ }
1460
+
1461
+ static void
1462
+ fun_finalize(JSContext *cx, JSObject *obj)
1463
+ {
1464
+ JSFunction *fun;
1465
+
1466
+ /* Ignore newborn and cloned function objects. */
1467
+ fun = (JSFunction *) JS_GetPrivate(cx, obj);
1468
+ if (!fun || FUN_OBJECT(fun) != obj)
1469
+ return;
1470
+
1471
+ /*
1472
+ * Null-check of u.i.script is required since the parser sets interpreted
1473
+ * very early.
1474
+ */
1475
+ if (FUN_INTERPRETED(fun)) {
1476
+ if (fun->u.i.script)
1477
+ js_DestroyScript(cx, fun->u.i.script);
1478
+ DestroyLocalNames(cx, fun);
1479
+ }
1480
+ }
1481
+
1482
+ static uint32
1483
+ fun_reserveSlots(JSContext *cx, JSObject *obj)
1484
+ {
1485
+ JSFunction *fun;
1486
+ uint32 nslots;
1487
+
1488
+ /*
1489
+ * We use JS_GetPrivate and not GET_FUNCTION_PRIVATE because during
1490
+ * js_InitFunctionClass invocation the function is called before the
1491
+ * private slot of the function object is set.
1492
+ */
1493
+ fun = (JSFunction *) JS_GetPrivate(cx, obj);
1494
+ nslots = 0;
1495
+ if (fun && FUN_INTERPRETED(fun) && fun->u.i.script) {
1496
+ if (fun->u.i.script->upvarsOffset != 0)
1497
+ nslots = JS_SCRIPT_UPVARS(fun->u.i.script)->length;
1498
+ if (fun->u.i.script->regexpsOffset != 0)
1499
+ nslots += JS_SCRIPT_REGEXPS(fun->u.i.script)->length;
1500
+ }
1501
+ return nslots;
1502
+ }
1503
+
1504
+ /*
1505
+ * Reserve two slots in all function objects for XPConnect. Note that this
1506
+ * does not bloat every instance, only those on which reserved slots are set,
1507
+ * and those on which ad-hoc properties are defined.
1508
+ */
1509
+ JS_FRIEND_DATA(JSClass) js_FunctionClass = {
1510
+ js_Function_str,
1511
+ JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE | JSCLASS_HAS_RESERVED_SLOTS(2) |
1512
+ JSCLASS_MARK_IS_TRACE | JSCLASS_HAS_CACHED_PROTO(JSProto_Function),
1513
+ JS_PropertyStub, JS_PropertyStub,
1514
+ JS_PropertyStub, JS_PropertyStub,
1515
+ fun_enumerate, (JSResolveOp)fun_resolve,
1516
+ fun_convert, fun_finalize,
1517
+ NULL, NULL,
1518
+ NULL, NULL,
1519
+ fun_xdrObject, fun_hasInstance,
1520
+ JS_CLASS_TRACE(fun_trace), fun_reserveSlots
1521
+ };
1522
+
1523
+ static JSBool
1524
+ fun_toStringHelper(JSContext *cx, uint32 indent, uintN argc, jsval *vp)
1525
+ {
1526
+ jsval fval;
1527
+ JSObject *obj;
1528
+ JSFunction *fun;
1529
+ JSString *str;
1530
+
1531
+ fval = JS_THIS(cx, vp);
1532
+ if (JSVAL_IS_NULL(fval))
1533
+ return JS_FALSE;
1534
+
1535
+ if (!VALUE_IS_FUNCTION(cx, fval)) {
1536
+ /*
1537
+ * If we don't have a function to start off with, try converting the
1538
+ * object to a function. If that doesn't work, complain.
1539
+ */
1540
+ if (!JSVAL_IS_PRIMITIVE(fval)) {
1541
+ obj = JSVAL_TO_OBJECT(fval);
1542
+ if (!OBJ_GET_CLASS(cx, obj)->convert(cx, obj, JSTYPE_FUNCTION,
1543
+ &fval)) {
1544
+ return JS_FALSE;
1545
+ }
1546
+ vp[1] = fval;
1547
+ }
1548
+ if (!VALUE_IS_FUNCTION(cx, fval)) {
1549
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1550
+ JSMSG_INCOMPATIBLE_PROTO,
1551
+ js_Function_str, js_toString_str,
1552
+ JS_GetTypeName(cx, JS_TypeOfValue(cx, fval)));
1553
+ return JS_FALSE;
1554
+ }
1555
+ }
1556
+
1557
+ obj = JSVAL_TO_OBJECT(fval);
1558
+ if (argc != 0) {
1559
+ indent = js_ValueToECMAUint32(cx, &vp[2]);
1560
+ if (JSVAL_IS_NULL(vp[2]))
1561
+ return JS_FALSE;
1562
+ }
1563
+
1564
+ JS_ASSERT(JS_ObjectIsFunction(cx, obj));
1565
+ fun = GET_FUNCTION_PRIVATE(cx, obj);
1566
+ if (!fun)
1567
+ return JS_TRUE;
1568
+ str = JS_DecompileFunction(cx, fun, (uintN)indent);
1569
+ if (!str)
1570
+ return JS_FALSE;
1571
+ *vp = STRING_TO_JSVAL(str);
1572
+ return JS_TRUE;
1573
+ }
1574
+
1575
+ static JSBool
1576
+ fun_toString(JSContext *cx, uintN argc, jsval *vp)
1577
+ {
1578
+ return fun_toStringHelper(cx, 0, argc, vp);
1579
+ }
1580
+
1581
+ #if JS_HAS_TOSOURCE
1582
+ static JSBool
1583
+ fun_toSource(JSContext *cx, uintN argc, jsval *vp)
1584
+ {
1585
+ return fun_toStringHelper(cx, JS_DONT_PRETTY_PRINT, argc, vp);
1586
+ }
1587
+ #endif
1588
+
1589
+ JSBool
1590
+ js_fun_call(JSContext *cx, uintN argc, jsval *vp)
1591
+ {
1592
+ JSObject *obj;
1593
+ jsval fval, *argv, *invokevp;
1594
+ JSString *str;
1595
+ void *mark;
1596
+ JSBool ok;
1597
+
1598
+ obj = JS_THIS_OBJECT(cx, vp);
1599
+ if (!obj || !OBJ_DEFAULT_VALUE(cx, obj, JSTYPE_FUNCTION, &vp[1]))
1600
+ return JS_FALSE;
1601
+ fval = vp[1];
1602
+
1603
+ if (!VALUE_IS_FUNCTION(cx, fval)) {
1604
+ str = JS_ValueToString(cx, fval);
1605
+ if (str) {
1606
+ const char *bytes = js_GetStringBytes(cx, str);
1607
+
1608
+ if (bytes) {
1609
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1610
+ JSMSG_INCOMPATIBLE_PROTO,
1611
+ js_Function_str, js_call_str,
1612
+ bytes);
1613
+ }
1614
+ }
1615
+ return JS_FALSE;
1616
+ }
1617
+
1618
+ argv = vp + 2;
1619
+ if (argc == 0) {
1620
+ /* Call fun with its global object as the 'this' param if no args. */
1621
+ obj = NULL;
1622
+ } else {
1623
+ /* Otherwise convert the first arg to 'this' and skip over it. */
1624
+ if (!JSVAL_IS_PRIMITIVE(argv[0]))
1625
+ obj = JSVAL_TO_OBJECT(argv[0]);
1626
+ else if (!js_ValueToObject(cx, argv[0], &obj))
1627
+ return JS_FALSE;
1628
+ argc--;
1629
+ argv++;
1630
+ }
1631
+
1632
+ /* Allocate stack space for fval, obj, and the args. */
1633
+ invokevp = js_AllocStack(cx, 2 + argc, &mark);
1634
+ if (!invokevp)
1635
+ return JS_FALSE;
1636
+
1637
+ /* Push fval, obj, and the args. */
1638
+ invokevp[0] = fval;
1639
+ invokevp[1] = OBJECT_TO_JSVAL(obj);
1640
+ memcpy(invokevp + 2, argv, argc * sizeof *argv);
1641
+
1642
+ ok = js_Invoke(cx, argc, invokevp, 0);
1643
+ *vp = *invokevp;
1644
+ js_FreeStack(cx, mark);
1645
+ return ok;
1646
+ }
1647
+
1648
+ JSBool
1649
+ js_fun_apply(JSContext *cx, uintN argc, jsval *vp)
1650
+ {
1651
+ JSObject *obj, *aobj;
1652
+ jsval fval, *invokevp, *sp;
1653
+ JSString *str;
1654
+ jsuint length;
1655
+ JSBool arraylike, ok;
1656
+ void *mark;
1657
+ uintN i;
1658
+
1659
+ if (argc == 0) {
1660
+ /* Will get globalObject as 'this' and no other arguments. */
1661
+ return js_fun_call(cx, argc, vp);
1662
+ }
1663
+
1664
+ obj = JS_THIS_OBJECT(cx, vp);
1665
+ if (!obj || !OBJ_DEFAULT_VALUE(cx, obj, JSTYPE_FUNCTION, &vp[1]))
1666
+ return JS_FALSE;
1667
+ fval = vp[1];
1668
+
1669
+ if (!VALUE_IS_FUNCTION(cx, fval)) {
1670
+ str = JS_ValueToString(cx, fval);
1671
+ if (str) {
1672
+ const char *bytes = js_GetStringBytes(cx, str);
1673
+
1674
+ if (bytes) {
1675
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1676
+ JSMSG_INCOMPATIBLE_PROTO,
1677
+ js_Function_str, js_apply_str,
1678
+ bytes);
1679
+ }
1680
+ }
1681
+ return JS_FALSE;
1682
+ }
1683
+
1684
+ /* Quell GCC overwarnings. */
1685
+ aobj = NULL;
1686
+ length = 0;
1687
+
1688
+ if (argc >= 2) {
1689
+ /* If the 2nd arg is null or void, call the function with 0 args. */
1690
+ if (JSVAL_IS_NULL(vp[3]) || JSVAL_IS_VOID(vp[3])) {
1691
+ argc = 0;
1692
+ } else {
1693
+ /* The second arg must be an array (or arguments object). */
1694
+ arraylike = JS_FALSE;
1695
+ if (!JSVAL_IS_PRIMITIVE(vp[3])) {
1696
+ aobj = JSVAL_TO_OBJECT(vp[3]);
1697
+ if (!js_IsArrayLike(cx, aobj, &arraylike, &length))
1698
+ return JS_FALSE;
1699
+ }
1700
+ if (!arraylike) {
1701
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1702
+ JSMSG_BAD_APPLY_ARGS, js_apply_str);
1703
+ return JS_FALSE;
1704
+ }
1705
+ }
1706
+ }
1707
+
1708
+ /* Convert the first arg to 'this' and skip over it. */
1709
+ if (!JSVAL_IS_PRIMITIVE(vp[2]))
1710
+ obj = JSVAL_TO_OBJECT(vp[2]);
1711
+ else if (!js_ValueToObject(cx, vp[2], &obj))
1712
+ return JS_FALSE;
1713
+
1714
+ /* Allocate stack space for fval, obj, and the args. */
1715
+ argc = (uintN)JS_MIN(length, ARRAY_INIT_LIMIT - 1);
1716
+ invokevp = js_AllocStack(cx, 2 + argc, &mark);
1717
+ if (!invokevp)
1718
+ return JS_FALSE;
1719
+
1720
+ /* Push fval, obj, and aobj's elements as args. */
1721
+ sp = invokevp;
1722
+ *sp++ = fval;
1723
+ *sp++ = OBJECT_TO_JSVAL(obj);
1724
+ for (i = 0; i < argc; i++) {
1725
+ ok = JS_GetElement(cx, aobj, (jsint)i, sp);
1726
+ if (!ok)
1727
+ goto out;
1728
+ sp++;
1729
+ }
1730
+
1731
+ ok = js_Invoke(cx, argc, invokevp, 0);
1732
+ *vp = *invokevp;
1733
+ out:
1734
+ js_FreeStack(cx, mark);
1735
+ return ok;
1736
+ }
1737
+
1738
+ #ifdef NARCISSUS
1739
+ static JSBool
1740
+ fun_applyConstructor(JSContext *cx, uintN argc, jsval *vp)
1741
+ {
1742
+ JSObject *aobj;
1743
+ uintN length, i;
1744
+ void *mark;
1745
+ jsval *invokevp, *sp;
1746
+ JSBool ok;
1747
+
1748
+ if (JSVAL_IS_PRIMITIVE(vp[2]) ||
1749
+ (aobj = JSVAL_TO_OBJECT(vp[2]),
1750
+ OBJ_GET_CLASS(cx, aobj) != &js_ArrayClass &&
1751
+ OBJ_GET_CLASS(cx, aobj) != &js_ArgumentsClass)) {
1752
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1753
+ JSMSG_BAD_APPLY_ARGS, "__applyConstruct__");
1754
+ return JS_FALSE;
1755
+ }
1756
+
1757
+ if (!js_GetLengthProperty(cx, aobj, &length))
1758
+ return JS_FALSE;
1759
+
1760
+ if (length >= ARRAY_INIT_LIMIT)
1761
+ length = ARRAY_INIT_LIMIT - 1;
1762
+ invokevp = js_AllocStack(cx, 2 + length, &mark);
1763
+ if (!invokevp)
1764
+ return JS_FALSE;
1765
+
1766
+ sp = invokevp;
1767
+ *sp++ = vp[1];
1768
+ *sp++ = JSVAL_NULL; /* this is filled automagically */
1769
+ for (i = 0; i < length; i++) {
1770
+ ok = JS_GetElement(cx, aobj, (jsint)i, sp);
1771
+ if (!ok)
1772
+ goto out;
1773
+ sp++;
1774
+ }
1775
+
1776
+ ok = js_InvokeConstructor(cx, length, JS_TRUE, invokevp);
1777
+ *vp = *invokevp;
1778
+ out:
1779
+ js_FreeStack(cx, mark);
1780
+ return ok;
1781
+ }
1782
+ #endif
1783
+
1784
+ static JSFunctionSpec function_methods[] = {
1785
+ #if JS_HAS_TOSOURCE
1786
+ JS_FN(js_toSource_str, fun_toSource, 0,0),
1787
+ #endif
1788
+ JS_FN(js_toString_str, fun_toString, 0,0),
1789
+ JS_FN(js_apply_str, js_fun_apply, 2,0),
1790
+ JS_FN(js_call_str, js_fun_call, 1,0),
1791
+ #ifdef NARCISSUS
1792
+ JS_FN("__applyConstructor__", fun_applyConstructor, 1,0),
1793
+ #endif
1794
+ JS_FS_END
1795
+ };
1796
+
1797
+ static JSBool
1798
+ Function(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
1799
+ {
1800
+ JSStackFrame *fp, *caller;
1801
+ JSFunction *fun;
1802
+ JSObject *parent;
1803
+ uintN i, n, lineno;
1804
+ JSAtom *atom;
1805
+ const char *filename;
1806
+ JSBool ok;
1807
+ JSString *str, *arg;
1808
+ JSTokenStream ts;
1809
+ JSPrincipals *principals;
1810
+ jschar *collected_args, *cp;
1811
+ void *mark;
1812
+ size_t arg_length, args_length, old_args_length;
1813
+ JSTokenType tt;
1814
+
1815
+ fp = cx->fp;
1816
+ if (!(fp->flags & JSFRAME_CONSTRUCTING)) {
1817
+ obj = js_NewObject(cx, &js_FunctionClass, NULL, NULL, 0);
1818
+ if (!obj)
1819
+ return JS_FALSE;
1820
+ *rval = OBJECT_TO_JSVAL(obj);
1821
+ } else {
1822
+ /*
1823
+ * The constructor is called before the private slot is initialized so
1824
+ * we must use JS_GetPrivate, not GET_FUNCTION_PRIVATE here.
1825
+ */
1826
+ if (JS_GetPrivate(cx, obj))
1827
+ return JS_TRUE;
1828
+ }
1829
+
1830
+ /*
1831
+ * NB: (new Function) is not lexically closed by its caller, it's just an
1832
+ * anonymous function in the top-level scope that its constructor inhabits.
1833
+ * Thus 'var x = 42; f = new Function("return x"); print(f())' prints 42,
1834
+ * and so would a call to f from another top-level's script or function.
1835
+ *
1836
+ * In older versions, before call objects, a new Function was adopted by
1837
+ * its running context's globalObject, which might be different from the
1838
+ * top-level reachable from scopeChain (in HTML frames, e.g.).
1839
+ */
1840
+ parent = OBJ_GET_PARENT(cx, JSVAL_TO_OBJECT(argv[-2]));
1841
+
1842
+ fun = js_NewFunction(cx, obj, NULL, 0, JSFUN_LAMBDA | JSFUN_INTERPRETED,
1843
+ parent, cx->runtime->atomState.anonymousAtom);
1844
+
1845
+ if (!fun)
1846
+ return JS_FALSE;
1847
+
1848
+ /*
1849
+ * Function is static and not called directly by other functions in this
1850
+ * file, therefore it is callable only as a native function by js_Invoke.
1851
+ * Find the scripted caller, possibly skipping other native frames such as
1852
+ * are built for Function.prototype.call or .apply activations that invoke
1853
+ * Function indirectly from a script.
1854
+ */
1855
+ JS_ASSERT(!fp->script && fp->fun && fp->fun->u.n.native == Function);
1856
+ caller = JS_GetScriptedCaller(cx, fp);
1857
+ if (caller) {
1858
+ principals = JS_EvalFramePrincipals(cx, fp, caller);
1859
+ filename = js_ComputeFilename(cx, caller, principals, &lineno);
1860
+ } else {
1861
+ filename = NULL;
1862
+ lineno = 0;
1863
+ principals = NULL;
1864
+ }
1865
+
1866
+ /* Belt-and-braces: check that the caller has access to parent. */
1867
+ if (!js_CheckPrincipalsAccess(cx, parent, principals,
1868
+ CLASS_ATOM(cx, Function))) {
1869
+ return JS_FALSE;
1870
+ }
1871
+
1872
+ n = argc ? argc - 1 : 0;
1873
+ if (n > 0) {
1874
+ enum { OK, BAD, BAD_FORMAL } state;
1875
+
1876
+ /*
1877
+ * Collect the function-argument arguments into one string, separated
1878
+ * by commas, then make a tokenstream from that string, and scan it to
1879
+ * get the arguments. We need to throw the full scanner at the
1880
+ * problem, because the argument string can legitimately contain
1881
+ * comments and linefeeds. XXX It might be better to concatenate
1882
+ * everything up into a function definition and pass it to the
1883
+ * compiler, but doing it this way is less of a delta from the old
1884
+ * code. See ECMA 15.3.2.1.
1885
+ */
1886
+ state = BAD_FORMAL;
1887
+ args_length = 0;
1888
+ for (i = 0; i < n; i++) {
1889
+ /* Collect the lengths for all the function-argument arguments. */
1890
+ arg = js_ValueToString(cx, argv[i]);
1891
+ if (!arg)
1892
+ return JS_FALSE;
1893
+ argv[i] = STRING_TO_JSVAL(arg);
1894
+
1895
+ /*
1896
+ * Check for overflow. The < test works because the maximum
1897
+ * JSString length fits in 2 fewer bits than size_t has.
1898
+ */
1899
+ old_args_length = args_length;
1900
+ args_length = old_args_length + JSSTRING_LENGTH(arg);
1901
+ if (args_length < old_args_length) {
1902
+ js_ReportAllocationOverflow(cx);
1903
+ return JS_FALSE;
1904
+ }
1905
+ }
1906
+
1907
+ /* Add 1 for each joining comma and check for overflow (two ways). */
1908
+ old_args_length = args_length;
1909
+ args_length = old_args_length + n - 1;
1910
+ if (args_length < old_args_length ||
1911
+ args_length >= ~(size_t)0 / sizeof(jschar)) {
1912
+ js_ReportAllocationOverflow(cx);
1913
+ return JS_FALSE;
1914
+ }
1915
+
1916
+ /*
1917
+ * Allocate a string to hold the concatenated arguments, including room
1918
+ * for a terminating 0. Mark cx->tempPool for later release, to free
1919
+ * collected_args and its tokenstream in one swoop.
1920
+ */
1921
+ mark = JS_ARENA_MARK(&cx->tempPool);
1922
+ JS_ARENA_ALLOCATE_CAST(cp, jschar *, &cx->tempPool,
1923
+ (args_length+1) * sizeof(jschar));
1924
+ if (!cp) {
1925
+ js_ReportOutOfScriptQuota(cx);
1926
+ return JS_FALSE;
1927
+ }
1928
+ collected_args = cp;
1929
+
1930
+ /*
1931
+ * Concatenate the arguments into the new string, separated by commas.
1932
+ */
1933
+ for (i = 0; i < n; i++) {
1934
+ arg = JSVAL_TO_STRING(argv[i]);
1935
+ arg_length = JSSTRING_LENGTH(arg);
1936
+ (void) js_strncpy(cp, JSSTRING_CHARS(arg), arg_length);
1937
+ cp += arg_length;
1938
+
1939
+ /* Add separating comma or terminating 0. */
1940
+ *cp++ = (i + 1 < n) ? ',' : 0;
1941
+ }
1942
+
1943
+ /* Initialize a tokenstream that reads from the given string. */
1944
+ if (!js_InitTokenStream(cx, &ts, collected_args, args_length,
1945
+ NULL, filename, lineno)) {
1946
+ JS_ARENA_RELEASE(&cx->tempPool, mark);
1947
+ return JS_FALSE;
1948
+ }
1949
+
1950
+ /* The argument string may be empty or contain no tokens. */
1951
+ tt = js_GetToken(cx, &ts);
1952
+ if (tt != TOK_EOF) {
1953
+ for (;;) {
1954
+ /*
1955
+ * Check that it's a name. This also implicitly guards against
1956
+ * TOK_ERROR, which was already reported.
1957
+ */
1958
+ if (tt != TOK_NAME)
1959
+ goto after_args;
1960
+
1961
+ /*
1962
+ * Get the atom corresponding to the name from the token
1963
+ * stream; we're assured at this point that it's a valid
1964
+ * identifier.
1965
+ */
1966
+ atom = CURRENT_TOKEN(&ts).t_atom;
1967
+
1968
+ /* Check for a duplicate parameter name. */
1969
+ if (js_LookupLocal(cx, fun, atom, NULL) != JSLOCAL_NONE) {
1970
+ const char *name;
1971
+
1972
+ name = js_AtomToPrintableString(cx, atom);
1973
+ ok = name &&
1974
+ js_ReportCompileErrorNumber(cx, &ts, NULL,
1975
+ JSREPORT_WARNING |
1976
+ JSREPORT_STRICT,
1977
+ JSMSG_DUPLICATE_FORMAL,
1978
+ name);
1979
+ if (!ok)
1980
+ goto after_args;
1981
+ }
1982
+ if (!js_AddLocal(cx, fun, atom, JSLOCAL_ARG))
1983
+ goto after_args;
1984
+
1985
+ /*
1986
+ * Get the next token. Stop on end of stream. Otherwise
1987
+ * insist on a comma, get another name, and iterate.
1988
+ */
1989
+ tt = js_GetToken(cx, &ts);
1990
+ if (tt == TOK_EOF)
1991
+ break;
1992
+ if (tt != TOK_COMMA)
1993
+ goto after_args;
1994
+ tt = js_GetToken(cx, &ts);
1995
+ }
1996
+ }
1997
+
1998
+ state = OK;
1999
+ after_args:
2000
+ if (state == BAD_FORMAL && !(ts.flags & TSF_ERROR)) {
2001
+ /*
2002
+ * Report "malformed formal parameter" iff no illegal char or
2003
+ * similar scanner error was already reported.
2004
+ */
2005
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
2006
+ JSMSG_BAD_FORMAL);
2007
+ }
2008
+ js_CloseTokenStream(cx, &ts);
2009
+ JS_ARENA_RELEASE(&cx->tempPool, mark);
2010
+ if (state != OK)
2011
+ return JS_FALSE;
2012
+ }
2013
+
2014
+ if (argc) {
2015
+ str = js_ValueToString(cx, argv[argc-1]);
2016
+ if (!str)
2017
+ return JS_FALSE;
2018
+ argv[argc-1] = STRING_TO_JSVAL(str);
2019
+ } else {
2020
+ str = cx->runtime->emptyString;
2021
+ }
2022
+
2023
+ return js_CompileFunctionBody(cx, fun, principals,
2024
+ JSSTRING_CHARS(str), JSSTRING_LENGTH(str),
2025
+ filename, lineno);
2026
+ }
2027
+
2028
+ JSObject *
2029
+ js_InitFunctionClass(JSContext *cx, JSObject *obj)
2030
+ {
2031
+ JSObject *proto;
2032
+ JSFunction *fun;
2033
+
2034
+ proto = JS_InitClass(cx, obj, NULL, &js_FunctionClass, Function, 1,
2035
+ function_props, function_methods, NULL, NULL);
2036
+ if (!proto)
2037
+ return NULL;
2038
+ fun = js_NewFunction(cx, proto, NULL, 0, JSFUN_INTERPRETED, obj, NULL);
2039
+ if (!fun)
2040
+ goto bad;
2041
+ fun->u.i.script = js_NewScript(cx, 1, 1, 0, 0, 0, 0, 0);
2042
+ if (!fun->u.i.script)
2043
+ goto bad;
2044
+ fun->u.i.script->code[0] = JSOP_STOP;
2045
+ *SCRIPT_NOTES(fun->u.i.script) = SRC_NULL;
2046
+ #ifdef CHECK_SCRIPT_OWNER
2047
+ fun->u.i.script->owner = NULL;
2048
+ #endif
2049
+ return proto;
2050
+
2051
+ bad:
2052
+ cx->weakRoots.newborn[GCX_OBJECT] = NULL;
2053
+ return NULL;
2054
+ }
2055
+
2056
+ JSObject *
2057
+ js_InitCallClass(JSContext *cx, JSObject *obj)
2058
+ {
2059
+ JSObject *proto;
2060
+
2061
+ proto = JS_InitClass(cx, obj, NULL, &js_CallClass, NULL, 0,
2062
+ NULL, NULL, NULL, NULL);
2063
+ if (!proto)
2064
+ return NULL;
2065
+
2066
+ /*
2067
+ * Null Call.prototype's proto slot so that Object.prototype.* does not
2068
+ * pollute the scope of heavyweight functions.
2069
+ */
2070
+ OBJ_CLEAR_PROTO(cx, proto);
2071
+ return proto;
2072
+ }
2073
+
2074
+ JSFunction *
2075
+ js_NewFunction(JSContext *cx, JSObject *funobj, JSNative native, uintN nargs,
2076
+ uintN flags, JSObject *parent, JSAtom *atom)
2077
+ {
2078
+ JSFunction *fun;
2079
+
2080
+ if (funobj) {
2081
+ JS_ASSERT(HAS_FUNCTION_CLASS(funobj));
2082
+ OBJ_SET_PARENT(cx, funobj, parent);
2083
+ } else {
2084
+ funobj = js_NewObject(cx, &js_FunctionClass, NULL, parent, 0);
2085
+ if (!funobj)
2086
+ return NULL;
2087
+ }
2088
+ JS_ASSERT(JSVAL_IS_VOID(funobj->fslots[JSSLOT_PRIVATE]));
2089
+ fun = (JSFunction *) funobj;
2090
+
2091
+ /* Initialize all function members. */
2092
+ fun->nargs = nargs;
2093
+ fun->flags = flags & (JSFUN_FLAGS_MASK | JSFUN_INTERPRETED | JSFUN_TRACEABLE);
2094
+ if (flags & JSFUN_INTERPRETED) {
2095
+ JS_ASSERT(!native);
2096
+ JS_ASSERT(nargs == 0);
2097
+ fun->u.i.nvars = 0;
2098
+ fun->u.i.nupvars = 0;
2099
+ fun->u.i.script = NULL;
2100
+ #ifdef DEBUG
2101
+ fun->u.i.names.taggedAtom = 0;
2102
+ #endif
2103
+ } else {
2104
+ fun->u.n.extra = 0;
2105
+ fun->u.n.spare = 0;
2106
+ if (flags & JSFUN_TRACEABLE) {
2107
+ #ifdef JS_TRACER
2108
+ JSTraceableNative *trcinfo = (JSTraceableNative *) native;
2109
+ fun->u.n.native = (JSNative) trcinfo->native;
2110
+ FUN_TRCINFO(fun) = trcinfo;
2111
+ #else
2112
+ JS_ASSERT(0);
2113
+ #endif
2114
+ } else {
2115
+ fun->u.n.native = native;
2116
+ FUN_CLASP(fun) = NULL;
2117
+ }
2118
+ }
2119
+ fun->atom = atom;
2120
+
2121
+ /* Set private to self to indicate non-cloned fully initialized function. */
2122
+ FUN_OBJECT(fun)->fslots[JSSLOT_PRIVATE] = PRIVATE_TO_JSVAL(fun);
2123
+ return fun;
2124
+ }
2125
+
2126
+ JSObject *
2127
+ js_CloneFunctionObject(JSContext *cx, JSFunction *fun, JSObject *parent)
2128
+ {
2129
+ JSObject *clone;
2130
+
2131
+ /*
2132
+ * The cloned function object does not need the extra fields beyond
2133
+ * JSObject as it points to fun via the private slot.
2134
+ */
2135
+ clone = js_NewObject(cx, &js_FunctionClass, NULL, parent,
2136
+ sizeof(JSObject));
2137
+ if (!clone)
2138
+ return NULL;
2139
+ clone->fslots[JSSLOT_PRIVATE] = PRIVATE_TO_JSVAL(fun);
2140
+ return clone;
2141
+ }
2142
+
2143
+ JSFunction *
2144
+ js_DefineFunction(JSContext *cx, JSObject *obj, JSAtom *atom, JSNative native,
2145
+ uintN nargs, uintN attrs)
2146
+ {
2147
+ JSFunction *fun;
2148
+ JSPropertyOp gsop;
2149
+
2150
+ fun = js_NewFunction(cx, NULL, native, nargs, attrs, obj, atom);
2151
+ if (!fun)
2152
+ return NULL;
2153
+ gsop = (attrs & JSFUN_STUB_GSOPS) ? JS_PropertyStub : NULL;
2154
+ if (!OBJ_DEFINE_PROPERTY(cx, obj, ATOM_TO_JSID(atom),
2155
+ OBJECT_TO_JSVAL(FUN_OBJECT(fun)),
2156
+ gsop, gsop,
2157
+ attrs & ~JSFUN_FLAGS_MASK, NULL)) {
2158
+ return NULL;
2159
+ }
2160
+ return fun;
2161
+ }
2162
+
2163
+ #if (JSV2F_CONSTRUCT & JSV2F_SEARCH_STACK)
2164
+ # error "JSINVOKE_CONSTRUCT and JSV2F_SEARCH_STACK are not disjoint!"
2165
+ #endif
2166
+
2167
+ JSFunction *
2168
+ js_ValueToFunction(JSContext *cx, jsval *vp, uintN flags)
2169
+ {
2170
+ jsval v;
2171
+ JSObject *obj;
2172
+
2173
+ v = *vp;
2174
+ obj = NULL;
2175
+ if (JSVAL_IS_OBJECT(v)) {
2176
+ obj = JSVAL_TO_OBJECT(v);
2177
+ if (obj && OBJ_GET_CLASS(cx, obj) != &js_FunctionClass) {
2178
+ if (!OBJ_DEFAULT_VALUE(cx, obj, JSTYPE_FUNCTION, &v))
2179
+ return NULL;
2180
+ obj = VALUE_IS_FUNCTION(cx, v) ? JSVAL_TO_OBJECT(v) : NULL;
2181
+ }
2182
+ }
2183
+ if (!obj) {
2184
+ js_ReportIsNotFunction(cx, vp, flags);
2185
+ return NULL;
2186
+ }
2187
+ return GET_FUNCTION_PRIVATE(cx, obj);
2188
+ }
2189
+
2190
+ JSObject *
2191
+ js_ValueToFunctionObject(JSContext *cx, jsval *vp, uintN flags)
2192
+ {
2193
+ JSFunction *fun;
2194
+ JSStackFrame *caller;
2195
+ JSPrincipals *principals;
2196
+
2197
+ if (VALUE_IS_FUNCTION(cx, *vp))
2198
+ return JSVAL_TO_OBJECT(*vp);
2199
+
2200
+ fun = js_ValueToFunction(cx, vp, flags);
2201
+ if (!fun)
2202
+ return NULL;
2203
+ *vp = OBJECT_TO_JSVAL(FUN_OBJECT(fun));
2204
+
2205
+ caller = JS_GetScriptedCaller(cx, cx->fp);
2206
+ if (caller) {
2207
+ principals = JS_StackFramePrincipals(cx, caller);
2208
+ } else {
2209
+ /* No scripted caller, don't allow access. */
2210
+ principals = NULL;
2211
+ }
2212
+
2213
+ if (!js_CheckPrincipalsAccess(cx, FUN_OBJECT(fun), principals,
2214
+ fun->atom
2215
+ ? fun->atom
2216
+ : cx->runtime->atomState.anonymousAtom)) {
2217
+ return NULL;
2218
+ }
2219
+ return FUN_OBJECT(fun);
2220
+ }
2221
+
2222
+ JSObject *
2223
+ js_ValueToCallableObject(JSContext *cx, jsval *vp, uintN flags)
2224
+ {
2225
+ JSObject *callable;
2226
+
2227
+ callable = JSVAL_IS_PRIMITIVE(*vp) ? NULL : JSVAL_TO_OBJECT(*vp);
2228
+ if (callable &&
2229
+ ((callable->map->ops == &js_ObjectOps)
2230
+ ? OBJ_GET_CLASS(cx, callable)->call
2231
+ : callable->map->ops->call)) {
2232
+ *vp = OBJECT_TO_JSVAL(callable);
2233
+ } else {
2234
+ callable = js_ValueToFunctionObject(cx, vp, flags);
2235
+ }
2236
+ return callable;
2237
+ }
2238
+
2239
+ void
2240
+ js_ReportIsNotFunction(JSContext *cx, jsval *vp, uintN flags)
2241
+ {
2242
+ JSStackFrame *fp;
2243
+ uintN error;
2244
+ const char *name, *source;
2245
+ JSTempValueRooter tvr;
2246
+
2247
+ for (fp = cx->fp; fp && !fp->regs; fp = fp->down)
2248
+ continue;
2249
+ name = source = NULL;
2250
+ JS_PUSH_TEMP_ROOT_STRING(cx, NULL, &tvr);
2251
+ if (flags & JSV2F_ITERATOR) {
2252
+ error = JSMSG_BAD_ITERATOR;
2253
+ name = js_iterator_str;
2254
+ tvr.u.string = js_ValueToSource(cx, *vp);
2255
+ if (!tvr.u.string)
2256
+ goto out;
2257
+ tvr.u.string = js_QuoteString(cx, tvr.u.string, 0);
2258
+ if (!tvr.u.string)
2259
+ goto out;
2260
+ source = js_GetStringBytes(cx, tvr.u.string);
2261
+ if (!source)
2262
+ goto out;
2263
+ } else if (flags & JSV2F_CONSTRUCT) {
2264
+ error = JSMSG_NOT_CONSTRUCTOR;
2265
+ } else {
2266
+ error = JSMSG_NOT_FUNCTION;
2267
+ }
2268
+
2269
+ js_ReportValueError3(cx, error,
2270
+ (fp && fp->regs &&
2271
+ StackBase(fp) <= vp && vp < fp->regs->sp)
2272
+ ? vp - fp->regs->sp
2273
+ : (flags & JSV2F_SEARCH_STACK)
2274
+ ? JSDVG_SEARCH_STACK
2275
+ : JSDVG_IGNORE_STACK,
2276
+ *vp, NULL,
2277
+ name, source);
2278
+
2279
+ out:
2280
+ JS_POP_TEMP_ROOT(cx, &tvr);
2281
+ }
2282
+
2283
+ /*
2284
+ * When a function has between 2 and MAX_ARRAY_LOCALS arguments and variables,
2285
+ * their name are stored as the JSLocalNames.array.
2286
+ */
2287
+ #define MAX_ARRAY_LOCALS 8
2288
+
2289
+ JS_STATIC_ASSERT(2 <= MAX_ARRAY_LOCALS);
2290
+ JS_STATIC_ASSERT(MAX_ARRAY_LOCALS < JS_BITMASK(16));
2291
+
2292
+ /*
2293
+ * We use the lowest bit of the string atom to distinguish const from var
2294
+ * name when there is only single name or when names are stored as an array.
2295
+ */
2296
+ JS_STATIC_ASSERT((JSVAL_STRING & 1) == 0);
2297
+
2298
+ /*
2299
+ * When we use a hash table to store the local names, we use a singly linked
2300
+ * list to record the indexes of duplicated parameter names to preserve the
2301
+ * duplicates for the decompiler.
2302
+ */
2303
+ typedef struct JSNameIndexPair JSNameIndexPair;
2304
+
2305
+ struct JSNameIndexPair {
2306
+ JSAtom *name;
2307
+ uint16 index;
2308
+ JSNameIndexPair *link;
2309
+ };
2310
+
2311
+ struct JSLocalNameMap {
2312
+ JSDHashTable names;
2313
+ JSNameIndexPair *lastdup;
2314
+ };
2315
+
2316
+ typedef struct JSLocalNameHashEntry {
2317
+ JSDHashEntryHdr hdr;
2318
+ JSAtom *name;
2319
+ uint16 index;
2320
+ uint8 localKind;
2321
+ } JSLocalNameHashEntry;
2322
+
2323
+ static void
2324
+ FreeLocalNameHash(JSContext *cx, JSLocalNameMap *map)
2325
+ {
2326
+ JSNameIndexPair *dup, *next;
2327
+
2328
+ for (dup = map->lastdup; dup; dup = next) {
2329
+ next = dup->link;
2330
+ JS_free(cx, dup);
2331
+ }
2332
+ JS_DHashTableFinish(&map->names);
2333
+ JS_free(cx, map);
2334
+ }
2335
+
2336
+ static JSBool
2337
+ HashLocalName(JSContext *cx, JSLocalNameMap *map, JSAtom *name,
2338
+ JSLocalKind localKind, uintN index)
2339
+ {
2340
+ JSLocalNameHashEntry *entry;
2341
+ JSNameIndexPair *dup;
2342
+
2343
+ JS_ASSERT(index <= JS_BITMASK(16));
2344
+ #if JS_HAS_DESTRUCTURING
2345
+ if (!name) {
2346
+ /* A destructuring pattern does not need a hash entry. */
2347
+ JS_ASSERT(localKind == JSLOCAL_ARG);
2348
+ return JS_TRUE;
2349
+ }
2350
+ #endif
2351
+ JS_ASSERT(ATOM_IS_STRING(name));
2352
+ entry = (JSLocalNameHashEntry *)
2353
+ JS_DHashTableOperate(&map->names, name, JS_DHASH_ADD);
2354
+ if (!entry) {
2355
+ JS_ReportOutOfMemory(cx);
2356
+ return JS_FALSE;
2357
+ }
2358
+ if (entry->name) {
2359
+ JS_ASSERT(entry->name == name);
2360
+ JS_ASSERT(entry->localKind == JSLOCAL_ARG);
2361
+ dup = (JSNameIndexPair *) JS_malloc(cx, sizeof *dup);
2362
+ if (!dup)
2363
+ return JS_FALSE;
2364
+ dup->name = entry->name;
2365
+ dup->index = entry->index;
2366
+ dup->link = map->lastdup;
2367
+ map->lastdup = dup;
2368
+ }
2369
+ entry->name = name;
2370
+ entry->index = (uint16) index;
2371
+ entry->localKind = (uint8) localKind;
2372
+ return JS_TRUE;
2373
+ }
2374
+
2375
+ JSBool
2376
+ js_AddLocal(JSContext *cx, JSFunction *fun, JSAtom *atom, JSLocalKind kind)
2377
+ {
2378
+ jsuword taggedAtom;
2379
+ uint16 *indexp;
2380
+ uintN n, i;
2381
+ jsuword *array;
2382
+ JSLocalNameMap *map;
2383
+
2384
+ JS_ASSERT(FUN_INTERPRETED(fun));
2385
+ JS_ASSERT(!fun->u.i.script);
2386
+ JS_ASSERT(((jsuword) atom & 1) == 0);
2387
+ taggedAtom = (jsuword) atom;
2388
+ if (kind == JSLOCAL_ARG) {
2389
+ indexp = &fun->nargs;
2390
+ } else if (kind == JSLOCAL_UPVAR) {
2391
+ indexp = &fun->u.i.nupvars;
2392
+ } else {
2393
+ indexp = &fun->u.i.nvars;
2394
+ if (kind == JSLOCAL_CONST)
2395
+ taggedAtom |= 1;
2396
+ else
2397
+ JS_ASSERT(kind == JSLOCAL_VAR);
2398
+ }
2399
+ n = JS_GET_LOCAL_NAME_COUNT(fun);
2400
+ if (n == 0) {
2401
+ JS_ASSERT(fun->u.i.names.taggedAtom == 0);
2402
+ fun->u.i.names.taggedAtom = taggedAtom;
2403
+ } else if (n < MAX_ARRAY_LOCALS) {
2404
+ if (n > 1) {
2405
+ array = fun->u.i.names.array;
2406
+ } else {
2407
+ array = (jsuword *) JS_malloc(cx, MAX_ARRAY_LOCALS * sizeof *array);
2408
+ if (!array)
2409
+ return JS_FALSE;
2410
+ array[0] = fun->u.i.names.taggedAtom;
2411
+ fun->u.i.names.array = array;
2412
+ }
2413
+ if (kind == JSLOCAL_ARG) {
2414
+ /*
2415
+ * A destructuring argument pattern adds variables, not arguments,
2416
+ * so for the following arguments nvars != 0.
2417
+ */
2418
+ #if JS_HAS_DESTRUCTURING
2419
+ if (fun->u.i.nvars != 0) {
2420
+ memmove(array + fun->nargs + 1, array + fun->nargs,
2421
+ fun->u.i.nvars * sizeof *array);
2422
+ }
2423
+ #else
2424
+ JS_ASSERT(fun->u.i.nvars == 0);
2425
+ #endif
2426
+ array[fun->nargs] = taggedAtom;
2427
+ } else {
2428
+ array[n] = taggedAtom;
2429
+ }
2430
+ } else if (n == MAX_ARRAY_LOCALS) {
2431
+ array = fun->u.i.names.array;
2432
+ map = (JSLocalNameMap *) JS_malloc(cx, sizeof *map);
2433
+ if (!map)
2434
+ return JS_FALSE;
2435
+ if (!JS_DHashTableInit(&map->names, JS_DHashGetStubOps(),
2436
+ NULL, sizeof(JSLocalNameHashEntry),
2437
+ JS_DHASH_DEFAULT_CAPACITY(MAX_ARRAY_LOCALS
2438
+ * 2))) {
2439
+ JS_ReportOutOfMemory(cx);
2440
+ JS_free(cx, map);
2441
+ return JS_FALSE;
2442
+ }
2443
+
2444
+ map->lastdup = NULL;
2445
+ for (i = 0; i != MAX_ARRAY_LOCALS; ++i) {
2446
+ taggedAtom = array[i];
2447
+ if (!HashLocalName(cx, map, (JSAtom *) (taggedAtom & ~1),
2448
+ (i < fun->nargs)
2449
+ ? JSLOCAL_ARG
2450
+ : (taggedAtom & 1) ? JSLOCAL_CONST : JSLOCAL_VAR,
2451
+ (i < fun->nargs) ? i : i - fun->nargs)) {
2452
+ FreeLocalNameHash(cx, map);
2453
+ return JS_FALSE;
2454
+ }
2455
+ }
2456
+ if (!HashLocalName(cx, map, atom, kind, *indexp)) {
2457
+ FreeLocalNameHash(cx, map);
2458
+ return JS_FALSE;
2459
+ }
2460
+
2461
+ /*
2462
+ * At this point the entry is added and we cannot fail. It is time
2463
+ * to replace fun->u.i.names with the built map.
2464
+ */
2465
+ fun->u.i.names.map = map;
2466
+ JS_free(cx, array);
2467
+ } else {
2468
+ if (*indexp == JS_BITMASK(16)) {
2469
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
2470
+ (kind == JSLOCAL_ARG)
2471
+ ? JSMSG_TOO_MANY_FUN_ARGS
2472
+ : JSMSG_TOO_MANY_LOCALS);
2473
+ return JS_FALSE;
2474
+ }
2475
+ if (!HashLocalName(cx, fun->u.i.names.map, atom, kind, *indexp))
2476
+ return JS_FALSE;
2477
+ }
2478
+
2479
+ /* Update the argument or variable counter. */
2480
+ ++*indexp;
2481
+ return JS_TRUE;
2482
+ }
2483
+
2484
+ JSLocalKind
2485
+ js_LookupLocal(JSContext *cx, JSFunction *fun, JSAtom *atom, uintN *indexp)
2486
+ {
2487
+ uintN n, i, upvar_base;
2488
+ jsuword *array;
2489
+ JSLocalNameHashEntry *entry;
2490
+
2491
+ JS_ASSERT(FUN_INTERPRETED(fun));
2492
+ n = JS_GET_LOCAL_NAME_COUNT(fun);
2493
+ if (n == 0)
2494
+ return JSLOCAL_NONE;
2495
+ if (n <= MAX_ARRAY_LOCALS) {
2496
+ array = (n == 1) ? &fun->u.i.names.taggedAtom : fun->u.i.names.array;
2497
+
2498
+ /* Search from the tail to pick up the last duplicated name. */
2499
+ i = n;
2500
+ upvar_base = JS_UPVAR_LOCAL_NAME_START(fun);
2501
+ do {
2502
+ --i;
2503
+ if (atom == JS_LOCAL_NAME_TO_ATOM(array[i])) {
2504
+ if (i < fun->nargs) {
2505
+ if (indexp)
2506
+ *indexp = i;
2507
+ return JSLOCAL_ARG;
2508
+ }
2509
+ if (i >= upvar_base) {
2510
+ if (indexp)
2511
+ *indexp = i - upvar_base;
2512
+ return JSLOCAL_UPVAR;
2513
+ }
2514
+ if (indexp)
2515
+ *indexp = i - fun->nargs;
2516
+ return JS_LOCAL_NAME_IS_CONST(array[i])
2517
+ ? JSLOCAL_CONST
2518
+ : JSLOCAL_VAR;
2519
+ }
2520
+ } while (i != 0);
2521
+ } else {
2522
+ entry = (JSLocalNameHashEntry *)
2523
+ JS_DHashTableOperate(&fun->u.i.names.map->names, atom,
2524
+ JS_DHASH_LOOKUP);
2525
+ if (JS_DHASH_ENTRY_IS_BUSY(&entry->hdr)) {
2526
+ JS_ASSERT(entry->localKind != JSLOCAL_NONE);
2527
+ if (indexp)
2528
+ *indexp = entry->index;
2529
+ return (JSLocalKind) entry->localKind;
2530
+ }
2531
+ }
2532
+ return JSLOCAL_NONE;
2533
+ }
2534
+
2535
+ typedef struct JSLocalNameEnumeratorArgs {
2536
+ JSFunction *fun;
2537
+ jsuword *names;
2538
+ #ifdef DEBUG
2539
+ uintN nCopiedArgs;
2540
+ uintN nCopiedVars;
2541
+ #endif
2542
+ } JSLocalNameEnumeratorArgs;
2543
+
2544
+ static JSDHashOperator
2545
+ get_local_names_enumerator(JSDHashTable *table, JSDHashEntryHdr *hdr,
2546
+ uint32 number, void *arg)
2547
+ {
2548
+ JSLocalNameHashEntry *entry;
2549
+ JSLocalNameEnumeratorArgs *args;
2550
+ uint i;
2551
+ jsuword constFlag;
2552
+
2553
+ entry = (JSLocalNameHashEntry *) hdr;
2554
+ args = (JSLocalNameEnumeratorArgs *) arg;
2555
+ JS_ASSERT(entry->name);
2556
+ if (entry->localKind == JSLOCAL_ARG) {
2557
+ JS_ASSERT(entry->index < args->fun->nargs);
2558
+ JS_ASSERT(args->nCopiedArgs++ < args->fun->nargs);
2559
+ i = entry->index;
2560
+ constFlag = 0;
2561
+ } else {
2562
+ JS_ASSERT(entry->localKind == JSLOCAL_VAR ||
2563
+ entry->localKind == JSLOCAL_CONST);
2564
+ JS_ASSERT(entry->index < args->fun->u.i.nvars);
2565
+ JS_ASSERT(args->nCopiedVars++ < args->fun->u.i.nvars);
2566
+ i = args->fun->nargs + entry->index;
2567
+ constFlag = (entry->localKind == JSLOCAL_CONST);
2568
+ }
2569
+ args->names[i] = (jsuword) entry->name | constFlag;
2570
+ return JS_DHASH_NEXT;
2571
+ }
2572
+
2573
+ jsuword *
2574
+ js_GetLocalNameArray(JSContext *cx, JSFunction *fun, JSArenaPool *pool)
2575
+ {
2576
+ uintN n;
2577
+ jsuword *names;
2578
+ JSLocalNameMap *map;
2579
+ JSLocalNameEnumeratorArgs args;
2580
+ JSNameIndexPair *dup;
2581
+
2582
+ JS_ASSERT(FUN_INTERPRETED(fun));
2583
+ n = JS_GET_LOCAL_NAME_COUNT(fun);
2584
+ JS_ASSERT(n != 0);
2585
+
2586
+ if (n <= MAX_ARRAY_LOCALS)
2587
+ return (n == 1) ? &fun->u.i.names.taggedAtom : fun->u.i.names.array;
2588
+
2589
+ /*
2590
+ * No need to check for overflow of the allocation size as we are making a
2591
+ * copy of already allocated data. As such it must fit size_t.
2592
+ */
2593
+ JS_ARENA_ALLOCATE_CAST(names, jsuword *, pool, (size_t) n * sizeof *names);
2594
+ if (!names) {
2595
+ js_ReportOutOfScriptQuota(cx);
2596
+ return NULL;
2597
+ }
2598
+
2599
+ #if JS_HAS_DESTRUCTURING
2600
+ /* Some parameter names can be NULL due to destructuring patterns. */
2601
+ memset(names, 0, fun->nargs * sizeof *names);
2602
+ #endif
2603
+ map = fun->u.i.names.map;
2604
+ args.fun = fun;
2605
+ args.names = names;
2606
+ #ifdef DEBUG
2607
+ args.nCopiedArgs = 0;
2608
+ args.nCopiedVars = 0;
2609
+ #endif
2610
+ JS_DHashTableEnumerate(&map->names, get_local_names_enumerator, &args);
2611
+ for (dup = map->lastdup; dup; dup = dup->link) {
2612
+ JS_ASSERT(dup->index < fun->nargs);
2613
+ JS_ASSERT(args.nCopiedArgs++ < fun->nargs);
2614
+ names[dup->index] = (jsuword) dup->name;
2615
+ }
2616
+ #if !JS_HAS_DESTRUCTURING
2617
+ JS_ASSERT(args.nCopiedArgs == fun->nargs);
2618
+ #endif
2619
+ JS_ASSERT(args.nCopiedVars == fun->u.i.nvars);
2620
+
2621
+ return names;
2622
+ }
2623
+
2624
+ static JSDHashOperator
2625
+ trace_local_names_enumerator(JSDHashTable *table, JSDHashEntryHdr *hdr,
2626
+ uint32 number, void *arg)
2627
+ {
2628
+ JSLocalNameHashEntry *entry;
2629
+ JSTracer *trc;
2630
+
2631
+ entry = (JSLocalNameHashEntry *) hdr;
2632
+ JS_ASSERT(entry->name);
2633
+ trc = (JSTracer *) arg;
2634
+ JS_SET_TRACING_INDEX(trc,
2635
+ entry->localKind == JSLOCAL_ARG ? "arg" : "var",
2636
+ entry->index);
2637
+ JS_CallTracer(trc, ATOM_TO_STRING(entry->name), JSTRACE_STRING);
2638
+ return JS_DHASH_NEXT;
2639
+ }
2640
+
2641
+ static void
2642
+ TraceLocalNames(JSTracer *trc, JSFunction *fun)
2643
+ {
2644
+ uintN n, i;
2645
+ JSAtom *atom;
2646
+ jsuword *array;
2647
+
2648
+ JS_ASSERT(FUN_INTERPRETED(fun));
2649
+ n = JS_GET_LOCAL_NAME_COUNT(fun);
2650
+ if (n == 0)
2651
+ return;
2652
+ if (n <= MAX_ARRAY_LOCALS) {
2653
+ array = (n == 1) ? &fun->u.i.names.taggedAtom : fun->u.i.names.array;
2654
+ i = n;
2655
+ do {
2656
+ --i;
2657
+ atom = (JSAtom *) (array[i] & ~1);
2658
+ if (atom) {
2659
+ JS_SET_TRACING_INDEX(trc,
2660
+ i < fun->nargs ? "arg" : "var",
2661
+ i < fun->nargs ? i : i - fun->nargs);
2662
+ JS_CallTracer(trc, ATOM_TO_STRING(atom), JSTRACE_STRING);
2663
+ }
2664
+ } while (i != 0);
2665
+ } else {
2666
+ JS_DHashTableEnumerate(&fun->u.i.names.map->names,
2667
+ trace_local_names_enumerator, trc);
2668
+
2669
+ /*
2670
+ * No need to trace the list of duplicates in map->lastdup as the
2671
+ * names there are traced when enumerating the hash table.
2672
+ */
2673
+ }
2674
+ }
2675
+
2676
+ void
2677
+ DestroyLocalNames(JSContext *cx, JSFunction *fun)
2678
+ {
2679
+ uintN n;
2680
+
2681
+ n = fun->nargs + fun->u.i.nvars;
2682
+ if (n <= 1)
2683
+ return;
2684
+ if (n <= MAX_ARRAY_LOCALS)
2685
+ JS_free(cx, fun->u.i.names.array);
2686
+ else
2687
+ FreeLocalNameHash(cx, fun->u.i.names.map);
2688
+ }
2689
+
2690
+ void
2691
+ js_FreezeLocalNames(JSContext *cx, JSFunction *fun)
2692
+ {
2693
+ uintN n;
2694
+ jsuword *array;
2695
+
2696
+ JS_ASSERT(FUN_INTERPRETED(fun));
2697
+ JS_ASSERT(!fun->u.i.script);
2698
+ n = fun->nargs + fun->u.i.nvars + fun->u.i.nupvars;
2699
+ if (2 <= n && n < MAX_ARRAY_LOCALS) {
2700
+ /* Shrink over-allocated array ignoring realloc failures. */
2701
+ array = (jsuword *) JS_realloc(cx, fun->u.i.names.array,
2702
+ n * sizeof *array);
2703
+ if (array)
2704
+ fun->u.i.names.array = array;
2705
+ }
2706
+ }