Skip to content

Commit 11f1b26

Browse files
committed
[GR-19220] Split sprintf (#3537)
PullRequest: truffleruby/4242
2 parents a930d42 + 4a56995 commit 11f1b26

File tree

8 files changed

+15
-9
lines changed

8 files changed

+15
-9
lines changed

src/annotations/java/org/truffleruby/annotations/Split.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public enum Split {
1414
DEFAULT,
1515
ALWAYS,
1616
HEURISTIC,
17-
/** Disallow splitting for this CallTarget, which avoids making a eager uninitialized copy of the AST. Useful
17+
/** Disallow splitting for this CallTarget, which avoids making an eager uninitialized copy of the AST. Useful
1818
* notably for methods not specializing on their arguments and just calling a TruffleBoundary. */
1919
NEVER
2020
}

src/main/java/org/truffleruby/cext/CExtNodes.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.truffleruby.annotations.CoreMethod;
3535
import org.truffleruby.annotations.CoreModule;
3636
import org.truffleruby.annotations.Primitive;
37+
import org.truffleruby.annotations.Split;
3738
import org.truffleruby.annotations.Visibility;
3839
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
3940
import org.truffleruby.builtins.PrimitiveArrayArgumentsNode;
@@ -2029,8 +2030,7 @@ protected RubyArray compileArgTypes(AbstractTruffleString format, RubyEncoding e
20292030
}
20302031
}
20312032

2032-
@CoreMethod(names = "rb_tr_sprintf", onSingleton = true, required = 3)
2033-
@ReportPolymorphism
2033+
@CoreMethod(names = "rb_tr_sprintf", onSingleton = true, required = 3, split = Split.ALWAYS)
20342034
public abstract static class RBSprintfNode extends CoreMethodArrayArgumentsNode {
20352035

20362036
@Specialization(guards = "libFormat.isRubyString(format)", limit = "1")
@@ -2069,6 +2069,7 @@ static RubyString format(Object format, Object stringReader, RubyArray argArray,
20692069

20702070
@GenerateInline
20712071
@GenerateCached(false)
2072+
@ReportPolymorphism
20722073
public abstract static class RBSprintfInnerNode extends RubyBaseNode {
20732074

20742075
public abstract BytesResult execute(Node node, AbstractTruffleString format, RubyEncoding encoding,

src/main/java/org/truffleruby/core/array/ArrayNodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1491,8 +1491,7 @@ public void accept(Node node, CallBlockNode yieldNode, RubyArray array, Object s
14911491

14921492
}
14931493

1494-
@CoreMethod(names = "pack", required = 1)
1495-
@ReportPolymorphism
1494+
@CoreMethod(names = "pack", required = 1, split = Split.ALWAYS)
14961495
public abstract static class ArrayPackNode extends CoreMethodArrayArgumentsNode {
14971496

14981497
@Specialization
@@ -1506,6 +1505,7 @@ RubyString pack(RubyArray array, Object format,
15061505

15071506
@GenerateCached(false)
15081507
@GenerateInline
1508+
@ReportPolymorphism
15091509
public abstract static class PackNode extends RubyBaseNode {
15101510

15111511
public abstract RubyString execute(Node node, RubyArray array, Object format);

src/main/java/org/truffleruby/core/kernel/KernelNodes.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,8 +1616,8 @@ public static long sleepFor(RubyContext context, RubyThread thread, long duratio
16161616

16171617
}
16181618

1619-
@CoreMethod(names = { "format", "sprintf" }, isModuleFunction = true, rest = true, required = 1)
1620-
@ReportPolymorphism
1619+
@CoreMethod(names = { "format", "sprintf" }, isModuleFunction = true, rest = true, required = 1,
1620+
split = Split.ALWAYS)
16211621
public abstract static class SprintfNode extends CoreMethodArrayArgumentsNode {
16221622

16231623
static final String GVAR_DEBUG = "$DEBUG";
@@ -1665,6 +1665,7 @@ private static RubyString finishFormat(Node node, int formatLength, BytesResult
16651665

16661666
@GenerateInline
16671667
@GenerateCached(false)
1668+
@ReportPolymorphism
16681669
public abstract static class SprintfInnerNode extends RubyBaseNode {
16691670

16701671
public abstract BytesResult execute(Node node, AbstractTruffleString format, RubyEncoding encoding,

src/main/java/org/truffleruby/language/dispatch/DispatchNode.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,13 +300,11 @@ Object dispatch(Frame frame, Object receiver, String methodName, Object[] rubyAr
300300
return callNode.execute(frame, method, receiver, rubyArgs);
301301
}
302302

303-
304303
/** This will be called from the {@link CallInternalMethodNode} child whenever it creates a new
305304
* {@link DirectCallNode}. */
306305
public final void applySplittingInliningStrategy(RootCallTarget callTarget, String methodName,
307306
DirectCallNode callNode) {
308307

309-
310308
final Options options = getContext().getOptions();
311309

312310
// The way that #method_missing is used is usually as an indirection to call some other method, and possibly to

src/main/ruby/truffleruby/core/io.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,6 +1664,7 @@ def printf(fmt, *args)
16641664
fmt = StringValue(fmt)
16651665
write sprintf(fmt, *args)
16661666
end
1667+
Truffle::Graal.always_split(instance_method(:printf))
16671668

16681669
def read(length = nil, buffer = nil)
16691670
ensure_open_and_readable
@@ -2485,6 +2486,7 @@ def print(*args)
24852486
def printf(fmt, *args)
24862487
@write.printf(fmt, *args)
24872488
end
2489+
Truffle::Graal.always_split(instance_method(:printf))
24882490

24892491
def putc(obj)
24902492
@write.putc(obj)

src/main/ruby/truffleruby/core/kernel.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -721,6 +721,8 @@ def printf(*args)
721721
nil
722722
end
723723
module_function :printf
724+
Truffle::Graal.always_split(instance_method(:printf))
725+
Truffle::Graal.always_split(method(:printf))
724726

725727
private def pp(*args)
726728
require 'pp'

src/main/ruby/truffleruby/core/string.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,10 +1392,12 @@ def unpack(format, offset: undefined)
13921392
end
13931393
Primitive.string_unpack(self, format, offset)
13941394
end
1395+
Truffle::Graal.always_split(instance_method(:unpack))
13951396

13961397
def unpack1(format, offset: undefined)
13971398
unpack(format, offset: offset).first
13981399
end
1400+
Truffle::Graal.always_split(instance_method(:unpack1))
13991401

14001402
def unicode_normalize(form = :nfc)
14011403
require 'unicode_normalize/normalize.rb' unless defined? UnicodeNormalize

0 commit comments

Comments
 (0)