Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
Expand Down Expand Up @@ -156,16 +157,17 @@ private static Spec descriptor(String body, String wrappers, String parameters,

@Before
public void enter() {
context = Context.newBuilder("python").allowAllAccess(true).allowExperimentalOptions(true).option("engine.WarnInterpreterOnly", "false").option("engine.SplittingAllowForcedSplits",
"true").build();
context = Context.newBuilder("python").allowAllAccess(true).allowExperimentalOptions(true).option("engine.WarnInterpreterOnly", "false").build();
context.initialize("python");
context.enter();
}

@After
public void leave() {
context.leave();
context.close();
if (context != null) {
context.leave();
context.close();
}
}

private static Object invoke(Class<?> owner, Object receiver, String name, Class<?>[] types, Object... args) throws Exception {
Expand Down Expand Up @@ -440,14 +442,29 @@ private static void countChildren(Node node, Map<Node, Integer> counts) {
}

@Test
public void framePoliciesAndClones() throws Exception {
public void framePolicies() throws Exception {
for (Spec spec : SPECS) {
for (String convention : spec.enums.split(",")) {
BuiltinFunctionRootNode root = root(factory(spec, convention, false));
assertPolicies(root, true, true);
assertWrapperRootIdentity(root, NAME);
}
}
Builtin builtin = OrdinaryNode.class.getAnnotation(Builtin.class);
assertPolicies(new BuiltinFunctionRootNode(PythonLanguage.get(null), builtin, new PrototypeNodeFactory<>(new OrdinaryNode()), true), false, false);
NodeFactory<?> locals = GetLocalsNodeFactory.getInstance();
Builtin localsBuiltin = locals.getNodeClass().getAnnotationsByType(Builtin.class)[0];
assertPolicies(new BuiltinFunctionRootNode(PythonLanguage.get(null), localsBuiltin, GetLocalsNodeFactory.getInstance(), true), false, true);
}

@Test
public void clones() throws Exception {
for (Spec spec : SPECS) {
for (String convention : spec.enums.split(",")) {
BuiltinFunctionRootNode root = root(factory(spec, convention, false));
DirectCallNode call = DirectCallNode.create(root.getCallTarget());
new AdoptionRoot(call).getCallTarget();
assumeTrue("The runtime must support call target cloning", call.isCallTargetCloningAllowed());
call.cloneCallTarget();
RootCallTarget clonedTarget = (RootCallTarget) call.getCurrentCallTarget();
assertNotSame("An optimized runtime with forced splitting is required", root.getCallTarget(), clonedTarget);
Expand All @@ -459,11 +476,6 @@ public void framePoliciesAndClones() throws Exception {
assertWrapperRootIdentity(clone, NAME);
}
}
Builtin builtin = OrdinaryNode.class.getAnnotation(Builtin.class);
assertPolicies(new BuiltinFunctionRootNode(PythonLanguage.get(null), builtin, new PrototypeNodeFactory<>(new OrdinaryNode()), true), false, false);
NodeFactory<?> locals = GetLocalsNodeFactory.getInstance();
Builtin localsBuiltin = locals.getNodeClass().getAnnotationsByType(Builtin.class)[0];
assertPolicies(new BuiltinFunctionRootNode(PythonLanguage.get(null), localsBuiltin, GetLocalsNodeFactory.getInstance(), true), false, true);
}

private static void assertPolicies(BuiltinFunctionRootNode root, boolean capture, boolean locals) {
Expand Down
Loading