opal 1.7.4 → 1.8.0.alpha1

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 (211) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +9 -9
  3. data/.rubocop/todo.yml +2 -2
  4. data/.rubocop.yml +17 -10
  5. data/.rubocop_todo.yml +311 -0
  6. data/CHANGELOG.md +1 -15
  7. data/UNRELEASED.md +78 -1
  8. data/benchmark-ips/bm_block_vs_yield.rb +3 -0
  9. data/benchmark-ips/bm_slice_or_not.rb +53 -0
  10. data/docs/bridging.md +112 -0
  11. data/docs/compiled_ruby.md +10 -10
  12. data/docs/getting_started.md +18 -22
  13. data/lib/opal/cli_runners/chrome.rb +1 -5
  14. data/lib/opal/cli_runners/chrome_cdp_interface.rb +1 -0
  15. data/lib/opal/cli_runners/firefox_cdp_interface.rb +1 -0
  16. data/lib/opal/compiler.rb +33 -1
  17. data/lib/opal/nodes/args/extract_kwoptarg.rb +2 -1
  18. data/lib/opal/nodes/call.rb +1 -1
  19. data/lib/opal/nodes/call_special.rb +71 -47
  20. data/lib/opal/nodes/hash.rb +14 -30
  21. data/lib/opal/nodes/if.rb +37 -29
  22. data/lib/opal/nodes/literal.rb +5 -1
  23. data/lib/opal/nodes/x_string.rb +13 -0
  24. data/lib/opal/parser/patch.rb +1 -0
  25. data/lib/opal/rewriters/for_rewriter.rb +36 -24
  26. data/lib/opal/simple_server.rb +2 -2
  27. data/lib/opal/source_map/file.rb +1 -1
  28. data/lib/opal/version.rb +1 -1
  29. data/opal/corelib/array/pack.rb +1 -0
  30. data/opal/corelib/array.rb +71 -43
  31. data/opal/corelib/basic_object.rb +1 -0
  32. data/opal/corelib/binding.rb +2 -0
  33. data/opal/corelib/boolean.rb +1 -0
  34. data/opal/corelib/class.rb +2 -0
  35. data/opal/corelib/comparable.rb +1 -0
  36. data/opal/corelib/complex.rb +2 -0
  37. data/opal/corelib/constants.rb +2 -2
  38. data/opal/corelib/dir.rb +2 -0
  39. data/opal/corelib/enumerable.rb +3 -2
  40. data/opal/corelib/enumerator/arithmetic_sequence.rb +2 -0
  41. data/opal/corelib/enumerator/chain.rb +1 -0
  42. data/opal/corelib/enumerator/generator.rb +1 -0
  43. data/opal/corelib/enumerator/lazy.rb +1 -0
  44. data/opal/corelib/enumerator/yielder.rb +2 -0
  45. data/opal/corelib/enumerator.rb +1 -0
  46. data/opal/corelib/error/errno.rb +2 -0
  47. data/opal/corelib/error.rb +12 -0
  48. data/opal/corelib/file.rb +1 -0
  49. data/opal/corelib/hash.rb +197 -504
  50. data/opal/corelib/helpers.rb +1 -0
  51. data/opal/corelib/io.rb +2 -0
  52. data/opal/corelib/irb.rb +2 -0
  53. data/opal/corelib/kernel/format.rb +1 -0
  54. data/opal/corelib/kernel.rb +70 -14
  55. data/opal/corelib/main.rb +2 -0
  56. data/opal/corelib/marshal/read_buffer.rb +2 -0
  57. data/opal/corelib/marshal/write_buffer.rb +2 -0
  58. data/opal/corelib/math/polyfills.rb +2 -0
  59. data/opal/corelib/math.rb +1 -0
  60. data/opal/corelib/method.rb +2 -0
  61. data/opal/corelib/module.rb +1 -0
  62. data/opal/corelib/nil.rb +3 -1
  63. data/opal/corelib/number.rb +2 -0
  64. data/opal/corelib/numeric.rb +2 -0
  65. data/opal/corelib/object_space.rb +1 -0
  66. data/opal/corelib/pack_unpack/format_string_parser.rb +2 -0
  67. data/opal/corelib/proc.rb +30 -28
  68. data/opal/corelib/process.rb +2 -0
  69. data/opal/corelib/random/formatter.rb +2 -0
  70. data/opal/corelib/random/math_random.js.rb +2 -0
  71. data/opal/corelib/random/mersenne_twister.rb +2 -0
  72. data/opal/corelib/random/seedrandom.js.rb +2 -0
  73. data/opal/corelib/random.rb +1 -0
  74. data/opal/corelib/range.rb +34 -12
  75. data/opal/corelib/rational.rb +2 -0
  76. data/opal/corelib/regexp.rb +1 -0
  77. data/opal/corelib/runtime.js +187 -231
  78. data/opal/corelib/set.rb +2 -0
  79. data/opal/corelib/string/encoding.rb +3 -0
  80. data/opal/corelib/string/unpack.rb +2 -0
  81. data/opal/corelib/string.rb +20 -12
  82. data/opal/corelib/struct.rb +3 -1
  83. data/opal/corelib/time.rb +1 -0
  84. data/opal/corelib/trace_point.rb +2 -0
  85. data/opal/corelib/unsupported.rb +2 -0
  86. data/opal/corelib/variables.rb +2 -0
  87. data/opal.gemspec +2 -2
  88. data/spec/filters/bugs/array.rb +0 -2
  89. data/spec/filters/bugs/enumerable.rb +0 -3
  90. data/spec/filters/bugs/hash.rb +0 -13
  91. data/spec/filters/bugs/kernel.rb +0 -38
  92. data/spec/filters/bugs/range.rb +0 -1
  93. data/spec/filters/bugs/ruby-32.rb +0 -2
  94. data/spec/filters/bugs/string.rb +0 -1
  95. data/spec/filters/bugs/struct.rb +1 -5
  96. data/spec/filters/unsupported/hash.rb +1 -0
  97. data/spec/lib/compiler_spec.rb +24 -17
  98. data/spec/mspec-opal/formatters.rb +2 -0
  99. data/spec/mspec-opal/runner.rb +2 -0
  100. data/spec/opal/core/array/dup_spec.rb +2 -0
  101. data/spec/opal/core/exception_spec.rb +2 -0
  102. data/spec/opal/core/hash/internals_spec.rb +154 -206
  103. data/spec/opal/core/hash_spec.rb +2 -0
  104. data/spec/opal/core/iterable_props_spec.rb +2 -0
  105. data/spec/opal/core/kernel/at_exit_spec.rb +2 -0
  106. data/spec/opal/core/kernel/respond_to_spec.rb +2 -0
  107. data/spec/opal/core/language/arguments/mlhs_arg_spec.rb +2 -0
  108. data/spec/opal/core/language/safe_navigator_spec.rb +2 -0
  109. data/spec/opal/core/language/xstring_send_spec.rb +15 -0
  110. data/spec/opal/core/language/xstring_spec.rb +2 -0
  111. data/spec/opal/core/language_spec.rb +2 -0
  112. data/spec/opal/core/module_spec.rb +44 -0
  113. data/spec/opal/core/number/to_i_spec.rb +2 -0
  114. data/spec/opal/core/object_id_spec.rb +2 -0
  115. data/spec/opal/core/regexp/match_spec.rb +2 -0
  116. data/spec/opal/core/runtime/bridged_classes_spec.rb +38 -0
  117. data/spec/opal/core/runtime/constants_spec.rb +2 -0
  118. data/spec/opal/core/runtime/eval_spec.rb +2 -0
  119. data/spec/opal/core/runtime/exit_spec.rb +2 -0
  120. data/spec/opal/core/runtime/is_a_spec.rb +2 -0
  121. data/spec/opal/core/runtime/loaded_spec.rb +2 -0
  122. data/spec/opal/core/runtime/method_missing_spec.rb +2 -0
  123. data/spec/opal/core/runtime/rescue_spec.rb +2 -0
  124. data/spec/opal/core/runtime/string_spec.rb +2 -0
  125. data/spec/opal/core/runtime/truthy_spec.rb +2 -0
  126. data/spec/opal/core/runtime_spec.rb +2 -6
  127. data/spec/opal/core/string/to_sym_spec.rb +2 -0
  128. data/spec/opal/stdlib/js_spec.rb +2 -0
  129. data/spec/opal/stdlib/native/alias_native_spec.rb +2 -0
  130. data/spec/opal/stdlib/native/array_spec.rb +2 -0
  131. data/spec/opal/stdlib/native/date_spec.rb +2 -0
  132. data/spec/opal/stdlib/native/each_spec.rb +2 -0
  133. data/spec/opal/stdlib/native/element_reference_spec.rb +2 -0
  134. data/spec/opal/stdlib/native/exposure_spec.rb +2 -0
  135. data/spec/opal/stdlib/native/ext_spec.rb +2 -0
  136. data/spec/opal/stdlib/native/hash_spec.rb +30 -2
  137. data/spec/opal/stdlib/native/initialize_spec.rb +2 -0
  138. data/spec/opal/stdlib/native/method_missing_spec.rb +2 -0
  139. data/spec/opal/stdlib/native/native_alias_spec.rb +2 -0
  140. data/spec/opal/stdlib/native/native_class_spec.rb +2 -0
  141. data/spec/opal/stdlib/native/native_module_spec.rb +2 -0
  142. data/spec/opal/stdlib/native/native_reader_spec.rb +2 -0
  143. data/spec/opal/stdlib/native/native_writer_spec.rb +2 -0
  144. data/spec/opal/stdlib/native/new_spec.rb +2 -0
  145. data/spec/opal/stdlib/native/struct_spec.rb +2 -0
  146. data/spec/spec_helper.rb +2 -0
  147. data/stdlib/await.rb +1 -0
  148. data/stdlib/base64.rb +2 -0
  149. data/stdlib/bigdecimal/bignumber.js.rb +2 -0
  150. data/stdlib/bigdecimal/util.rb +1 -0
  151. data/stdlib/bigdecimal.rb +2 -0
  152. data/stdlib/buffer/array.rb +2 -0
  153. data/stdlib/buffer/view.rb +2 -0
  154. data/stdlib/buffer.rb +2 -0
  155. data/stdlib/cgi.rb +14 -0
  156. data/stdlib/console.rb +2 -0
  157. data/stdlib/date/date_time.rb +2 -0
  158. data/stdlib/date.rb +2 -0
  159. data/stdlib/delegate.rb +2 -0
  160. data/stdlib/deno/base.rb +2 -0
  161. data/stdlib/deno/file.rb +2 -0
  162. data/stdlib/erb.rb +2 -0
  163. data/stdlib/gjs/io.rb +2 -0
  164. data/stdlib/gjs/kernel.rb +2 -0
  165. data/stdlib/headless_browser/base.rb +2 -0
  166. data/stdlib/headless_browser/file.rb +1 -0
  167. data/stdlib/headless_browser.rb +1 -0
  168. data/stdlib/js.rb +2 -0
  169. data/stdlib/json.rb +9 -15
  170. data/stdlib/logger.rb +2 -0
  171. data/stdlib/nashorn/file.rb +2 -0
  172. data/stdlib/nashorn/io.rb +2 -0
  173. data/stdlib/native.rb +48 -48
  174. data/stdlib/nodejs/base.rb +2 -0
  175. data/stdlib/nodejs/dir.rb +2 -0
  176. data/stdlib/nodejs/env.rb +2 -0
  177. data/stdlib/nodejs/file.rb +2 -0
  178. data/stdlib/nodejs/fileutils.rb +2 -0
  179. data/stdlib/nodejs/io.rb +2 -0
  180. data/stdlib/nodejs/js-yaml-3-6-1.js +1 -1
  181. data/stdlib/nodejs/kernel.rb +2 -0
  182. data/stdlib/nodejs/open-uri.rb +2 -0
  183. data/stdlib/nodejs/pathname.rb +2 -0
  184. data/stdlib/nodejs/require.rb +2 -0
  185. data/stdlib/nodejs/yaml.rb +9 -3
  186. data/stdlib/opal/miniracer.rb +2 -0
  187. data/stdlib/opal-parser.rb +8 -1
  188. data/stdlib/opal-platform.rb +2 -0
  189. data/stdlib/opal-replutils.rb +2 -0
  190. data/stdlib/open-uri.rb +4 -1
  191. data/stdlib/ostruct.rb +4 -2
  192. data/stdlib/pathname.rb +2 -0
  193. data/stdlib/pp.rb +1 -0
  194. data/stdlib/promise/v2.rb +2 -0
  195. data/stdlib/quickjs/io.rb +2 -0
  196. data/stdlib/quickjs/kernel.rb +2 -0
  197. data/stdlib/quickjs.rb +2 -0
  198. data/stdlib/securerandom.rb +2 -0
  199. data/stdlib/strscan.rb +2 -0
  200. data/stdlib/time.rb +2 -0
  201. data/stdlib/uri.rb +1 -0
  202. data/tasks/performance/optimization_status.rb +2 -0
  203. data/tasks/testing.rake +1 -0
  204. data/test/nodejs/test_await.rb +1 -0
  205. data/test/nodejs/test_dir.rb +2 -0
  206. data/test/nodejs/test_error.rb +2 -0
  207. data/test/nodejs/test_file.rb +2 -0
  208. data/test/nodejs/test_string.rb +2 -0
  209. data/test/nodejs/test_yaml.rb +20 -0
  210. metadata +22 -13
  211. data/spec/filters/bugs/openstruct.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e1885b32b1546863d767adcebce41e10b5b10872bdad28d197b2a193fb29e54
