opal 0.10.6 → 0.11.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'opal/nodes/base'
2
3
 
3
4
  module Opal
@@ -26,8 +27,9 @@ module Opal
26
27
  end
27
28
 
28
29
  push "#{redo_var} = false;" if uses_redo?
29
- line body_code, "}"
30
+ line body_code
30
31
  end
32
+ line "}"
31
33
  end
32
34
 
33
35
  wrap '(function() {', '; return nil; })()' if wrap_in_closure?
@@ -50,6 +52,10 @@ module Opal
50
52
  end
51
53
  end
52
54
 
55
+ class WhilePostNode < WhileNode
56
+ handle :while_post
57
+ end
58
+
53
59
  class UntilNode < WhileNode
54
60
  handle :until
55
61
 
@@ -61,5 +67,9 @@ module Opal
61
67
  ")) {"
62
68
  end
63
69
  end
70
+
71
+ class UntilPostNode < UntilNode
72
+ handle :until_post
73
+ end
64
74
  end
65
75
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'opal/nodes/base'
2
3
 
3
4
  module Opal
@@ -52,23 +53,6 @@ module Opal
52
53
  end
53
54
  end
54
55
 
55
- # special opal yield assign, for `a = yield(arg1, arg2)` to assign
56
- # to a temp value to make yield expr into stmt.
57
- #
58
- # level will always be stmt as its the reason for this to exist
59
- #
60
- # s(:yasgn, :a, s(:yield, arg1, arg2))
61
- class YasgnNode < BaseYieldNode
62
- handle :yasgn
63
-
64
- children :var_name, :yield_args
65
-
66
- def compile
67
- compile_call(s(*yield_args[1..-1]), :stmt)
68
- wrap "(#{var_name} = ", ")"
69
- end
70
- end
71
-
72
56
  # Created by `#returns()` for when a yield statement should return
73
57
  # it's value (its last in a block etc).
74
58
  class ReturnableYieldNode < BaseYieldNode
@@ -1,787 +1,45 @@
1
- require 'opal/parser/sexp'
2
- require 'opal/parser/lexer'
3
- require 'opal/parser/grammar'
4
- require 'opal/parser/parser_scope'
1
+ # frozen_string_literal: true
2
+ require 'opal/ast/builder'
3
+ require 'opal/rewriter'
5
4
 
