From dd9f26b58caee79e9aca9aee7eb01680115e9f77 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Sat, 26 Oct 2024 09:56:57 -0500 Subject: [PATCH] Fix issues relating to freezing dynamic strings * Don't freeze dynamic strings when concatenating two sequential string literals. (jruby/jruby#8380) * For the sole remaining frozen DStr case, only freeze and do not create a debug frozen string. Fixes jruby/jruby#8380 --- core/src/main/java/org/jruby/ir/targets/JVMVisitor.java | 9 +-------- core/src/main/java/org/jruby/parser/RubyParserBase.java | 1 - 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/core/src/main/java/org/jruby/ir/targets/JVMVisitor.java b/core/src/main/java/org/jruby/ir/targets/JVMVisitor.java index c8c75c3322b..ef2e0d546e2 100644 --- a/core/src/main/java/org/jruby/ir/targets/JVMVisitor.java +++ b/core/src/main/java/org/jruby/ir/targets/JVMVisitor.java @@ -1191,14 +1191,7 @@ public void BuildCompoundStringInstr(BuildCompoundStringInstr compoundstring) { } } if (compoundstring.isFrozen()) { - if (runtime.getInstanceConfig().isDebuggingFrozenStringLiteral()) { - jvmMethod().loadContext(); - jvmAdapter().ldc(compoundstring.getFile()); - jvmAdapter().ldc(compoundstring.getLine()); - jvmMethod().invokeIRHelper("freezeLiteralString", sig(RubyString.class, RubyString.class, ThreadContext.class, String.class, int.class)); - } else { - jvmMethod().invokeIRHelper("freezeLiteralString", sig(RubyString.class, RubyString.class)); - } + jvmMethod().invokeIRHelper("freezeLiteralString", sig(RubyString.class, RubyString.class)); } jvmStoreLocal(compoundstring.getResult()); } diff --git a/core/src/main/java/org/jruby/parser/RubyParserBase.java b/core/src/main/java/org/jruby/parser/RubyParserBase.java index 7ddd5b9de11..d1dadb2b2fc 100644 --- a/core/src/main/java/org/jruby/parser/RubyParserBase.java +++ b/core/src/main/java/org/jruby/parser/RubyParserBase.java @@ -1415,7 +1415,6 @@ public Node literal_concat(Node head, Node tail) { DStrNode newDStr = new DStrNode(head.getLine(), ((DStrNode) tail).getEncoding()); newDStr.add(head); newDStr.addAll(tail); - if (frozenStringLiterals) newDStr.setFrozen(true); return newDStr; }