Skip to content

Commit

Permalink
Showing 2 changed files with 22 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -133,25 +133,11 @@ public AllocateNode(RubyContext context, SourceSection sourceSection) {
allocateObjectNode = AllocateObjectNodeGen.create(context, sourceSection, null, null);
}

@Specialization(guards = "!isNameError(rubyClass)")
public DynamicObject allocate(DynamicObject rubyClass) {
return allocateObjectNode.allocate(rubyClass, nil(), null, nil());
}

@Specialization(guards = "isNameError(rubyClass)")
@Specialization
public DynamicObject allocateNameError(DynamicObject rubyClass) {
return allocateObjectNode.allocate(rubyClass, nil(), null, null, nil());
}

public static boolean isNameError(DynamicObject rubyClass){
for(DynamicObject ancestor : Layouts.MODULE.getFields(rubyClass).ancestors()){
if(Layouts.MODULE.getFields(ancestor).getName().equals("NameError")){
return true;
}
}
return false;
}

}

@Primitive(name = "exception_errno_error", needsSelf = false)
Original file line number Diff line number Diff line change
@@ -11,17 +11,38 @@

import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.source.SourceSection;
import org.jruby.truffle.Layouts;
import org.jruby.truffle.RubyContext;
import org.jruby.truffle.builtins.CoreClass;
import org.jruby.truffle.builtins.CoreMethod;
import org.jruby.truffle.builtins.CoreMethodArrayArgumentsNode;
import org.jruby.truffle.builtins.Primitive;
import org.jruby.truffle.builtins.PrimitiveArrayArgumentsNode;
import org.jruby.truffle.language.control.RaiseException;
import org.jruby.truffle.language.objects.AllocateObjectNode;
import org.jruby.truffle.language.objects.AllocateObjectNodeGen;

@CoreClass("NameError")
public abstract class NameErrorNodes {

@CoreMethod(names = "allocate", constructor = true)
public abstract static class AllocateNode extends CoreMethodArrayArgumentsNode {

@Child private AllocateObjectNode allocateObjectNode;

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

@Specialization
public DynamicObject allocateNameError(DynamicObject rubyClass) {
return allocateObjectNode.allocate(rubyClass, nil(), null, null, nil());
}

}

@CoreMethod(names = "name")
public abstract static class NameNode extends CoreMethodArrayArgumentsNode {

0 comments on commit dbd7075

Please sign in to comment.