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

ponder-lab / Hybridize-Functions-Refactoring / #3335
88%
main: 88%

Build:
Build:
LAST BUILD BRANCH: 24edc931f9522c9466a05df8f51cb7a37e741335
DEFAULT BRANCH: main
Ran 09 Oct 2026 11:51AM UTC
Jobs 1
Files 45
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

09 Oct 2026 11:42AM UTC coverage: 87.924% (+0.01%) from 87.911%
#3335

push

github

web-flow
Count a global write as a side-effect wherever its value was created (#1035)

* Count a global write as a side-effect wherever its value was created

`filterSideEffects` dropped a `StaticFieldKey` write when every value written was created inside the function's closure, the rule it applies to locals. A global outlives the call, so `x = a + 1` under `global x` is a Python side-effect even though `a + 1` is allocated inside the function. Since Ariadne began allocating that sum in the function (wala/ML#932), the filter hid the write and `testPythonSideEffects42` and 45–49 lost their side-effect verdicts.

Ariadne also binds a nested `def`, class, or comprehension to a static field, named by its path under the enclosing code body (`global script A.py/f/g`), and that binding is scoped to the call. Only those keep the creation-site filter; a module-level global (`global x`) is now always kept.

`testPythonSideEffects70` stores a list created in the function into a global; it fails without the change on the pinned 0.52.104.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTnpjPjJj2aZy1ZkUD1eAn

* Keep a nested definition's defaults out of the global writes

A nested `def`'s defaults are bound with the definition, not to a module-level global, but Ariadne writes each to a static field of its own: the translator's `Lscript A.py/f/g_defaults_0`, and the parser's `g_default_0` (prefixed by the class for a method). Neither starts with `script `, so a default the function itself creates (`def g(y, z=[])` inside `f`) counted as a global write. Both spellings now keep the creation-site filter, like the definition's own binding.

`testPythonSideEffects71` covers the case; it fails without the change. A user global spelled like the parser's binding would be read as one, which the method's documentation states.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/sessio... (continued)

7 of 7 new or added lines in 1 file covered. (100.0%)

4791 of 5449 relevant lines covered (87.92%)

0.88 hits per line

Jobs
ID Job ID Ran Files Coverage
1 #3335.1 09 Oct 2026 11:51AM UTC 45
87.92
Source Files on build #3335
  • Tree
  • List 45
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • eb6a13fa on github
  • Prev Build on main
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