Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: b71d9eced21f
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 24b83e9e339c
Choose a head ref
  • 3 commits
  • 4 files changed
  • 1 contributor

Commits on May 17, 2016

  1. Copy the full SHA
    5301b50 View commit details
  2. Copy the full SHA
    0b4036f View commit details
  3. [Truffle] Add boundaries in File::Stat nodes.

    * The internal memory pointer is of unknown type and brings in too much internals.
    eregon committed May 17, 2016
    Copy the full SHA
    24b83e9 View commit details
Original file line number Diff line number Diff line change
@@ -10,11 +10,11 @@

package org.jruby.truffle.core.cast;

import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.dsl.NodeChild;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.api.source.SourceSection;
import org.jruby.truffle.Layouts;
import org.jruby.truffle.RubyContext;
@@ -33,6 +33,8 @@ public abstract class NameToJavaStringNode extends RubyNode {

@Child private CallDispatchHeadNode toStr;

private final BranchProfile errorProfile = BranchProfile.create();

public NameToJavaStringNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
toStr = DispatchHeadNodeFactory.createMethodCall(context);
@@ -61,8 +63,8 @@ public String coerceObject(VirtualFrame frame, Object object) {
try {
coerced = toStr.call(frame, object, "to_str", null);
} catch (RaiseException e) {
errorProfile.enter();
if (Layouts.BASIC_OBJECT.getLogicalClass(e.getException()) == coreLibrary().getNoMethodErrorClass()) {
CompilerDirectives.transferToInterpreter();
throw new RaiseException(coreExceptions().typeErrorNoImplicitConversion(object, "String", this));
} else {
throw e;
@@ -72,7 +74,7 @@ public String coerceObject(VirtualFrame frame, Object object) {
if (RubyGuards.isRubyString(coerced)) {
return coerced.toString();
} else {
CompilerDirectives.transferToInterpreter();
errorProfile.enter();
throw new RaiseException(coreExceptions().typeErrorBadCoercion(object, "String", "to_str", coerced, this));
}
}
Original file line number Diff line number Diff line change
@@ -889,12 +889,12 @@ public int hash(DynamicObject self) {
@CoreMethod(names = "initialize_copy", required = 1)
public abstract static class InitializeCopyNode extends CoreMethodArrayArgumentsNode {

private final BranchProfile errorProfile = BranchProfile.create();

@Specialization
public Object initializeCopy(DynamicObject self, DynamicObject from) {
CompilerDirectives.transferToInterpreter();

if (Layouts.BASIC_OBJECT.getLogicalClass(self) != Layouts.BASIC_OBJECT.getLogicalClass(from)) {
CompilerDirectives.transferToInterpreter();
errorProfile.enter();
throw new RaiseException(coreExceptions().typeError("initialize_copy should take same class object", this));
}

Original file line number Diff line number Diff line change
@@ -95,7 +95,6 @@
import org.jruby.truffle.language.yield.YieldNode;
import org.jruby.truffle.platform.UnsafeGroup;
import org.jruby.util.IdUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -943,7 +942,6 @@ public RubyNode coerceToString(RubyNode name) {
return NameToJavaStringNodeGen.create(null, null, name);
}

@TruffleBoundary
@Specialization
public Object constMissing(DynamicObject module, String name) {
throw new RaiseException(coreExceptions().nameErrorUninitializedConstant(module, name, this));
Original file line number Diff line number Diff line change
@@ -85,6 +85,7 @@ public Object mtime(
@Primitive(name = "stat_nlink", unsafe = UnsafeGroup.IO)
public static abstract class NlinkPrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public int nlink(DynamicObject rubyStat) {
return getStat(rubyStat).nlink();
@@ -95,6 +96,7 @@ public int nlink(DynamicObject rubyStat) {
@Primitive(name = "stat_rdev", unsafe = UnsafeGroup.IO)
public static abstract class RdevPrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public long rdev(DynamicObject rubyStat) {
return getStat(rubyStat).rdev();
@@ -105,6 +107,7 @@ public long rdev(DynamicObject rubyStat) {
@Primitive(name = "stat_blksize", unsafe = UnsafeGroup.IO)
public static abstract class StatBlksizePrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public long blksize(DynamicObject rubyStat) {
return getStat(rubyStat).blockSize();
@@ -115,6 +118,7 @@ public long blksize(DynamicObject rubyStat) {
@Primitive(name = "stat_blocks", unsafe = UnsafeGroup.IO)
public static abstract class StatBlocksPrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public long blocks(DynamicObject rubyStat) {
return getStat(rubyStat).blocks();
@@ -125,6 +129,7 @@ public long blocks(DynamicObject rubyStat) {
@Primitive(name = "stat_dev", unsafe = UnsafeGroup.IO)
public static abstract class StatDevPrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public long dev(DynamicObject rubyStat) {
return getStat(rubyStat).dev();
@@ -135,6 +140,7 @@ public long dev(DynamicObject rubyStat) {
@Primitive(name = "stat_ino", unsafe = UnsafeGroup.IO)
public static abstract class StatInoPrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public long ino(DynamicObject rubyStat) {
return getStat(rubyStat).ino();
@@ -221,6 +227,7 @@ public Object stat(DynamicObject rubyStat, Object path) {
@Primitive(name = "stat_size", unsafe = UnsafeGroup.IO)
public static abstract class StatSizePrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public long size(DynamicObject rubyStat) {
return getStat(rubyStat).st_size();
@@ -231,6 +238,7 @@ public long size(DynamicObject rubyStat) {
@Primitive(name = "stat_mode", unsafe = UnsafeGroup.IO)
public static abstract class StatModePrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public int mode(DynamicObject rubyStat) {
return getStat(rubyStat).mode();
@@ -241,6 +249,7 @@ public int mode(DynamicObject rubyStat) {
@Primitive(name = "stat_gid", unsafe = UnsafeGroup.IO)
public static abstract class StatGIDPrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public int gid(DynamicObject rubyStat) {
return getStat(rubyStat).gid();
@@ -251,6 +260,7 @@ public int gid(DynamicObject rubyStat) {
@Primitive(name = "stat_uid", unsafe = UnsafeGroup.IO)
public static abstract class StatUIDPrimitiveNode extends PrimitiveArrayArgumentsNode {

@TruffleBoundary
@Specialization
public int uid(DynamicObject rubyStat) {
return getStat(rubyStat).uid();