6
- module Opal
7
- # {Parser} is used to parse a string of ruby code into a tree of {Opal::Sexp}
8
- # to represent the given ruby source code. The {Opal::Compiler} used this tree
9
- # of sexp expressions, and turns them into the resulting javascript code.
10
- #
11
- # Usually, you would want to use {Opal::Compiler} directly, but this class
12
- # can be useful for debugging the compiler, as well as building tools around
13
- # the opal compiler to view the code structure.
14
- #
15
- # Invalid ruby code will raise an exception.
16
- #
17
- # Opal::Parser.new.parse "ruby code"
18
- # # => sexp tree
19
- #
20
- class Parser < Racc::Parser
21
-
22
- attr_reader :lexer, :file, :scope
23
-
24
- # Parse the given ruby source. An optional file can be given which is used
25
- # for file context for some ruby expressions (e.g. `__FILE__`).
26
- #
27
- # If the given ruby code is not valid ruby, then an error will be raised.
28
- #
29
- # @param source [String] ruby source code
30
- # @param file [String] filename for context of ruby code
31
- # @return [Opal::Sexp] sexp expression tree representing ruby code
32
- def parse(source, file = '(string)')
33
- @yydebug = true if !!ENV['RACC_DEBUG']
34
- @file = file
35
- @scopes = []
36
- @lexer = Lexer.new(source, file)
37
- @lexer.parser = self
38
-
39
- self.parse_to_sexp
40
- rescue => error
41
- message = [
42
- nil,
43
- error.message,
44
- "Source: #{@file}:#{lexer.line}:#{lexer.column}",
45
- source.split("\n")[lexer.line-1],
46
- '~'*(lexer.column-1 > 0 ? lexer.column-1 : 0) + '^',
47
- ].join("\n")
48
-
49
- raise error.class, message, error.backtrace
50
- end
51
-
52
- def parse_to_sexp
53
- push_scope
54
- result = do_parse
55
- pop_scope
56
-
57
- result
58
- end
59
-
60
- def next_token
61
- @lexer.next_token
62
- end
63
-
64
- def s(*parts)
65
- Sexp.new(parts)
66
- end
67
-
68
- def push_scope(type = nil)
69
- top = @scopes.last
70
- scope = ParserScope.new type
71
- scope.parent = top
72
- @scopes << scope
73
- @scope = scope
74
- end
75
-
76
- def pop_scope
77
- @scopes.pop
78
- @scope = @scopes.last
79
- end
80
-
81
- def on_error(t, val, vstack)
82
- raise "parse error on value #{value(val).inspect} (#{token_to_str(t) || '?'}) :#{@file}:#{lexer.line}"
83
- end
84
-
85
- def value(tok)
86
- tok[0]
87
- end
88
-
89
- def source(tok)
90
- tok ? tok[1] : nil
91
- end
92
-
93
- def s0(type, source)
94
- sexp = s(type)
95
- sexp.source = source
96
- sexp
97
- end
98
-
99
- def s1(type, first, source)
100
- sexp = s(type, first)
101
- sexp.source = source
102
- sexp
103
- end
104
-
105
- def new_nil(tok)
106
- s0(:nil, source(tok))
107
- end
108
-
109
- def new_self(tok)
110
- s0(:self, source(tok))
111
- end
112
-
113
- def new_true(tok)
114
- s0(:true, source(tok))
115
- end
116
-
117
- def new_false(tok)
118
- s0(:false, source(tok))
119
- end
120
-
121
- def new___FILE__(tok)
122
- s1(:str, self.file, source(tok))
123
- end
124
-
125
- def new___LINE__(tok)
126
- s1(:int, lexer.line, source(tok))
127
- end
128
-
129
- def new_ident(tok)
130
- s1(:identifier, value(tok).to_sym, source(tok))
131
- end
132
-
133
- def new_int(tok)
134
- s1(:int, value(tok), source(tok))
135
- end
136
-
137
- def new_float(tok)
138
- s1(:float, value(tok), source(tok))
139
- end
140
-
141
- def new_ivar(tok)
142
- s1(:ivar, value(tok).to_sym, source(tok))
143
- end
144
-
145
- def new_gvar(tok)
146
- s1(:gvar, value(tok).to_sym, source(tok))
147
- end
148
-
149
- def new_cvar(tok)
150
- s1(:cvar, value(tok).to_sym, source(tok))
151
- end
152
-
153
- def new_const(tok)
154
- s1(:const, value(tok).to_sym, source(tok))
155
- end
156
-
157
- def new_colon2(lhs, tok, name)
158
- sexp = s(:colon2, lhs, value(name).to_sym)
159
- sexp.source = source(tok)
160
- sexp
161
- end
162
-
163
- def new_colon3(tok, name)
164
- s1(:colon3, value(name).to_sym, source(name))
165
- end
166
-
167
- def new_sym(tok)
168
- s1(:sym, value(tok).to_sym, source(tok))
169
- end
170
-
171
- def new_alias(kw, new, old)
172
- sexp = s(:alias, new, old)
173
- sexp.source = source(kw)
174
- sexp
175
- end
176
-
177
- def new_break(kw, args=nil)
178
- if args.nil?
179
- sexp = s(:break)
180
- elsif args.length == 1
181
- sexp = s(:break, args[0])
182
- else
183
- sexp = s(:break, s(:array, *args))
184
- end
185
-
186
- sexp
187
- end
188
-
189
- def new_return(kw, args=nil)
190
- if args.nil?
191
- sexp = s(:return)
192
- elsif args.length == 1
193
- sexp = s(:return, args[0])
194
- else
195
- sexp = s(:return, s(:array, *args))
196
- end
197
-
198
- sexp
199
- end
200
-
201
- def new_next(kw, args=[])
202
- if args.length == 1
203
- sexp = s(:next, args[0])
204
- else
205
- sexp = s(:next, s(:array, *args))
206
- end
207
-
208
- sexp
209
- end
210
-
211
- def new_block(stmt = nil)
212
- sexp = s(:block)
213
- sexp << stmt if stmt
214
- sexp
215
- end
216
-
217
- def new_compstmt(block)
218
- comp = if block.size == 1
219
- nil
220
- elsif block.size == 2
221
- block[1]
222
- else
223
- block
224
- end
225
-
226
- if comp && comp.type == :begin && comp.size == 2
227
- result = comp[1]
228
- else
229
- result = comp
230
- end
231
-
232
- result
233
- end
234
-
235
- def new_body(compstmt, res, els, ens)
236
- s = compstmt || s(:block)
237
-
238
- if res
239
- s = s(:rescue, s)
240
- res.each { |r| s << r }
241
- s << els if els
242
- end
243
-
244
- ens ? s(:ensure, s, ens) : s
245
- end
246
-
247
- def new_def(kw, recv, name, args, body, end_tok)
248
- body = s(:block, body) if body.type != :block
249
- body << s(:nil) if body.size == 1
250
-
251
- sexp = s(:def, recv, value(name).to_sym, args, body)
252
- sexp.source = source(kw)
253
- sexp
254
- end
255
-
256
- def new_class(start, path, sup, body, endt)
257
- sexp = s(:class, path, sup, body)
258
- sexp.source = source(start)
259
- sexp
260
- end
261
-
262
- def new_sclass(kw, expr, body, end_tok)
263
- sexp = s(:sclass, expr, body)
264
- sexp.source = source(kw)
265
- sexp
266
- end
267
-
268
- def new_module(kw, path, body, end_tok)
269
- sexp = s(:module, path, body)
270
- sexp.source = source(kw)
271
- sexp
272
- end
273
-
274
- def new_iter(args, body)
275
- args ||= nil
276
- s = s(:iter, args)
277
- s << body if body
278
- s
279
- end
280
-
281
- def new_if(if_tok, expr, stmt, tail)
282
- sexp = s(:if, expr, stmt, tail)
283
- sexp.source = source(if_tok)
284
- sexp
285
- end
286
-
287
- def new_while(kw, test, body)
288
- sexp = s(:while, test, body)
289
- sexp.source = source(kw)
290
- sexp
291
- end
292
-
293
- def new_until(kw, test, body)
294
- sexp = s(:until, test, body)
295
- sexp.source = source(kw)
296
- sexp
297
- end
298
-
299
- def new_rescue_mod(kw, expr, resc)
300
- sexp = s(:rescue_mod, expr, resc)
301
- sexp.source = source(kw)
302
- sexp
303
- end
304
-
305
- def new_array(start, args, finish)
306
- args ||= []
307
- sexp = s(:array, *args)
308
- sexp.source = source(start)
309
- sexp
310
- end
311
-
312
- def new_hash(open, assocs, close)
313
- sexp = s(:hash, *assocs)
314
- sexp.source = source(open)
315
- sexp
316
- end
317
-
318
- def new_not(kw, expr)
319
- s1(:not, expr, source(kw))
5
+ if RUBY_ENGINE == 'opal'
6
+ class << Parser::Source::Buffer
7
+ def recognize_encoding(s)
8
+ Encoding::UTF_8
320
9
  end
