Skip to content

Commit dfe641b

Browse files
committed
[GR-10613] Create the main module eagerly and only fill-in it's attribute form the parsing request
PullRequest: graalpython/98
2 parents e8343f9 + f7f3890 commit dfe641b

File tree

7 files changed

+29
-48
lines changed

7 files changed

+29
-48
lines changed

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/runtime/PythonModuleTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class PythonModuleTests {
4646
@Test
4747
public void pythonModuleTest() {
4848
final PythonContext context = PythonTests.getContext();
49-
PythonModule module = context.getCore().factory().createPythonModule("testModule", null);
49+
PythonModule module = context.getCore().factory().createPythonModule("testModule");
5050

5151
assertEquals("testModule", module.getAttribute(__NAME__).toString());
5252
assertEquals("None", module.getAttribute(__DOC__).toString());
@@ -74,7 +74,7 @@ public void builtinsIntTest() {
7474
@Test
7575
public void mainModuleTest() {
7676
final PythonContext context = PythonTests.getContext();
77-
PythonModule main = context.createMainModule(null);
77+
PythonModule main = context.getMainModule();
7878
PythonModule builtins = (PythonModule) main.getAttribute(__BUILTINS__);
7979
PBuiltinFunction abs = (PBuiltinFunction) builtins.getAttribute(BuiltinNames.ABS);
8080
Object returned = InvokeNode.create(abs).invoke(createWithUserArguments(-42));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ protected CallTarget parse(ParsingRequest request) throws Exception {
247247
if (!pythonCore.isInitialized()) {
248248
pythonCore.initialize();
249249
}
250-
context.getOrCreateMainModule(request.getSource().getPath());
250+
context.initializeMainModule(request.getSource().getPath());
251251

252252
// if we are running the interpreter, module 'site' is automatically imported
253253
if (request.getSource().isInteractive()) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ public Object duplicate(Map<Object, Object> replacements, Object value) {
391391
return value;
392392
} else if (value instanceof PythonModule) {
393393
PythonModule module = (PythonModule) value;
394-
PythonModule newModule = factory().createPythonModule(module.getModuleName(), module.getModulePath());
394+
PythonModule newModule = factory().createPythonModule(module.getModuleName());
395395
replacements.put(module, newModule);
396396
for (String attr : module.getAttributeNames()) {
397397
newModule.setAttribute(attr, duplicate(replacements, module.getAttribute(attr)));
@@ -676,7 +676,7 @@ private PythonModule createModule(String name, String pkg, PythonBuiltins... bui
676676
}
677677

678678
public PythonModule createModule(String name, boolean add, PythonBuiltins... builtins) {
679-
PythonModule mod = factory().createPythonModule(name, null);
679+
PythonModule mod = factory().createPythonModule(name);
680680
for (PythonBuiltins builtin : builtins) {
681681
addBuiltinsToModule(mod, builtin);
682682
}
@@ -779,7 +779,7 @@ private void loadFile(String s, String prefix) {
779779
PythonModule mod = lookupBuiltinModule(s);
780780
if (mod == null) {
781781
// use an anonymous module for the side-effects
782-
mod = factory().createPythonModule("__anonymous__", "<bootstrap>");
782+
mod = factory().createPythonModule("__anonymous__");
783783
}
784784
CallTarget callTarget = Truffle.getRuntime().createCallTarget(parsedModule.getRootNode());
785785
callTarget.call(PArguments.withGlobals(mod));

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import static com.oracle.graal.python.nodes.BuiltinNames.TUPLE;
4545
import static com.oracle.graal.python.nodes.BuiltinNames.TYPE;
4646
import static com.oracle.graal.python.nodes.BuiltinNames.ZIP;
47+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__FILE__;
4748
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETITEM__;
4849
import static com.oracle.graal.python.nodes.SpecialMethodNames.__NEW__;
4950
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REVERSED__;
@@ -121,6 +122,7 @@
121122
import com.oracle.graal.python.nodes.PGuards;
122123
import com.oracle.graal.python.nodes.argument.CreateArgumentsNode;
123124
import com.oracle.graal.python.nodes.attributes.LookupInheritedAttributeNode;
125+
import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode;
124126
import com.oracle.graal.python.nodes.builtins.ListNodes.ConstructListNode;
125127
import com.oracle.graal.python.nodes.builtins.TupleNodes;
126128
import com.oracle.graal.python.nodes.call.CallDispatchNode;
@@ -133,6 +135,7 @@
133135
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
134136
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
135137
import com.oracle.graal.python.nodes.object.GetClassNode;
138+
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
136139
import com.oracle.graal.python.runtime.JavaTypeConversions;
137140
import com.oracle.graal.python.runtime.PythonParseResult;
138141
import com.oracle.graal.python.runtime.exception.PException;
@@ -146,6 +149,7 @@
146149
import com.oracle.truffle.api.dsl.Fallback;
147150
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
148151
import com.oracle.truffle.api.dsl.Specialization;
152+
import com.oracle.truffle.api.dsl.TypeSystemReference;
149153
import com.oracle.truffle.api.nodes.UnexpectedResultException;
150154
import com.oracle.truffle.api.profiles.ConditionProfile;
151155

@@ -1193,26 +1197,21 @@ public Object typeGeneric(Object cls, Object name, Object bases, Object dict, PK
11931197

11941198
@Builtin(name = MODULE, minNumOfArguments = 2, maxNumOfArguments = 3, constructsClass = {PythonModule.class}, isPublic = false)
11951199
@GenerateNodeFactory
1200+
@TypeSystemReference(PythonArithmeticTypes.class)
11961201
@SuppressWarnings("unused")
11971202
public abstract static class ModuleNode extends PythonBuiltinNode {
1203+
@Child WriteAttributeToObjectNode writeFile = WriteAttributeToObjectNode.create();
1204+
11981205
@Specialization
11991206
public PythonModule module(Object cls, String name, PNone path) {
1200-
return factory().createPythonModule(name, null);
1207+
return factory().createPythonModule(name);
12011208
}
12021209

12031210
@Specialization
12041211
public PythonModule module(Object cls, String name, String path) {
1205-
return factory().createPythonModule(name, path);
1206-
}
1207-
1208-
@Specialization
1209-
public PythonModule module(Object cls, PString name, PNone path) {
1210-
return factory().createPythonModule(name.getValue(), null);
1211-
}
1212-
1213-
@Specialization
1214-
public PythonModule module(Object cls, PString name, String path) {
1215-
return factory().createPythonModule(name.getValue(), path);
1212+
PythonModule module = factory().createPythonModule(name);
1213+
writeFile.execute(module, __FILE__, path);
1214+
return module;
12161215
}
12171216
}
12181217

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/module/PythonModule.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
package com.oracle.graal.python.builtins.objects.module;
2727

2828
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DOC__;
29-
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__FILE__;
3029
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__NAME__;
3130
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__PACKAGE__;
3231

@@ -35,35 +34,24 @@
3534
import com.oracle.graal.python.builtins.objects.type.PythonClass;
3635

3736
public final class PythonModule extends PythonObject {
38-
3937
private final String name;
40-
private final String file;
4138

42-
public PythonModule(PythonClass clazz, String name, String file) {
39+
public PythonModule(PythonClass clazz, String name) {
4340
super(clazz);
4441
this.name = name;
45-
this.file = file;
4642
addDefaultConstants(name);
4743
}
4844

4945
private void addDefaultConstants(String moduleName) {
5046
setAttribute(__NAME__, moduleName);
5147
setAttribute(__DOC__, PNone.NONE);
5248
setAttribute(__PACKAGE__, PNone.NONE);
53-
54-
if (file != null) {
55-
setAttribute(__FILE__, file);
56-
}
5749
}
5850

5951
public String getModuleName() {
6052
return name;
6153
}
6254

63-
public String getModulePath() {
64-
return file;
65-
}
66-
6755
@Override
6856
public PythonObject getValidStorageFullLookup(String attributeId) {
6957
if (isOwnAttribute(attributeId)) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonContext.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import static com.oracle.graal.python.nodes.BuiltinNames.__BUILTINS__;
2929
import static com.oracle.graal.python.nodes.BuiltinNames.__MAIN__;
30+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__FILE__;
3031

3132
import java.io.OutputStream;
3233
import java.util.HashMap;
@@ -109,13 +110,6 @@ public PythonModule getBuiltins() {
109110
return builtinsModule;
110111
}
111112

112-
public PythonModule createMainModule(String path) {
113-
mainModule = core.factory().createPythonModule(__MAIN__, path);
114-
mainModule.setAttribute(__BUILTINS__, sysModules.getItem("builtins"));
115-
getSysModules().setItem(__MAIN__, mainModule);
116-
return mainModule;
117-
}
118-
119113
public TruffleLanguage.Env getEnv() {
120114
return env;
121115
}
@@ -129,14 +123,6 @@ public PythonModule getMainModule() {
129123
return mainModule;
130124
}
131125

132-
public PythonModule getOrCreateMainModule(String path) {
133-
if (mainModule == null) {
134-
return createMainModule(path);
135-
} else {
136-
return mainModule;
137-
}
138-
}
139-
140126
public PythonCore getCore() {
141127
return core;
142128
}
@@ -177,6 +163,9 @@ public void initialize() {
177163
PythonModule sysModule = core.createSysModule(this);
178164
sysModules = (PDict) sysModule.getAttribute("modules");
179165
builtinsModule = (PythonModule) sysModules.getItem("builtins");
166+
mainModule = core.factory().createPythonModule(__MAIN__);
167+
mainModule.setAttribute(__BUILTINS__, builtinsModule);
168+
sysModules.setItem(__MAIN__, mainModule);
180169

181170
isInitialized = true;
182171
}
@@ -224,4 +213,9 @@ public PDict getCustomThreadState() {
224213
return customThreadState.get();
225214
}
226215

216+
public void initializeMainModule(String path) {
217+
if (path != null) {
218+
mainModule.setAttribute(__FILE__, path);
219+
}
220+
}
227221
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/object/PythonObjectFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,8 @@ public PRandom createRandom(PythonClass cls) {
318318
* Classes, methods and functions
319319
*/
320320

321-
public PythonModule createPythonModule(String name, String file) {
322-
return trace(new PythonModule(lookupClass(PythonBuiltinClassType.PythonModule), name, file));
321+
public PythonModule createPythonModule(String name) {
322+
return trace(new PythonModule(lookupClass(PythonBuiltinClassType.PythonModule), name));
323323
}
324324

325325
public PythonClass createPythonClass(PythonClass metaclass, String name, PythonClass[] bases) {

0 commit comments

Comments
 (0)