Skip to content

Commit

Permalink
Showing 5 changed files with 14 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1147,7 +1147,7 @@ public DynamicObject lambda(NotProvided block) {
@Specialization(guards = "isRubyProc(block)")
public DynamicObject lambda(DynamicObject block) {
return ProcNodes.createRubyProc(
getContext().getCoreLibrary().getProcClass(),
getContext().getCoreLibrary().getProcFactory(),
ProcNodes.Type.LAMBDA,
Layouts.PROC.getSharedMethodInfo(block),
Layouts.PROC.getCallTargetForLambdas(block),
Original file line number Diff line number Diff line change
@@ -245,7 +245,7 @@ public DynamicObject toProcUncached(DynamicObject methodObject) {
final InternalMethod method = Layouts.METHOD.getMethod(methodObject);

return ProcNodes.createRubyProc(
getContext().getCoreLibrary().getProcClass(),
getContext().getCoreLibrary().getProcFactory(),
ProcNodes.Type.LAMBDA,
method.getSharedMethodInfo(),
callTarget,
Original file line number Diff line number Diff line change
@@ -29,6 +29,8 @@
import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.nodes.dispatch.CallDispatchHeadNode;
import org.jruby.truffle.nodes.dispatch.DispatchHeadNodeFactory;
import org.jruby.truffle.nodes.objects.AllocateObjectNode;
import org.jruby.truffle.nodes.objects.AllocateObjectNodeGen;
import org.jruby.truffle.nodes.yield.YieldDispatchHeadNode;
import org.jruby.truffle.runtime.NotProvided;
import org.jruby.truffle.runtime.RubyArguments;
@@ -94,10 +96,12 @@ public DynamicObject allocate(DynamicObject rubyClass) {
public abstract static class ProcNewNode extends CoreMethodArrayArgumentsNode {

@Child private CallDispatchHeadNode initializeNode;
@Child private AllocateObjectNode allocateObjectNode;

public ProcNewNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
initializeNode = DispatchHeadNodeFactory.createMethodCallOnSelf(context);
allocateObjectNode = AllocateObjectNodeGen.create(context, sourceSection, null, null);
}

public abstract DynamicObject executeProcNew(VirtualFrame frame, DynamicObject procClass, Object[] args, Object block);
@@ -123,7 +127,7 @@ public DynamicObject procNormal(DynamicObject procClass, Object[] args, DynamicO
@Specialization(guards = "procClass != metaClass(block)")
public DynamicObject procSpecial(VirtualFrame frame, DynamicObject procClass, Object[] args, DynamicObject block) {
// Instantiate a new instance of procClass as classes do not correspond
DynamicObject proc = ProcNodes.createRubyProc(
DynamicObject proc = allocateObjectNode.allocate(
procClass,
Layouts.PROC.getType(block),
Layouts.PROC.getSharedMethodInfo(block),
@@ -146,13 +150,16 @@ protected DynamicObject metaClass(DynamicObject object) {
@CoreMethod(names = { "dup", "clone" })
public abstract static class DupNode extends UnaryCoreMethodNode {

@Child private AllocateObjectNode allocateObjectNode;

public DupNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
allocateObjectNode = AllocateObjectNodeGen.create(context, sourceSection, null, null);
}

@Specialization
public DynamicObject dup(DynamicObject proc) {
DynamicObject copy = ProcNodes.createRubyProc(
DynamicObject copy = allocateObjectNode.allocate(
Layouts.BASIC_OBJECT.getLogicalClass(proc),
Layouts.PROC.getType(proc),
Layouts.PROC.getSharedMethodInfo(proc),
Original file line number Diff line number Diff line change
@@ -149,7 +149,7 @@ protected DynamicObject createProc(DynamicObject symbol) {
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode);

return ProcNodes.createRubyProc(
getContext().getCoreLibrary().getProcClass(),
getContext().getCoreLibrary().getProcFactory(),
ProcNodes.Type.PROC,
sharedMethodInfo,
callTarget, callTarget, null,
Original file line number Diff line number Diff line change
@@ -2256,7 +2256,7 @@ public Object max(VirtualFrame frame, DynamicObject array) {
final VirtualFrame maximumClosureFrame = Truffle.getRuntime().createVirtualFrame(RubyArguments.pack(null, null, array, null, new Object[] {}), maxBlock.getFrameDescriptor());
maximumClosureFrame.setObject(maxBlock.getFrameSlot(), maximum);

final DynamicObject block = ProcNodes.createRubyProc(getContext().getCoreLibrary().getProcClass(), ProcNodes.Type.PROC,
final DynamicObject block = ProcNodes.createRubyProc(getContext().getCoreLibrary().getProcFactory(), ProcNodes.Type.PROC,
maxBlock.getSharedMethodInfo(), maxBlock.getCallTarget(), maxBlock.getCallTarget(),
maximumClosureFrame.materialize(), null, array, null);

@@ -2358,7 +2358,7 @@ public Object min(VirtualFrame frame, DynamicObject array) {
final VirtualFrame minimumClosureFrame = Truffle.getRuntime().createVirtualFrame(RubyArguments.pack(null, null, array, null, new Object[] {}), minBlock.getFrameDescriptor());
minimumClosureFrame.setObject(minBlock.getFrameSlot(), minimum);

final DynamicObject block = ProcNodes.createRubyProc(getContext().getCoreLibrary().getProcClass(), ProcNodes.Type.PROC,
final DynamicObject block = ProcNodes.createRubyProc(getContext().getCoreLibrary().getProcFactory(), ProcNodes.Type.PROC,
minBlock.getSharedMethodInfo(), minBlock.getCallTarget(), minBlock.getCallTarget(),
minimumClosureFrame.materialize(), null, array, null);

0 comments on commit 8d06150

Please sign in to comment.