4
- data.tar.gz: 24a27f9aa47ddd775a36b6bb2bf6fcf32ab51c80ff6ad5bf9c5baf685da83576
3
+ metadata.gz: c756d4ba883cb8f7c7bdfefa6b88cf4a2db0604d1ef8a906d7c58add76eee1bf
4
+ data.tar.gz: e88f7de8d6add79b64c7d6b896fbd1c94f51edd34754e6da3ceb59e3fa501134
5
5
  SHA512:
6
- metadata.gz: d4c34638370c988ad9adad7eab68f643b399cdacaa5e88dd4f11db224efbcdf7a7c7278afdb5586ef65b27bb7918c836641ac18dfc4db1b968c2aa73358fb192
7
- data.tar.gz: 3a3fce3444d3f14b8aaee302f6ec0cf67991f80dac46702a21bdbf1a51534bd114584a7a94d7d03abea6d333a527db249244cdc1fd7b94b09abe11716259788f
6
+ metadata.gz: 1d9e3b8b4cc8decc9fc5644eb842ee84290bb0c6f231de362d259a691570296ac9fab95e400dccda20d317e12b7f3d58334d816a8f5279b304d0435d15ac699f
7
+ data.tar.gz: '02883fef4e6869c54b718c370ddd03a934e50698eb37638da6788d212286fbc57ecab6c5e0c2c46bd02931ff75e39455f09a6de462157433b03cb8535d1ce76b'
@@ -4,8 +4,8 @@ on:
4
4
  push:
5
5
  branches:
6
6
  - master
7
- - "*-stable"
8
- - "*/ci-check"
7
+ - '*-stable'
8
+ - '*/ci-check'
9
9
  pull_request: {}
10
10
 
11
11
  permissions:
@@ -59,13 +59,13 @@ jobs:
59
59
  command: bundle exec rake mspec_chrome
60
60
  ruby: '3.0'
61
61
  os: windows-latest
62
- - name: windows-mspec-firefox
63
- env:
64
- # when changing version, also change it below and above
65
- MOZILLA_FIREFOX_BINARY: 'C:/Program Files/Firefox_106.0.4/firefox.exe'
66
- ruby: '3.0'
67
- command: bundle exec rake mspec_firefox
68
- os: windows-latest
62
+ # - name: windows-mspec-firefox
63
+ # env:
64
+ # # when changing version, also change it below and above
65
+ # MOZILLA_FIREFOX_BINARY: 'C:/Program Files/Firefox_106.0.4/firefox.exe'
66
+ # ruby: '3.0'
67
+ # command: bundle exec rake mspec_firefox
68
+ # os: windows-latest
69
69
  - name: macos-mspec-safari
70
70
  command: bundle exec rake mspec_safari
71
71
  ruby: '3.0'
data/.rubocop/todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # All items in this file require fixing
2
2
 
