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,251 +1,65 @@
1
+ # frozen_string_literal: true
1
2
  require 'opal/nodes/base'
2
3
  require 'opal/nodes/call'
3
4
 
4
5
  module Opal
5
6
  module Nodes
6
- # recv.mid = rhs
7
- # s(:recv, :mid=, s(:arglist, rhs))
8
- class AttrAssignNode < CallNode
9
- handle :attrasgn
7
+ # recvr.JS[:prop]
8
+ # => recvr.prop
9
+ class JsAttrNode < Base
10
+ handle :jsattr
11
+ children :recvr, :property
10
12
 
11
- children :recvr, :meth, :arglist
12
-
13
- def default_compile
14
- # Skip, for now, if the method has square brackets: []=
15
- return super if meth.to_s !~ /#{REGEXP_START}\w+=#{REGEXP_END}/
16
-
17
- with_temp do |args_tmp|
18
- with_temp do |recv_tmp|
19
- args = expr(arglist)
20
- mid = mid_to_jsid meth.to_s
21
- push "((#{args_tmp} = [", args, "]), "+
22
- "#{recv_tmp} = ", recv(recv_sexp), ", ",
23
- recv_tmp, mid, ".apply(#{recv_tmp}, #{args_tmp}), "+
24
- "#{args_tmp}[#{args_tmp}.length-1])"
25
- end
26
- end
13
+ def compile
14
+ push recv(recvr), '[', expr(property), ']'
27
15
  end
28
16
  end
29
17
 
30
- # recv.JS[1] = rhs
31
- class JsAttrAssignNode < CallNode
18
+ # recvr.JS[:prop] = value
19
+ # => recvr.prop = value
20
+ class JsAttrAsgnNode < Base
32
21
  handle :jsattrasgn
33
22
 
34
- def record_method?
35
- false
36
- end
23
+ children :recvr, :property, :value
37
24
 
38
- def default_compile
39
- push recv(recv_sexp), '[', expr(arglist[1]), ']', '=', expr(arglist[2])
25
+ def compile
26
+ push recv(recvr), '[', expr(property), '] = ', expr(value)
40
27
  end
41
28
  end
42
29
 
43
- # recv.JS.prop
44
- # recv.JS[1]
45
- # recv.JS.meth(arg1, arg2)
46
30
  class JsCallNode < CallNode
47
31
  handle :jscall
48
32
 
49
- def record_method?
50
- false
51
- end
52
-
53
- def default_compile
54
- if meth == :[]
55
- push recv(recv_sexp), '[', expr(arglist), ']'
56
- else
57
- mid = ".#{meth}"
58
-
59
- splat = arglist[1..-1].any? { |a| a.first == :splat }
60
-
61
- if Sexp === arglist.last and arglist.last.type == :block_pass
62
- block = arglist.pop
63
- elsif iter
64
- block = iter
65
- end
33
+ def initialize(*)
34
+ super
66
35
 
67
- blktmp = scope.new_temp if block
68
- tmprecv = scope.new_temp if splat
69
-
70
- # must do this after assigning temp variables
71
- block = expr(block) if block
72
-
73
- recv_code = recv(recv_sexp)
74
- call_recv = s(:js_tmp, blktmp || recv_code)
75
-
76
- if blktmp
77
- arglist.push call_recv
78
- end
79
-
80
- args = expr(arglist)
81
-
82
- if tmprecv
83
- push "(#{tmprecv} = ", recv_code, ")#{mid}"
84
- else
85
- push recv_code, mid
86
- end
87
-
88
- if blktmp
89
- unshift "(#{blktmp} = ", block, ", "
90
- push ")"
91
- end
92
-
93
- if splat
94
- push ".apply(", tmprecv, ", ", args, ")"
95
- else
96
- push "(", args, ")"
97
- end
98
-
99
- scope.queue_temp blktmp if blktmp
36
+ # For .JS. call we pass a block
37
+ # as a plain JS callback
38
+ if @iter
39
+ @arglist = @arglist << @iter
100
40
  end
41
+ @iter = nil
101
42
  end
