Skip to content

Commit

Permalink
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions truffle/src/main/java/org/jruby/truffle/nodes/core/ProcNodes.java
Original file line number Diff line number Diff line change
@@ -19,8 +19,10 @@
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.object.DynamicObjectFactory;
import com.oracle.truffle.api.object.Shape;
import com.oracle.truffle.api.source.NullSourceSection;
import com.oracle.truffle.api.source.SourceSection;

import org.jcodings.specific.UTF8Encoding;
import org.jruby.RubyString;
import org.jruby.ast.ArgsNode;
@@ -98,6 +100,9 @@ public abstract static class ProcNewNode extends CoreMethodArrayArgumentsNode {
@Child private CallDispatchHeadNode initializeNode;
@Child private AllocateObjectNode allocateObjectNode;

protected final DynamicObject PROC_CLASS = getContext().getCoreLibrary().getProcClass();
protected final Shape PROC_SHAPE = getContext().getCoreLibrary().getProcFactory().getShape();

public ProcNewNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
initializeNode = DispatchHeadNodeFactory.createMethodCallOnSelf(context);
@@ -119,6 +124,11 @@ public DynamicObject proc(VirtualFrame frame, DynamicObject procClass, Object[]
return executeProcNew(frame, procClass, args, parentBlock);
}

@Specialization(guards = { "procClass == PROC_CLASS", "block.getShape() == PROC_SHAPE" })
public DynamicObject procNormalOptimized(DynamicObject procClass, Object[] args, DynamicObject block) {
return block;
}

@Specialization(guards = "procClass == metaClass(block)")
public DynamicObject procNormal(DynamicObject procClass, Object[] args, DynamicObject block) {
return block;

0 comments on commit 65fdc64

Please sign in to comment.