Skip to content

Commit b09cd98

Browse files
committed
[GR-40238] Skip instrumentation unit tests under bytecode interpreter
PullRequest: graalpython/2383
2 parents 60d113b + 8200527 commit b09cd98

File tree

12 files changed

+92
-47
lines changed

12 files changed

+92
-47
lines changed

ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "overlay": "9b526d09349134a4ed931935bbe2befedef81215" }
1+
{ "overlay": "17edbb52412c55f5a3903eededc75bf33371bd49" }

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/PythonTests.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,16 @@
4848
import java.util.Collections;
4949
import java.util.Map;
5050

51-
import com.oracle.truffle.api.strings.TruffleString;
5251
import org.graalvm.polyglot.Context;
5352
import org.graalvm.polyglot.Engine;
5453
import org.graalvm.polyglot.PolyglotException;
5554
import org.graalvm.polyglot.Value;
5655
import org.junit.Assert;
56+
import org.junit.Assume;
5757

5858
import com.oracle.graal.python.PythonLanguage;
5959
import com.oracle.graal.python.runtime.PythonContext;
60+
import com.oracle.graal.python.runtime.PythonOptions;
6061
import com.oracle.graal.python.runtime.PythonParser.ParserMode;
6162
import com.oracle.graal.python.runtime.exception.PException;
6263
import com.oracle.graal.python.test.interop.JavaInteropTest;
@@ -68,6 +69,7 @@
6869
import com.oracle.truffle.api.nodes.RootNode;
6970
import com.oracle.truffle.api.source.Source;
7071
import com.oracle.truffle.api.source.Source.LiteralBuilder;
72+
import com.oracle.truffle.api.strings.TruffleString;
7173

