Skip to content

Commit

Permalink
More refactoring to enable Python pools
Browse files Browse the repository at this point in the history
We won't be able to import `UnsafeEval` directly from `builtin_wrappers.ts` so
this adds a `setUnsafeEval` function to inject it from the outside.

Similarly, we need everything imported from emscriptenSetup.ts to be bundled, so
we don't want to import from topLevelEntropy in builtin_wrappers, so we call
`setGetRandomValues` from the outside.
  • Loading branch information
hoodmane committed Oct 10, 2024
1 parent 883c3db commit d173557
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
20 changes: 18 additions & 2 deletions src/pyodide/internal/builtin_wrappers.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
import { default as UnsafeEval } from 'internal:unsafe-eval';
export { getRandomValues } from 'pyodide-internal:topLevelEntropy/lib';
import type { getRandomValues as getRandomValuesType } from 'pyodide-internal:topLevelEntropy/lib';
import type { default as UnsafeEvalType } from 'internal:unsafe-eval';

let getRandomValuesInner: typeof getRandomValuesType;
export function setGetRandomValues(func: typeof getRandomValuesType) {
getRandomValuesInner = func;
}

export function getRandomValues(Module: Module, arr: Uint8Array): Uint8Array {
return getRandomValuesInner(Module, arr);
}

// We can't import UnsafeEval directly here because it isn't available when setting up Python pool.
// Thus, we inject it from outside via this function.
let UnsafeEval: typeof UnsafeEvalType;
export function setUnsafeEval(mod: typeof UnsafeEvalType) {
UnsafeEval = mod;
}

let lastTime: number;
let lastDelta = 0;
Expand Down
5 changes: 5 additions & 0 deletions src/pyodide/internal/emscriptenSetup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ import { reportError } from 'pyodide-internal:util';
*/
import { _createPyodideModule } from 'pyodide-internal:generated/pyodide.asm';

export {
setUnsafeEval,
setGetRandomValues,
} from 'pyodide-internal:builtin_wrappers';

/**
* A preRun hook. Make sure environment variables are visible at runtime.
*/
Expand Down
10 changes: 9 additions & 1 deletion src/pyodide/internal/python.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ import {
entropyMountFiles,
entropyAfterRuntimeInit,
entropyBeforeTopLevel,
getRandomValues,
} from 'pyodide-internal:topLevelEntropy/lib';
import { default as UnsafeEval } from 'internal:unsafe-eval';

/**
* This file is a simplified version of the Pyodide loader:
Expand All @@ -42,7 +44,11 @@ import pyodideWasmModule from 'pyodide-internal:generated/pyodide.asm.wasm';
* in this zip file to initialize their runtime state.
*/
import pythonStdlib from 'pyodide-internal:generated/python_stdlib.zip';
import { instantiateEmscriptenModule } from 'pyodide-internal:emscriptenSetup';
import {
instantiateEmscriptenModule,
setUnsafeEval,
setGetRandomValues,
} from 'pyodide-internal:emscriptenSetup';

/**
* After running `instantiateEmscriptenModule` but before calling into any C
Expand Down Expand Up @@ -83,6 +89,8 @@ export async function loadPyodide(
pyodideWasmModule
)
);
setUnsafeEval(UnsafeEval);
setGetRandomValues(getRandomValues);
await enterJaegerSpan('prepare_wasm_linear_memory', () =>
prepareWasmLinearMemory(Module)
);
Expand Down

0 comments on commit d173557

Please sign in to comment.