Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[Truffle] Use new API to associate call targets with execution contex…
…ts and to set the min value for the max inliner call size.
  • Loading branch information
chrisseaton committed Nov 6, 2014
1 parent afbde81 commit a28ca3a
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 12 deletions.
4 changes: 2 additions & 2 deletions core/src/main/java/org/jruby/truffle/TruffleBridgeImpl.java
Expand Up @@ -127,7 +127,7 @@ public void init() {
@Override
public TruffleMethod truffelize(DynamicMethod originalMethod, org.jruby.ast.ArgsNode argsNode, org.jruby.ast.Node bodyNode) {
final MethodDefinitionNode methodDefinitionNode = truffleContext.getTranslator().parse(truffleContext, null, argsNode, bodyNode, null);
return new TruffleMethod(originalMethod, Truffle.getRuntime().createCallTarget(methodDefinitionNode.getMethodRootNode()));
return new TruffleMethod(originalMethod, Truffle.getRuntime().createCallTarget(methodDefinitionNode.getMethodRootNode(), truffleContext));
}

@Override
Expand Down Expand Up @@ -158,7 +158,7 @@ public Object get() {
}

final RubyRootNode parsedRootNode = truffleContext.getTranslator().parse(truffleContext, source, parserContext, parentFrame, null);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(parsedRootNode);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(parsedRootNode, truffleContext);

return callTarget.call(RubyArguments.pack(null, parentFrame, self, null, new Object[]{}));
}
Expand Down
Expand Up @@ -2338,7 +2338,7 @@ public MaxBlock(RubyContext context) {
ArrayNodesFactory.MaxBlockNodeFactory.create(context, sourceSection, new RubyNode[]{
ReadLevelVariableNodeFactory.create(context, sourceSection, frameSlot, 1),
new ReadPreArgumentNode(context, sourceSection, 0, MissingArgumentBehaviour.RUNTIME_ERROR)
})));
})), context);
}

public FrameDescriptor getFrameDescriptor() {
Expand Down Expand Up @@ -2451,7 +2451,7 @@ public MinBlock(RubyContext context) {
ArrayNodesFactory.MinBlockNodeFactory.create(context, sourceSection, new RubyNode[]{
ReadLevelVariableNodeFactory.create(context, sourceSection, frameSlot, 1),
new ReadPreArgumentNode(context, sourceSection, 0, MissingArgumentBehaviour.RUNTIME_ERROR)
})));
})), context);
}

public FrameDescriptor getFrameDescriptor() {
Expand Down
Expand Up @@ -96,7 +96,7 @@ private static void addMethod(RubyClass rubyObjectClass, MethodDetails methodDet
final RubyRootNode rootNode = makeGenericMethod(context, methodDetails, needsSelf);

final RubyMethod method = new RubyMethod(rootNode.getSharedMethodInfo(), canonicalName, module, visibility, false,
Truffle.getRuntime().createCallTarget(rootNode), null);
Truffle.getRuntime().createCallTarget(rootNode, context), null);

if (anno.isModuleFunction()) {
addMethod(module, method, aliases, Visibility.PRIVATE);
Expand Down
Expand Up @@ -271,7 +271,7 @@ public static void attrReader(RubyNode currentNode, RubyContext context, SourceS

final SharedMethodInfo sharedMethodInfo = SharedMethodInfo.generated(sourceSection, indicativeName);
final RubyRootNode rootNode = new RubyRootNode(context, sourceSection, null, sharedMethodInfo, block);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode, context);
final RubyMethod method = new RubyMethod(sharedMethodInfo, name, module, Visibility.PUBLIC, false, callTarget, null);
module.addMethod(currentNode, method);
}
Expand Down Expand Up @@ -324,7 +324,7 @@ public static void attrWriter(RubyNode currentNode, RubyContext context, SourceS

final SharedMethodInfo sharedMethodInfo = SharedMethodInfo.generated(sourceSection, indicativeName);
final RubyRootNode rootNode = new RubyRootNode(context, sourceSection, null, sharedMethodInfo, block);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode, context);
final RubyMethod method = new RubyMethod(sharedMethodInfo, name + "=", module, Visibility.PUBLIC, false, callTarget, null);
module.addMethod(currentNode, method);
}
Expand Down
Expand Up @@ -84,7 +84,7 @@ public RubyMethod executeMethod(VirtualFrame frame) {
}

