Skip to content

Commit 7adeb9f

Browse files
committed
Use specific AllocateNode's directly in CopyNode
1 parent 568a4ed commit 7adeb9f

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@
7171
import org.truffleruby.core.proc.ProcNodes.ProcNewNode;
7272
import org.truffleruby.core.proc.ProcOperations;
7373
import org.truffleruby.core.proc.RubyProc;
74+
import org.truffleruby.core.range.RangeNodes;
7475
import org.truffleruby.core.range.RubyIntOrLongRange;
75-
import org.truffleruby.core.range.RubyObjectRange;
7676
import org.truffleruby.core.rope.CodeRange;
7777
import org.truffleruby.core.rope.Rope;
7878
import org.truffleruby.core.rope.RopeNodes;
@@ -535,14 +535,14 @@ protected RubyDynamicObject copyRubyClass(RubyClass self,
535535

536536
@Specialization
537537
protected RubyDynamicObject copy(ImmutableRubyString string,
538-
@Cached DispatchNode allocateStringNode) {
539-
return (RubyString) allocateStringNode.call(coreLibrary().stringClass, "__allocate__");
538+
@Cached StringNodes.AllocateNode allocateStringNode) {
539+
return allocateStringNode.execute(coreLibrary().stringClass);
540540
}
541541

542542
@Specialization
543543
protected RubyDynamicObject copy(RubyIntOrLongRange range,
544-
@Cached DispatchNode allocateRangeNode) {
545-
return (RubyObjectRange) allocateRangeNode.call(coreLibrary().rangeClass, "__allocate__");
544+
@Cached RangeNodes.AllocateNode allocateRangeNode) {
545+
return allocateRangeNode.execute(coreLibrary().rangeClass);
546546
}
547547
}
548548

src/main/java/org/truffleruby/core/range/RangeNodes.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
package org.truffleruby.core.range;
1111

1212
import com.oracle.truffle.api.dsl.Bind;
13+
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
14+
import com.oracle.truffle.api.dsl.GenerateUncached;
1315
import com.oracle.truffle.api.profiles.LoopConditionProfile;
1416
import org.truffleruby.builtins.CoreMethod;
1517
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
@@ -18,7 +20,6 @@
1820
import org.truffleruby.builtins.Primitive;
1921
import org.truffleruby.builtins.PrimitiveArrayArgumentsNode;
2022
import org.truffleruby.builtins.PrimitiveNode;
21-
import org.truffleruby.builtins.UnaryCoreMethodNode;
2223
import org.truffleruby.builtins.YieldingCoreMethodNode;
2324
import org.truffleruby.core.array.ArrayBuilderNode;
2425
import org.truffleruby.core.array.ArrayBuilderNode.BuilderState;
@@ -31,6 +32,7 @@
3132
import org.truffleruby.language.RubyBaseNodeWithExecute;
3233
import org.truffleruby.language.RubyGuards;
3334
import org.truffleruby.language.RubyNode;
35+
import org.truffleruby.language.RubySourceNode;
3436
import org.truffleruby.language.Visibility;
3537
import org.truffleruby.language.arguments.RubyArguments;
3638
import org.truffleruby.language.control.RaiseException;
@@ -420,8 +422,17 @@ protected RubyClass getRangeClass() {
420422
}
421423
}
422424

425+
@GenerateUncached
426+
@GenerateNodeFactory
423427
@CoreMethod(names = { "__allocate__", "__layout_allocate__" }, constructor = true, visibility = Visibility.PRIVATE)
424-
public abstract static class AllocateNode extends UnaryCoreMethodNode {
428+
@NodeChild(value = "rubyClass", type = RubyNode.class)
429+
public abstract static class AllocateNode extends RubySourceNode {
430+
431+
public static AllocateNode create() {
432+
return RangeNodesFactory.AllocateNodeFactory.create(null);
433+
}
434+
435+
public abstract RubyObjectRange execute(RubyClass rubyClass);
425436

426437
@Specialization
427438
protected RubyObjectRange allocate(RubyClass rubyClass) {

src/main/java/org/truffleruby/core/string/StringNodes.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import com.oracle.truffle.api.dsl.Bind;
8080
import com.oracle.truffle.api.dsl.Cached.Exclusive;
8181
import com.oracle.truffle.api.dsl.Cached.Shared;
82+
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
8283
import com.oracle.truffle.api.nodes.Node;
8384
import com.oracle.truffle.api.profiles.LoopConditionProfile;
8485
import org.graalvm.collections.Pair;
@@ -188,6 +189,7 @@
188189
import org.truffleruby.language.RubyBaseNodeWithExecute;
189190
import org.truffleruby.language.RubyGuards;
190191
import org.truffleruby.language.RubyNode;
192+
import org.truffleruby.language.RubySourceNode;
191193
import org.truffleruby.language.Visibility;
192194
import org.truffleruby.language.arguments.ReadCallerVariablesNode;
193195
import org.truffleruby.language.control.DeferredRaiseException;
@@ -344,8 +346,17 @@ protected RubyString substring(Object source, int offset, int byteLength,
344346

345347
}
346348

349+
@GenerateUncached
350+
@GenerateNodeFactory
347351
@CoreMethod(names = { "__allocate__", "__layout_allocate__" }, constructor = true, visibility = Visibility.PRIVATE)
348-
public abstract static class AllocateNode extends CoreMethodArrayArgumentsNode {
352+
@NodeChild(value = "rubyClass", type = RubyNode.class)
353+
public abstract static class AllocateNode extends RubySourceNode {
354+
355+
public static AllocateNode create() {
356+
return StringNodesFactory.AllocateNodeFactory.create(null);
357+
}
358+
359+
public abstract RubyString execute(RubyClass rubyClass);
349360

350361
@Specialization
351362
protected RubyString allocate(RubyClass rubyClass) {

0 commit comments

Comments
 (0)