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

source-academy / py-slang / 28910718226
81%

Build:
DEFAULT BRANCH: main
Ran 08 Jul 2026 01:30AM UTC
Jobs 1
Files 87
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

08 Jul 2026 01:26AM UTC coverage: 77.236% (-0.7%) from 77.958%
28910718226

push

github

web-flow
PVML: fix compiler bugs, wire native Pynter groups/prelude, correct primitive mappings, add operator sweep (#226)

* Fix PVML compiler bugs in recursion, control flow, and list literals

Four independent, pre-existing correctness bugs in PVMLCompiler/
PVMLInterpreter, found while chasing native Pynter parity failures that
also reproduced on the pure-TS PVMLInterpreter (ruling out anything
Pynter-specific):

- Slot/env-builder bookkeeping (envSlotMaps/envSlotCounters/envBuilders)
  was per-PVMLCompiler-instance rather than shared across the whole
  compilation. A function referencing a sibling or itself recursively
  (e.g. two functions where the second calls the first, or a function
  calling itself) got a slot number assigned independently by its own
  child compiler, colliding with whatever slot the parent/root compiler
  had already assigned that same variable — resulting in calls silently
  invoking the wrong closure with the wrong arity. Now threaded through
  the constructor and shared by all compiler instances in one compilation.

- Falling off the end of a function body without an explicit `return`
  (a bare expression statement, an assignment, `pass`, or a partial
  if/else) leaked whatever value-or-placeholder the last statement left
  on the stack, instead of yielding Python's `None`. Fixed by always
  discarding the fallthrough value and pushing `None` explicitly before
  the implicit return; bare `return` (no expression) now also yields
  `None` instead of `undefined`.

- Subscript-target assignment (`xs[i] = v`) crashed the compiler
  outright: visitAssignStmt unconditionally cast the target to a plain
  Variable. Now compiles to array/index/value pushes + STAG, matching
  how list-literal element stores already work.

- Referencing a primitive builtin as a first-class value rather than
  calling it directly (`is_function(print)`, `f = abs`) compiled to
  nothing (a no-op), silently corrupting the stack downstream — fixed by
  emitting N... (continued)

2603 of 3652 branches covered (71.28%)

Branch coverage included in aggregate %.

102 of 196 new or added lines in 8 files covered. (52.04%)

6100 of 7616 relevant lines covered (80.09%)

14065.05 hits per line

Uncovered Changes

Lines Coverage ∆ File
69
27.14
-35.22% src/engines/pvml/builtins.ts
9
83.62
-2.17% src/engines/pvml/pvml-compiler.ts
9
75.56
-0.56% src/tests/utils.ts
6
64.9
-0.61% src/engines/pvml/pvml-interpreter.ts
1
65.0
-0.98% src/engines/pvml/types.ts
Jobs
ID Job ID Ran Files Coverage
1 28910718226.1 08 Jul 2026 01:30AM UTC 87
77.24
GitHub Action Run
Source Files on build 28910718226
  • Tree
  • List 87
  • Changed 9
  • Source Changed 7
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #28910718226
  • 67cb5a34 on github
  • Prev Build on main (#28873565352)
  • Next Build on main (#28920042345)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc