From 25dd7742ef91652997e7f9dd0227c0a07f9f6d09 Mon Sep 17 00:00:00 2001 From: Peter Arato Date: Tue, 9 May 2023 10:11:34 -0400 Subject: [PATCH] Add alias String#dedup to String#-@ for Ruby v3.2. --- CHANGELOG.md | 1 + spec/tags/core/string/dedup_tags.txt | 1 + spec/truffle/methods/String.txt | 1 + spec/truffleruby.next-specs | 2 ++ src/main/java/org/truffleruby/parser/BodyTranslator.java | 2 +- src/main/ruby/truffleruby/core/string.rb | 1 + src/main/ruby/truffleruby/core/truffle/polyglot_methods.rb | 4 ++++ 7 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 spec/tags/core/string/dedup_tags.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index f54a756e90be..c7b015091a6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Compatibility: * Add support for array pattern matching. This is opt-in via `--pattern-matching` since pattern matching is not fully supported yet. (#2683, @razetime). * Fix `Array#[]` with `ArithmeticSequence` argument when step is negative (@itarato). * Fix `Range#size` and return `nil` for beginningless Range when end isn't Numeric (@rwstauner). +* Alias `String#-@` to `String#dedup` (@itarato). Performance: diff --git a/spec/tags/core/string/dedup_tags.txt b/spec/tags/core/string/dedup_tags.txt new file mode 100644 index 000000000000..13c3f7f12dae --- /dev/null +++ b/spec/tags/core/string/dedup_tags.txt @@ -0,0 +1 @@ +fails:String#dedup interns the provided string if it is frozen diff --git a/spec/truffle/methods/String.txt b/spec/truffle/methods/String.txt index 490c1c20945c..05427da07527 100644 --- a/spec/truffle/methods/String.txt +++ b/spec/truffle/methods/String.txt @@ -31,6 +31,7 @@ codepoints concat count crypt +dedup delete delete! delete_prefix diff --git a/spec/truffleruby.next-specs b/spec/truffleruby.next-specs index be8a2546d5fb..39d167983f08 100644 --- a/spec/truffleruby.next-specs +++ b/spec/truffleruby.next-specs @@ -14,3 +14,5 @@ spec/ruby/core/array/element_reference_spec.rb spec/ruby/core/hash/shift_spec.rb spec/ruby/core/range/size_spec.rb + +spec/ruby/core/string/dedup_spec.rb diff --git a/src/main/java/org/truffleruby/parser/BodyTranslator.java b/src/main/java/org/truffleruby/parser/BodyTranslator.java index 15884a881ea5..ce9a36626078 100644 --- a/src/main/java/org/truffleruby/parser/BodyTranslator.java +++ b/src/main/java/org/truffleruby/parser/BodyTranslator.java @@ -491,7 +491,7 @@ public RubyNode visitCallNode(CallParseNode node) { final String methodName = node.getName(); if (receiver instanceof StrParseNode && - (methodName.equals("freeze") || methodName.equals("-@"))) { + (methodName.equals("freeze") || methodName.equals("-@") || methodName.equals("dedup"))) { final StrParseNode strNode = (StrParseNode) receiver; final TruffleString tstring = strNode.getValue(); final ImmutableRubyString frozenString = language.getFrozenStringLiteral(tstring, strNode.encoding); diff --git a/src/main/ruby/truffleruby/core/string.rb b/src/main/ruby/truffleruby/core/string.rb index 8bbafba99426..6ab80670b0a8 100644 --- a/src/main/ruby/truffleruby/core/string.rb +++ b/src/main/ruby/truffleruby/core/string.rb @@ -1232,6 +1232,7 @@ def -@ Primitive.string_intern(str) end end + alias_method :dedup, :-@ def <=>(other) if Primitive.is_a?(other, String) diff --git a/src/main/ruby/truffleruby/core/truffle/polyglot_methods.rb b/src/main/ruby/truffleruby/core/truffle/polyglot_methods.rb index 617ac9343744..cb988edd8006 100644 --- a/src/main/ruby/truffleruby/core/truffle/polyglot_methods.rb +++ b/src/main/ruby/truffleruby/core/truffle/polyglot_methods.rb @@ -148,6 +148,10 @@ def crypt(...) to_s.crypt(...) end + def dedup(...) + to_s.dedup(...) + end + def delete(...) to_s.delete(...) end