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: a1b3ff3d2dea
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 100d655a2eeb
Choose a head ref
  • 3 commits
  • 5 files changed
  • 1 contributor

Commits on Apr 29, 2016

  1. Copy the full SHA
    bde5fb1 View commit details
  2. Copy the full SHA
    58b7d32 View commit details
  3. Copy the full SHA
    100d655 View commit details
2 changes: 1 addition & 1 deletion truffle/pom.rb
Original file line number Diff line number Diff line change
@@ -45,7 +45,7 @@
'annotationProcessors' => [ 'com.oracle.truffle.object.dsl.processor.LayoutProcessor',
'com.oracle.truffle.dsl.processor.InstrumentableProcessor',
'com.oracle.truffle.dsl.processor.TruffleProcessor',
'com.oracle.truffle.dsl.processor.InteropProcessor',
'com.oracle.truffle.dsl.processor.interop.InteropDSLProcessor',
'com.oracle.truffle.dsl.processor.verify.VerifyTruffleProcessor',
'com.oracle.truffle.dsl.processor.LanguageRegistrationProcessor', ],
'generatedSourcesDirectory' => 'target/generated-sources',
2 changes: 1 addition & 1 deletion truffle/pom.xml
Original file line number Diff line number Diff line change
@@ -106,7 +106,7 @@ DO NOT MODIFIY - GENERATED CODE
<annotationProcessor>com.oracle.truffle.object.dsl.processor.LayoutProcessor</annotationProcessor>
<annotationProcessor>com.oracle.truffle.dsl.processor.InstrumentableProcessor</annotationProcessor>
<annotationProcessor>com.oracle.truffle.dsl.processor.TruffleProcessor</annotationProcessor>
<annotationProcessor>com.oracle.truffle.dsl.processor.InteropProcessor</annotationProcessor>
<annotationProcessor>com.oracle.truffle.dsl.processor.interop.InteropDSLProcessor</annotationProcessor>
<annotationProcessor>com.oracle.truffle.dsl.processor.verify.VerifyTruffleProcessor</annotationProcessor>
<annotationProcessor>com.oracle.truffle.dsl.processor.LanguageRegistrationProcessor</annotationProcessor>
</annotationProcessors>
Original file line number Diff line number Diff line change
@@ -27,27 +27,28 @@
import org.jruby.truffle.core.rope.Rope;
import org.jruby.truffle.core.string.StringOperations;
import org.jruby.truffle.language.RubyGuards;
import org.jruby.truffle.language.RubyObjectType;
import org.jruby.truffle.language.dispatch.DispatchAction;
import org.jruby.truffle.language.dispatch.DispatchHeadNode;
import org.jruby.truffle.language.dispatch.MissingBehavior;

