Skip to content

Commit ffedbc8

Browse files
committed
Eliminate duplicate TopLevelExceptionHandler
1 parent eef0ef0 commit ffedbc8

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
import com.oracle.graal.python.builtins.objects.dict.PDict;
112112
import com.oracle.graal.python.builtins.objects.exception.OSErrorEnum;
113113
import com.oracle.graal.python.builtins.objects.exception.OSErrorEnum.ErrorAndMessagePair;
114+
import com.oracle.graal.python.builtins.objects.function.PArguments;
114115
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
115116
import com.oracle.graal.python.builtins.objects.function.PFunction;
116117
import com.oracle.graal.python.builtins.objects.function.PKeyword;
@@ -143,10 +144,12 @@
143144
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
144145
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
145146
import com.oracle.graal.python.nodes.object.GetClassNode;
147+
import com.oracle.graal.python.nodes.object.GetOrCreateDictNode;
146148
import com.oracle.graal.python.nodes.statement.AbstractImportNode;
147149
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
148150
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
149151
import com.oracle.graal.python.nodes.util.ToNativePrimitiveStorageNode;
152+
import com.oracle.graal.python.runtime.ExecutionContext;
150153
import com.oracle.graal.python.runtime.PosixSupportLibrary;
151154
import com.oracle.graal.python.runtime.PythonContext;
152155
import com.oracle.graal.python.runtime.PythonImageBuildOptions;
@@ -341,7 +344,7 @@ private void runFile(PythonContext context, TruffleString inputFilePath) {
341344
TruffleFile file = context.getPublicTruffleFileRelaxed(inputFilePath);
342345
builder = Source.newBuilder(PythonLanguage.ID, file);
343346
}
344-
source = builder.mimeType(PythonLanguage.MIME_TYPE).build();
347+
source = builder.mimeType(PythonLanguage.getCompileMimeType(0, 0)).build();
345348
// TODO we should handle non-IO errors better
346349
} catch (IOException e) {
347350
ErrorAndMessagePair error = OSErrorEnum.fromException(e, TruffleString.EqualNode.getUncached());
@@ -355,8 +358,21 @@ private void runFile(PythonContext context, TruffleString inputFilePath) {
355358
// The exit value is hardcoded in CPython too
356359
throw new PythonExitException(this, 2);
357360
}
361+
PythonLanguage language = context.getLanguage();
358362
CallTarget callTarget = context.getEnv().parsePublic(source);
359-
callTarget.call(PythonUtils.EMPTY_OBJECT_ARRAY);
363+
Object[] arguments = PArguments.create();
364+
PythonModule mainModule = context.getMainModule();
365+
PDict mainDict = GetOrCreateDictNode.executeUncached(mainModule);
366+
PArguments.setGlobals(arguments, mainModule);
367+
PArguments.setSpecialArgument(arguments, mainDict);
368+
PArguments.setException(arguments, PException.NO_EXCEPTION);
369+
context.initializeMainModule(inputFilePath);
370+
Object state = ExecutionContext.IndirectCalleeContext.enterIndirect(language, context, arguments);
371+
try {
372+
callTarget.call(arguments);
373+
} finally {
374+
ExecutionContext.IndirectCalleeContext.exit(language, context, state);
375+
}
360376
}
361377

362378
// Equivalent of CPython's pymain_run_module

0 commit comments

Comments
 (0)