102
- end
103
-
104
- # lhs =~ rhs
105
- # s(:match3, lhs, rhs)
106
- class Match3Node < Base
107
- handle :match3
108
-
109
- children :lhs, :rhs
110
-
111
- def compile
112
- sexp = s(:call, lhs, :=~, s(:arglist, rhs))
113
- push process(sexp, @level)
114
- end
115
- end
116
-
117
- # a ||= rhs
118
- # s(:op_asgn_or, s(:lvar, :a), s(:lasgn, :a, rhs))
119
- class OpAsgnOrNode < Base
120
- handle :op_asgn_or
121
-
122
- children :recvr, :rhs
123
43
 
124
44
  def compile
125
- sexp = s(:or, recvr, rhs)
126
- push expr(sexp)
45
+ default_compile
127
46
  end
128
- end
129
-
130
- # a &&= rhs
131
- # s(:op_asgn_and, s(:lvar, :a), s(:lasgn, a:, rhs))
132
- class OpAsgnAndNode < Base
133
- handle :op_asgn_and
134
-
135
- children :recvr, :rhs
136
47
 
137
- def compile
138
- sexp = s(:and, recvr, rhs)
139
- push expr(sexp)
48
+ def method_jsid
49
+ "." + meth.to_s
140
50
  end
141
51
  end
142
52
 
143
- # lhs[args] ||= rhs
144
- # s(:op_asgn1, lhs, args, :||, rhs)
145
- class OpAsgn1Node < Base
146
- handle :op_asgn1
147
-
148
- children :lhs, :args, :op, :rhs
149
-
150
- def first_arg
151
- args[1]
152
- end
153
-
154
- def compile
155
- case op.to_s
156
- when '||' then compile_or
157
- when '&&' then compile_and
158
- else compile_operator
159
- end
160
- end
161
-
162
- def compile_operator
163
- with_temp do |a| # args
164
- with_temp do |r| # recv
165
- cur = s(:call, s(:js_tmp, r), :[], s(:arglist, s(:js_tmp, a)))
166
- rhs = s(:call, cur, op.to_sym, s(:arglist, self.rhs))
167
- call = s(:call, s(:js_tmp, r), :[]=, s(:arglist, s(:js_tmp, a), rhs))
168
-
169
- push "(#{a} = ", expr(first_arg), ", #{r} = ", expr(lhs)
170
- push ", ", expr(call), ")"
171
- end
172
- end
173
- end
174
-
175
- def compile_or
176
- with_temp do |a| # args
177
- with_temp do |r| # recv
178
- aref = s(:call, s(:js_tmp, r), :[], s(:arglist, s(:js_tmp, a)))
179
- aset = s(:call, s(:js_tmp, r), :[]=, s(:arglist, s(:js_tmp, a), rhs))
180
- orop = s(:or, aref, aset)
181
-
182
- push "(#{a} = ", expr(first_arg), ", #{r} = ", expr(lhs)
183
- push ", ", expr(orop), ")"
184
- end
185
- end
186
- end
187
-
188
- def compile_and
189
- with_temp do |a| # args
190
- with_temp do |r| # recv
191
- aref = s(:call, s(:js_tmp, r), :[], s(:arglist, s(:js_tmp, a)))
192
- aset = s(:call, s(:js_tmp, r), :[]=, s(:arglist, s(:js_tmp, a), rhs))
193
- andop = s(:and, aref, aset)
194
-
195
- push "(#{a} = ", expr(first_arg), ", #{r} = ", expr(lhs)
196
- push ", ", expr(andop), ")"
197
- end
198
- end
199
- end
200
- end
201
-
202
- # lhs.b += rhs
203
- # s(:op_asgn2, lhs, :b=, :+, rhs)
204
- class OpAsgn2Node < Base
205
- handle :op_asgn2
206
-
207
- children :lhs, :mid, :op, :rhs
53
+ # /regexp/ =~ rhs
54
+ # s(:match_with_lvasgn, lhs, rhs)
55
+ class Match3Node < Base
56
+ handle :match_with_lvasgn
208
57
 
209
- def meth
210
- mid.to_s[0..-2]
211
- end
58
+ children :lhs, :rhs
212
59
 
213
60
  def compile
