opal 0.10.6 → 0.11.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (450) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +19 -0
  3. data/.gitmodules +1 -1
  4. data/.jshintrc +1 -2
  5. data/.travis.yml +26 -18
  6. data/CHANGELOG.md +89 -23
  7. data/{CODE_OF_CONDUCT.md → CONDUCT.md} +0 -0
  8. data/Gemfile +19 -21
  9. data/HACKING.md +2 -0
  10. data/README.md +7 -6
  11. data/Rakefile +1 -1
  12. data/appveyor.yml +21 -4
  13. data/benchmark-ips/bm_case.rb +33 -0
  14. data/benchmark-ips/bm_constants_lookup.rb +13 -0
  15. data/benchmark-ips/bm_is_number.rb +29 -0
  16. data/benchmark-ips/bm_symbol_to_proc.rb +19 -0
  17. data/benchmark/bm_constant_lookup_big.rb +799 -0
  18. data/benchmark/bm_constant_lookup_small.rb +59 -0
  19. data/benchmark/bm_module_definition_big.rb +400 -0
  20. data/benchmark/bm_module_definition_small.rb +30 -0
  21. data/bin/opal-repl +23 -1
  22. data/docs/compiled_ruby.md +16 -14
  23. data/docs/faq.md +3 -3
  24. data/docs/rspec.md +2 -1
  25. data/docs/unsupported_features.md +6 -4
  26. data/examples/rack/Gemfile +1 -0
  27. data/examples/rack/app/application.rb +14 -3
  28. data/examples/rack/app/user.rb +2 -0
  29. data/examples/rack/config.ru +1 -1
  30. data/examples/rack/index.html.erb +1 -0
  31. data/lib/opal.rb +6 -1
  32. data/lib/opal/ast/builder.rb +17 -0
  33. data/lib/opal/ast/node.rb +30 -0
  34. data/lib/opal/builder.rb +14 -3
  35. data/lib/opal/builder_processors.rb +1 -0
  36. data/lib/opal/cli.rb +45 -59
  37. data/lib/opal/cli_options.rb +11 -7
  38. data/lib/opal/cli_runners.rb +1 -0
  39. data/lib/opal/cli_runners/applescript.rb +3 -3
  40. data/lib/opal/cli_runners/nashorn.rb +1 -0
  41. data/lib/opal/cli_runners/nodejs.rb +4 -1
  42. data/lib/opal/cli_runners/phantom.js +1 -2
  43. data/lib/opal/cli_runners/phantomjs.rb +3 -2
  44. data/lib/opal/cli_runners/server.rb +1 -0
  45. data/lib/opal/compiler.rb +145 -94
  46. data/lib/opal/config.rb +1 -0
  47. data/lib/opal/deprecations.rb +18 -0
  48. data/lib/opal/erb.rb +1 -0
  49. data/lib/opal/errors.rb +1 -0
  50. data/lib/opal/fragment.rb +1 -0
  51. data/lib/opal/hike_path_finder.rb +1 -0
  52. data/lib/opal/nodes.rb +3 -0
  53. data/lib/opal/nodes/arglist.rb +2 -1
  54. data/lib/opal/nodes/args/initialize_kwargs.rb +1 -0
  55. data/lib/opal/nodes/args/kwarg.rb +7 -7
  56. data/lib/opal/nodes/args/kwoptarg.rb +6 -7
  57. data/lib/opal/nodes/args/kwrestarg.rb +5 -5
  58. data/lib/opal/nodes/args/mlhsarg.rb +3 -2
  59. data/lib/opal/nodes/args/normarg.rb +6 -7
  60. data/lib/opal/nodes/args/optarg.rb +5 -7
  61. data/lib/opal/nodes/args/post_args.rb +6 -5
  62. data/lib/opal/nodes/args/post_kwargs.rb +1 -0
  63. data/lib/opal/nodes/args/restarg.rb +7 -7
  64. data/lib/opal/nodes/array.rb +1 -0
  65. data/lib/opal/nodes/base.rb +24 -3
  66. data/lib/opal/nodes/call.rb +167 -155
  67. data/lib/opal/nodes/call_special.rb +31 -217
  68. data/lib/opal/nodes/case.rb +36 -22
  69. data/lib/opal/nodes/class.rb +4 -3
  70. data/lib/opal/nodes/constants.rb +28 -48
  71. data/lib/opal/nodes/csend.rb +25 -0
  72. data/lib/opal/nodes/def.rb +49 -16
  73. data/lib/opal/nodes/defined.rb +170 -60
  74. data/lib/opal/nodes/definitions.rb +40 -133
  75. data/lib/opal/nodes/defs.rb +29 -0
  76. data/lib/opal/nodes/for.rb +52 -25
  77. data/lib/opal/nodes/hash.rb +12 -35
  78. data/lib/opal/nodes/helpers.rb +27 -54
  79. data/lib/opal/nodes/if.rb +21 -32
  80. data/lib/opal/nodes/inline_args.rb +12 -13
  81. data/lib/opal/nodes/iter.rb +61 -36
  82. data/lib/opal/nodes/literal.rb +189 -116
  83. data/lib/opal/nodes/logic.rb +20 -25
  84. data/lib/opal/nodes/masgn.rb +20 -18
  85. data/lib/opal/nodes/module.rb +10 -11
  86. data/lib/opal/nodes/node_with_args.rb +14 -17
  87. data/lib/opal/nodes/rescue.rb +37 -70
  88. data/lib/opal/nodes/runtime_helpers.rb +8 -3
  89. data/lib/opal/nodes/scope.rb +9 -5
  90. data/lib/opal/nodes/singleton_class.rb +4 -3
  91. data/lib/opal/nodes/super.rb +115 -87
  92. data/lib/opal/nodes/top.rb +7 -2
  93. data/lib/opal/nodes/variables.rb +46 -35
  94. data/lib/opal/nodes/while.rb +11 -1
  95. data/lib/opal/nodes/yield.rb +1 -17
  96. data/lib/opal/parser.rb +28 -770
  97. data/lib/opal/path_reader.rb +5 -1
  98. data/lib/opal/paths.rb +10 -4
  99. data/lib/opal/regexp_anchors.rb +1 -0
  100. data/lib/opal/rewriter.rb +60 -0
  101. data/lib/opal/rewriters/base.rb +60 -0
  102. data/lib/opal/rewriters/binary_operator_assignment.rb +144 -0
  103. data/lib/opal/rewriters/block_to_iter.rb +17 -0
  104. data/lib/opal/rewriters/break_finder.rb +34 -0
  105. data/lib/opal/rewriters/dot_js_syntax.rb +60 -0
  106. data/lib/opal/rewriters/explicit_writer_return.rb +58 -0
  107. data/lib/opal/rewriters/js_reserved_words.rb +111 -0
  108. data/lib/opal/rewriters/logical_operator_assignment.rb +155 -0
  109. data/lib/opal/rewriters/opal_engine_check.rb +42 -0
  110. data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +67 -0
  111. data/lib/opal/server.rb +4 -0
  112. data/lib/opal/simple_server.rb +100 -0
  113. data/lib/opal/source_map.rb +1 -1
  114. data/lib/opal/util.rb +5 -5
  115. data/lib/opal/version.rb +2 -1
  116. data/lib/tilt/opal.rb +1 -0
  117. data/opal.gemspec +8 -7
  118. data/opal/README.md +1 -1
  119. data/opal/corelib/array.rb +137 -83
  120. data/opal/corelib/basic_object.rb +6 -6
  121. data/opal/corelib/class.rb +14 -11
  122. data/opal/corelib/complex.rb +5 -1
  123. data/opal/corelib/constants.rb +3 -3
  124. data/opal/corelib/enumerable.rb +129 -11
  125. data/opal/corelib/error.rb +35 -17
  126. data/opal/corelib/file.rb +65 -170
  127. data/opal/corelib/hash.rb +128 -13
  128. data/opal/corelib/helpers.rb +12 -15
  129. data/opal/corelib/io.rb +1 -0
  130. data/opal/corelib/kernel.rb +40 -21
  131. data/opal/corelib/marshal/read_buffer.rb +1 -1
  132. data/opal/corelib/method.rb +33 -13
  133. data/opal/corelib/module.rb +133 -81
  134. data/opal/corelib/number.rb +141 -25
  135. data/opal/corelib/numeric.rb +0 -8
  136. data/opal/corelib/process.rb +44 -4
  137. data/opal/corelib/random.rb +117 -0
  138. data/opal/corelib/random/seedrandom.js.rb +15 -0
  139. data/opal/corelib/range.rb +133 -10
  140. data/opal/corelib/regexp.rb +37 -9
  141. data/opal/corelib/runtime.js +601 -390
  142. data/opal/corelib/string.rb +39 -8
  143. data/opal/corelib/string/encoding.rb +51 -7
  144. data/opal/corelib/struct.rb +20 -0
  145. data/opal/corelib/time.rb +3 -3
  146. data/opal/corelib/variables.rb +1 -1
  147. data/opal/opal.rb +1 -0
  148. data/spec/filters/bugs/array.rb +5 -1
  149. data/spec/filters/bugs/basicobject.rb +2 -5
  150. data/spec/filters/bugs/bigdecimal.rb +8 -22
  151. data/spec/filters/bugs/class.rb +2 -1
  152. data/spec/filters/bugs/comparable.rb +5 -0
  153. data/spec/filters/bugs/date.rb +3 -3
  154. data/spec/filters/bugs/enumerable.rb +4 -11
  155. data/spec/filters/bugs/enumerator.rb +2 -4
  156. data/spec/filters/bugs/exception.rb +16 -2
  157. data/spec/filters/bugs/file.rb +8 -0
  158. data/spec/filters/bugs/float.rb +7 -1
  159. data/spec/filters/bugs/hash.rb +6 -2
  160. data/spec/filters/bugs/integer.rb +2 -0
  161. data/spec/filters/bugs/io.rb +8 -0
  162. data/spec/filters/bugs/kernel.rb +9 -138
  163. data/spec/filters/bugs/language.rb +89 -174
  164. data/spec/filters/bugs/marshal.rb +33 -35
  165. data/spec/filters/bugs/method.rb +0 -24
  166. data/spec/filters/bugs/module.rb +19 -55
  167. data/spec/filters/bugs/numeric.rb +0 -119
  168. data/spec/filters/bugs/pathname.rb +2 -0
  169. data/spec/filters/bugs/proc.rb +5 -4
  170. data/spec/filters/bugs/random.rb +7 -0
  171. data/spec/filters/bugs/range.rb +12 -120
  172. data/spec/filters/bugs/rational.rb +1 -1
  173. data/spec/filters/bugs/regexp.rb +2 -40
  174. data/spec/filters/bugs/set.rb +0 -1
  175. data/spec/filters/bugs/string.rb +5 -8
  176. data/spec/filters/bugs/stringscanner.rb +11 -19
  177. data/spec/filters/bugs/time.rb +7 -1
  178. data/spec/filters/bugs/unboundmethod.rb +1 -11
  179. data/spec/filters/unsupported/array.rb +5 -1
  180. data/spec/filters/unsupported/basicobject.rb +1 -1
  181. data/spec/filters/unsupported/bignum.rb +4 -1
  182. data/spec/filters/unsupported/class.rb +1 -1
  183. data/spec/filters/unsupported/delegator.rb +1 -1
  184. data/spec/filters/unsupported/enumerable.rb +1 -1
  185. data/spec/filters/unsupported/enumerator.rb +1 -1
  186. data/spec/filters/unsupported/file.rb +4 -0
  187. data/spec/filters/unsupported/fixnum.rb +1 -1
  188. data/spec/filters/unsupported/float.rb +4 -1
  189. data/spec/filters/unsupported/freeze.rb +27 -5
  190. data/spec/filters/unsupported/hash.rb +7 -15
  191. data/spec/filters/unsupported/integer.rb +1 -1
  192. data/spec/filters/unsupported/kernel.rb +2 -1
  193. data/spec/filters/unsupported/language.rb +6 -1
  194. data/spec/filters/unsupported/marshal.rb +1 -1
  195. data/spec/filters/unsupported/matchdata.rb +4 -1
  196. data/spec/filters/unsupported/math.rb +1 -1
  197. data/spec/filters/unsupported/pathname.rb +1 -1
  198. data/spec/filters/unsupported/privacy.rb +141 -9
  199. data/spec/filters/unsupported/proc.rb +1 -1
  200. data/spec/filters/unsupported/random.rb +4 -0
  201. data/spec/filters/unsupported/range.rb +7 -0
  202. data/spec/filters/unsupported/regexp.rb +25 -15
  203. data/spec/filters/unsupported/set.rb +1 -1
  204. data/spec/filters/unsupported/singleton.rb +1 -1
  205. data/spec/filters/unsupported/string.rb +110 -101
  206. data/spec/filters/unsupported/struct.rb +1 -1
  207. data/spec/filters/unsupported/symbol.rb +2 -1
  208. data/spec/filters/unsupported/taint.rb +22 -7
  209. data/spec/filters/unsupported/thread.rb +1 -1
  210. data/spec/filters/unsupported/time.rb +1 -1
  211. data/spec/lib/builder_spec.rb +17 -0
  212. data/spec/lib/cli_spec.rb +37 -8
  213. data/spec/lib/compiler/call_spec.rb +98 -66
  214. data/spec/lib/compiler_spec.rb +39 -30
  215. data/spec/lib/dependency_resolver_spec.rb +2 -2
  216. data/spec/lib/deprecations_spec.rb +16 -0
  217. data/spec/lib/fixtures/source_location_test.rb +7 -0
  218. data/spec/lib/rewriters/binary_operator_assignment_spec.rb +151 -0
  219. data/spec/lib/rewriters/block_to_iter_spec.rb +28 -0
  220. data/spec/lib/rewriters/dot_js_syntax_spec.rb +108 -0
  221. data/spec/lib/rewriters/explicit_writer_return_spec.rb +186 -0
  222. data/spec/lib/rewriters/js_reserved_words_spec.rb +116 -0
  223. data/spec/lib/rewriters/logical_operator_assignment_spec.rb +202 -0
  224. data/spec/lib/rewriters/opal_engine_check_spec.rb +82 -0
  225. data/spec/lib/rewriters/rubyspec/filters_rewriter_spec.rb +53 -0
  226. data/spec/lib/simple_server_spec.rb +54 -0
  227. data/spec/mspec-opal/formatters.rb +65 -17
  228. data/spec/mspec-opal/runner.rb +47 -67
  229. data/spec/opal/core/date_spec.rb +14 -0
  230. data/spec/opal/core/exception_spec.rb +10 -0
  231. data/spec/opal/core/hash/internals_spec.rb +10 -10
  232. data/spec/opal/core/kernel/rand_spec.rb +0 -4
  233. data/spec/opal/core/kernel/respond_to_spec.rb +5 -2
  234. data/spec/opal/core/language/constant_lookup_spec.rb +38 -0
  235. data/spec/opal/core/language/predefined_spec.rb +1 -1
  236. data/spec/opal/core/language/safe_navigator_spec.rb +7 -0
  237. data/spec/opal/core/language/send_spec.rb +1 -9
  238. data/spec/opal/core/language/string_spec.rb +8 -8
  239. data/spec/opal/core/language/versions/def_2_0_spec.rb +0 -4
  240. data/spec/opal/core/language_spec.rb +32 -0
  241. data/spec/opal/core/module/const_get_spec.rb +1 -1
  242. data/spec/opal/core/runtime/is_a_spec.rb +36 -0
  243. data/spec/opal/core/runtime/rescue_spec.rb +35 -0
  244. data/spec/opal/core/runtime_spec.rb +4 -4
  245. data/spec/opal/core/string_spec.rb +8 -8
  246. data/spec/opal/core/time_spec.rb +26 -17
  247. data/spec/opal/stdlib/erb/quoted.opalerb +1 -1
  248. data/spec/opal/stdlib/json/parse_spec.rb +4 -0
  249. data/spec/opal/stdlib/native/hash_spec.rb +16 -0
  250. data/spec/ruby_specs +2 -1
  251. data/spec/spec_helper.rb +1 -0
  252. data/spec/support/rewriters_helper.rb +24 -0
  253. data/stdlib/base64.rb +4 -2
  254. data/stdlib/bigdecimal/bignumber.js.rb +1 -1
  255. data/stdlib/date.rb +18 -19
  256. data/stdlib/json.rb +16 -4
  257. data/stdlib/nashorn/file.rb +15 -0
  258. data/stdlib/native.rb +21 -12
  259. data/stdlib/nodejs/dir.rb +1 -1
  260. data/stdlib/nodejs/file.rb +49 -20
  261. data/stdlib/nodejs/io.rb +22 -1
  262. data/stdlib/nodejs/{node_modules/js-yaml/dist/js-yaml.js → js-yaml-3-6-1.js} +815 -626
  263. data/stdlib/nodejs/kernel.rb +3 -1
  264. data/stdlib/nodejs/package.json +0 -1
  265. data/stdlib/nodejs/stacktrace.rb +163 -0
  266. data/stdlib/nodejs/yaml.rb +2 -1
  267. data/stdlib/opal-platform.rb +15 -0
  268. data/stdlib/opal/platform.rb +5 -13
  269. data/stdlib/pathname.rb +1 -1
  270. data/stdlib/strscan.rb +15 -1
  271. data/stdlib/yaml.rb +1 -1
  272. data/tasks/benchmarking.rake +9 -0
  273. data/tasks/building.rake +24 -20
  274. data/tasks/linting.rake +24 -13
  275. data/tasks/testing.rake +322 -205
  276. data/tasks/testing/mspec_special_calls.rb +44 -15
  277. data/tasks/testing/opal_rspec_smoketest.Gemfile +13 -0
  278. data/test/nodejs/fixtures/hello.rb +1 -0
  279. data/test/nodejs/test_file.rb +57 -0
  280. data/test/nodejs/test_io.rb +18 -0
  281. data/test/nodejs/test_opal_builder.rb +12 -0
  282. data/test/opal/unsupported_and_bugs.rb +9 -0
  283. metadata +127 -240
  284. data/lib/opal/parser/grammar.rb +0 -6157
  285. data/lib/opal/parser/grammar.y +0 -2011
  286. data/lib/opal/parser/keywords.rb +0 -66
  287. data/lib/opal/parser/lexer.rb +0 -1352
  288. data/lib/opal/parser/parser_scope.rb +0 -28
  289. data/lib/opal/parser/sexp.rb +0 -90
  290. data/lib/opal/sprockets.rb +0 -77
  291. data/lib/opal/sprockets/environment.rb +0 -23
  292. data/lib/opal/sprockets/erb.rb +0 -28
  293. data/lib/opal/sprockets/path_reader.rb +0 -36
  294. data/lib/opal/sprockets/processor.rb +0 -173
  295. data/lib/opal/sprockets/server.rb +0 -133
  296. data/lib/opal/sprockets/source_map_header_patch.rb +0 -41
  297. data/lib/opal/sprockets/source_map_server.rb +0 -117
  298. data/spec/filters/bugs/compiler_opal.rb +0 -5
  299. data/spec/filters/bugs/language_opal.rb +0 -88
  300. data/spec/filters/unsupported/module.rb +0 -8
  301. data/spec/lib/compiler/pre_processed_conditionals_spec.rb +0 -87
  302. data/spec/lib/lexer_spec.rb +0 -110
  303. data/spec/lib/parser/alias_spec.rb +0 -26
  304. data/spec/lib/parser/and_spec.rb +0 -13
  305. data/spec/lib/parser/aref_spec.rb +0 -10
  306. data/spec/lib/parser/attrasgn_spec.rb +0 -28
  307. data/spec/lib/parser/begin_spec.rb +0 -42
  308. data/spec/lib/parser/block_spec.rb +0 -12
  309. data/spec/lib/parser/break_spec.rb +0 -17
  310. data/spec/lib/parser/call_spec.rb +0 -201
  311. data/spec/lib/parser/class_spec.rb +0 -35
  312. data/spec/lib/parser/comments_spec.rb +0 -11
  313. data/spec/lib/parser/def_spec.rb +0 -109
  314. data/spec/lib/parser/if_spec.rb +0 -26
  315. data/spec/lib/parser/iter_spec.rb +0 -59
  316. data/spec/lib/parser/lambda_spec.rb +0 -219
  317. data/spec/lib/parser/literal_spec.rb +0 -118
  318. data/spec/lib/parser/masgn_spec.rb +0 -37
  319. data/spec/lib/parser/module_spec.rb +0 -27
  320. data/spec/lib/parser/not_spec.rb +0 -21
  321. data/spec/lib/parser/op_asgn1_spec.rb +0 -23
  322. data/spec/lib/parser/op_asgn2_spec.rb +0 -23
  323. data/spec/lib/parser/op_asgn_spec.rb +0 -17
  324. data/spec/lib/parser/or_spec.rb +0 -13
  325. data/spec/lib/parser/return_spec.rb +0 -22
  326. data/spec/lib/parser/sclass_spec.rb +0 -21
  327. data/spec/lib/parser/string_spec.rb +0 -286
  328. data/spec/lib/parser/super_spec.rb +0 -20
  329. data/spec/lib/parser/unary_spec.rb +0 -52
  330. data/spec/lib/parser/undef_spec.rb +0 -19
  331. data/spec/lib/parser/unless_spec.rb +0 -13
  332. data/spec/lib/parser/variables_spec.rb +0 -112
  333. data/spec/lib/parser/while_spec.rb +0 -15
  334. data/spec/lib/parser/yield_spec.rb +0 -20
  335. data/spec/lib/sprockets/erb_spec.rb +0 -38
  336. data/spec/lib/sprockets/path_reader_spec.rb +0 -41
  337. data/spec/lib/sprockets/processor_spec.rb +0 -79
  338. data/spec/lib/sprockets/server_spec.rb +0 -102
  339. data/spec/lib/sprockets_spec.rb +0 -39
  340. data/spec/lib/tilt/opal_spec.rb +0 -37
  341. data/spec/opal/core/language/block_spec.rb +0 -538
  342. data/spec/opal/core/language/proc_spec.rb +0 -263
  343. data/spec/opal/core/language/variables_spec.rb +0 -1366
  344. data/spec/opal/core/runtime/block_send_spec.rb +0 -28
  345. data/spec/opal/core/runtime/send_spec.rb +0 -34
  346. data/spec/support/parser_helpers.rb +0 -37
  347. data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +0 -277
  348. data/stdlib/nodejs/node_modules/js-yaml/LICENSE +0 -21
  349. data/stdlib/nodejs/node_modules/js-yaml/README.md +0 -288
  350. data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +0 -140
  351. data/stdlib/nodejs/node_modules/js-yaml/bower.json +0 -23
  352. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +0 -3
  353. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +0 -102
  354. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +0 -18
  355. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +0 -31
  356. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +0 -22
  357. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +0 -18
  358. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +0 -197
  359. data/stdlib/nodejs/node_modules/js-yaml/index.js +0 -7
  360. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +0 -39
  361. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +0 -62
  362. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +0 -554
  363. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +0 -25
  364. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +0 -1581
  365. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +0 -78
  366. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +0 -103
  367. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +0 -18
  368. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
  369. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +0 -28
  370. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +0 -17
  371. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +0 -25
  372. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +0 -61
  373. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +0 -133
  374. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +0 -37
  375. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +0 -110
  376. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +0 -183
  377. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -85
  378. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -84
  379. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -27
  380. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +0 -8
  381. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +0 -12
  382. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +0 -36
  383. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +0 -56
  384. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +0 -61
  385. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +0 -8
  386. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +0 -33
  387. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +0 -8
  388. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +0 -98
  389. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +0 -115
  390. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +0 -21
  391. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +0 -239
  392. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +0 -36
  393. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +0 -22
  394. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +0 -59
  395. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +0 -13
  396. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +0 -33
  397. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +0 -28
  398. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +0 -23
  399. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +0 -49
  400. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +0 -35
  401. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +0 -270
  402. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +0 -1
  403. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +0 -146
  404. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +0 -55
  405. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +0 -47
  406. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +0 -40
  407. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +0 -48
  408. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +0 -50
  409. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +0 -43
  410. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +0 -27
  411. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +0 -26
  412. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +0 -148
  413. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +0 -50
  414. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +0 -481
  415. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +0 -14
  416. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +0 -50
  417. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +0 -54
  418. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +0 -75
  419. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +0 -1168
  420. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +0 -18
  421. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +0 -88
  422. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +0 -798
  423. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +0 -77
  424. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +0 -2
  425. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +0 -8
  426. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +0 -825
  427. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +0 -33
  428. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +0 -11
  429. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +0 -10
  430. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +0 -26
  431. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +0 -673
  432. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
  433. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +0 -107
  434. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +0 -23
  435. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +0 -22
  436. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +0 -69
  437. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +0 -6
  438. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +0 -1415
  439. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +0 -62
  440. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +0 -73
  441. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +0 -117
  442. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +0 -177
  443. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +0 -3908
  444. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +0 -69
  445. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +0 -239
  446. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +0 -422
  447. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +0 -66
  448. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +0 -387
  449. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +0 -20238
  450. data/stdlib/nodejs/node_modules/js-yaml/package.json +0 -83
