Skip to content

Commit baea87d

Browse files
authored
Merge branch 'oracle:master' into compat-24.0
2 parents 9cee0d9 + 0a3f28e commit baea87d

File tree

30 files changed

+115
-134
lines changed

30 files changed

+115
-134
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ jobs:
7373

7474
- name: Create archive
7575
run: |
76-
cd $(dirname $(jt ruby-home))
77-
mv $(basename $(jt ruby-home)) truffleruby-jvm
76+
mv "$(jt -u jvm ruby-home)" "${{ github.workspace }}/truffleruby-jvm"
77+
cd ${{ github.workspace }}
7878
tar cf ${{ github.workspace }}/truffleruby-jvm.tar truffleruby-jvm
7979
- uses: actions/upload-artifact@v2
8080
with:
@@ -115,13 +115,9 @@ jobs:
115115

116116
- name: Create archive
117117
run: |
118-
df -h
119118
mv "$(jt -u native ruby-home)" "${{ github.workspace }}/truffleruby-native"
120-
rm -r mxbuild ../graal/sdk/mxbuild
121-
df -h
122119
cd ${{ github.workspace }}
123120
tar cf ${{ github.workspace }}/truffleruby-native.tar truffleruby-native
124-
ls -lh ${{ github.workspace }}/truffleruby-native.tar
125121
- uses: actions/upload-artifact@v2
126122
with:
127123
name: truffleruby-native

common.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"Jsonnet files should not include this file directly but use ci/common.jsonnet instead."
55
],
66

7-
"mx_version": "7.22.0",
7+
"mx_version": "7.22.6",
88

99
"COMMENT.jdks": "When adding or removing JDKs keep in sync with JDKs in ci/common.jsonnet",
1010
"jdks": {
@@ -44,13 +44,13 @@
4444
"labsjdk-ee-21Debug": {"name": "labsjdk", "version": "ee-21.0.2+13-jvmci-23.1-b33-debug", "platformspecific": true },
4545
"labsjdk-ee-21-llvm": {"name": "labsjdk", "version": "ee-21.0.2+13-jvmci-23.1-b33-sulong", "platformspecific": true },
4646

47-
"oraclejdk-latest": {"name": "jpg-jdk", "version": "23", "build_id": "jdk-23+17", "platformspecific": true, "extrabundles": ["static-libs"]},
48-
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-23+17-jvmci-b01", "platformspecific": true },
49-
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-23+17-jvmci-b01-debug", "platformspecific": true },
50-
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-23+17-jvmci-b01-sulong", "platformspecific": true },
51-
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-23+17-jvmci-b01", "platformspecific": true },
52-
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-23+17-jvmci-b01-debug", "platformspecific": true },
53-
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-23+17-jvmci-b01-sulong", "platformspecific": true }
47+
"oraclejdk-latest": {"name": "jpg-jdk", "version": "23", "build_id": "jdk-23+18", "platformspecific": true, "extrabundles": ["static-libs"]},
48+
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-23+18-jvmci-b01", "platformspecific": true },
49+
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-23+18-jvmci-b01-debug", "platformspecific": true },
50+
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-23+18-jvmci-b01-sulong", "platformspecific": true },
51+
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-23+18-jvmci-b01", "platformspecific": true },
52+
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-23+18-jvmci-b01-debug", "platformspecific": true },
53+
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-23+18-jvmci-b01-sulong", "platformspecific": true }
5454
},
5555