214
- case op.to_s
215
- when '||' then compile_or
216
- when '&&' then compile_and
217
- else compile_operator
218
- end
219
- end
220
-
221
- def compile_or
222
- with_temp do |tmp|
223
- getr = s(:call, s(:js_tmp, tmp), meth, s(:arglist))
224
- asgn = s(:call, s(:js_tmp, tmp), mid, s(:arglist, rhs))
225
- orop = s(:or, getr, asgn)
226
-
227
- push "(#{tmp} = ", expr(lhs), ", ", expr(orop), ")"
228
- end
229
- end
230
-
231
- def compile_and
232
- with_temp do |tmp|
233
- getr = s(:call, s(:js_tmp, tmp), meth, s(:arglist))
234
- asgn = s(:call, s(:js_tmp, tmp), mid, s(:arglist, rhs))
235
- andop = s(:and, getr, asgn)
236
-
237
- push "(#{tmp} = ", expr(lhs), ", ", expr(andop), ")"
238
- end
239
- end
240
-
241
- def compile_operator
242
- with_temp do |tmp|
243
- getr = s(:call, s(:js_tmp, tmp), meth, s(:arglist))
244
- oper = s(:call, getr, op, s(:arglist, rhs))
245
- asgn = s(:call, s(:js_tmp, tmp), mid, s(:arglist, oper))
246
-
247
- push "(#{tmp} = ", expr(lhs), ", ", expr(asgn), ")"
248
- end
61
+ sexp = s(:send, lhs, :=~, rhs)
62
+ push process(sexp, @level)
249
63
  end
250
64
  end
251
65
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'opal/nodes/base'
2
3
 
3
4
  module Opal
@@ -8,34 +9,43 @@ module Opal
8
9
  children :condition
9
10
 
10
11
  def compile
12
+ compiler.in_case do
13
+ compile_code
14
+
15
+ wrap '(function() {', '})()' if needs_closure?
16
+ end
17
+ end
18
+
19
+ def compile_code
11
20
  handled_else = false
12
21
 
13
- compiler.in_case do
14
- if condition
15
- case_stmt[:cond] = true
16
- add_local '$case'
22
+ if condition
23
+ case_stmt[:cond] = true
24
+ add_local '$case'
17
25
 
18
- push "$case = ", expr(condition), ";"
19
- end
26
+ push "$case = ", expr(condition), ";"
27
+ end
20
28
 
21
- case_parts.each_with_index do |wen, idx|
22
- if wen and wen.type == :when
23
- compiler.returns(wen) if needs_closure?
29
+ case_parts.each_with_index do |wen, idx|
30
+ if wen
31
+ line
32
+ case wen.type
33
+ when :when
34
+ wen = compiler.returns(wen) if needs_closure?
24
35
  push "else " unless idx == 0
25
36
  push stmt(wen)
26
- elsif wen # s(:else)
37
+ else # s(:else)
27
38
  handled_else = true
28
39
  wen = compiler.returns(wen) if needs_closure?
29
40
  push "else {", stmt(wen), "}"
30
41
  end
31
42
  end
43
+ end
32
44
 
33
- # if we are having a closure, we must return a usable value
34
- if needs_closure? and !handled_else
35
- push "else { return nil }"
36
- end
37
-
38
- wrap '(function() {', '})()' if needs_closure?
45
+ # if we are having a closure, we must return a usable value
46
+ if needs_closure? and !handled_else
47
+ line
48
+ push "else { return nil }"
39
49
  end
40
50
  end
41
51
 
@@ -64,12 +74,16 @@ module Opal
64
74
  push ' || ' unless idx == 0
65
75
 
66
76
  if check.type == :splat
67
- push "(function($splt) { for (var i = 0; i < $splt.length; i++) {"
68
- push "if ($splt[i]['$===']($case)) { return true; }"
69
- push "} return false; })(", expr(check[1]), ")"
77
+ push "(function($splt) { for (var i = 0, ii = $splt.length; i < ii; i++) {"
78
+ if case_stmt[:cond]
79
+ push "if ($splt[i]['$===']($case)) { return true; }"
80
+ else
81
+ push "if (", js_truthy(check), ")) { return true; }"
82
+ end
83
+ push "} return false; })(", expr(check.children[0]), ")"
70
84
  else
71
85
  if case_stmt[:cond]
72
- call = s(:call, check, :===, s(:arglist, s(:js_tmp, '$case')))
86
+ call = s(:send, check, :===, s(:arglist, s(:js_tmp, '$case')))
73
87
  push expr(call)
74
88
  else
75
89
  push js_truthy(check)
@@ -81,7 +95,7 @@ module Opal
81
95
  end
82
96
 
83
97
  def when_checks
84
- whens.children
98
+ children[0..-2]
85
99
  end
86
100
 
87
101
  def case_stmt