@MessageResolution(
receiverType = DynamicObject.class,
receiverType = RubyObjectType.class,
language = RubyLanguage.class
)
public class RubyMessageResolution {

@CanResolve
public abstract static class Check extends Node {

protected static boolean test(DynamicObject receiver) {
protected static boolean test(TruffleObject receiver) {
return RubyGuards.isRubyBasicObject(receiver);
}

}

@Resolve(message = "EXECUTE")
public static final class ForeignExecuteNode extends Node {
public static abstract class ForeignExecuteNode extends Node {

@Child private Node findContextNode;
@Child private ForeignExecuteHelperNode executeMethodNode;
@@ -70,7 +71,7 @@ private ForeignExecuteHelperNode getHelperNode() {
}

@Resolve(message = "GET_SIZE")
public static final class ForeignGetSizeNode extends Node {
public static abstract class ForeignGetSizeNode extends Node {

@Child private Node findContextNode;
@Child private DispatchHeadNode dispatchNode;
@@ -93,16 +94,16 @@ private DispatchHeadNode getDispatchNode() {
}

@Resolve(message = "HAS_SIZE")
public static final class ForeignHasSizeNode extends Node {
public static abstract class ForeignHasSizeNode extends Node {

public Object access(VirtualFrame frame, DynamicObject object) {
protected Object access(DynamicObject object) {
return RubyGuards.isRubyArray(object) || RubyGuards.isRubyHash(object) || RubyGuards.isRubyString(object);
}

}

@Resolve(message = "INVOKE")
public static final class ForeignInvokeNode extends Node {
public static abstract class ForeignInvokeNode extends Node {

@Child private Node findContextNode;
@Child private DispatchHeadNode dispatchHeadNode;
@@ -125,16 +126,16 @@ private DispatchHeadNode getDispatchHeadNode() {
}

@Resolve(message = "IS_BOXED")
public static final class ForeignIsBoxedNode extends Node {
public static abstract class ForeignIsBoxedNode extends Node {

protected Object access(VirtualFrame frame, DynamicObject object) {
protected Object access(DynamicObject object) {
return RubyGuards.isRubyString(object) && StringOperations.rope(object).byteLength() == 1;
}

}

@Resolve(message = "IS_EXECUTABLE")
public static final class ForeignIsExecutableNode extends Node {
public static abstract class ForeignIsExecutableNode extends Node {

protected Object access(VirtualFrame frame, DynamicObject object) {
return RubyGuards.isRubyMethod(object) || RubyGuards.isRubyProc(object);
@@ -143,12 +144,12 @@ protected Object access(VirtualFrame frame, DynamicObject object) {
}

@Resolve(message = "IS_NULL")
public static final class ForeignIsNullNode extends Node {
public static abstract class ForeignIsNullNode extends Node {

@Child private Node findContextNode;
@CompilationFinal RubyContext context;

protected Object access(VirtualFrame frame, DynamicObject object) {
protected Object access(DynamicObject object) {
return object == getContext().getCoreLibrary().getNilObject();
}

@@ -165,7 +166,7 @@ private RubyContext getContext() {
}

@Resolve(message = "READ")
public static final class ForeignReadNode extends Node {
public static abstract class ForeignReadNode extends Node {

@Child private Node findContextNode;
@Child private ForeignReadStringCachingHelperNode helperNode;
@@ -188,18 +189,17 @@ private ForeignReadStringCachingHelperNode getHelperNode() {
}

@Resolve(message = "UNBOX")
public static final class ForeignUnboxNode extends Node {
public static abstract class ForeignUnboxNode extends Node {

private final ConditionProfile stringProfile = ConditionProfile.createBinaryProfile();
private final ConditionProfile emptyProfile = ConditionProfile.createBinaryProfile();

protected Object access(VirtualFrame frame, DynamicObject object) {
protected Object access(DynamicObject object) {
if (stringProfile.profile(RubyGuards.isRubyString(object))) {
final Rope rope = Layouts.STRING.getRope(object);

if (emptyProfile.profile(rope.byteLength() == 0)) {
unsuported();
throw new IllegalStateException();
throw UnsupportedMessageException.raise(Message.UNBOX);
} else {
return rope.get(0);
}
@@ -208,15 +208,10 @@ protected Object access(VirtualFrame frame, DynamicObject object) {
}
}

@CompilerDirectives.TruffleBoundary
private void unsuported() {
UnsupportedMessageException.raise(Message.UNBOX);
}

}

@Resolve(message = "WRITE")
public static final class ForeignWriteNode extends Node {
public static abstract class ForeignWriteNode extends Node {

@Child private Node findContextNode;
@Child private ForeignWriteStringCachingHelperNode helperNode;
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
* Eclipse Public License version 1.0
* GNU General Public License version 2
* GNU Lesser General Public License version 2.1
*/
package org.jruby.truffle.interop;

import com.oracle.truffle.api.interop.ForeignAccess;

public abstract class RubyMessageResolutionAccessor {

public static final ForeignAccess ACCESS = RubyMessageResolutionForeign.ACCESS;

}
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@
import org.jruby.truffle.core.Layouts;
import org.jruby.truffle.core.rope.RopeOperations;
import org.jruby.truffle.core.string.StringOperations;
import org.jruby.truffle.interop.RubyMessageResolutionAccessor;

public class RubyObjectType extends ObjectType {

@@ -41,7 +42,7 @@ public String toString(DynamicObject object) {

@Override
public ForeignAccess getForeignAccessFactory(DynamicObject object) {
return null;
return RubyMessageResolutionAccessor.ACCESS;
}

public static boolean isInstance(TruffleObject object) {