10
+ end
11
+ end
321
12
 
322
- def new_paren(open, expr, close)
323
- if expr.nil? or expr == [:block]
324
- s1(:paren, s0(:nil, source(open)), source(open))
325
- else
326
- s1(:paren, expr, source(open))
327
- end
13
+ module Opal
14
+ class Parser < ::Parser::Ruby23
15
+ def initialize(*)
16
+ super(Opal::AST::Builder.new)
328
17
  end
329
18
 
330
- def new_args_tail(kwarg, kwrest, block)
331
- [kwarg, kwrest, block]
332
- end
19
+ def self.default_parser
20
+ parser = super
333
21
 
334
- def new_restarg(rest)
335
- restname = rest[1..-1]
22
+ parser.diagnostics.all_errors_are_fatal = true
23
+ parser.diagnostics.ignore_warnings = true
336
24
 
337
- if restname.empty?
338
- [s(:restarg)]
25
+ if RUBY_ENGINE == 'opal'
26
+ parser.diagnostics.consumer = ->(diag){}
339
27
  else
340
- scope.add_local restname.to_sym
341
- [s(:restarg, restname.to_sym)]
342
- end
343
- end
344
-
345
- def new_optarg(opt)
346
- if opt
347
- opt[1..-1].map do |_opt|
348
- s(:optarg, _opt[1], _opt[2])
349
- end
350
- end
351
- end
352
-
353
- def new_shadowarg(shadowarg)
354
- if shadowarg
355
- shadowname = value(shadowarg).to_sym
356
- scope.add_local shadowname
357
- s(:shadowarg, shadowname)
358
- end
359
- end
360
-
361
- def new_args(norm, tail)
362
- res = s(:args)
363
-
364
- if norm
365
- norm.each do |arg|
366
- if arg.is_a?(Sexp)
367
- # restarg (a, *b, c)
368
- # optarg (a = 1, *b, c)
369
- # (order matters)
370
- res << arg
371
- else
372
- # simple arg
373
- scope.add_local arg
374
- res << s(:arg, arg)
375
- end
28
+ parser.diagnostics.consumer = lambda do |diagnostic|
29
+ $stderr.puts(diagnostic.render)
376
30
  end