@@ -89,7 +103,7 @@ module Opal
89
103
  end
90
104
 
91
105
  def body_code
92
- body || s(:nil)
106
+ children.last || s(:nil)
93
107
  end
94
108
  end
95
109
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'opal/nodes/module'
2
3
 
3
4
  module Opal
@@ -11,14 +12,14 @@ module Opal
11
12
  name, base = name_and_base
12
13
  helper :klass
13
14
 
14
- push "(function($base, $super) {"
15
+ push "(function($base, $super, $parent_nesting) {"
15
16
  line " function $#{name}(){};"
16
17
  line " var self = $#{name} = $klass($base, $super, '#{name}', $#{name});"
17
18
 
18
19
  in_scope do
19
20
  scope.name = name
20
21
  add_temp "#{scope.proto} = self.$$proto"
21
- add_temp "$scope = self.$$scope"
22
+ add_temp '$nesting = [self].concat($parent_nesting)'
22
23
 
23
24
  body_code = self.body_code
24
25
  empty_line
@@ -27,7 +28,7 @@ module Opal
27
28
  line body_code
28
29
  end
29
30
 
30
- line "})(", base, ", ", self.super_code, ")"
31
+ line "})(", base, ", ", self.super_code, ", $nesting)"
31
32
  end
32
33
 
33
34
  def super_code
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'opal/nodes/base'
2
3
 
3
4
  module Opal
@@ -5,25 +6,38 @@ module Opal
5
6
  class ConstNode < Base
6
7
  handle :const
7
8
 
8
- children :name
9
+ children :const_scope, :name
9
10
 
10
11
  def compile
11
- if name == :DATA and compiler.eof_content
12
+ if magical_data_const?
12
13
  push("$__END__")
14
+ elsif const_scope
15
+ push "Opal.const_get_qualified(", recv(const_scope), ", '#{name}')"
16
+ elsif compiler.eval?
17
+ push "Opal.const_get_relative($nesting, '#{name}')"
13
18
  else
14
- push "$scope.get('#{name}')"
19
+ push "Opal.const_get_relative($nesting, '#{name}')"
15
20
  end
16
21
  end
17
- end
18
22
 
19
- class ConstDeclarationNode < Base
20
- handle :cdecl
23
+ # Ruby has a magical const DATA
24
+ # that should be processed in a different way:
25
+ # 1. When current file contains __END__ in the end of the file
26
+ # DATA const should be resolved to the string located after __END__
27
+ # 2. When current file doesn't have __END__ section
28
+ # DATA const should be resolved to a regular ::DATA constant
29
+ def magical_data_const?
30
+ const_scope.nil? && name == :DATA and compiler.eof_content
31
+ end
32
+ end
21
33
 
22
- children :name, :base
34
+ # ::CONST
35
+ # s(:const, s(:cbase), :CONST)
36
+ class CbaseNode < Base
37
+ handle :cbase
23
38
 
24
39
  def compile
25
- push expr(base)
26
- wrap "Opal.cdecl($scope, '#{name}', ", ")"
40
+ push "'::'"
27
41
  end
28
42
  end
29
43
 
@@ -33,45 +47,11 @@ module Opal
33
47
  children :base, :name, :value
34
48
 
35
49
  def compile
36
- push "Opal.casgn("
37
- push expr(base)
38
- push ", '#{name}', "
39
- push expr(value)
40
- push ")"
41
- end
42
- end
43
-
44
- class ConstGetNode < Base
45
- handle :colon2
46
-
47
- children :base, :name
48
-
49
- def compile
50
- push "(("
51
- push expr(base)
52
- push ").$$scope.get('#{name}'))"
53
- end
54
- end
55
-
56
- class TopConstNode < Base
57
- handle :colon3
58
-
59
- children :name
60
-
61
- def compile
62
- push "Opal.get('#{name}')"
63
- end
64
- end
65
-
66
- class TopConstAssignNode < Base
67
- handle :casgn3
68
-
69
- children :name, :value
70
-
71
- def compile
72
- push "Opal.casgn(Opal.Object, '#{name}', "
73
- push expr(value)
74
- push ")"
50
+ if base
51
+ push "Opal.const_set(", expr(base), ", '#{name}', ", expr(value), ")"
52
+ else
53
+ push "Opal.const_set($nesting[0], '#{name}', ", expr(value), ")"
54
+ end
75
55
  end
76
56
  end
77
57
  end