7274
public class PythonTests {
7375
static {
@@ -132,6 +134,10 @@ public static void closeContext() {
132134
}
133135
}
134136

137+
public static void skipOnBytecodeInterpreter() {
138+
Assume.assumeFalse(PythonOptions.EnableBytecodeInterpreter.getDefaultValue());
139+
}
140+
135141
public static void assertBenchNoError(Path scriptName, String[] args) {
136142
final ByteArrayOutputStream byteArrayErr = new ByteArrayOutputStream();
137143
final ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/debug/PythonDebugTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -83,6 +83,7 @@ public void before() {
8383
newBuilder.allowAllAccess(true);
8484
PythonTests.closeContext();
8585
tester = new DebuggerTester(newBuilder);
86+
PythonTests.skipOnBytecodeInterpreter();
8687
}
8788

8889
@After

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/interop/ReadAndWriteVariableTagsTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.graalvm.polyglot.Engine;
5151
import org.graalvm.polyglot.Instrument;
5252
import org.graalvm.polyglot.Source;
53+
import org.junit.Before;
5354
import org.junit.Test;
5455

5556
import com.oracle.graal.python.nodes.PNode;
@@ -77,6 +78,11 @@ private static Context newContext(Engine engine) {
7778
return Context.newBuilder().allowExperimentalOptions(true).allowAllAccess(true).engine(engine).build();
7879
}
7980

81+
@Before
82+
public void before() {
83+
PythonTests.skipOnBytecodeInterpreter();
84+
}
85+
8086
@Test
8187
public void testInModule() throws Exception {
8288
String code = "a = 0\n" +

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/interop/StandardTagsTests.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -45,6 +45,14 @@
4545

4646
import java.util.HashMap;
4747

48+
import org.graalvm.polyglot.Context;
49+
import org.graalvm.polyglot.Engine;
50+
import org.graalvm.polyglot.Instrument;
51+
import org.graalvm.polyglot.Source;
52+
import org.junit.Assert;
53+
import org.junit.Before;
54+
import org.junit.Test;
55+
4856
import com.oracle.graal.python.nodes.PNode;
4957
import com.oracle.graal.python.nodes.function.InnerRootNode;
5058
import com.oracle.graal.python.test.PythonTests;
@@ -59,13 +67,6 @@
5967
import com.oracle.truffle.api.library.LibraryFactory;
6068
import com.oracle.truffle.api.nodes.Node;
6169

62-
import org.graalvm.polyglot.Context;
63-
import org.graalvm.polyglot.Engine;
64-
import org.graalvm.polyglot.Instrument;
65-
import org.graalvm.polyglot.Source;
66-
import org.junit.Assert;
67-
import org.junit.Test;
68-
6970
@SuppressWarnings("all")
7071
public class StandardTagsTests extends PythonTests {
7172

@@ -75,6 +76,11 @@ private static Context newContext(Engine engine) {
7576
return Context.newBuilder().allowExperimentalOptions(true).allowAllAccess(true).engine(engine).build();
7677
}
7778

79+
@Before
80+
public void before() {
81+
PythonTests.skipOnBytecodeInterpreter();
82+
}
83+
7884
@Test
7985
public void testRootBodyTagModule() throws Exception {
8086
String code = "import time\n" +

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ private CallTarget parseForBytecodeInterpreter(ParsingRequest request) {
496496
if (internal && !source.isInternal()) {
497497
source = Source.newBuilder(source).internal(true).build();
498498
}
499-
PBytecodeRootNode rootNode = new PBytecodeRootNode(this, code, source, null);
499+
PBytecodeRootNode rootNode = PBytecodeRootNode.create(this, code, source);
500500
return PythonUtils.getOrCreateCallTarget(rootNode);
501501
}
502502
for (int optimize = 0; optimize < MIME_TYPE_EVAL.length; optimize++) {
@@ -533,7 +533,7 @@ public RootCallTarget parseForBytecodeInterpreter(PythonContext context, Source
533533
}
534534
CompilationUnit cu = compiler.compile(mod, EnumSet.noneOf(Compiler.Flags.class), optimize);
535535
CodeUnit co = cu.assemble();
536-
RootNode rootNode = new PBytecodeRootNode(this, co, source, errorCb);
536+
RootNode rootNode = PBytecodeRootNode.create(this, co, source, errorCb);
537537
GilNode gil = GilNode.getUncached();
538538
boolean wasAcquired = gil.acquire(context, rootNode);
539539
if (topLevel) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/code/CodeNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ private RootCallTarget deserializeForBytecodeInterpreter(PythonLanguage language
152152
code.outputCanQuicken, code.variableShouldUnbox,
153153
code.generalizeInputsMap, code.generalizeVarsMap);
154154
}
155-
RootNode rootNode = new PBytecodeRootNode(language, code, null, null);
155+
RootNode rootNode = PBytecodeRootNode.create(language, code, null);
156156
if (code.isGeneratorOrCoroutine()) {
157157
rootNode = new PBytecodeGeneratorFunctionRootNode(language, rootNode.getFrameDescriptor(), (PBytecodeRootNode) rootNode, code.name);
158158
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/code/PCode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ private static Object convertConstantToPythonSpace(RootNode rootNode, Object o)
614614
PythonObjectFactory factory = PythonObjectFactory.getUncached();
615615
if (o instanceof CodeUnit) {
616616
CodeUnit code = ((CodeUnit) o);
617-
PBytecodeRootNode bytecodeRootNode = new PBytecodeRootNode(PythonLanguage.get(rootNode), code, getSourceSection(rootNode).getSource(), null);
617+
PBytecodeRootNode bytecodeRootNode = PBytecodeRootNode.create(PythonLanguage.get(rootNode), code, getSourceSection(rootNode).getSource());
618618
return factory.createCode(bytecodeRootNode.getCallTarget(), bytecodeRootNode.getSignature(), code);
619619
} else if (o instanceof BigInteger) {
620620
return factory.createInt((BigInteger) o);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/lib/PyObjectGetMethod.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import com.oracle.truffle.api.dsl.Bind;
6666
import com.oracle.truffle.api.dsl.Cached;
6767
import com.oracle.truffle.api.dsl.Cached.Shared;
68+
import com.oracle.truffle.api.dsl.Fallback;
6869
import com.oracle.truffle.api.dsl.GenerateUncached;
6970
import com.oracle.truffle.api.dsl.ImportStatic;
7071
import com.oracle.truffle.api.dsl.Specialization;
@@ -105,18 +106,8 @@ protected static boolean isObjectGetAttribute(Object lazyClass) {
105106
return getattributeSlot == BuiltinMethodDescriptors.OBJ_GET_ATTRIBUTE && getattrSlot == PNone.NO_VALUE;
106107
}
107108

108-
@Specialization(guards = {"!isForeignObjectNode.execute(receiver)", "!isObjectGetAttribute(lazyClass)"}, limit = "1")
109-
static Object getGenericAttr(Frame frame, Object receiver, TruffleString name,
110-
@SuppressWarnings("unused") @Shared("isForeign") @Cached IsForeignObjectNode isForeignObjectNode,
111-
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetClassNode getClass,
112-
@SuppressWarnings("unused") @Bind("getClass.execute(receiver)") Object lazyClass,
113-
@Cached PyObjectGetAttr getAttr) {
114-
return new BoundDescriptor(getAttr.execute(frame, receiver, name));
115-
}
116-
117-
@Specialization(guards = {"!isForeignObjectNode.execute(receiver)", "isObjectGetAttribute(lazyClass)", "name == cachedName"}, limit = "1")
109+
@Specialization(guards = {"isObjectGetAttribute(lazyClass)" /* Implies not foreign */, "name == cachedName"}, limit = "1")
118110
static Object getFixedAttr(VirtualFrame frame, Object receiver, @SuppressWarnings("unused") TruffleString name,
119-
@SuppressWarnings("unused") @Shared("isForeign") @Cached IsForeignObjectNode isForeignObjectNode,
120111
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetClassNode getClass,
121112
@Bind("getClass.execute(receiver)") Object lazyClass,
122113
@SuppressWarnings("unused") @Cached("name") TruffleString cachedName,
@@ -173,9 +164,8 @@ static Object getFixedAttr(VirtualFrame frame, Object receiver, @SuppressWarning
173164
}
174165

175166
// No explicit branch profiling when we're looking up multiple things
176-
@Specialization(guards = {"!isForeignObjectNode.execute(receiver)", "isObjectGetAttribute(lazyClass)"}, replaces = "getFixedAttr", limit = "1")
167+
@Specialization(guards = "isObjectGetAttribute(lazyClass)" /* Implies not foreign */, replaces = "getFixedAttr", limit = "1")
177168
static Object getDynamicAttr(Frame frame, Object receiver, TruffleString name,
178-
@SuppressWarnings("unused") @Shared("isForeign") @Cached IsForeignObjectNode isForeignObjectNode,
179169
@SuppressWarnings("unused") @Shared("getClassNode") @Cached GetClassNode getClass,
180170
@Bind("getClass.execute(receiver)") Object lazyClass,
181171
@Cached LookupAttributeInMRONode.Dynamic lookupNode,
@@ -217,7 +207,7 @@ static Object getDynamicAttr(Frame frame, Object receiver, TruffleString name,
217207
throw raiseNode.raise(AttributeError, ErrorMessages.OBJ_P_HAS_NO_ATTR_S, receiver, name);
218208
}
219209

220-
@Specialization(guards = "isForeignObjectNode.execute(receiver)", limit = "3")
210+
@Specialization(guards = "isForeignObjectNode.execute(receiver)", limit = "1")
221211
Object getForeignMethod(VirtualFrame frame, Object receiver, TruffleString name,
222212
@SuppressWarnings("unused") @Cached IsForeignObjectNode isForeignObjectNode,
223213
@Cached TruffleString.ToJavaStringNode toJavaString,
@@ -238,4 +228,10 @@ Object getForeignMethod(VirtualFrame frame, Object receiver, TruffleString name,
238228
return new BoundDescriptor(getAttr.execute(frame, receiver, name));
239229
}
240230
}
231+
232+
@Fallback
233+
static Object getGenericAttr(Frame frame, Object receiver, TruffleString name,
234+
@Cached PyObjectGetAttr getAttr) {
235+
return new BoundDescriptor(getAttr.execute(frame, receiver, name));
236+
}
241237
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/bytecode/MakeFunctionNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ int makeFunction(VirtualFrame frame, Object globals, int initialStackTop, int fl
144144

145145
public static MakeFunctionNode create(PythonLanguage language, CodeUnit code, Source source) {
146146
RootCallTarget callTarget;
147-
PBytecodeRootNode bytecodeRootNode = new PBytecodeRootNode(language, code, source, null);
147+
PBytecodeRootNode bytecodeRootNode = PBytecodeRootNode.create(language, code, source);
148148
if (code.isGeneratorOrCoroutine()) {
149149
// TODO what should the frameDescriptor be? does it matter?
150150
callTarget = new PBytecodeGeneratorFunctionRootNode(language, bytecodeRootNode.getFrameDescriptor(), bytecodeRootNode, code.name).getCallTarget();

0 commit comments

Comments
 (0)