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

source-academy / py-slang / 28910718226 / 1
81%
main: 81%

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

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 %.

6100 of 7616 relevant lines covered (80.09%)

14065.05 hits per line

Source Files on job 28910718226.1
  • 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 Build 28910718226
  • 67cb5a34 on github
  • Prev Job for on main (#28873565352.1)
  • Next Job for on main (#28920042345.1)
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