5656
"eclipse": {

lib/cext/include/truffleruby/truffleruby-abi-version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@
2020
// $RUBY_VERSION must be the same as TruffleRuby.LANGUAGE_VERSION.
2121
// $ABI_NUMBER starts at 1 and is incremented for every ABI-incompatible change.
2222

23-
#define TRUFFLERUBY_ABI_VERSION "3.2.2.11"
23+
#define TRUFFLERUBY_ABI_VERSION "3.2.2.12"
2424

2525
#endif

lib/truffle/truffle/cext.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ def rb_class_real(ruby_class)
604604
end
605605

606606
def rb_class_get_superclass(ruby_class)
607+
return false unless Primitive.is_a?(ruby_class, Class)
607608
ruby_class.superclass || false
608609
end
609610

@@ -1499,6 +1500,14 @@ def rb_undef_alloc_func(ruby_class)
14991500
Primitive.object_hidden_var_set(ruby_class.singleton_class, ALLOCATOR_FUNC, nil)
15001501
end
15011502

1503+
def rb_tr_set_default_alloc_func(ruby_class, alloc_function)
1504+
Primitive.object_hidden_var_set(ruby_class.singleton_class, ALLOCATOR_FUNC, alloc_function)
1505+
end
1506+
1507+
def rb_tr_default_alloc_func(ruby_class)
1508+
ruby_class.__send__(:__layout_allocate__)
1509+
end
1510+
15021511
def rb_alias(mod, new_name, old_name)
15031512
mod.send(:alias_method, new_name, old_name)
15041513
end

mx.truffleruby/suite.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
{
2121
"name": "regex",
2222
"subdir": True,
23-
"version": "97ad1b72450b547fa14a92365d3571fbdbc6a793",
23+
"version": "a65ec785e7fecfa58450c0ccc062e3a64f16aca0",
2424
"urls": [
2525
{"url": "https://github.com/oracle/graal.git", "kind": "git"},
2626
{"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"},
@@ -29,7 +29,7 @@
2929
{
3030
"name": "sulong",
3131
"subdir": True,
32-
"version": "97ad1b72450b547fa14a92365d3571fbdbc6a793",
32+
"version": "a65ec785e7fecfa58450c0ccc062e3a64f16aca0",
3333
"urls": [
3434
{"url": "https://github.com/oracle/graal.git", "kind": "git"},
3535
{"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"},

spec/ruby/optional/capi/class_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,4 +487,16 @@ def obj.some_method() end
487487
@s.rb_class_real(0).should == 0
488488
end
489489
end
490+
491+
describe "rb_class_get_superclass" do
492+
it "returns parent class for a provided class" do
493+
a = Class.new
494+
@s.rb_class_get_superclass(Class.new(a)).should == a
495+
end
496+
497+
it "returns false when there is no parent class" do
498+
@s.rb_class_get_superclass(BasicObject).should == false
499+
@s.rb_class_get_superclass(Module.new).should == false
500+
end
501+
end
490502
end

spec/ruby/optional/capi/ext/class_spec.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ static VALUE class_spec_rb_class_real(VALUE self, VALUE object) {
7979
}
8080
}
8181

82+
static VALUE class_spec_rb_class_get_superclass(VALUE self, VALUE klass) {
83+
return rb_class_get_superclass(klass);
84+
}
85+
8286
static VALUE class_spec_rb_class_superclass(VALUE self, VALUE klass) {
8387
return rb_class_superclass(klass);
8488
}
@@ -160,6 +164,7 @@ void Init_class_spec(void) {
160164
rb_define_method(cls, "rb_class_new_instance_kw", class_spec_rb_class_new_instance_kw, 2);
161165
#endif
162166
rb_define_method(cls, "rb_class_real", class_spec_rb_class_real, 1);
167+
rb_define_method(cls, "rb_class_get_superclass", class_spec_rb_class_get_superclass, 1);
163168
rb_define_method(cls, "rb_class_superclass", class_spec_rb_class_superclass, 1);
164169
rb_define_method(cls, "rb_cvar_defined", class_spec_cvar_defined, 2);
165170
rb_define_method(cls, "rb_cvar_get", class_spec_cvar_get, 2);

spec/ruby/optional/capi/ext/object_spec.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -390,22 +390,22 @@ static VALUE speced_allocator(VALUE klass) {
390390
return instance;
391391
}
392392

393-
static VALUE define_alloc_func(VALUE self, VALUE klass) {
393+
static VALUE object_spec_rb_define_alloc_func(VALUE self, VALUE klass) {
394394
rb_define_alloc_func(klass, speced_allocator);
395395
return Qnil;
396396
}
397397

398-
static VALUE undef_alloc_func(VALUE self, VALUE klass) {
398+
static VALUE object_spec_rb_undef_alloc_func(VALUE self, VALUE klass) {
399399
rb_undef_alloc_func(klass);
400400
return Qnil;
401401
}
402402

403-
static VALUE speced_allocator_p(VALUE self, VALUE klass) {
403+
static VALUE object_spec_speced_allocator_p(VALUE self, VALUE klass) {
404404
rb_alloc_func_t allocator = rb_get_alloc_func(klass);
405405
return (allocator == speced_allocator) ? Qtrue : Qfalse;
406406
}
407407

408-
static VALUE custom_alloc_func_p(VALUE self, VALUE klass) {
408+
static VALUE object_spec_custom_alloc_func_p(VALUE self, VALUE klass) {
409409
rb_alloc_func_t allocator = rb_get_alloc_func(klass);
410410
return allocator ? Qtrue : Qfalse;
411411
}
@@ -485,10 +485,10 @@ void Init_object_spec(void) {
485485
rb_define_method(cls, "rb_ivar_defined", object_spec_rb_ivar_defined, 2);
486486
rb_define_method(cls, "rb_copy_generic_ivar", object_spec_rb_copy_generic_ivar, 2);
487487
rb_define_method(cls, "rb_free_generic_ivar", object_spec_rb_free_generic_ivar, 1);
488-
rb_define_method(cls, "rb_define_alloc_func", define_alloc_func, 1);
489-
rb_define_method(cls, "rb_undef_alloc_func", undef_alloc_func, 1);
490-
rb_define_method(cls, "speced_allocator?", speced_allocator_p, 1);
491-
rb_define_method(cls, "custom_alloc_func?", custom_alloc_func_p, 1);
488+
rb_define_method(cls, "rb_define_alloc_func", object_spec_rb_define_alloc_func, 1);
489+
rb_define_method(cls, "rb_undef_alloc_func", object_spec_rb_undef_alloc_func, 1);
490+
rb_define_method(cls, "speced_allocator?", object_spec_speced_allocator_p, 1);
491+
rb_define_method(cls, "custom_alloc_func?", object_spec_custom_alloc_func_p, 1);
492492
rb_define_method(cls, "not_implemented_method", rb_f_notimplement, -1);
493493
rb_define_method(cls, "rb_ivar_foreach", object_spec_rb_ivar_foreach, 1);
494494
}

spec/tags/core/struct/new_tags.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fails:Struct.new raises ArgumentError if not provided any arguments

spec/tags/optional/capi/object_tags.txt

Lines changed: 0 additions & 3 deletions
This file was deleted.

spec/truffleruby.next-specs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
# Use spec/ruby/core/nil/nil_spec.rb as a dummy file to avoid being empty (what causes mspec to error)
1010
spec/ruby/core/nil/nil_spec.rb
1111

12+
spec/ruby/core/struct/new_spec.rb
1213
spec/ruby/core/warning/element_reference_spec.rb
1314
spec/ruby/core/warning/element_set_spec.rb
1415

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/launcher/java/org/truffleruby/launcher/RubyLauncher.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,6 @@ protected String getMainClass() {
8787
return RubyLauncher.class.getName();
8888
}
8989

90-
@Override
91-
protected void validateArguments(Map<String, String> polyglotOptions) {
92-
}
93-
9490
@Override
9591
protected void printVersion() {
9692
getOutput().println(TruffleRuby.getVersionString(getImplementationNameFromEngine()));
@@ -131,10 +127,11 @@ protected List<String> preprocessArguments(List<String> args, Map<String, String
131127
if (config.readRubyOptEnv) {
132128
/* Calling processArguments() here will also add any unrecognized arguments such as
133129
* --jvm/--native/--vm.* arguments and polyglot options to `config.getUnknownArguments()`, which will
134-
* then be processed by AbstractLanguageLauncher and Launcher. If we are going to run Native, Launcher
135-
* will apply VM options to the current process. If we are going to run on JVM, Launcher will collect
136-
* them and pass them when execve()'ing to bin/java. Polyglot options are parsed by
137-
* AbstractLanguageLauncher in the final process. */
130+
* then be processed by AbstractLanguageLauncher. For VM arguments, #validateVmArguments() will be
131+
* called to check that the guessed --vm.* arguments match the actual ones (should always be the case,
132+
* except if --vm.* arguments are added dynamically like --vm.Xmn1g for gem/bundle on native). If they
133+
* do not match then the thin launcher will relaunch by execve(). Polyglot options are parsed by
134+
* AbstractLanguageLauncher#parseUnrecognizedOptions. */
138135
// Process RUBYOPT
139136
final List<String> rubyoptArgs = getArgsFromEnvVariable("RUBYOPT");
140137
new CommandLineParser(rubyoptArgs, config, false, true).processArguments();
@@ -382,7 +379,7 @@ private static List<String> getArgsFromEnvVariable(String name) {
382379
String value = System.getenv(name);
383380
if (value != null) {
384381
value = value.strip();
385-
if (value.length() != 0) {
382+
if (!value.isEmpty()) {
386383
return new ArrayList<>(Arrays.asList(value.split("\\s+")));
387384
}
388385
}
@@ -391,7 +388,7 @@ private static List<String> getArgsFromEnvVariable(String name) {
391388

392389
private static List<String> getPathListFromEnvVariable(String name) {
393390
final String value = System.getenv(name);
394-
if (value != null && value.length() != 0) {
391+
if (value != null && !value.isEmpty()) {
395392
return new ArrayList<>(Arrays.asList(value.split(":")));
396393
}
397394
return Collections.emptyList();

src/main/c/cext/define.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ rb_alloc_func_t rb_get_alloc_func(VALUE klass) {
109109
return RUBY_CEXT_INVOKE_NO_WRAP("rb_get_alloc_func", klass);
110110
}
111111

112+
void rb_tr_set_default_alloc_func(VALUE ruby_class, rb_alloc_func_t alloc_function) {
113+
polyglot_invoke(RUBY_CEXT, "rb_tr_set_default_alloc_func", rb_tr_unwrap(ruby_class), alloc_function);
114+
}
115+
116+
VALUE rb_tr_default_alloc_func(VALUE klass) {
117+
return RUBY_CEXT_INVOKE("rb_tr_default_alloc_func", klass);
118+
}
119+
112120
VALUE rb_define_class_id(ID id, VALUE super) {
113121
// id is deliberately ignored - see MRI
114122
if (!super) {

src/main/c/cext/ruby.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,13 @@ void rb_tr_init(void *ruby_cext) {
5454
polyglot_invoke(rb_tr_cext, "cext_start_new_handle_block");
5555
rb_tr_init_exception();
5656
rb_tr_init_global_constants(sulong_get_constant);
57+
58+
// In CRuby some core classes have custom allocation function.
59+
// So mimic this CRuby implementation detail to satisfy rb_define_alloc_func's specs
60+
// for classes that are used in these specs only.
61+
rb_tr_set_default_alloc_func(rb_cBasicObject, rb_tr_default_alloc_func);
62+
rb_tr_set_default_alloc_func(rb_cArray, rb_tr_default_alloc_func);
63+
rb_tr_set_default_alloc_func(rb_cString, rb_tr_default_alloc_func);
64+
5765
polyglot_invoke(rb_tr_cext, "cext_start_new_handle_block");
5866
}

src/main/c/cext/truffleruby-impl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ extern ID (*rb_tr_sym2id)(VALUE sym);
4848
extern void* (*rb_tr_force_native)(VALUE obj);
4949
extern bool (*rb_tr_is_native_object)(VALUE value);
5050
extern VALUE (*rb_tr_rb_f_notimplement)(int argc, const VALUE *argv, VALUE obj, VALUE marker);
51+
extern void rb_tr_set_default_alloc_func(VALUE klass, rb_alloc_func_t func);
52+
extern VALUE rb_tr_default_alloc_func(VALUE klass);
53+
5154

5255
// Create a native MutableTruffleString from ptr and len without copying.
5356
// The returned RubyString is only valid as long as ptr is valid (typically only as long as the caller is on the stack),

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

Lines changed: 6 additions & 5 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;
@@ -445,9 +446,9 @@ public abstract static class MarkObjectOnCallExit extends PrimitiveArrayArgument
445446

446447
@Specialization
447448
Object markOnCallExit(Object object,
448-
@Cached WrapNode wrapNode,
449-
@Cached MarkingServiceNodes.QueueForMarkOnExitNode markOnExitNode) {
450-
markOnExitNode.execute(wrapNode.execute(object));
449+
@Cached WrapNode wrapNode) {
450+
ValueWrapper wrapper = wrapNode.execute(object);
451+
getLanguage().getCurrentThread().getCurrentFiber().extensionCallStack.markOnExitObject(wrapper);
451452
return nil;
452453
}
453454
}
@@ -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/MarkingServiceNodes.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import com.oracle.truffle.api.dsl.GenerateCached;
1313
import com.oracle.truffle.api.dsl.GenerateInline;
14-
import com.oracle.truffle.api.dsl.NeverDefault;
1514
import com.oracle.truffle.api.dsl.NonIdempotent;
1615
import com.oracle.truffle.api.nodes.Node;
1716
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
@@ -76,22 +75,6 @@ protected static ExtensionCallStack getStack(Node node) {
7675
}
7776
}
7877

79-
public static final class QueueForMarkOnExitNode extends RubyBaseNode {
80-
81-
@NeverDefault
82-
public static QueueForMarkOnExitNode create() {
83-
return new QueueForMarkOnExitNode();
84-
}
85-
86-
public void execute(ValueWrapper object) {
87-
addToList(getLanguage().getCurrentThread().getCurrentFiber().extensionCallStack, object);
88-
}
89-
90-
protected void addToList(ExtensionCallStack stack, ValueWrapper object) {
91-
stack.markOnExitObject(object);
92-
}
93-
}
94-
9578
@GenerateInline
9679
@GenerateCached(false)
9780
public abstract static class RunMarkOnExitNode extends RubyBaseNode {

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,

0 commit comments

Comments
 (0)