377
31
  end
378
-
379
- # kwarg
380
- if tail and tail[0]
381
- tail[0].each do |kwarg|
382
- res << kwarg
383
- end
384
- end
385
-
386
- # kwrestarg
387
- if tail and tail[1]
388
- res << tail[1]
389
- end
390
-
391
- # block
392
- if tail and tail[2]
393
- blockname = tail[2].to_s[1..-1].to_sym
394
- scope.add_local blockname
395
- res << s(:blockarg, blockname)
396
- end
397
-
398
- res
399
- end
400
-
401
- def new_kwarg(name)
402
- scope.add_local name[1]
403
- s(:kwarg, name[1])
404
- end
405
-
406
- def new_kwoptarg(name, val)
407
- scope.add_local name[1]
408
- s(:kwoptarg, name[1], val)
409
- end
410
-
411
- def new_kwrestarg(name = nil)
412
- result = s(:kwrestarg)
413
-
414
- if name
415
- scope.add_local name[0].to_sym
416
- result << name[0].to_sym
417
- end
418
-
419
- result
420
- end
421
-
422
- def new_kwsplat(hash)
423
- s(:kwsplat, hash)
424
- end
425
-
426
- def new_method_call_with_block(method_call, block_arg)
427
- receiver, method_name, call_args = *method_call.children
428
-
429
- if call_args && block_arg
430
- last_arg = call_args.last
431
-
432
- if Sexp === last_arg && last_arg.type == :block_pass
433
- raise 'both block argument and literal block are passed'
434
- end
435
- end
436
-
437
- method_call << block_arg
438
- end
439
-
440
- def new_block_arg_splat(rest)
441
- if rest
442
- r = rest.to_s[1..-1].to_sym
443
- scope.add_local r
444
- new_splat(nil, s(:lasgn, r))
445
- end
446
- end
447
-
448
- def new_block_args(norm, tail, shadow_args=nil)
449
- res = s(:args)
450
-
451
- if norm
452
- norm.each do |arg|
453
- if arg.is_a? Symbol
454
- scope.add_local arg
455
- res << s(:arg, arg)
456
- elsif arg.is_a?(Sexp)
457
- res << arg
458
- elsif arg.nil?
459
- res.meta[:has_trailing_comma] = true
460
- end
461
- end
462
- end
463
-
464
- # kwargs
465
- if tail && tail[0]
466
- tail[0].each do |kwarg|
467
- res << kwarg
468
- end
469
- end
470
-
471
- # kwrestarg
472
- if tail && tail[1]
473
- res << tail[1]
474
- end
475
-
476
- # block
477
- if tail && tail[2]
478
- block = tail[2].to_s[1..-1].to_sym
479
- res << s(:block_pass, s(:lasgn, block))
480
- scope.add_local block
481
- end
482
-
483
- # shadow args (m{|;a|})
484
- if shadow_args
485
- res.concat(shadow_args)
486
- end
487
-
488
- s(:masgn, res)
489
- end
490
-
491
- def new_call(recv, meth, args = nil)
492
- args ||= []
493
- sexp = s(:call, recv, value(meth).to_sym, s(:arglist, *args))
494
- sexp.source = source(meth)
495
- sexp
496
- end
497
-
498
- def new_js_call(recv, meth, args = nil)
499
- if args
500
- sexp = s(:jscall, recv, value(meth).to_sym, s(:arglist, *args))
501
- sexp.source = source(meth)
502
- else
503
- sexp = s(:jscall, recv, value(meth).to_sym, nil)
504
- sexp.source = source(meth)
505
- end
506
-
507
- sexp
508
- end
509
-
510
- def new_binary_call(recv, meth, arg)
511
- new_call(recv, meth, [arg])
512
- end
513
-
514
- def new_unary_call(op, recv)
515
- new_call(recv, op, [])
516
- end
517
-
518
- def new_and(lhs, tok, rhs)
519
- sexp = s(:and, lhs, rhs)
520
- sexp.source = source(tok)
521
- sexp
522
- end
523
-
524
- def new_or(lhs, tok, rhs)
525
- sexp = s(:or, lhs, rhs)
526
- sexp.source = source(tok)
527
- sexp
528
- end
529
-
530
- def new_irange(beg, op, finish)
531
- sexp = s(:irange, beg, finish)
532
- sexp.source = source(op)
533
- sexp
534
- end
535
-
536
- def new_erange(beg, op, finish)
537
- sexp = s(:erange, beg, finish)
538
- sexp.source = source(op)
539
- sexp
540
- end
541
-
542
- def negate_num(sexp)
543
- sexp.array[1] = -sexp.array[1]
544
- sexp
32
+ parser
545
33
  end