final RubyRootNode rootNodeClone = NodeUtil.cloneNode(rootNode);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNodeClone);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNodeClone, getContext());
return new RubyMethod(sharedMethodInfo, name, null, visibility, false, callTarget, declarationFrame);
}

Expand Down
15 changes: 14 additions & 1 deletion core/src/main/java/org/jruby/truffle/runtime/RubyContext.java
Expand Up @@ -63,6 +63,7 @@ public class RubyContext extends ExecutionContext {
private final SafepointManager safepointManager;
private final Random random = new Random();
private final LexicalScope rootLexicalScope;
private final ExecutionContextOptions executionContextOptions;

private SourceCallback sourceCallback = null;

Expand All @@ -80,6 +81,12 @@ protected Queue<Object> initialValue() {
public RubyContext(Ruby runtime) {
assert runtime != null;

executionContextOptions = Truffle.getRuntime().createExecutionContextOptions();

if (executionContextOptions.isSupported("MinInliningMaxCallerSize")) {
executionContextOptions.set("MinInliningMaxCallerSize", 15000);
}

safepointManager = new SafepointManager(this);

this.runtime = runtime;
Expand Down Expand Up @@ -172,7 +179,7 @@ public Object eval(String code, RubyBinding binding, RubyNode currentNode) {

public Object execute(RubyContext context, Source source, TranslatorDriver.ParserContext parserContext, Object self, MaterializedFrame parentFrame, RubyNode currentNode) {
final RubyRootNode rootNode = translator.parse(context, source, parserContext, parentFrame, currentNode);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode, context);

return callTarget.call(RubyArguments.pack(null, parentFrame, self, null, new Object[]{}));
}
Expand Down Expand Up @@ -381,4 +388,10 @@ public Random getRandom() {
public LexicalScope getRootLexicalScope() {
return rootLexicalScope;
}

@Override
public ExecutionContextOptions getOptions() {
return executionContextOptions;
}

}
Expand Up @@ -52,7 +52,7 @@ public RubyProc toProc(SourceSection sourceSection, final RubyNode currentNode)
final RubyRootNode rootNode = new RubyRootNode(context, sourceSection, new FrameDescriptor(), sharedMethodInfo,
new SymbolProcNode(context, sourceSection, symbol));

final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode, getContext());

return new RubyProc(context.getCoreLibrary().getProcClass(), RubyProc.Type.PROC, sharedMethodInfo, callTarget,
callTarget, null, getContext().getCoreLibrary().getNilObject(), null);
Expand Down
Expand Up @@ -169,7 +169,7 @@ public MethodDefinitionNode compileFunctionNode(SourceSection sourceSection, Str
context, sourceSection, environment.getFrameDescriptor(), environment.getSharedMethodInfo(), body);

if (isBlock) {
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode);
final CallTarget callTarget = Truffle.getRuntime().createCallTarget(rootNode, context);
final CallTarget callTargetForMethods = withoutBlockDestructureSemantics(callTarget);

return new BlockDefinitionNode(context, sourceSection, methodName, environment.getSharedMethodInfo(), environment.needsDeclarationFrame(), callTarget, callTargetForMethods, rootNode);
Expand All @@ -192,7 +192,7 @@ private CallTarget withoutBlockDestructureSemantics(CallTarget callTarget) {
newRootNode.getFrameDescriptor(), newRootNode.getSharedMethodInfo(),
new CatchReturnNode(context, newRootNode.getSourceSection(), newRootNode.getBody(), getEnvironment().getReturnID()));

return Truffle.getRuntime().createCallTarget(newRootNodeWithCatchReturn);
return Truffle.getRuntime().createCallTarget(newRootNodeWithCatchReturn, context);
} else {
throw new UnsupportedOperationException("Can't change the semantics of an opaque call target");
}
Expand Down

0 comments on commit a28ca3a

Please sign in to comment.