3
- Metrics/LineLength:
3
+ Layout/LineLength:
4
4
  Enabled: false
5
5
 
6
6
  Lint/AssignmentInCondition:
@@ -33,7 +33,7 @@ Style/MutableConstant:
33
33
  - 'lib/opal/nodes/call.rb'
34
34
  - 'lib/opal/util.rb'
35
35
 
36
- Lint/HandleExceptions:
36
+ Lint/SuppressedException:
37
37
  Exclude:
38
38
  - 'stdlib/ostruct.rb'
39
39
 
data/.rubocop.yml CHANGED
@@ -1,8 +1,14 @@
1
+ inherit_from:
2
+ - .rubocop_todo.yml
3
+ - .rubocop/todo.yml
4
+
1
5
  require: rubocop-performance
2
- inherit_from: .rubocop/todo.yml
6
+
3
7
 
4
8
  AllCops:
5
- TargetRubyVersion: 2.6
9
+ TargetRubyVersion: 3.0
10
+ NewCops: disable
11
+ SuggestExtensions: false
6
12
  Exclude:
7
13
  - CHANGELOG.md
8
14
  - CONDUCT.md
@@ -78,7 +84,7 @@ Layout/CommentIndentation:
78
84
  - 'lib/opal/source_map/file.rb'
79
85
 
80
86
  # We need to support older rubies
81
- Layout/IndentHeredoc:
87
+ Layout/HeredocIndentation:
82
88
  Enabled: false
83
89
 
84
90
  Style/FrozenStringLiteralComment:
@@ -104,7 +110,7 @@ Layout/ExtraSpacing:
104
110
  # This files uses extra spaces to show an inheritance tree of error classes
105
111
  - 'opal/corelib/error.rb'
106
112
 
107
- Layout/IndentArray:
113
+ Layout/FirstArrayElementIndentation:
108
114
  EnforcedStyle: consistent
109
115
 
110
116
  Layout/SpaceAroundOperators:
@@ -147,7 +153,7 @@ Lint/RescueException:
147
153
  - 'stdlib/promise.rb'
148
154
  - 'opal/corelib/binding.rb'
149
155
 
150
- Lint/StringConversionInInterpolation:
156
+ Lint/RedundantStringCoercion:
151
157
  Exclude:
152
158
  # That's what MRI does
153
159
  - 'opal/corelib/error.rb'
@@ -208,7 +214,7 @@ Naming/BinaryOperatorParameterName:
208
214
 
209
215
  Naming/PredicateName:
210
216
  # Ruby has "has_key?" method
211
- NamePrefixBlacklist: is_, have_
217
+ ForbiddenPrefixes: is_, have_
212
218
 
213
219
  Performance/FlatMap:
214
220
  Exclude:
@@ -267,7 +273,7 @@ Style/InverseMethods:
267
273
  - 'opal/corelib/basic_object.rb'
268
274
  - 'opal/corelib/kernel.rb'
269
275
 
270
- Style/MethodMissingSuper:
276
+ Lint/MissingSuper:
271
277
  # Base Opal classes simply can't or shouldn't call super for #method_missing
272
278
  Exclude:
273
279
  - 'opal/corelib/basic_object.rb'
@@ -318,7 +324,7 @@ Style/TrailingCommaInArguments:
318
324
  # Any style is allowed
319
325
  Enabled: false
320
326
 
321
- Layout/AlignParameters:
327
+ Layout/ParameterAlignment:
322
328
  EnforcedStyle: with_fixed_indentation
323
329
 
324
330
  Layout/MultilineMethodCallBraceLayout:
@@ -371,6 +377,7 @@ Naming/ConstantName:
371
377
  Exclude:
372
378
  # MRI has a constant BigDecimal::SIGN_NaN
373
379
  - 'stdlib/bigdecimal.rb'
380
+ - 'stdlib/opal-platform.rb'
374
381
 
375
382
  Security/Eval:
376
383
  Exclude:
@@ -395,7 +402,7 @@ Style/TrailingCommaInHashLiteral:
395
402
  # Any style is allowed
396
403
  Enabled: false
397
404
 
398
- Naming/UncommunicativeMethodParamName:
405
+ Naming/MethodParameterName:
399
406
  Exclude:
400
407
  # This file uses parser's code that doesn't match our styling requirements
401
408
  - 'lib/opal/parser/patch.rb'
@@ -436,7 +443,7 @@ Style/MultipleComparison:
436
443
  Layout/EmptyLineAfterGuardClause:
437
444
  Enabled: false
438
445
 
439
- Layout/AlignHash:
446
+ Layout/HashAlignment:
440
447
  Enabled: false
441
448
 
