opal 0.10.0 → 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 (460) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +19 -0
  3. data/.gitmodules +1 -1
  4. data/.jshintrc +1 -2
  5. data/.rspec +1 -2
  6. data/.travis.yml +28 -18
  7. data/.yardopts +3 -1
  8. data/CHANGELOG.md +139 -1
  9. data/Gemfile +16 -9
  10. data/HACKING.md +2 -0
  11. data/README.md +7 -6
  12. data/Rakefile +1 -1
  13. data/appveyor.yml +30 -0
  14. data/benchmark/bm_constant_lookup_big.rb +799 -0
  15. data/benchmark/bm_constant_lookup_small.rb +59 -0
  16. data/benchmark/bm_module_definition_big.rb +400 -0
  17. data/benchmark/bm_module_definition_small.rb +30 -0
  18. data/benchmark-ips/bm_case.rb +33 -0
  19. data/benchmark-ips/bm_constants_lookup.rb +13 -0
  20. data/benchmark-ips/bm_is_number.rb +29 -0
  21. data/benchmark-ips/bm_symbol_to_proc.rb +19 -0
  22. data/bin/opal +4 -2
  23. data/bin/opal-repl +23 -1
  24. data/docs/compiled_ruby.md +16 -14
  25. data/docs/faq.md +3 -3
  26. data/docs/rspec.md +2 -1
  27. data/docs/unsupported_features.md +6 -4
  28. data/examples/rack/Gemfile +1 -0
  29. data/examples/rack/Gemfile.lock +11 -7
  30. data/examples/rack/app/application.rb +14 -3
  31. data/examples/rack/app/user.rb +2 -0
  32. data/examples/rack/config.ru +1 -1
  33. data/examples/rack/index.html.erb +1 -0
  34. data/examples/sinatra/Gemfile +1 -1
  35. data/examples/sinatra/Gemfile.lock +8 -11
  36. data/examples/sinatra/app/application.rb +2 -0
  37. data/lib/opal/ast/builder.rb +17 -0
  38. data/lib/opal/ast/node.rb +30 -0
  39. data/lib/opal/builder.rb +14 -3
  40. data/lib/opal/builder_processors.rb +1 -0
  41. data/lib/opal/cli.rb +45 -59
  42. data/lib/opal/cli_options.rb +18 -11
  43. data/lib/opal/cli_runners/applescript.rb +3 -3
  44. data/lib/opal/cli_runners/nashorn.rb +1 -0
  45. data/lib/opal/cli_runners/nodejs.rb +4 -1
  46. data/lib/opal/cli_runners/phantom.js +1 -2
  47. data/lib/opal/cli_runners/phantomjs.rb +3 -2
  48. data/lib/opal/cli_runners/server.rb +1 -0
  49. data/lib/opal/cli_runners.rb +1 -0
  50. data/lib/opal/compiler.rb +145 -94
  51. data/lib/opal/config.rb +114 -36
  52. data/lib/opal/deprecations.rb +18 -0
  53. data/lib/opal/erb.rb +1 -0
  54. data/lib/opal/errors.rb +1 -0
  55. data/lib/opal/fragment.rb +1 -0
  56. data/lib/opal/hike_path_finder.rb +1 -0
  57. data/lib/opal/nodes/arglist.rb +2 -1
  58. data/lib/opal/nodes/args/initialize_kwargs.rb +1 -0
  59. data/lib/opal/nodes/args/kwarg.rb +7 -7
  60. data/lib/opal/nodes/args/kwoptarg.rb +6 -7
  61. data/lib/opal/nodes/args/kwrestarg.rb +5 -5
  62. data/lib/opal/nodes/args/mlhsarg.rb +3 -2
  63. data/lib/opal/nodes/args/normarg.rb +6 -7
  64. data/lib/opal/nodes/args/optarg.rb +5 -7
  65. data/lib/opal/nodes/args/post_args.rb +6 -5
  66. data/lib/opal/nodes/args/post_kwargs.rb +1 -0
  67. data/lib/opal/nodes/args/restarg.rb +7 -7
  68. data/lib/opal/nodes/array.rb +1 -0
  69. data/lib/opal/nodes/base.rb +24 -3
  70. data/lib/opal/nodes/call.rb +167 -155
  71. data/lib/opal/nodes/call_special.rb +31 -217
  72. data/lib/opal/nodes/case.rb +36 -22
  73. data/lib/opal/nodes/class.rb +4 -3
  74. data/lib/opal/nodes/constants.rb +28 -48
  75. data/lib/opal/nodes/csend.rb +25 -0
  76. data/lib/opal/nodes/def.rb +57 -17
  77. data/lib/opal/nodes/defined.rb +170 -60
  78. data/lib/opal/nodes/definitions.rb +40 -133
  79. data/lib/opal/nodes/defs.rb +29 -0
  80. data/lib/opal/nodes/for.rb +52 -25
  81. data/lib/opal/nodes/hash.rb +12 -35
  82. data/lib/opal/nodes/helpers.rb +27 -54
  83. data/lib/opal/nodes/if.rb +21 -32
  84. data/lib/opal/nodes/inline_args.rb +12 -13
  85. data/lib/opal/nodes/iter.rb +61 -36
  86. data/lib/opal/nodes/literal.rb +194 -114
  87. data/lib/opal/nodes/logic.rb +20 -25
  88. data/lib/opal/nodes/masgn.rb +20 -18
  89. data/lib/opal/nodes/module.rb +10 -11
  90. data/lib/opal/nodes/node_with_args.rb +14 -17
  91. data/lib/opal/nodes/rescue.rb +37 -70
  92. data/lib/opal/nodes/runtime_helpers.rb +8 -3
  93. data/lib/opal/nodes/scope.rb +9 -5
  94. data/lib/opal/nodes/singleton_class.rb +4 -3
  95. data/lib/opal/nodes/super.rb +115 -87
  96. data/lib/opal/nodes/top.rb +7 -2
  97. data/lib/opal/nodes/variables.rb +46 -35
  98. data/lib/opal/nodes/while.rb +11 -1
  99. data/lib/opal/nodes/yield.rb +1 -17
  100. data/lib/opal/nodes.rb +3 -0
  101. data/lib/opal/parser.rb +28 -770
  102. data/lib/opal/path_reader.rb +5 -1
  103. data/lib/opal/paths.rb +10 -4
  104. data/lib/opal/regexp_anchors.rb +1 -0
  105. data/lib/opal/rewriter.rb +60 -0
  106. data/lib/opal/rewriters/base.rb +60 -0
  107. data/lib/opal/rewriters/binary_operator_assignment.rb +144 -0
  108. data/lib/opal/rewriters/block_to_iter.rb +17 -0
  109. data/lib/opal/rewriters/break_finder.rb +34 -0
  110. data/lib/opal/rewriters/dot_js_syntax.rb +60 -0
  111. data/lib/opal/rewriters/explicit_writer_return.rb +58 -0
  112. data/lib/opal/rewriters/js_reserved_words.rb +111 -0
  113. data/lib/opal/rewriters/logical_operator_assignment.rb +155 -0
  114. data/lib/opal/rewriters/opal_engine_check.rb +42 -0
  115. data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +67 -0
  116. data/lib/opal/server.rb +4 -0
  117. data/lib/opal/simple_server.rb +100 -0
  118. data/lib/opal/source_map.rb +1 -1
  119. data/lib/opal/util.rb +5 -5
  120. data/lib/opal/version.rb +2 -1
  121. data/lib/opal.rb +6 -1
  122. data/lib/tilt/opal.rb +1 -0
  123. data/opal/README.md +1 -1
  124. data/opal/corelib/array.rb +137 -83
  125. data/opal/corelib/basic_object.rb +6 -6
  126. data/opal/corelib/class.rb +14 -11
  127. data/opal/corelib/complex.rb +5 -1
  128. data/opal/corelib/constants.rb +3 -3
  129. data/opal/corelib/enumerable.rb +129 -11
  130. data/opal/corelib/error.rb +35 -17
  131. data/opal/corelib/file.rb +65 -170
  132. data/opal/corelib/hash.rb +128 -13
  133. data/opal/corelib/helpers.rb +12 -15
  134. data/opal/corelib/io.rb +1 -0
  135. data/opal/corelib/kernel.rb +40 -21
  136. data/opal/corelib/marshal/read_buffer.rb +1 -1
  137. data/opal/corelib/method.rb +33 -13
  138. data/opal/corelib/module.rb +134 -82
  139. data/opal/corelib/number.rb +141 -25
  140. data/opal/corelib/numeric.rb +0 -8
  141. data/opal/corelib/process.rb +44 -4
  142. data/opal/corelib/random/seedrandom.js.rb +15 -0
  143. data/opal/corelib/random.rb +117 -0
  144. data/opal/corelib/range.rb +133 -10
  145. data/opal/corelib/regexp.rb +37 -9
  146. data/opal/corelib/runtime.js +604 -394
  147. data/opal/corelib/string/encoding.rb +51 -7
  148. data/opal/corelib/string.rb +39 -8
  149. data/opal/corelib/struct.rb +20 -0
  150. data/opal/corelib/time.rb +2 -2
  151. data/opal/corelib/variables.rb +1 -1
  152. data/opal/opal.rb +1 -0
  153. data/opal.gemspec +9 -8
  154. data/spec/filters/bugs/array.rb +5 -1
  155. data/spec/filters/bugs/basicobject.rb +2 -5
  156. data/spec/filters/bugs/bigdecimal.rb +8 -22
  157. data/spec/filters/bugs/class.rb +2 -1
  158. data/spec/filters/bugs/comparable.rb +5 -0
  159. data/spec/filters/bugs/date.rb +3 -3
  160. data/spec/filters/bugs/enumerable.rb +4 -11
  161. data/spec/filters/bugs/enumerator.rb +2 -4
  162. data/spec/filters/bugs/exception.rb +16 -2
  163. data/spec/filters/bugs/file.rb +8 -0
  164. data/spec/filters/bugs/float.rb +7 -1
  165. data/spec/filters/bugs/hash.rb +6 -2
  166. data/spec/filters/bugs/integer.rb +2 -0
  167. data/spec/filters/bugs/io.rb +8 -0
  168. data/spec/filters/bugs/kernel.rb +9 -138
  169. data/spec/filters/bugs/language.rb +89 -174
  170. data/spec/filters/bugs/marshal.rb +33 -35
  171. data/spec/filters/bugs/method.rb +0 -24
  172. data/spec/filters/bugs/module.rb +19 -57
  173. data/spec/filters/bugs/numeric.rb +0 -119
  174. data/spec/filters/bugs/pathname.rb +2 -0
  175. data/spec/filters/bugs/proc.rb +5 -4
  176. data/spec/filters/bugs/random.rb +7 -0
  177. data/spec/filters/bugs/range.rb +12 -120
  178. data/spec/filters/bugs/rational.rb +1 -1
  179. data/spec/filters/bugs/regexp.rb +2 -40
  180. data/spec/filters/bugs/set.rb +0 -1
  181. data/spec/filters/bugs/string.rb +5 -8
  182. data/spec/filters/bugs/stringscanner.rb +11 -19
  183. data/spec/filters/bugs/time.rb +7 -1
  184. data/spec/filters/bugs/unboundmethod.rb +1 -11
  185. data/spec/filters/unsupported/array.rb +5 -1
  186. data/spec/filters/unsupported/basicobject.rb +1 -1
  187. data/spec/filters/unsupported/bignum.rb +4 -1
  188. data/spec/filters/unsupported/class.rb +1 -1
  189. data/spec/filters/unsupported/delegator.rb +1 -1
  190. data/spec/filters/unsupported/enumerable.rb +1 -1
  191. data/spec/filters/unsupported/enumerator.rb +1 -1
  192. data/spec/filters/unsupported/file.rb +4 -0
  193. data/spec/filters/unsupported/fixnum.rb +1 -1
  194. data/spec/filters/unsupported/float.rb +4 -1
  195. data/spec/filters/unsupported/freeze.rb +27 -5
  196. data/spec/filters/unsupported/hash.rb +7 -15
  197. data/spec/filters/unsupported/integer.rb +1 -1
  198. data/spec/filters/unsupported/kernel.rb +2 -1
  199. data/spec/filters/unsupported/language.rb +6 -1
  200. data/spec/filters/unsupported/marshal.rb +1 -1
  201. data/spec/filters/unsupported/matchdata.rb +4 -1
  202. data/spec/filters/unsupported/math.rb +1 -1
  203. data/spec/filters/unsupported/pathname.rb +1 -1
  204. data/spec/filters/unsupported/privacy.rb +141 -9
  205. data/spec/filters/unsupported/proc.rb +1 -1
  206. data/spec/filters/unsupported/random.rb +4 -0
  207. data/spec/filters/unsupported/range.rb +7 -0
  208. data/spec/filters/unsupported/regexp.rb +25 -15
  209. data/spec/filters/unsupported/set.rb +1 -1
  210. data/spec/filters/unsupported/singleton.rb +1 -1
  211. data/spec/filters/unsupported/string.rb +110 -101
  212. data/spec/filters/unsupported/struct.rb +1 -1
  213. data/spec/filters/unsupported/symbol.rb +2 -1
  214. data/spec/filters/unsupported/taint.rb +22 -7
  215. data/spec/filters/unsupported/thread.rb +1 -1
  216. data/spec/filters/unsupported/time.rb +1 -1
  217. data/spec/lib/builder_spec.rb +17 -0
  218. data/spec/lib/cli_runners/phantomjs_spec.rb +2 -2
  219. data/spec/lib/cli_spec.rb +37 -8
  220. data/spec/lib/compiler/call_spec.rb +98 -66
  221. data/spec/lib/compiler_spec.rb +41 -32
  222. data/spec/lib/config_spec.rb +97 -0
  223. data/spec/lib/dependency_resolver_spec.rb +2 -2
  224. data/spec/lib/deprecations_spec.rb +16 -0
  225. data/spec/lib/fixtures/source_location_test.rb +7 -0
  226. data/spec/lib/path_reader_spec.rb +3 -3
  227. data/spec/lib/rewriters/binary_operator_assignment_spec.rb +151 -0
  228. data/spec/lib/rewriters/block_to_iter_spec.rb +28 -0
  229. data/spec/lib/rewriters/dot_js_syntax_spec.rb +108 -0
  230. data/spec/lib/rewriters/explicit_writer_return_spec.rb +186 -0
  231. data/spec/lib/rewriters/js_reserved_words_spec.rb +116 -0
  232. data/spec/lib/rewriters/logical_operator_assignment_spec.rb +202 -0
  233. data/spec/lib/rewriters/opal_engine_check_spec.rb +82 -0
  234. data/spec/lib/rewriters/rubyspec/filters_rewriter_spec.rb +53 -0
  235. data/spec/lib/simple_server_spec.rb +54 -0
  236. data/spec/lib/spec_helper.rb +88 -4
  237. data/spec/mspec-opal/formatters.rb +65 -17
  238. data/spec/mspec-opal/runner.rb +47 -67
  239. data/spec/opal/core/date_spec.rb +14 -0
  240. data/spec/opal/core/exception_spec.rb +10 -0
  241. data/spec/opal/core/hash/internals_spec.rb +10 -10
  242. data/spec/opal/core/kernel/rand_spec.rb +0 -4
  243. data/spec/opal/core/kernel/respond_to_spec.rb +5 -2
  244. data/spec/opal/core/language/constant_lookup_spec.rb +38 -0
  245. data/spec/opal/core/language/safe_navigator_spec.rb +7 -0
  246. data/spec/opal/core/language/send_spec.rb +1 -9
  247. data/spec/opal/core/language/string_spec.rb +8 -8
  248. data/spec/opal/core/language/versions/def_2_0_spec.rb +0 -4
  249. data/spec/opal/core/language_spec.rb +32 -0
  250. data/spec/opal/core/module/const_get_spec.rb +1 -1
  251. data/spec/opal/core/runtime/is_a_spec.rb +36 -0
  252. data/spec/opal/core/runtime/rescue_spec.rb +35 -0
  253. data/spec/opal/core/runtime_spec.rb +4 -4
  254. data/spec/opal/core/string_spec.rb +8 -8
  255. data/spec/opal/core/time_spec.rb +38 -0
  256. data/spec/opal/stdlib/erb/quoted.opalerb +1 -1
  257. data/spec/opal/stdlib/json/parse_spec.rb +4 -0
  258. data/spec/opal/stdlib/native/hash_spec.rb +16 -0
  259. data/spec/ruby_specs +2 -1
  260. data/spec/spec_helper.rb +1 -0
  261. data/spec/support/rewriters_helper.rb +24 -0
  262. data/stdlib/base64.rb +4 -2
  263. data/stdlib/bigdecimal/bignumber.js.rb +1 -1
  264. data/stdlib/date.rb +18 -19
  265. data/stdlib/json.rb +16 -4
  266. data/stdlib/nashorn/file.rb +15 -0
  267. data/stdlib/native.rb +21 -12
  268. data/stdlib/nodejs/dir.rb +1 -1
  269. data/stdlib/nodejs/file.rb +49 -20
  270. data/stdlib/nodejs/io.rb +22 -1
  271. data/stdlib/nodejs/{node_modules/js-yaml/dist/js-yaml.js → js-yaml-3-6-1.js} +815 -626
  272. data/stdlib/nodejs/kernel.rb +3 -1
  273. data/stdlib/nodejs/package.json +0 -1
  274. data/stdlib/nodejs/stacktrace.rb +163 -0
  275. data/stdlib/nodejs/yaml.rb +2 -1
  276. data/stdlib/opal/platform.rb +5 -13
  277. data/stdlib/opal-platform.rb +15 -0
  278. data/stdlib/pathname.rb +1 -1
  279. data/stdlib/strscan.rb +15 -1
  280. data/stdlib/yaml.rb +1 -1
  281. data/tasks/benchmarking.rake +9 -0
  282. data/tasks/building.rake +24 -20
  283. data/tasks/linting.rake +24 -13
  284. data/tasks/testing/mspec_special_calls.rb +44 -15
  285. data/tasks/testing/opal_rspec_smoketest.Gemfile +13 -0
  286. data/tasks/testing.rake +322 -205
  287. data/test/nodejs/fixtures/hello.rb +1 -0
  288. data/test/nodejs/test_file.rb +57 -0
  289. data/test/nodejs/test_io.rb +18 -0
  290. data/test/nodejs/test_opal_builder.rb +12 -0
  291. data/test/opal/unsupported_and_bugs.rb +9 -0
  292. metadata +131 -242
  293. data/lib/opal/parser/grammar.rb +0 -6157
  294. data/lib/opal/parser/grammar.y +0 -2011
  295. data/lib/opal/parser/keywords.rb +0 -66
  296. data/lib/opal/parser/lexer.rb +0 -1352
  297. data/lib/opal/parser/parser_scope.rb +0 -28
  298. data/lib/opal/parser/sexp.rb +0 -90
  299. data/lib/opal/sprockets/environment.rb +0 -23
  300. data/lib/opal/sprockets/erb.rb +0 -23
  301. data/lib/opal/sprockets/path_reader.rb +0 -36
  302. data/lib/opal/sprockets/processor.rb +0 -145
  303. data/lib/opal/sprockets/server.rb +0 -133
  304. data/lib/opal/sprockets/source_map_header_patch.rb +0 -41
  305. data/lib/opal/sprockets/source_map_server.rb +0 -115
  306. data/lib/opal/sprockets.rb +0 -91
  307. data/spec/filters/bugs/compiler_opal.rb +0 -5
  308. data/spec/filters/bugs/language_opal.rb +0 -88
  309. data/spec/filters/unsupported/module.rb +0 -8
  310. data/spec/lib/compiler/pre_processed_conditionals_spec.rb +0 -87
  311. data/spec/lib/lexer_spec.rb +0 -110
  312. data/spec/lib/parser/alias_spec.rb +0 -26
  313. data/spec/lib/parser/and_spec.rb +0 -13
  314. data/spec/lib/parser/aref_spec.rb +0 -10
  315. data/spec/lib/parser/attrasgn_spec.rb +0 -28
  316. data/spec/lib/parser/begin_spec.rb +0 -42
  317. data/spec/lib/parser/block_spec.rb +0 -12
  318. data/spec/lib/parser/break_spec.rb +0 -17
  319. data/spec/lib/parser/call_spec.rb +0 -201
  320. data/spec/lib/parser/class_spec.rb +0 -35
  321. data/spec/lib/parser/comments_spec.rb +0 -11
  322. data/spec/lib/parser/def_spec.rb +0 -109
  323. data/spec/lib/parser/if_spec.rb +0 -26
  324. data/spec/lib/parser/iter_spec.rb +0 -59
  325. data/spec/lib/parser/lambda_spec.rb +0 -219
  326. data/spec/lib/parser/literal_spec.rb +0 -118
  327. data/spec/lib/parser/masgn_spec.rb +0 -37
  328. data/spec/lib/parser/module_spec.rb +0 -27
  329. data/spec/lib/parser/not_spec.rb +0 -21
  330. data/spec/lib/parser/op_asgn1_spec.rb +0 -23
  331. data/spec/lib/parser/op_asgn2_spec.rb +0 -23
  332. data/spec/lib/parser/op_asgn_spec.rb +0 -17
  333. data/spec/lib/parser/or_spec.rb +0 -13
  334. data/spec/lib/parser/return_spec.rb +0 -22
  335. data/spec/lib/parser/sclass_spec.rb +0 -21
  336. data/spec/lib/parser/string_spec.rb +0 -286
  337. data/spec/lib/parser/super_spec.rb +0 -20
  338. data/spec/lib/parser/unary_spec.rb +0 -52
  339. data/spec/lib/parser/undef_spec.rb +0 -19
  340. data/spec/lib/parser/unless_spec.rb +0 -13
  341. data/spec/lib/parser/variables_spec.rb +0 -116
  342. data/spec/lib/parser/while_spec.rb +0 -15
  343. data/spec/lib/parser/yield_spec.rb +0 -20
  344. data/spec/lib/sprockets/erb_spec.rb +0 -38
  345. data/spec/lib/sprockets/path_reader_spec.rb +0 -41
  346. data/spec/lib/sprockets/processor_spec.rb +0 -79
  347. data/spec/lib/sprockets/server_spec.rb +0 -102
  348. data/spec/lib/sprockets_spec.rb +0 -32
  349. data/spec/lib/tilt/opal_spec.rb +0 -37
  350. data/spec/opal/core/language/block_spec.rb +0 -538
  351. data/spec/opal/core/language/proc_spec.rb +0 -263
  352. data/spec/opal/core/language/variables_spec.rb +0 -1366
  353. data/spec/opal/core/runtime/block_send_spec.rb +0 -28
  354. data/spec/opal/core/runtime/send_spec.rb +0 -34
  355. data/spec/support/parser_helpers.rb +0 -37
  356. data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +0 -277
  357. data/stdlib/nodejs/node_modules/js-yaml/LICENSE +0 -21
  358. data/stdlib/nodejs/node_modules/js-yaml/README.md +0 -288
  359. data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +0 -140
  360. data/stdlib/nodejs/node_modules/js-yaml/bower.json +0 -23
  361. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +0 -3
  362. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +0 -102
  363. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +0 -18
  364. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +0 -31
  365. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +0 -22
  366. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +0 -18
  367. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +0 -197
  368. data/stdlib/nodejs/node_modules/js-yaml/index.js +0 -7
  369. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +0 -62
  370. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +0 -554
  371. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +0 -25
  372. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +0 -1581
  373. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +0 -78
  374. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +0 -18
  375. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
  376. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +0 -28
  377. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +0 -17
  378. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +0 -25
  379. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +0 -103
  380. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +0 -133
  381. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +0 -37
  382. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +0 -110
  383. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +0 -183
  384. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -85
  385. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -84
  386. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -27
  387. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +0 -8
  388. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +0 -12
  389. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +0 -36
  390. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +0 -56
  391. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +0 -61
  392. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +0 -8
  393. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +0 -33
  394. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +0 -8
  395. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +0 -98
  396. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +0 -61
  397. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +0 -39
  398. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +0 -115
  399. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +0 -21
  400. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +0 -239
  401. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +0 -36
  402. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +0 -22
  403. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +0 -59
  404. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +0 -13
  405. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +0 -33
  406. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +0 -28
  407. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +0 -23
  408. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +0 -49
  409. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +0 -35
  410. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +0 -270
  411. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +0 -1
  412. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +0 -47
  413. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +0 -55
  414. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +0 -40
  415. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +0 -48
  416. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +0 -43
  417. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +0 -27
  418. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +0 -26
  419. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +0 -50
  420. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +0 -148
  421. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +0 -50
  422. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +0 -146
  423. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +0 -481
  424. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +0 -14
  425. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +0 -50
  426. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +0 -54
  427. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +0 -75
  428. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +0 -1168
  429. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +0 -18
  430. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +0 -88
  431. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +0 -798
  432. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +0 -77
  433. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +0 -23
  434. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +0 -22
  435. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +0 -69
  436. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +0 -6
  437. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +0 -1415
  438. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +0 -2
  439. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +0 -8
  440. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +0 -825
  441. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +0 -33
  442. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +0 -11
  443. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +0 -10
  444. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +0 -26
  445. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +0 -673
  446. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
  447. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +0 -107
  448. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +0 -62
  449. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +0 -73
  450. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +0 -117
  451. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +0 -177
  452. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +0 -3908
  453. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +0 -69
  454. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +0 -239
  455. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +0 -422
  456. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +0 -66
  457. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +0 -387
  458. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +0 -20238
  459. data/stdlib/nodejs/node_modules/js-yaml/package.json +0 -83
  460. /data/{CODE_OF_CONDUCT.md → CONDUCT.md} +0 -0