546
34
 
547
- def add_block_pass(arglist, block)
548
- arglist << block if block
549
- arglist
550
- end
551
-
552
- def new_block_pass(amper_tok, val)
553
- s1(:block_pass, val, source(amper_tok))
554
- end
555
-
556
- def new_splat(tok, value)
557
- s1(:splat, value, source(tok))
558
- end
559
-
560
- def new_op_asgn(op, lhs, rhs)
561
- case value(op).to_sym
562
- when :"||"
563
- result = s(:op_asgn_or, new_gettable(lhs))
564
- result << (lhs << rhs)
565
- when :"&&"
566
- result = s(:op_asgn_and, new_gettable(lhs))
567
- result << (lhs << rhs)
568
- else
569
- result = lhs
570
- result << new_call(new_gettable(lhs), op, [rhs])
571
-
572
- end
573
-
574
- result
575
- end
576
-
577
- def new_op_asgn1(lhs, args, op, rhs)
578
- arglist = s(:arglist, *args)
579
- sexp = s(:op_asgn1, lhs, arglist, value(op), rhs)
580
- sexp.source = source(op)
581
- sexp
582
- end
583
-
584
- def op_to_setter(op)
585
- "#{value(op)}=".to_sym
586
- end
587
-
588
- def new_attrasgn(recv, op, args=[])
589
- arglist = s(:arglist, *args)
590
- sexp = s(:attrasgn, recv, op, arglist)
591
- sexp
592
- end
593
-
594
- def new_js_attrasgn(recv, args)
595
- arglist = s(:arglist, *args)
596
- sexp = s(:jsattrasgn, recv, nil, arglist)
597
- sexp
598
- end
599
-
600
- def new_assign(lhs, tok, rhs)
601
- case lhs.type
602
- when :iasgn, :cdecl, :lasgn, :gasgn, :cvdecl, :nth_ref
603
- lhs << rhs
604
- lhs
605
- when :call, :attrasgn, :jsattrasgn
606
- lhs.last << rhs
607
- lhs
608
- when :colon2
609
- lhs << rhs
610
- lhs.type = :casgn
611
- lhs
612
- when :colon3
613
- lhs << rhs
614
- lhs.type = :casgn3
615
- lhs
616
- else
617
- raise "Bad lhs for new_assign: #{lhs.type}"
618
- end
619
- end
620
-
621
- def new_assignable(ref)
622
- case ref.type
623
- when :ivar
624
- ref.type = :iasgn
625
- when :const
626
- ref.type = :cdecl
627
- when :identifier
628
- scope.add_local ref[1] unless scope.has_local? ref[1]
629
- ref.type = :lasgn
630
- when :gvar
631
- ref.type = :gasgn
632
- when :cvar
633
- ref.type = :cvdecl
634
- else
635
- raise SyntaxError, "Bad new_assignable type: #{ref.type}"
636
- end
637
-
638
- ref
639
- end
640
-
641
- def new_gettable(ref)
642
- res = case ref.type
643
- when :lasgn
644
- s(:lvar, ref[1])
645
- when :iasgn
646
- s(:ivar, ref[1])
647
- when :gasgn
648
- s(:gvar, ref[1])
649
- when :cvdecl
650
- s(:cvar, ref[1])
651
- when :cdecl
652
- s(:const, ref[1])
653
- else
654
- raise "Bad new_gettable ref: #{ref.type}"
655
- end
656
-
657
- res.source = ref.source
658
- res
659
- end
660
-
661
- def new_var_ref(ref)
662
- case ref.type
663
- when :self, :nil, :true, :false, :line, :file
664
- ref
665
- when :const
666
- ref
667
- when :ivar, :gvar, :cvar
668
- ref
669
- when :int
670
- # this is when we passed __LINE__ which is converted into :int
671
- ref
672
- when :str
673
- # returns for __FILE__ as it is converted into str
674
- ref
675
- when :identifier
676
- result = if scope.has_local? ref[1]
677
- s(:lvar, ref[1])
678
- else
679
- s(:call, nil, ref[1], s(:arglist))
680
- end
681
-
682
- result.source = ref.source
683
- result
684
- else
685
- raise "Bad var_ref type: #{ref.type}"
686
- end
687
- end
688
-
689
- def new_super(kw, args)
690
- if args.nil?
691
- sexp = s(:super, nil)
692
- else
693
- sexp = s(:super, s(:arglist, *args))
694
- end
695
-
696
- sexp.source = source(kw)
697
- sexp
698
- end
699
-
700
- def new_yield(args)
701
- args ||= []
702
- s(:yield, *args)
703
- end
704
-
705
- def new_xstr(start_t, str, end_t)
706
- return s(:xstr, '') unless str
707
- case str.type
708
- when :str then str.type = :xstr
709
- when :dstr then str.type = :dxstr
710
- when :evstr then str = s(:dxstr, '', str)
711
- end
712
-
713
- str.source = source(start_t)
714
-
715
- str
716
- end
717
-
718
- def new_dsym(str)
719
- return s(:sym, :"") unless str
720
- case str.type
721
- when :str
722
- str.type = :sym
723
- str[1] = str[1].to_sym
724
- when :dstr
725
- str.type = :dsym
726
- when :evstr
727
- str = s(:dsym, str)
728
- end
729
-
730
- str
731
- end
732
-
733
- def new_evstr(str)
734
- s(:evstr, str)
735
- end
736
-
737
- def new_str(str)
738
- # cover empty strings
739
- return s(:str, "") unless str
740
- # catch s(:str, "", other_str)
741
- if str.size == 3 and str[1] == "" and str.type == :str
742
- return str[2]
743
- # catch s(:str, "content", more_content)
744
- elsif str.type == :str && str.size > 3
745
- str.type = :dstr
746
- str
747
- # top level evstr should be a dstr
748
- elsif str.type == :evstr
749
- s(:dstr, "", str)
750
- else
751
- str
752
- end
753
- end
754
-
755
- def new_regexp(reg, ending)
756
- return s(:regexp, '') unless reg
757
- case reg.type
758
- when :str
759
- s(:regexp, reg[1], value(ending))
760
- when :evstr
761
- s(:dregx, "", reg)
762
- when :dstr
763
- reg.type = :dregx
764
- reg
765
- end
766
- end
767
-
768
- def str_append(str, str2)
769
- return str2 unless str
770
- return str unless str2
771
-
772
- if str.type == :evstr
773
- str = s(:dstr, "", str)
774
- elsif str.type == :str
775
- str = s(:dstr, str[1])
776
- else
777
- #puts str.type
778
- end
779
- str << str2
780
- str
35
+ def parse(source_buffer)
36
+ parsed = super
37
+ rewriten = rewrite(parsed)
38
+ rewriten
781
39
  end
782
40
 
783
- def new_str_content(tok)
784
- s1(:str, value(tok), source(tok))
41
+ def rewrite(node)
42
+ Opal::Rewriter.new(node).process
785
43
  end
786
44
  end
787
45
  end