442
449
  # No way to set multiple preferred names
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,311 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2023-05-09 13:13:04 UTC using RuboCop version 1.50.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 30
10
+ # This cop supports safe autocorrection (--autocorrect).
11
+ # Configuration parameters: EnforcedStyle, IndentationWidth.
12
+ # SupportedStyles: with_first_argument, with_fixed_indentation
13
+ Layout/ArgumentAlignment:
14
+ Exclude:
15
+ - 'lib/opal/builder.rb'
16
+ - 'lib/opal/cli.rb'
17
+ - 'lib/opal/cli_options.rb'
18
+ - 'lib/opal/nodes/call_special.rb'
19
+ - 'lib/opal/repl.rb'
20
+ - 'lib/opal/rewriters/arguments.rb'
21
+ - 'lib/opal/rewriters/forward_args.rb'
22
+ - 'lib/opal/rewriters/opal_engine_check.rb'
23
+ - 'lib/opal/rewriters/returnable_logic.rb'
24
+ - 'opal/corelib/complex.rb'
25
+ - 'stdlib/date.rb'
26
+
27
+ # Offense count: 1
28
+ # This cop supports safe autocorrection (--autocorrect).
29
+ # Configuration parameters: EnforcedStyleAlignWith, Severity.
30
+ # SupportedStylesAlignWith: start_of_line, begin
31
+ Layout/BeginEndAlignment:
32
+ Exclude:
33
+ - 'lib/opal/cache.rb'
34
+
35
+ # Offense count: 1
36
+ # This cop supports safe autocorrection (--autocorrect).
37
+ # Configuration parameters: AllowForAlignment.
38
+ Layout/CommentIndentation:
39
+ Exclude:
40
+ - 'stdlib/opal-platform.rb'
41
+
42
+ # Offense count: 5
43
+ # This cop supports safe autocorrection (--autocorrect).
44
+ # Configuration parameters: EmptyLineBetweenMethodDefs, EmptyLineBetweenClassDefs, EmptyLineBetweenModuleDefs, AllowAdjacentOneLineDefs, NumberOfEmptyLines.
45
+ Layout/EmptyLineBetweenDefs:
46
+ Exclude:
47
+ - 'stdlib/bigdecimal/util.rb'
48
+
49
+ # Offense count: 1
50
+ # This cop supports safe autocorrection (--autocorrect).
51
+ # Configuration parameters: EnforcedStyle.
52
+ # SupportedStyles: around, only_before
53
+ Layout/EmptyLinesAroundAccessModifier:
54
+ Exclude:
55
+ - 'stdlib/ruby2_keywords.rb'
56
+
57
+ # Offense count: 1
58
+ # This cop supports safe autocorrection (--autocorrect).
59
+ # Configuration parameters: AllowAliasSyntax, AllowedMethods.
60
+ # AllowedMethods: alias_method, public, protected, private
61
+ Layout/EmptyLinesAroundAttributeAccessor:
62
+ Exclude:
63
+ - 'opal/corelib/string/encoding.rb'
64
+
65
+ # Offense count: 1
66
+ # This cop supports safe autocorrection (--autocorrect).
67
+ # Configuration parameters: EnforcedStyle.
68
+ # SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only
69
+ Layout/EmptyLinesAroundClassBody:
70
+ Exclude:
71
+ - 'opal/corelib/string/__old__mutable.rb'
72
+
73
+ # Offense count: 1
74
+ # This cop supports safe autocorrection (--autocorrect).
75
+ # Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator.
76
+ # SupportedStylesForExponentOperator: space, no_space
77
+ Layout/SpaceAroundOperators:
78
+ Exclude:
79
+ - 'lib/opal/regexp_anchors.rb'
80
+
81
+ # Offense count: 25
82
+ # This cop supports safe autocorrection (--autocorrect).
83
+ # Configuration parameters: EnforcedStyle.
84
+ # SupportedStyles: space, no_space
85
+ Layout/SpaceInsideStringInterpolation:
86
+ Exclude:
87
+ - 'lib/opal/nodes/literal.rb'
88
+ - 'opal/corelib/array.rb'
89
+ - 'opal/corelib/hash.rb'
90
+ - 'opal/corelib/kernel.rb'
91
+ - 'opal/corelib/number.rb'
92
+
93
+ # Offense count: 2
94
+ # Configuration parameters: AllowComments.
95
+ Lint/EmptyFile:
96
+ Exclude:
97
+ - 'stdlib/fileutils.rb'
98
+ - 'stdlib/iconv.rb'
99
+
100
+ # Offense count: 1
101
+ Lint/FloatComparison:
102
+ Exclude:
103
+ - 'opal/corelib/rational.rb'
104
+
105
+ # Offense count: 13
106
+ # This cop supports safe autocorrection (--autocorrect).
107
+ Lint/LiteralInInterpolation:
108
+ Exclude:
109
+ - 'opal/corelib/array.rb'
110
+ - 'opal/corelib/enumerable.rb'
111
+ - 'opal/corelib/module.rb'
112
+ - 'opal/corelib/proc.rb'
113
+ - 'opal/corelib/time.rb'
114
+
115
+ # Offense count: 26
116
+ Lint/MissingSuper:
117
+ Enabled: false
118
+
119
+ # Offense count: 5
120
+ # This cop supports safe autocorrection (--autocorrect).
121
+ Lint/RedundantCopDisableDirective:
122
+ Exclude:
123
+ - 'lib/opal/cli.rb'
124
+ - 'lib/opal/rewriters/thrower_finder.rb'
125
+ - 'stdlib/delegate.rb'
126
+
127
+ # Offense count: 2
128
+ # This cop supports safe autocorrection (--autocorrect).
129
+ Lint/RedundantRequireStatement:
130
+ Exclude:
131
+ - 'stdlib/delegate.rb'
132
+ - 'stdlib/opal-replutils.rb'
133
+
134
+ # Offense count: 11
135
+ # This cop supports safe autocorrection (--autocorrect).
136
+ Lint/RedundantStringCoercion:
137
+ Exclude:
138
+ - 'lib/opal/cli_runners/safari.rb'
139
+ - 'opal/corelib/array.rb'
140
+ - 'opal/corelib/kernel/format.rb'
141
+ - 'opal/corelib/marshal/read_buffer.rb'
142
+ - 'opal/corelib/string.rb'
143
+ - 'stdlib/date.rb'
144
+ - 'stdlib/nodejs/env.rb'
145
+
146
+ # Offense count: 1
147
+ # Configuration parameters: AllowedPatterns.
148
+ # AllowedPatterns: (?-mix:(exactly|at_least|at_most)\(\d+\)\.times)
149
+ Lint/UnreachableLoop:
150
+ Exclude:
151
+ - 'opal/corelib/enumerable.rb'
152
+
153
+ # Offense count: 6
154
+ # This cop supports safe autocorrection (--autocorrect).
155
+ Performance/BindCall:
156
+ Exclude:
157
+ - 'opal/corelib/marshal/write_buffer.rb'
158
+ - 'opal/corelib/method.rb'
159
+ - 'stdlib/native.rb'
160
+
161
+ # Offense count: 2
162
+ # This cop supports safe autocorrection (--autocorrect).
163
+ Performance/RedundantBlockCall:
164
+ Exclude:
165
+ - 'stdlib/deno/file.rb'
166
+ - 'stdlib/nodejs/file.rb'
167
+
168
+ # Offense count: 21
169
+ # This cop supports safe autocorrection (--autocorrect).
170
+ # Configuration parameters: EnforcedStyle.
171
+ # SupportedStyles: separated, grouped
172
+ Style/AccessorGrouping:
173
+ Exclude:
174
+ - 'lib/opal/cli.rb'
175
+ - 'lib/opal/nodes/node_with_args.rb'
176
+ - 'lib/opal/nodes/scope.rb'
177
+ - 'lib/opal/source_map/file.rb'
178
+ - 'opal/corelib/string/encoding.rb'
179
+ - 'stdlib/logger.rb'
180
+ - 'stdlib/strscan.rb'
181
+
182
+ # Offense count: 4
183
+ # This cop supports unsafe autocorrection (--autocorrect-all).
184
+ # Configuration parameters: MinBranchesCount.
185
+ Style/CaseLikeIf:
186
+ Exclude:
187
+ - 'lib/opal/nodes/call.rb'
188
+ - 'opal/corelib/complex.rb'
189
+ - 'opal/corelib/marshal/read_buffer.rb'
190
+ - 'opal/corelib/marshal/write_buffer.rb'
191
+
192
+ # Offense count: 6
193
+ # This cop supports safe autocorrection (--autocorrect).
194
+ # Configuration parameters: AllowedMethods, AllowedPatterns.
195
+ # AllowedMethods: ==, equal?, eql?
196
+ Style/ClassEqualityComparison:
197
+ Exclude:
198
+ - 'lib/opal/fragment.rb'
199
+ - 'lib/opal/rewriters/pattern_matching.rb'
200
+ - 'opal/corelib/marshal/read_buffer.rb'
201
+ - 'opal/corelib/marshal/write_buffer.rb'
202
+ - 'opal/corelib/struct.rb'
203
+
204
+ # Offense count: 1
205
+ # This cop supports safe autocorrection (--autocorrect).
206
+ # Configuration parameters: Keywords, RequireColon.
207
+ # Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE
208
+ Style/CommentAnnotation:
209
+ Exclude:
210
+ - 'stdlib/delegate.rb'
211
+
212
+ # Offense count: 8
213
+ # This cop supports safe autocorrection (--autocorrect).
214
+ Style/ExplicitBlockArgument:
215
+ Exclude:
216
+ - 'lib/opal/cli_runners/chrome.rb'
217
+ - 'lib/opal/cli_runners/firefox.rb'
218
+ - 'lib/opal/cli_runners/safari.rb'
219
+ - 'opal/corelib/enumerable.rb'
220
+ - 'opal/corelib/set.rb'
221
+ - 'stdlib/date.rb'
222
+ - 'stdlib/ostruct.rb'
223
+
224
+ # Offense count: 16
225
+ # This cop supports unsafe autocorrection (--autocorrect-all).
226
+ Style/GlobalStdStream:
227
+ Exclude:
228
+ - 'lib/opal/cli_runners/safari.rb'
229
+ - 'opal/corelib/io.rb'
230
+ - 'stdlib/deno/base.rb'
231
+ - 'stdlib/nodejs/base.rb'
232
+
233
+ # Offense count: 2
234
+ # Configuration parameters: MinBranchesCount.
235
+ Style/HashLikeCase:
236
+ Exclude:
237
+ - 'lib/opal/fragment.rb'
238
+ - 'stdlib/buffer.rb'
239
+
240
+ # Offense count: 1
241
+ # This cop supports safe autocorrection (--autocorrect).
242
+ Style/MultilineWhenThen:
243
+ Exclude:
244
+ - 'lib/opal/builder.rb'
245
+
246
+ # Offense count: 43
247
+ # Configuration parameters: AllowedMethods.
248
+ # AllowedMethods: respond_to_missing?
249
+ Style/OptionalBooleanParameter:
250
+ Enabled: false
251
+
252
+ # Offense count: 4
253
+ # This cop supports safe autocorrection (--autocorrect).
254
+ Style/RedundantAssignment:
255
+ Exclude:
256
+ - 'lib/opal/nodes/args/arity_check.rb'
257
+ - 'lib/opal/parser/default_config.rb'
258
+ - 'opal/corelib/file.rb'
259
+ - 'stdlib/shellwords.rb'
260
+
261
+ # Offense count: 13
262
+ # This cop supports safe autocorrection (--autocorrect).
263
+ Style/RedundantFreeze:
264
+ Exclude:
265
+ - 'lib/opal/erb.rb'
266
+ - 'lib/opal/magic_comments.rb'
267
+ - 'lib/opal/nodes/literal.rb'
268
+ - 'lib/opal/path_reader.rb'
269
+ - 'lib/opal/rewriters/js_reserved_words.rb'
270
+
271
+ # Offense count: 15
272
+ # This cop supports safe autocorrection (--autocorrect).
273
+ Style/RedundantRegexpEscape:
274
+ Exclude:
275
+ - 'lib/opal/compiler.rb'
276
+ - 'lib/opal/nodes/helpers.rb'
277
+ - 'opal/corelib/file.rb'
278
+ - 'stdlib/shellwords.rb'
279
+
280
+ # Offense count: 4
281
+ # This cop supports safe autocorrection (--autocorrect).
282
+ # Configuration parameters: AllowMultipleReturnValues.
283
+ Style/RedundantReturn:
284
+ Exclude:
285
+ - 'lib/opal/compiler.rb'
286
+ - 'stdlib/bigdecimal.rb'
287
+ - 'stdlib/pathname.rb'
288
+
289
+ # Offense count: 35
290
+ # This cop supports unsafe autocorrection (--autocorrect-all).
291
+ Style/SlicingWithRange:
292
+ Enabled: false
293
+
294
+ # Offense count: 1
295
+ # This cop supports safe autocorrection (--autocorrect).
296
+ # Configuration parameters: AllowModifier.
297
+ Style/SoleNestedConditional:
298
+ Exclude:
299
+ - 'lib/opal/nodes/if.rb'
300
+
301
+ # Offense count: 24
302
+ # This cop supports unsafe autocorrection (--autocorrect-all).
303
+ # Configuration parameters: Mode.
304
+ Style/StringConcatenation:
305
+ Enabled: false
306
+
307
+ # Offense count: 3
308
+ # This cop supports unsafe autocorrection (--autocorrect-all).
309
+ Style/ZeroLengthPredicate:
310
+ Exclude:
311
+ - 'lib/opal/source_map/file.rb'
data/CHANGELOG.md CHANGED
@@ -16,7 +16,7 @@ Changes are grouped as follows:
16
16
 