@@ -1,69 +0,0 @@
1
- {
2
- "name": "esprima",
3
- "description": "ECMAScript parsing infrastructure for multipurpose analysis",
4
- "homepage": "http://esprima.org",
5
- "main": "esprima.js",
6
- "bin": {
7
- "esparse": "./bin/esparse.js",
8
- "esvalidate": "./bin/esvalidate.js"
9
- },
10
- "files": [
11
- "bin",
12
- "test/run.js",
13
- "test/runner.js",
14
- "test/test.js",
15
- "test/compat.js",
16
- "test/reflect.js",
17
- "esprima.js"
18
- ],
19
- "version": "1.0.4",
20
- "engines": {
21
- "node": ">=0.4.0"
22
- },
23
- "maintainers": [
24
- {
25
- "name": "ariya",
26
- "email": "ariya.hidayat@gmail.com"
27
- }
28
- ],
29
- "repository": {
30
- "type": "git",
31
- "url": "http://github.com/ariya/esprima.git"
32
- },
33
- "licenses": [
34
- {
35
- "type": "BSD",
36
- "url": "http://github.com/ariya/esprima/raw/master/LICENSE.BSD"
37
- }
38
- ],
39
- "keywords": [
40
- "ast",
41
- "ecmascript",
42
- "javascript",
43
- "parser",
44
- "syntax"
45
- ],
46
- "scripts": {
47
- "test": "node test/run.js",
48
- "benchmark": "node test/benchmarks.js",
49
- "benchmark-quick": "node test/benchmarks.js quick"
50
- },
51
- "_id": "esprima@1.0.4",
52
- "dist": {
53
- "shasum": "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad",
54
- "tarball": "http://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz"
55
- },
56
- "_npmVersion": "1.1.61",
57
- "_npmUser": {
58
- "name": "ariya",
59
- "email": "ariya.hidayat@gmail.com"
60
- },
61
- "directories": {},
62
- "_shasum": "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad",
63
- "_resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
64
- "_from": "esprima@>=1.0.2 <1.1.0",
65
- "bugs": {
66
- "url": "https://github.com/ariya/esprima/issues"
67
- },
68
- "readme": "ERROR: No README data found!"
69
- }
@@ -1,239 +0,0 @@
1
- /*
2
- Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
3
- Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>
4
-
5
- Redistribution and use in source and binary forms, with or without
6
- modification, are permitted provided that the following conditions are met:
7
-
8
- * Redistributions of source code must retain the above copyright
9
- notice, this list of conditions and the following disclaimer.
10
- * Redistributions in binary form must reproduce the above copyright
11
- notice, this list of conditions and the following disclaimer in the
12
- documentation and/or other materials provided with the distribution.
13
-
14
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
- ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
18
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
- */
25
-
26
- /*jslint node: true */
27
- /*global document: true, window:true, esprima: true, testReflect: true */
28
-
29
- var runTests;
30
-
31
- function getContext(esprima, reportCase, reportFailure) {
32
- 'use strict';
33
-
34
- var Reflect, Pattern;
35
-
36
- // Maps Mozilla Reflect object to our Esprima parser.
37
- Reflect = {
38
- parse: function (code) {
39
- var result;
40
-
41
- reportCase(code);
42
-
43
- try {
44
- result = esprima.parse(code);
45
- } catch (error) {
46
- result = error;
47
- }
48
-
49
- return result;
50
- }
51
- };
52
-
53
- // This is used by Reflect test suite to match a syntax tree.
54
- Pattern = function (obj) {
55
- var pattern;
56
-
57
- // Poor man's deep object cloning.
58
- pattern = JSON.parse(JSON.stringify(obj));
59
-
60
- // Special handling for regular expression literal since we need to
61
- // convert it to a string literal, otherwise it will be decoded
62
- // as object "{}" and the regular expression would be lost.
63
- if (obj.type && obj.type === 'Literal') {
64
- if (obj.value instanceof RegExp) {
65
- pattern = {
66
- type: obj.type,
67
- value: obj.value.toString()
68
- };
69
- }
70
- }
71
-
72
- // Special handling for branch statement because SpiderMonkey
73
- // prefers to put the 'alternate' property before 'consequent'.
74
- if (obj.type && obj.type === 'IfStatement') {
75
- pattern = {
76
- type: pattern.type,
77
- test: pattern.test,
78
- consequent: pattern.consequent,
79
- alternate: pattern.alternate
80
- };
81
- }
82
-
83
- // Special handling for do while statement because SpiderMonkey
84
- // prefers to put the 'test' property before 'body'.
85
- if (obj.type && obj.type === 'DoWhileStatement') {
86
- pattern = {
87
- type: pattern.type,
88
- body: pattern.body,
89
- test: pattern.test
90
- };
91
- }
92
-
93
- function adjustRegexLiteralAndRaw(key, value) {
94
- if (key === 'value' && value instanceof RegExp) {
95
- value = value.toString();
96
- } else if (key === 'raw' && typeof value === "string") {
97
- // Ignore Esprima-specific 'raw' property.
98
- return undefined;
99
- }
100
- return value;
101
- }
102
-
103
- if (obj.type && (obj.type === 'Program')) {
104
- pattern.assert = function (tree) {
105
- var actual, expected;
106
- actual = JSON.stringify(tree, adjustRegexLiteralAndRaw, 4);
107
- expected = JSON.stringify(obj, null, 4);
108
-
109
- if (expected !== actual) {
110
- reportFailure(expected, actual);
111
- }
112
- };
113
- }
114
-
115
- return pattern;
116
- };
117
-
118
- return {
119
- Reflect: Reflect,
120
- Pattern: Pattern
121
- };
122
- }
123
-
124
- if (typeof window !== 'undefined') {
125
- // Run all tests in a browser environment.
126
- runTests = function () {
127
- 'use strict';
128
-
129
- var total = 0,
130
- failures = 0;
131
-
132
- function setText(el, str) {
133
- if (typeof el.innerText === 'string') {
134
- el.innerText = str;
135
- } else {
136
- el.textContent = str;
137
- }
138
- }
139
-
140
- function reportCase(code) {
141
- var report, e;
142
- report = document.getElementById('report');
143
- e = document.createElement('pre');
144
- e.setAttribute('class', 'code');
145
- setText(e, code);
146
- report.appendChild(e);
147
- total += 1;
148
- }
149
-
150
- function reportFailure(expected, actual) {
151
- var report, e;
152
-
153
- failures += 1;
154
-
155
- report = document.getElementById('report');
156
-
157
- e = document.createElement('p');
158
- setText(e, 'Expected');
159
- report.appendChild(e);
160
-
161
- e = document.createElement('pre');
162
- e.setAttribute('class', 'expected');
163
- setText(e, expected);
164
- report.appendChild(e);
165
-
166
- e = document.createElement('p');
167
- setText(e, 'Actual');
168
- report.appendChild(e);
169
-
170
- e = document.createElement('pre');
171
- e.setAttribute('class', 'actual');
172
- setText(e, actual);
173
- report.appendChild(e);
174
- }
175
-
176
- setText(document.getElementById('version'), esprima.version);
177
-
178
- window.setTimeout(function () {
179
- var tick, context = getContext(esprima, reportCase, reportFailure);
180
-
181
- tick = new Date();
182
- testReflect(context.Reflect, context.Pattern);
183
- tick = (new Date()) - tick;
184
-
185
- if (failures > 0) {
186
- setText(document.getElementById('status'), total + ' tests. ' +
187
- 'Failures: ' + failures + '. ' + tick + ' ms');
188
- } else {
189
- setText(document.getElementById('status'), total + ' tests. ' +
190
- 'No failure. ' + tick + ' ms');
191
- }
192
- }, 513);
193
- };
194
- } else {
195
- (function (global) {
196
- 'use strict';
197
- var esprima = require('../esprima'),
198
- tick,
199
- total = 0,
200
- failures = [],
201
- header,
202
- current,
203
- context;
204
-
205
- function reportCase(code) {
206
- total += 1;
207
- current = code;
208
- }
209
-
210
- function reportFailure(expected, actual) {
211
- failures.push({
212
- source: current,
213
- expected: expected.toString(),
214
- actual: actual.toString()
215
- });
216
- }
217
-
218
- context = getContext(esprima, reportCase, reportFailure);
219
-
220
- tick = new Date();
221
- require('./reflect').testReflect(context.Reflect, context.Pattern);
222
- tick = (new Date()) - tick;
223
-
224
- header = total + ' tests. ' + failures.length + ' failures. ' +
225
- tick + ' ms';
226
- if (failures.length) {
227
- console.error(header);
228
- failures.forEach(function (failure) {
229
- console.error(failure.source + ': Expected\n ' +
230
- failure.expected.split('\n').join('\n ') +
231
- '\nto match\n ' + failure.actual);
232
- });
233
- } else {
234
- console.log(header);
235
- }
236
- process.exit(failures.length === 0 ? 0 : 1);
237
- }(this));
238
- }
239
- /* vim: set sw=4 ts=4 et tw=80 : */
@@ -1,422 +0,0 @@
1
- // This is modified from Mozilla Reflect.parse test suite (the file is located
2
- // at js/src/tests/js1_8_5/extensions/reflect-parse.js in the source tree).
3
- //
4
- // Some notable changes:
5
- // * Removed unsupported features (destructuring, let, comprehensions...).
6
- // * Removed tests for E4X (ECMAScript for XML).
7
- // * Removed everything related to builder.
8
- // * Enclosed every 'Pattern' construct with a scope.
9
- // * Tweaked some expected tree to remove generator field.
10
- // * Removed the test for bug 632030 and bug 632024.
11
-
12
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
13
- /*
14
- * Any copyright is dedicated to the Public Domain.
15
- * http://creativecommons.org/licenses/publicdomain/
16
- */
17
-
18
- (function (exports) {
19
-
20
- function testReflect(Reflect, Pattern) {
21
-
22
- function program(elts) { return Pattern({ type: "Program", body: elts }) }
23
- function exprStmt(expr) { return Pattern({ type: "ExpressionStatement", expression: expr }) }
24
- function throwStmt(expr) { return Pattern({ type: "ThrowStatement", argument: expr }) }
25
- function returnStmt(expr) { return Pattern({ type: "ReturnStatement", argument: expr }) }
26
- function yieldExpr(expr) { return Pattern({ type: "YieldExpression", argument: expr }) }
27
- function lit(val) { return Pattern({ type: "Literal", value: val }) }
28
- var thisExpr = Pattern({ type: "ThisExpression" });
29
- function funDecl(id, params, body) { return Pattern({ type: "FunctionDeclaration",
30
- id: id,
31
- params: params,
32
- defaults: [],
33
- body: body,
34
- rest: null,
35
- generator: false,
36
- expression: false
37
- }) }
38
- function genFunDecl(id, params, body) { return Pattern({ type: "FunctionDeclaration",
39
- id: id,
40
- params: params,
41
- defaults: [],
42
- body: body,
43
- rest: null,
44
- generator: false,
45
- expression: false
46
- }) }
47
- function declarator(id, init) { return Pattern({ type: "VariableDeclarator", id: id, init: init }) }
48
- function varDecl(decls) { return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "var" }) }
49
- function letDecl(decls) { return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "let" }) }
50
- function constDecl(decls) { return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "const" }) }
51
- function ident(name) { return Pattern({ type: "Identifier", name: name }) }
52
- function dotExpr(obj, id) { return Pattern({ type: "MemberExpression", computed: false, object: obj, property: id }) }
53
- function memExpr(obj, id) { return Pattern({ type: "MemberExpression", computed: true, object: obj, property: id }) }
54
- function forStmt(init, test, update, body) { return Pattern({ type: "ForStatement", init: init, test: test, update: update, body: body }) }
55
- function forInStmt(lhs, rhs, body) { return Pattern({ type: "ForInStatement", left: lhs, right: rhs, body: body, each: false }) }
56
- function forEachInStmt(lhs, rhs, body) { return Pattern({ type: "ForInStatement", left: lhs, right: rhs, body: body, each: true }) }
57
- function breakStmt(lab) { return Pattern({ type: "BreakStatement", label: lab }) }
58
- function continueStmt(lab) { return Pattern({ type: "ContinueStatement", label: lab }) }
59
- function blockStmt(body) { return Pattern({ type: "BlockStatement", body: body }) }
60
- var emptyStmt = Pattern({ type: "EmptyStatement" });
61
- function ifStmt(test, cons, alt) { return Pattern({ type: "IfStatement", test: test, alternate: alt, consequent: cons }) }
62
- function labStmt(lab, stmt) { return Pattern({ type: "LabeledStatement", label: lab, body: stmt }) }
63
- function withStmt(obj, stmt) { return Pattern({ type: "WithStatement", object: obj, body: stmt }) }
64
- function whileStmt(test, stmt) { return Pattern({ type: "WhileStatement", test: test, body: stmt }) }
65
- function doStmt(stmt, test) { return Pattern({ type: "DoWhileStatement", test: test, body: stmt }) }
66
- function switchStmt(disc, cases) { return Pattern({ type: "SwitchStatement", discriminant: disc, cases: cases }) }
67
- function caseClause(test, stmts) { return Pattern({ type: "SwitchCase", test: test, consequent: stmts }) }
68
- function defaultClause(stmts) { return Pattern({ type: "SwitchCase", test: null, consequent: stmts }) }
69
- function catchClause(id, guard, body) { if (guard) { return Pattern({ type: "GuardedCatchClause", param: id, guard: guard, body: body }) } else { return Pattern({ type: "CatchClause", param: id, body: body }) } }
70
- function tryStmt(body, guarded, catches, fin) { return Pattern({ type: "TryStatement", block: body, guardedHandlers: guarded, handlers: catches, finalizer: fin }) }
71
- function letStmt(head, body) { return Pattern({ type: "LetStatement", head: head, body: body }) }
72
- function funExpr(id, args, body, gen) { return Pattern({ type: "FunctionExpression",
73
- id: id,
74
- params: args,
75
- defaults: [],
76
- body: body,
77
- rest: null,
78
- generator: false,
79
- expression: false
80
- }) }
81
- function genFunExpr(id, args, body) { return Pattern({ type: "FunctionExpression",
82
- id: id,
83
- params: args,
84
- defaults: [],
85
- body: body,
86
- rest: null,
87
- generator: false,
88
- expression: false
89
- }) }
90
-
91
- function unExpr(op, arg) { return Pattern({ type: "UnaryExpression", operator: op, argument: arg, prefix: true }) }
92
- function binExpr(op, left, right) { return Pattern({ type: "BinaryExpression", operator: op, left: left, right: right }) }
93
- function aExpr(op, left, right) { return Pattern({ type: "AssignmentExpression", operator: op, left: left, right: right }) }
94
- function updExpr(op, arg, prefix) { return Pattern({ type: "UpdateExpression", operator: op, argument: arg, prefix: prefix }) }
95
- function logExpr(op, left, right) { return Pattern({ type: "LogicalExpression", operator: op, left: left, right: right }) }
96
-
97
- function condExpr(test, cons, alt) { return Pattern({ type: "ConditionalExpression", test: test, consequent: cons, alternate: alt }) }
98
- function seqExpr(exprs) { return Pattern({ type: "SequenceExpression", expressions: exprs }) }
99
- function newExpr(callee, args) { return Pattern({ type: "NewExpression", callee: callee, arguments: args }) }
100
- function callExpr(callee, args) { return Pattern({ type: "CallExpression", callee: callee, arguments: args }) }
101
- function arrExpr(elts) { return Pattern({ type: "ArrayExpression", elements: elts }) }
102
- function objExpr(elts) { return Pattern({ type: "ObjectExpression", properties: elts }) }
103
- function objProp(key, value, kind) { return Pattern({ type: "Property", key: key, value: value, kind: kind }) }
104
-
105
- function arrPatt(elts) { return Pattern({ type: "ArrayPattern", elements: elts }) }
106
- function objPatt(elts) { return Pattern({ type: "ObjectPattern", properties: elts }) }
107
-
108
- function localSrc(src) { return "(function(){ " + src + " })" }
109
- function localPatt(patt) { return program([exprStmt(funExpr(null, [], blockStmt([patt])))]) }
110
- function blockSrc(src) { return "(function(){ { " + src + " } })" }
111
- function blockPatt(patt) { return program([exprStmt(funExpr(null, [], blockStmt([blockStmt([patt])])))]) }
112
-
113
- function assertBlockStmt(src, patt) {
114
- blockPatt(patt).assert(Reflect.parse(blockSrc(src)));
115
- }
116
-
117
- function assertBlockExpr(src, patt) {
118
- assertBlockStmt(src, exprStmt(patt));
119
- }
120
-
121
- function assertBlockDecl(src, patt, builder) {
122
- blockPatt(patt).assert(Reflect.parse(blockSrc(src), {builder: builder}));
123
- }
124
-
125
- function assertLocalStmt(src, patt) {
126
- localPatt(patt).assert(Reflect.parse(localSrc(src)));
127
- }
128
-
129
- function assertLocalExpr(src, patt) {
130
- assertLocalStmt(src, exprStmt(patt));
131
- }
132
-
133
- function assertLocalDecl(src, patt) {
134
- localPatt(patt).assert(Reflect.parse(localSrc(src)));
135
- }
136
-
137
- function assertGlobalStmt(src, patt, builder) {
138
- program([patt]).assert(Reflect.parse(src, {builder: builder}));
139
- }
140
-
141
- function assertGlobalExpr(src, patt, builder) {
142
- program([exprStmt(patt)]).assert(Reflect.parse(src, {builder: builder}));
143
- //assertStmt(src, exprStmt(patt));
144
- }
145
-
146
- function assertGlobalDecl(src, patt) {
147
- program([patt]).assert(Reflect.parse(src));
148
- }
149
-
150
- function assertProg(src, patt) {
151
- program(patt).assert(Reflect.parse(src));
152
- }
153
-
154
- function assertStmt(src, patt) {
155
- assertLocalStmt(src, patt);
156
- assertGlobalStmt(src, patt);
157
- assertBlockStmt(src, patt);
158
- }
159
-
160
- function assertExpr(src, patt) {
161
- assertLocalExpr(src, patt);
162
- assertGlobalExpr(src, patt);
163
- assertBlockExpr(src, patt);
164
- }
165
-
166
- function assertDecl(src, patt) {
167
- assertLocalDecl(src, patt);
168
- assertGlobalDecl(src, patt);
169
- assertBlockDecl(src, patt);
170
- }
171
-
172
- function assertError(src, errorType) {
173
- try {
174
- Reflect.parse(src);
175
- } catch (e) {
176
- return;
177
- }
178
- throw new Error("expected " + errorType.name + " for " + uneval(src));
179
- }
180
-
181
-
182
- // general tests
183
-
184
- // NB: These are useful but for now jit-test doesn't do I/O reliably.
185
-
186
- //program(_).assert(Reflect.parse(snarf('data/flapjax.txt')));
187
- //program(_).assert(Reflect.parse(snarf('data/jquery-1.4.2.txt')));
188
- //program(_).assert(Reflect.parse(snarf('data/prototype.js')));
189
- //program(_).assert(Reflect.parse(snarf('data/dojo.js.uncompressed.js')));
190
- //program(_).assert(Reflect.parse(snarf('data/mootools-1.2.4-core-nc.js')));
191
-
192
-
193
- // declarations
194
-
195
- assertDecl("var x = 1, y = 2, z = 3",
196
- varDecl([declarator(ident("x"), lit(1)),
197
- declarator(ident("y"), lit(2)),
198
- declarator(ident("z"), lit(3))]));
199
- assertDecl("var x, y, z",
200
- varDecl([declarator(ident("x"), null),
201
- declarator(ident("y"), null),
202
- declarator(ident("z"), null)]));
203
- assertDecl("function foo() { }",
204
- funDecl(ident("foo"), [], blockStmt([])));
205
- assertDecl("function foo() { return 42 }",
206
- funDecl(ident("foo"), [], blockStmt([returnStmt(lit(42))])));
207
-
208
-
209
- // Bug 591437: rebound args have their defs turned into uses
210
- assertDecl("function f(a) { function a() { } }",
211
- funDecl(ident("f"), [ident("a")], blockStmt([funDecl(ident("a"), [], blockStmt([]))])));
212
- assertDecl("function f(a,b,c) { function b() { } }",
213
- funDecl(ident("f"), [ident("a"),ident("b"),ident("c")], blockStmt([funDecl(ident("b"), [], blockStmt([]))])));
214
-
215
- // expressions
216
-
217
- assertExpr("true", lit(true));
218
- assertExpr("false", lit(false));
219
- assertExpr("42", lit(42));
220
- assertExpr("(/asdf/)", lit(/asdf/));
221
- assertExpr("this", thisExpr);
222
- assertExpr("foo", ident("foo"));
223
- assertExpr("foo.bar", dotExpr(ident("foo"), ident("bar")));
224
- assertExpr("foo[bar]", memExpr(ident("foo"), ident("bar")));
225
- assertExpr("(function(){})", funExpr(null, [], blockStmt([])));
226
- assertExpr("(function f() {})", funExpr(ident("f"), [], blockStmt([])));
227
- assertExpr("(function f(x,y,z) {})", funExpr(ident("f"), [ident("x"),ident("y"),ident("z")], blockStmt([])));
228
- assertExpr("(++x)", updExpr("++", ident("x"), true));
229
- assertExpr("(x++)", updExpr("++", ident("x"), false));
230
- assertExpr("(+x)", unExpr("+", ident("x")));
231
- assertExpr("(-x)", unExpr("-", ident("x")));
232
- assertExpr("(!x)", unExpr("!", ident("x")));
233
- assertExpr("(~x)", unExpr("~", ident("x")));
234
- assertExpr("(delete x)", unExpr("delete", ident("x")));
235
- assertExpr("(typeof x)", unExpr("typeof", ident("x")));
236
- assertExpr("(void x)", unExpr("void", ident("x")));
237
- assertExpr("(x == y)", binExpr("==", ident("x"), ident("y")));
238
- assertExpr("(x != y)", binExpr("!=", ident("x"), ident("y")));
239
- assertExpr("(x === y)", binExpr("===", ident("x"), ident("y")));
240
- assertExpr("(x !== y)", binExpr("!==", ident("x"), ident("y")));
241
- assertExpr("(x < y)", binExpr("<", ident("x"), ident("y")));
242
- assertExpr("(x <= y)", binExpr("<=", ident("x"), ident("y")));
243
- assertExpr("(x > y)", binExpr(">", ident("x"), ident("y")));
244
- assertExpr("(x >= y)", binExpr(">=", ident("x"), ident("y")));
245
- assertExpr("(x << y)", binExpr("<<", ident("x"), ident("y")));
246
- assertExpr("(x >> y)", binExpr(">>", ident("x"), ident("y")));
247
- assertExpr("(x >>> y)", binExpr(">>>", ident("x"), ident("y")));
248
- assertExpr("(x + y)", binExpr("+", ident("x"), ident("y")));
249
- assertExpr("(w + x + y + z)", binExpr("+", binExpr("+", binExpr("+", ident("w"), ident("x")), ident("y")), ident("z")));
250
- assertExpr("(x - y)", binExpr("-", ident("x"), ident("y")));
251
- assertExpr("(w - x - y - z)", binExpr("-", binExpr("-", binExpr("-", ident("w"), ident("x")), ident("y")), ident("z")));
252
- assertExpr("(x * y)", binExpr("*", ident("x"), ident("y")));
253
- assertExpr("(x / y)", binExpr("/", ident("x"), ident("y")));
254
- assertExpr("(x % y)", binExpr("%", ident("x"), ident("y")));
255
- assertExpr("(x | y)", binExpr("|", ident("x"), ident("y")));
256
- assertExpr("(x ^ y)", binExpr("^", ident("x"), ident("y")));
257
- assertExpr("(x & y)", binExpr("&", ident("x"), ident("y")));
258
- assertExpr("(x in y)", binExpr("in", ident("x"), ident("y")));
259
- assertExpr("(x instanceof y)", binExpr("instanceof", ident("x"), ident("y")));
260
- assertExpr("(x = y)", aExpr("=", ident("x"), ident("y")));
261
- assertExpr("(x += y)", aExpr("+=", ident("x"), ident("y")));
262
- assertExpr("(x -= y)", aExpr("-=", ident("x"), ident("y")));
263
- assertExpr("(x *= y)", aExpr("*=", ident("x"), ident("y")));
264
- assertExpr("(x /= y)", aExpr("/=", ident("x"), ident("y")));
265
- assertExpr("(x %= y)", aExpr("%=", ident("x"), ident("y")));
266
- assertExpr("(x <<= y)", aExpr("<<=", ident("x"), ident("y")));
267
- assertExpr("(x >>= y)", aExpr(">>=", ident("x"), ident("y")));
268
- assertExpr("(x >>>= y)", aExpr(">>>=", ident("x"), ident("y")));
269
- assertExpr("(x |= y)", aExpr("|=", ident("x"), ident("y")));
270
- assertExpr("(x ^= y)", aExpr("^=", ident("x"), ident("y")));
271
- assertExpr("(x &= y)", aExpr("&=", ident("x"), ident("y")));
272
- assertExpr("(x || y)", logExpr("||", ident("x"), ident("y")));
273
- assertExpr("(x && y)", logExpr("&&", ident("x"), ident("y")));
274
- assertExpr("(w || x || y || z)", logExpr("||", logExpr("||", logExpr("||", ident("w"), ident("x")), ident("y")), ident("z")))
275
- assertExpr("(x ? y : z)", condExpr(ident("x"), ident("y"), ident("z")));
276
- assertExpr("(x,y)", seqExpr([ident("x"),ident("y")]))
277
- assertExpr("(x,y,z)", seqExpr([ident("x"),ident("y"),ident("z")]))
278
- assertExpr("(a,b,c,d,e,f,g)", seqExpr([ident("a"),ident("b"),ident("c"),ident("d"),ident("e"),ident("f"),ident("g")]));
279
- assertExpr("(new Object)", newExpr(ident("Object"), []));
280
- assertExpr("(new Object())", newExpr(ident("Object"), []));
281
- assertExpr("(new Object(42))", newExpr(ident("Object"), [lit(42)]));
282
- assertExpr("(new Object(1,2,3))", newExpr(ident("Object"), [lit(1),lit(2),lit(3)]));
283
- assertExpr("(String())", callExpr(ident("String"), []));
284
- assertExpr("(String(42))", callExpr(ident("String"), [lit(42)]));
285
- assertExpr("(String(1,2,3))", callExpr(ident("String"), [lit(1),lit(2),lit(3)]));
286
- assertExpr("[]", arrExpr([]));
287
- assertExpr("[1]", arrExpr([lit(1)]));
288
- assertExpr("[1,2]", arrExpr([lit(1),lit(2)]));
289
- assertExpr("[1,2,3]", arrExpr([lit(1),lit(2),lit(3)]));
290
- assertExpr("[1,,2,3]", arrExpr([lit(1),,lit(2),lit(3)]));
291
- assertExpr("[1,,,2,3]", arrExpr([lit(1),,,lit(2),lit(3)]));
292
- assertExpr("[1,,,2,,3]", arrExpr([lit(1),,,lit(2),,lit(3)]));
293
- assertExpr("[1,,,2,,,3]", arrExpr([lit(1),,,lit(2),,,lit(3)]));
294
- assertExpr("[,1,2,3]", arrExpr([,lit(1),lit(2),lit(3)]));
295
- assertExpr("[,,1,2,3]", arrExpr([,,lit(1),lit(2),lit(3)]));
296
- assertExpr("[,,,1,2,3]", arrExpr([,,,lit(1),lit(2),lit(3)]));
297
- assertExpr("[,,,1,2,3,]", arrExpr([,,,lit(1),lit(2),lit(3)]));
298
- assertExpr("[,,,1,2,3,,]", arrExpr([,,,lit(1),lit(2),lit(3),undefined]));
299
- assertExpr("[,,,1,2,3,,,]", arrExpr([,,,lit(1),lit(2),lit(3),undefined,undefined]));
300
- assertExpr("[,,,,,]", arrExpr([undefined,undefined,undefined,undefined,undefined]));
301
- assertExpr("({})", objExpr([]));
302
- assertExpr("({x:1})", objExpr([objProp(ident("x"), lit(1), "init")]));
303
- assertExpr("({x:1, y:2})", objExpr([objProp(ident("x"), lit(1), "init"),
304
- objProp(ident("y"), lit(2), "init")]));
305
- assertExpr("({x:1, y:2, z:3})", objExpr([objProp(ident("x"), lit(1), "init"),
306
- objProp(ident("y"), lit(2), "init"),
307
- objProp(ident("z"), lit(3), "init") ]));
308
- assertExpr("({x:1, 'y':2, z:3})", objExpr([objProp(ident("x"), lit(1), "init"),
309
- objProp(lit("y"), lit(2), "init"),
310
- objProp(ident("z"), lit(3), "init") ]));
311
- assertExpr("({'x':1, 'y':2, z:3})", objExpr([objProp(lit("x"), lit(1), "init"),
312
- objProp(lit("y"), lit(2), "init"),
313
- objProp(ident("z"), lit(3), "init") ]));
314
- assertExpr("({'x':1, 'y':2, 3:3})", objExpr([objProp(lit("x"), lit(1), "init"),
315
- objProp(lit("y"), lit(2), "init"),
316
- objProp(lit(3), lit(3), "init") ]));
317
-
318
- // Bug 571617: eliminate constant-folding
319
- assertExpr("2 + 3", binExpr("+", lit(2), lit(3)));
320
-
321
- // Bug 632026: constant-folding
322
- assertExpr("typeof(0?0:a)", unExpr("typeof", condExpr(lit(0), lit(0), ident("a"))));
323
-
324
- // Bug 632056: constant-folding
325
- program([exprStmt(ident("f")),
326
- ifStmt(lit(1),
327
- funDecl(ident("f"), [], blockStmt([])),
328
- null)]).assert(Reflect.parse("f; if (1) function f(){}"));
329
-
330
- // statements
331
-
332
- assertStmt("throw 42", throwStmt(lit(42)));
333
- assertStmt("for (;;) break", forStmt(null, null, null, breakStmt(null)));
334
- assertStmt("for (x; y; z) break", forStmt(ident("x"), ident("y"), ident("z"), breakStmt(null)));
335
- assertStmt("for (var x; y; z) break", forStmt(varDecl([declarator(ident("x"), null)]), ident("y"), ident("z"), breakStmt(null)));
336
- assertStmt("for (var x = 42; y; z) break", forStmt(varDecl([declarator(ident("x"), lit(42))]), ident("y"), ident("z"), breakStmt(null)));
337
- assertStmt("for (x; ; z) break", forStmt(ident("x"), null, ident("z"), breakStmt(null)));
338
- assertStmt("for (var x; ; z) break", forStmt(varDecl([declarator(ident("x"), null)]), null, ident("z"), breakStmt(null)));
339
- assertStmt("for (var x = 42; ; z) break", forStmt(varDecl([declarator(ident("x"), lit(42))]), null, ident("z"), breakStmt(null)));
340
- assertStmt("for (x; y; ) break", forStmt(ident("x"), ident("y"), null, breakStmt(null)));
341
- assertStmt("for (var x; y; ) break", forStmt(varDecl([declarator(ident("x"), null)]), ident("y"), null, breakStmt(null)));
342
- assertStmt("for (var x = 42; y; ) break", forStmt(varDecl([declarator(ident("x"),lit(42))]), ident("y"), null, breakStmt(null)));
343
- assertStmt("for (var x in y) break", forInStmt(varDecl([declarator(ident("x"),null)]), ident("y"), breakStmt(null)));
344
- assertStmt("for (x in y) break", forInStmt(ident("x"), ident("y"), breakStmt(null)));
345
- assertStmt("{ }", blockStmt([]));
346
- assertStmt("{ throw 1; throw 2; throw 3; }", blockStmt([ throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]));
347
- assertStmt(";", emptyStmt);
348
- assertStmt("if (foo) throw 42;", ifStmt(ident("foo"), throwStmt(lit(42)), null));
349
- assertStmt("if (foo) throw 42; else true;", ifStmt(ident("foo"), throwStmt(lit(42)), exprStmt(lit(true))));
350
- assertStmt("if (foo) { throw 1; throw 2; throw 3; }",
351
- ifStmt(ident("foo"),
352
- blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
353
- null));
354
- assertStmt("if (foo) { throw 1; throw 2; throw 3; } else true;",
355
- ifStmt(ident("foo"),
356
- blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
357
- exprStmt(lit(true))));
358
- assertStmt("foo: for(;;) break foo;", labStmt(ident("foo"), forStmt(null, null, null, breakStmt(ident("foo")))));
359
- assertStmt("foo: for(;;) continue foo;", labStmt(ident("foo"), forStmt(null, null, null, continueStmt(ident("foo")))));
360
- assertStmt("with (obj) { }", withStmt(ident("obj"), blockStmt([])));
361
- assertStmt("with (obj) { obj; }", withStmt(ident("obj"), blockStmt([exprStmt(ident("obj"))])));
362
- assertStmt("while (foo) { }", whileStmt(ident("foo"), blockStmt([])));
363
- assertStmt("while (foo) { foo; }", whileStmt(ident("foo"), blockStmt([exprStmt(ident("foo"))])));
364
- assertStmt("do { } while (foo);", doStmt(blockStmt([]), ident("foo")));
365
- assertStmt("do { foo; } while (foo)", doStmt(blockStmt([exprStmt(ident("foo"))]), ident("foo")));
366
- assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; }",
367
- switchStmt(ident("foo"),
368
- [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
369
- caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
370
- defaultClause([ exprStmt(lit(3)) ]) ]));
371
- assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; case 42: 42; }",
372
- switchStmt(ident("foo"),
373
- [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
374
- caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
375
- defaultClause([ exprStmt(lit(3)) ]),
376
- caseClause(lit(42), [ exprStmt(lit(42)) ]) ]));
377
- assertStmt("try { } catch (e) { }",
378
- tryStmt(blockStmt([]),
379
- [],
380
- [ catchClause(ident("e"), null, blockStmt([])) ],
381
- null));
382
- assertStmt("try { } catch (e) { } finally { }",
383
- tryStmt(blockStmt([]),
384
- [],
385
- [ catchClause(ident("e"), null, blockStmt([])) ],
386
- blockStmt([])));
387
- assertStmt("try { } finally { }",
388
- tryStmt(blockStmt([]),
389
- [],
390
- [],
391
- blockStmt([])));
392
-
393
- // redeclarations (TOK_NAME nodes with lexdef)
394
-
395
- assertStmt("function f() { function g() { } function g() { } }",
396
- funDecl(ident("f"), [], blockStmt([funDecl(ident("g"), [], blockStmt([])),
397
- funDecl(ident("g"), [], blockStmt([]))])));
398
-
399
- assertStmt("function f() { function g() { } function g() { return 42 } }",
400
- funDecl(ident("f"), [], blockStmt([funDecl(ident("g"), [], blockStmt([])),
401
- funDecl(ident("g"), [], blockStmt([returnStmt(lit(42))]))])));
402
-
403
- assertStmt("function f() { var x = 42; var x = 43; }",
404
- funDecl(ident("f"), [], blockStmt([varDecl([declarator(ident("x"),lit(42))]),
405
- varDecl([declarator(ident("x"),lit(43))])])));
406
-
407
- // getters and setters
408
-
409
- assertExpr("({ get x() { return 42 } })",
410
- objExpr([ objProp(ident("x"),
411
- funExpr(null, [], blockStmt([returnStmt(lit(42))])),
412
- "get" ) ]));
413
- assertExpr("({ set x(v) { return 42 } })",
414
- objExpr([ objProp(ident("x"),
415
- funExpr(null, [ident("v")], blockStmt([returnStmt(lit(42))])),
416
- "set" ) ]));
417
-
418
- }
419
-
420
- exports.testReflect = testReflect;
421
-
422
- }(typeof exports === 'undefined' ? this : exports));