@@ -0,0 +1,13 @@
1
+ module A
2
+ module B
3
+ module C
4
+ Benchmark.ips do |x|
5
+ x.report("Kernel") { Kernel }
6
+ x.report("::Kernel") { ::Kernel }
7
+ x.report("B") { B }
8
+ x.report("B::C") { B::C }
9
+ x.compare!
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,29 @@
1
+ # Why .$$is_number is better than isNaN:
2
+ #
3
+ #
4
+ # Warming up --------------------------------------
5
+ # .$$is_number 106.722k i/100ms
6
+ # isNaN() 105.040k i/100ms
7
+ # obj.$$is_number 106.864k i/100ms
8
+ # isNaN(obj) 89.287k i/100ms
9
+ # Calculating -------------------------------------
10
+ # .$$is_number 12.052M (± 6.6%) i/s - 59.978M in 5.002614s
11
+ # isNaN() 12.338M (± 5.4%) i/s - 61.448M in 4.997957s
12
+ # obj.$$is_number 12.514M (± 6.8%) i/s - 62.302M in 5.005715s
13
+ # isNaN(obj) 4.211M (± 5.9%) i/s - 20.982M in 5.001643s
14
+ #
15
+ # Comparison:
16
+ # obj.$$is_number: 12513664.2 i/s
17
+ # isNaN(): 12338259.3 i/s - same-ish: difference falls within error
18
+ # .$$is_number: 12051756.8 i/s - same-ish: difference falls within error
19
+ # isNaN(obj): 4211175.7 i/s - 2.97x slower
20
+ #
21
+ Benchmark.ips do |x|
22
+ number = 123
23
+ number_obj = 123.itself
24
+ x.report(".$$is_number") { number.JS['$$is_number'] }
25
+ x.report("isNaN()") { `!isNaN(number)` }
26
+ x.report("obj.$$is_number") { number_obj.JS['$$is_number'] }
27
+ x.report("isNaN(obj)") { `!isNaN(number_obj)` }
28
+ x.compare!
29
+ end
@@ -0,0 +1,19 @@
1
+ # https://github.com/opal/opal/issues/1659#issuecomment-298222232
2
+
3
+ Benchmark.ips do |x|
4
+ a = []
5
+
6
+ 50.times do |i|
7
+ a << %(#{i}\n)
8
+ end
9
+
10
+ x.report('map block') do
11
+ a.map {|it| it.chomp }
12
+ end
13
+
14
+ x.report('map symbol') do
15
+ a.map(&:chomp)
16
+ end
17
+
18
+ x.compare!
19
+ end
data/bin/opal CHANGED
@@ -12,11 +12,13 @@ rescue OptionParser::InvalidOption => e
12
12
  end
13
13
 
14
14
  require 'opal/cli'
15
- cli = Opal::CLI.new options.options.merge(
15
+ options_hash = options.options
16
+ options_hash.merge!(
16
17
  file: ARGF.file,
17
18
  filename: ARGF.filename,
18
19
  argv: ARGV.dup
19
- )
20
+ ) unless options_hash[:lib_only]
21
+ cli = Opal::CLI.new options_hash
20
22
 
21
23
  begin
22
24
  cli.run
data/bin/opal-repl CHANGED
@@ -6,6 +6,8 @@ module Opal
6
6
  class V8Context
7
7
  def initialize
8
8
  @builder = Opal::Builder.new
9
+ @history_path = File.expand_path('~/.opal-repl-history')
10
+ @history = File.exist?(@history_path)
9
11
  end
10
12
 
11
13
  def run(filename = nil)
@@ -17,6 +19,13 @@ module Opal
17
19
  abort 'opal-repl depends on therubyracer gem, which is not currently installed'
18
20
  end
19
21
 
22
+ # Patch V8::Object#respond_to? to avoid MRI warning
23
+ V8::Object.class_eval do
24
+ def respond_to?(method, private = false)
25
+ super or self[method] != nil
26
+ end
27
+ end
28
+
20
29
  @v8 = V8::Context.new
21
30
  @v8['console'] = self
22
31
  @v8.eval Opal::Builder.new.build('opal').to_s
@@ -38,6 +47,7 @@ module Opal
38
47
 
39
48
  def run_repl
40
49
  require 'readline'
50
+ load_history
41
51
 
42
52
  loop do
43
53
  # on SIGINT lets just return from the loop..
@@ -59,11 +69,23 @@ module Opal
59
69
  code = Opal::Builder.new.build_str(str, '(irb)', :irb => true, :const_missing => true)
60
70
  code.processed[0...-1].each { |c| @v8.eval(c.to_s) }
61
71
  @v8.eval "var $_result = #{code.processed.last.to_s} ($_result == null ? 'nil' : $_result.$inspect());"
62
- rescue => e
72
+ rescue Exception => e
63
73
  puts "#{e.message}\n\t#{e.backtrace.join("\n\t")}"
64
74
  end
65
75
 
76
+ def load_history
77
+ return unless @history
78
+ File.read(@history_path).lines.each { |line| Readline::HISTORY.push line.strip }
79
+ end
80
+
81
+ def dump_history
82
+ return unless @history
83
+ length = (Readline::HISTORY.size > 1000) ? 1000 : Readline::HISTORY.size
84
+ File.write(@history_path, Readline::HISTORY.to_a[-length..-1].join("\n"))
85
+ end
86
+
66
87
  def finish
88
+ dump_history
67
89
  @v8 = nil
68
90
  end
69
91
  end
@@ -38,7 +38,7 @@ and `FalseClass` classes from ruby.
38
38
  ```ruby
39
39
  "hello world!" # => "hello world!"
40
40
  :foo # => "foo"
41
- <<-EOS # => "\nHello there.\n"
41
+ <<-EOS # => "Hello there.\n"
42
42
  Hello there.
43
43
  EOS
44
44
  ```
@@ -119,11 +119,12 @@ end
119
119
  This would be compiled into:
120
120
 
121
121
  ```javascript
122
- var val = 42;
123
-
124
- if (val !== false && val !== nil) {
125
- return 3.142;
126
- }
122
+ val = 42;
123
+ if (val !== false && val !== nil && val != null) {
124
+ return 3.142
125
+ } else {
126
+ return nil
127
+ };
127
128
  ```
128
129
 
129
130
  This makes the generated truthy tests (`if` statements, `and` checks and
@@ -162,9 +163,9 @@ of JavaScript code that is wrapped inside an anonymous function. This
162
163
  looks similar to the following:
163
164
 
164
165
  ```javascript
165
- (function($opal) {
166
- var $klass = $opal.klass, self = $opal.top;
167
- // generated code
166
+ (function(Opal) {
167
+ // some setup code code
168
+ return self.$puts("foo")
168
169
  })(Opal);
169
170
  ```
170
171
 
@@ -177,14 +178,15 @@ puts "foo"
177
178
  This would compile directly into:
178
179
 
179
180
  ```javascript
180
- (function($opal) {
181
- var $klass = $opal.klass, self = $opal.top;
182
- self.$puts("foo");
181
+ (function(Opal) {
182
+ var self = Opal.top, $nesting = [], nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice;
183
+
184
+ Opal.add_stubs(['$puts']);
185
+ return self.$puts("foo")
183
186
  })(Opal);
184
187
  ```
185
188
 
186
- Most of the helpers are no longer present as they are not used in this
187
- example.
189
+ **TIP:** you can see the compiled code with this command: `opal --compile --no-exit --no-opal --eval 'puts "foo"'`
188
190
 
189
191
  ### Using compiled sources
190
192
 
data/docs/faq.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  ### Why does Opal exist?
4
4
 
5
- To try and keep ruby relevant in a world where client-side apps are making javascript the primary development platform.
5
+ To try and keep ruby relevant in a world where client-side applications are making javascript the primary development platform.
6
6
 
7
7
  ### How compatible is Opal?
8
8
 
9
- We run opal against the [ruby spec](https://github.com/ruby/spec) as our primary testing setup. We try to make Opal as compatible as possible, whilst also taking into account restrictions of JavaScript when applicable. Opal supports the majority of ruby syntax features, as well as a very large part of the corelib implementation. We support method\_missing, modules, classes, instance\_exec, blocks, procs and lots lots more. Opal can compile and run Rspec unmodified, as well as self hosting the compiler at runtime.
9
+ We run opal against the [ruby spec](https://github.com/ruby/spec) as our primary testing setup. We try to make Opal as compatible as possible, whilst also taking into account restrictions of JavaScript when applicable. Opal supports the majority of ruby syntax features, as well as a very large part of the corelib implementation. We support method\_missing, modules, classes, instance\_exec, blocks, procs and lots lots more. Opal can compile and run RSpec unmodified, as well as self hosting the compiler at runtime.
10
10
 
11
11
  ### What version of ruby does Opal target?
12
12
 
@@ -14,4 +14,4 @@ We are running tests under ruby 2.0.0 conditions, but are mostly compatible with
14
14
 
15
15
  ### Why doesn't Opal support mutable strings?
16
16
 
17
- All strings in Opal are immutable because ruby strings just get compiled direclty into javascript strings, which are immutable. Wrapping ruby strings as a custom JavaScript object would add a lot of overhead as well as making interaction between ruby and javascript libraries more difficult.
17
+ All strings in Opal are immutable because ruby strings just get compiled directly into javascript strings, which are immutable. Wrapping ruby strings as a custom JavaScript object would add a lot of overhead as well as making interaction between ruby and javascript libraries more difficult.
data/docs/rspec.md CHANGED
@@ -51,7 +51,8 @@ $ bundle exec rake
51
51
  require 'bundler'
52
52
  Bundler.require
53
53
 
54
- run Opal::Server.new { |s|
54
+ sprockets_env = Opal::RSpec::SprocketsEnvironment.new
55
+ run Opal::Server.new(sprockets: sprockets_env) { |s|
55
56
  s.main = 'opal/rspec/sprockets_runner'
56
57
  s.append_path 'spec'
57
58
  s.debug = false
@@ -6,6 +6,12 @@ Opal does not support some language/runtime features of ruby. These are document
6
6
 
7
7
  For performance and ease of runtime features, all strings in Opal are immutable, i.e. `#<<`, `#gsub!`, etc. do not exist. Also, symbols are just strings. There is no class, runtime or feature difference between Symbols and Strings. Their syntaxes can be used interchangeably.
8
8
 
9
+ #### Integer / Float difference ####
10
+
11
+ In Opal, both integers and floats belong to same class `Number` (using JavaScript native numbers). So `1 / 4` is `0.25` (not `0`) and `4.0 / 2` is `2` (not `2.0`).
12
+
13
+ `Number` is a subclass of `Numeric`, like `Complex` and `Rational`.
14
+
9
15
  #### Encodings ####
10
16
 
11
17
  Encodings only have a very small implementation inside Opal.
@@ -18,10 +24,6 @@ JavaScript does not have a native `Thread` implementation, so they are not prese
18
24
 
19
25
  Opal does not currently support frozen objects, but has placeholder methods to prevent other libraries breaking when expecting these methods. Opal could support frozen objects in the future once a similar implementation becomes available across JavaScript runtimes.
20
26
 
21
- #### `method_added` and `method_removed` hooks ####
22
-
23
- These are not *currently* supported by Opal, but this is considered a bug and will be implemented soon.
24
-
25
27
  #### Private, Public and Protected methods ####
26
28
 
27
29
  All methods in Opal are defined as `public` to avoid additional runtime overhead. `Module#private` and `Module#protected` exist as just placeholder methods and are no-op methods.
@@ -1,3 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'rack'
3
4
  gem 'opal', :path => '../../'
@@ -1,24 +1,28 @@
1
1
  PATH
2
2
  remote: ../../
3
3
  specs:
4
- opal (0.8.0.dev)
4
+ opal (0.11.0.dev)
5
+ ast (>= 2.3.0)
5
6
  hike (~> 1.2)
7
+ parser (>= 2.3.1.2)
6
8
  sourcemap (~> 0.1.0)
7
- sprockets (>= 2.2.3, < 4.0.0)
8
- tilt (~> 1.4)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
+ ast (2.3.0)
13
14
  hike (1.2.3)
14
- rack (1.6.0)
15
+ parser (2.3.1.2)
16
+ ast (~> 2.2)
17
+ rack (2.0.1)
15
18
  sourcemap (0.1.1)
16
- sprockets (3.0.3)
17
- rack (~> 1.0)
18
- tilt (1.4.1)
19
19
 
20
20
  PLATFORMS
21
21
  ruby
22
22
 
23
23
  DEPENDENCIES
24
24
  opal!
25
+ rack
26
+
27
+ BUNDLED WITH
28
+ 1.12.5
@@ -1,13 +1,24 @@
1
1
  require 'opal'
2
2
  require 'user'
3
+ require 'opal/platform'
3
4
 
4
5
  module MyApp
5
6
  class Application
6
7
  def initialize
7
- @user = User.new('Bill')
8
- @user.authenticated?
8
+ @user = User.new('Bob')
9
+ end
10
+
11
+ def title
12
+ "#{@user.name} is #{:not unless @user.authenticated?} authenticated"
9
13
  end
10
14
  end
11
15
  end
12
16
 
13
- MyApp::Application.new
17
+ $app = MyApp::Application.new
18
+
19
+ require 'native'
20
+
21
+ $$[:document][:title] = "#{$app.title}"
22
+
23
+ bill = User.new('Bill')
24
+ bill.authenticated?
@@ -4,6 +4,8 @@ class User
4
4
  @name = name
5
5
  end
6
6
 
7
+ attr_reader :name
8
+
7
9
  def authenticated?
8
10
  if admin? or special_permission?
9
11
  true
@@ -10,7 +10,7 @@ Bundler.require
10
10
 
11
11
  # with gems like opal-jquery or opal-browser you could manipulate the dom directly
12
12
 
13
- run Opal::Server.new { |s|
13
+ run Opal::SimpleServer.new { |s|
14
14
  # the name of the ruby file to load. To use more files they must be required from here (see app)
15
15
  s.main = 'application'
16
16
  # the directory where the code is (add to opal load path )
@@ -1,6 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
+ <meta charset="utf-8">
4
5
  <title>opal-sprockets demo</title>
5
6
 
6
7
  <%= javascript_include_tag 'application' %>
@@ -1,5 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'opal', :path => '../..'
4
- gem 'thin' # webrick has a bug with safari
4
+ gem 'puma' # webrick has a bug with safari
5
5
  gem 'sinatra'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- opal (0.9.0.dev)
4
+ opal (0.10.2)
5
5
  hike (~> 1.2)
6
6
  sourcemap (~> 0.1.0)
7
7
  sprockets (~> 3.1)
@@ -10,9 +10,9 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- daemons (1.2.2)
14
- eventmachine (1.0.7)
13
+ concurrent-ruby (1.0.2)
15
14
  hike (1.2.3)
15
+ puma (3.6.0)
16
16
  rack (1.5.2)
17
17
  rack-protection (1.5.3)
18
18
  rack
@@ -21,12 +21,9 @@ GEM
21
21
  rack-protection (~> 1.4)
22
22
  tilt (~> 1.3, >= 1.3.4)
23
23
  sourcemap (0.1.1)
24
- sprockets (3.3.3)
25
- rack (~> 1.0)
26
- thin (1.6.3)
27
- daemons (~> 1.0, >= 1.0.9)
28
- eventmachine (~> 1.0)
29
- rack (~> 1.0)
24
+ sprockets (3.7.0)
25
+ concurrent-ruby (~> 1.0)
26
+ rack (> 1, < 3)
30
27
  tilt (1.4.1)
31
28
 
32
29
  PLATFORMS
@@ -34,8 +31,8 @@ PLATFORMS
34
31
 
35
32
  DEPENDENCIES
36
33
  opal!
34
+ puma
37
35
  sinatra
38
- thin
39
36
 
40
37
  BUNDLED WITH
41
- 1.10.5
38
+ 1.13.2
@@ -2,6 +2,8 @@ require 'opal'
2
2
 
3
3
  def alert(msg)
4
4
  `alert(msg)`
5
+ raise "an example exception with source-map powered backtrace"
5
6
  end
6
7
 
7
8
  alert "Hi there!"
9
+
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ require 'opal/ast/node'
3
+ require 'parser/ruby23'
4
+
5
+ module Opal
6
+ module AST
7
+ class Builder < ::Parser::Builders::Default
8
+ def string_value(token)
9
+ token[0]
10
+ end
11
+
12
+ def n(type, children, location)
13
+ ::Opal::AST::Node.new(type, children, location: location)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+ require 'ast'
3
+ require 'parser/ast/node'
4
+
5
+ module Opal
6
+ module AST
7
+ class Node < ::Parser::AST::Node
8
+ attr_reader :meta
9
+
10
+ def assign_properties(properties)
11
+ if meta = properties[:meta]
12
+ meta = meta.dup if meta.frozen?
13
+ @meta.merge!(meta)
14
+ else
15
+ @meta ||= {}
16
+ end
17
+
18
+ super
19
+ end
20
+
21
+ def line
22
+ loc.line if loc
23
+ end
24
+
25
+ def column
26
+ loc.column if loc
27
+ end
28
+ end
29
+ end
30
+ end
data/lib/opal/builder.rb CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  require 'opal/path_reader'
2
3
  require 'opal/builder_processors'
3
4
  require 'opal/paths'
5
+ require 'opal/config'
4
6
  require 'set'
5
7
 
6
8
  module Opal
@@ -20,7 +22,7 @@ module Opal
20
22
  @processors ||= DEFAULT_PROCESSORS
21
23
  @path_reader ||= PathReader.new
22
24
  @prerequired ||= []
23
- @compiler_options ||= {}
25
+ @compiler_options ||= Opal::Config.compiler_options
24
26
  @default_processor ||= RubyProcessor
25
27
 
26
28
  @processed = []
@@ -114,8 +116,17 @@ module Opal
114
116
  end
115
117
 
116
118
  def read(path)
117
- path_reader.read(path) or
118
- raise MissingRequire, "can't find file: #{path.inspect} in #{path_reader.paths.inspect}"
119
+ path_reader.read(path) or begin
120
+ message = "can't find file: #{path.inspect} in #{path_reader.paths.inspect}"
121
+
122
+ case compiler_options[:dynamic_require_severity]
123
+ when :raise then raise MissingRequire, message
124
+ when :warning then warn message
125
+ else # noop
126
+ end
127
+
128
+ return "raise LoadError, #{message.inspect}"
129
+ end
119
130
  end
120
131
 
121
132
  def process_require(filename, options)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'opal/compiler'
2
3
  require 'opal/erb'
3
4
  require 'source_map'