17
17
 
18
18
 
19
- ## [1.7.4](https://github.com/opal/opal/compare/v1.7.3...v1.7.4) - 2023-09-14
19
+ ## [1.7.3](https://github.com/opal/opal/compare/v1.7.2...v1.7.3) - 2023-03-23
20
20
 
21
21
 
22
22
  <!--
@@ -28,20 +28,6 @@ Changes are grouped as follows:
28
28
  ### Performance
29
29
  -->
30
30
 
31
- ### Fixed
32
-
33
- - Use a Map instead of a POJO for the jsid_cache ([#2584](https://github.com/opal/opal/pull/2584))
34
- - Lowercase response headers in `SimpleServer` for rack 3.0 compatibility ([#2578](https://github.com/opal/opal/pull/2578))
35
- - Fix `switch` with Object-wrapped values ([#2542](https://github.com/opal/opal/pull/2542))
36
- - Regexp.escape: Cast to String or drop exception ([#2552](https://github.com/opal/opal/pull/2552))
37
- - Chrome runner fix: support code that contains `</script>` ([#2581](https://github.com/opal/opal/pull/2581))
38
-
39
-
40
-
41
-
42
- ## [1.7.3](https://github.com/opal/opal/compare/v1.7.2...v1.7.3) - 2023-03-23
43
-
44
-
45
31
  ### Fixed
46
32
 
47
33
  - Disallow to define a singleton class for Number ([#2521](https://github.com/opal/opal/pull/2521))
data/UNRELEASED.md CHANGED
@@ -1,10 +1,87 @@
1
1
  <!--
2
2
  ### Internal
3
- ### Changed
4
3
  ### Added
5
4
  ### Removed
6
5
  ### Deprecated
7
6
  ### Performance
8
7
  ### Fixed
8
+ ### Documentation
9
9
  -->
10
10
 
11
+ ## Highlights
12
+
13
+ ### `Hash` is now bridged to JavaScript `Map`
14
+
15
+ This change brings a lot of benefits, but also some incompatibilities. The main benefit is that `Hash` now is both more performant and relies on native JavaScript capabilities.
16
+ This improves interoperability with JavaScript. As a downside, applications reaching for internal `Hash` data structures will need to be updated.
17
+
18
+ Interacting with `Hash` from `JavaScript` is easier than ever:
19
+
20
+ ```ruby
21
+ hash = `new Map([['a', 1], ['b', 2]])`
22
+ hash # => {a: 1, b: 2}
23
+ `console.log(hash)` # => Map(2) {"a" => 1, "b" => 2}
24
+ `hash.get('a')` # => 1
25
+ `hash.set('c', 3)`
26
+ hash # => {a: 1, b: 2, c: 3}
27
+ hash.keys # => ["a", "b", "c"]
28
+ hash.values # => [1, 2, 3]
29
+ ```
30
+
31
+ ### Performance improvements
32
+
33
+ This release brings a lot of performance improvements, our tests on Asciidoctor show a 25% improvement in performance, but we've seen up to 66% performance improvement on some applications.
34
+
35
+ ## Changelog
36
+
37
+ ### Deprecated
38
+
39
+ - Deprecate using x-string to access JavaScript without an explicit magic-comment (#2543)
40
+
41
+ ### Compatibility
42
+
43
+ - Add a magic-comment that will disable x-string compilation to JavaScript (#2543)
44
+
45
+ ### Fixed
46
+
47
+ - Fix `Kernel#Float` with `exception:` option (#2532)
48
+ - Fix `Kernel#Integer` with `exception:` option (#2531)
49
+ - Fix `String#split` with limit and capturing regexp (#2544)
50
+ - Fix `switch` with Object-wrapped values (#2542)
51
+ - Fix non-direct subclasses of bridged classes not calling the original constructor (#2546)
52
+ - Regexp.escape: Cast to String or drop exception (#2552)
53
+ - Propagate removal of method from included/prepended modules (#2553)
54
+ - Restore `nodejs/yaml` functionality (#2551)
55
+ - Fix sine `Range#size` edge cases (#2541)
56
+
57
+ ### Added
58
+
59
+ - SourceMap support for `Kernel#eval` (#2534)
60
+ - Add `CGI::Util#escapeURIComponent` and `CGI::Util#unescapeURIComponent` (#2566)
61
+
62
+ ### Changed
63
+
64
+ - Change compilation of Regexp nodes that may contain advanced features, so if invalid that they would raise at runtime, not parse-time (#2548)
65
+ - `Hash` is now bridged to JavaScript `Map` and support for non-symbol keys in keyword arguments (#2568)
66
+
67
+ ### Documentation
68
+
69
+ - Bridging documentation (#2541)
70
+
71
+ ### Performance
72
+
73
+ - Improve performance of `Array#intersect?` and `#intersection` (#2533)
74
+ - `Proc#call`: Refactor for performance (#2541)
75
+ - Opal.stub_for: optimize (#2541)
76
+ - Hash: Optimize `#to_a` (#2541)
77
+ - Array: Optimize `#collect`/`#map` (#2541)
78
+ - Optimize argument slicing in runtime for performance (#2555)
79
+ - Closure: Generate a JavaScript object, not an Error, gain up to 15% on Asciidoctor (#2556)
80
+ - Optimize `String#split` and `String#start_with` (#2560)
81
+
82
+ ### Internal
83
+
84
+ - Update rubocop (#2535)
85
+ - Match3Node Cleanup (#2541)
86
+ - IFlipFlop/EFlipFlop: Refactor for readability (#2541)
87
+ - ForRewriter: Refactor for readability (#2541)
@@ -9,6 +9,9 @@ module BmBlockVsYield
9
9
  end
10
10
 
11
11
  Benchmark.ips do |x|
12
+ x.warmup = 10
13
+ x.time = 60
14
+
12
15
  x.report('block') do
13
16
  BmBlockVsYield._block { 1+1 }
14
17
  end
@@ -0,0 +1,53 @@
1
+ %x{
2
+ // Minify common function calls
3
+ var $call = Function.prototype.call;
4
+ var $bind = Function.prototype.bind;
5
+ var $has_own = Object.hasOwn || $call.bind(Object.prototype.hasOwnProperty);
6
+ var $set_proto = Object.setPrototypeOf;
7
+ var $slice = $call.bind(Array.prototype.slice);
8
+ var $splice = $call.bind(Array.prototype.splice);
9
+
10
+ var cnt = 0;
11
+ var fun = function(a,b,c) {
12
+ cnt += a + b + c;
13
+ }
14
+ }
15
+
16
+ Benchmark.ips do |x|
17
+ ary = [1,2,3]
18
+ obj = `{0: 1, 1: 2, 2: 3, length: 3}`
19
+
20
+ x.report('Array.from(array)') do
21
+ `fun.apply(null, Array.from(ary))`
22
+ end
23
+
24
+ x.report('Array.from(obj)') do
25
+ `fun.apply(null, Array.from(obj))`
26
+ end
27
+
28
+ x.report('$slice(array)') do
29
+ `fun.apply(null, $slice(ary))`
30
+ end
31
+
32
+ x.report('$slice(obj)') do
33
+ `fun.apply(null, $slice(obj))`
34
+ end
35
+
36
+ x.report('array') do
37
+ `fun.apply(null, ary)`
38
+ end
39
+
40
+ x.report('obj') do
41
+ `fun.apply(null, obj)`
42
+ end
43
+
44
+ x.report('$slice?(array)') do
45
+ `fun.apply(null, ary.$$is_array ? ary : $slice(ary))`
46
+ end
47
+
48
+ x.report('$slice?(obj)') do
49
+ `fun.apply(null, obj.$$is_array ? obj : $slice(obj))`
50
+ end
51
+
52
+ x.compare!
53
+ end