• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

source-academy / py-slang / 29748626284
86%

Build:
DEFAULT BRANCH: main
Ran 20 Jul 2026 02:13PM UTC
Jobs 1
Files 112
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

20 Jul 2026 01:59PM UTC coverage: 86.648% (+0.02%) from 86.632%
29748626284

push

github

web-flow
PVML-in-browser: support importing conductor modules (from X import y) (#279)

* PVML-in-browser: support importing conductor modules (from X import y)

Brings the PVML browser evaluator to parity with the CSE machine's
module pathway: `from runes import heart` now loads the module through
conductor's ModuleLoaderRunnerPlugin, converts its exports to PVML
values, and binds them as globals before the chunk runs.

Follows the CSE machine's two-phase model (evaluateImports in
src/engines/cse/interpreter.ts): all async loading happens before
execution, so the compiler needs no changes at all — FromImport already
compiles to nothing and imported names already resolve to LDGG loads
against the persistent globalEnv, which loadImports now pre-seeds.

- PyDataHandlerEvaluator (new): the conductor IDataHandler
  implementation extracted verbatim from PyCseEvaluator (which now
  extends it unchanged) — ModuleLoaderRunnerPlugin requires an
  IInterfacableEvaluator (IEvaluator & IDataHandler), so PyPvmlEvaluator
  must carry the same interface.
- engines/pvml/modules.ts (new): PVMLBoxType <-> TypedValue converters
  mirroring cse/modules.ts's mapping decisions (NUMBER<->float,
  none<->EMPTY_LIST, PAIR<->2-element array, CLOSURE<->callable).
- types.ts: two new box variants — PVMLOpaque (module-owned handles,
  e.g. runes) and PVMLExtern (imported module functions, whose
  implementations are async host code).
- pvml-interpreter.ts: executeAsync(), the one real design point — the
  per-instruction loop stays synchronous, and only an actual extern call
  suspends (dispatchCall parks it in pendingExtern; the driver loop
  awaits it and pushes the result exactly where a primitive's would
  land, tail calls included since CALLT is always followed by RETG).
  Module->Python callbacks re-enter synchronously via the existing
  invokeValue; a nested extern call from inside such a callback is
  rejected with a clear error rather than deadlocking.
- PyPvmlEvaluator.ts: asyn... (continued)

4235 of 5265 branches covered (80.44%)

Branch coverage included in aggregate %.

138 of 152 new or added lines in 7 files covered. (90.79%)

3 existing lines in 1 file now uncovered.

9159 of 10193 relevant lines covered (89.86%)

181510.14 hits per line

Uncovered Changes

Lines Coverage ∆ File
7
87.34
src/engines/pvml/modules.ts
4
78.83
0.22% src/engines/pvml/pvml-interpreter.ts
2
84.51
-1.86% src/engines/pvml/types.ts
1
85.94
-2.4% src/engines/pvml/cse-interop.ts

Coverage Regressions

Lines Coverage ∆ File
3
78.83
0.22% src/engines/pvml/pvml-interpreter.ts
Jobs
ID Job ID Ran Files Coverage
1 29748626284.1 20 Jul 2026 02:13PM UTC 112
86.65
GitHub Action Run
Source Files on build 29748626284
  • Tree
  • List 112
  • Changed 8
  • Source Changed 6
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #29748626284
  • 0d247d08 on github
  • Prev Build on main (#29745916326)
  • Next Build on main (#29805324553)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc