Skip to content

Commit 2e3e131

Browse files
authored
Ensure hard reference for frozen strings (#1348)
These frozen strings must be hard referenced until the identity has been tested, or an intervening GC could cause them to get collected and improperly fail the test. The cross-require global now points at the string in question and is cleared after the identity test.
1 parent 97b7dc4 commit 2e3e131

7 files changed

Lines changed: 11 additions & 8 deletions

language/fixtures/freeze_magic_comment_across_files.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22

33
require_relative 'freeze_magic_comment_required'
44

5-
p "abc".object_id == $second_literal_id
5+
p "abc".equal?($second_literal)
6+
$second_literal = nil

language/fixtures/freeze_magic_comment_across_files_diff_enc.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22

33
require_relative 'freeze_magic_comment_required_diff_enc'
44

5-
p "abc".object_id != $second_literal_id
5+
p !"abc".equal?($second_literal)
6+
$second_literal = nil

language/fixtures/freeze_magic_comment_across_files_no_comment.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22

33
require_relative 'freeze_magic_comment_required_no_comment'
44

5-
p "abc".object_id != $second_literal_id
5+
p !"abc".equal?($second_literal)
6+
$second_literal = nil
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# frozen_string_literal: true
22

3-
ids = Array.new(2) { "abc".object_id }
4-
p ids.first == ids.last
3+
objs = Array.new(2) { "abc" }
4+
p objs.first.equal?(objs.last)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# frozen_string_literal: true
22

3-
$second_literal_id = "abc".object_id
3+
$second_literal = "abc"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# encoding: euc-jp # built-in for old regexp option
22
# frozen_string_literal: true
33

4-
$second_literal_id = "abc".object_id
4+
$second_literal = "abc"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
$second_literal_id = "abc".object_id
1+
$second_literal = "abc"

0 commit comments

Comments
 (0)