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

KarpelesLab / goro / 26350583292
12%

Build:
DEFAULT BRANCH: master
Ran 24 May 2026 03:17AM UTC
Jobs 1
Files 398
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

24 May 2026 03:16AM UTC coverage: 12.394% (-0.03%) from 12.423%
26350583292

push

github

MagicalTux
vm: lower try-with-finally natively (OP_FINALLY_END + pending control)

try { ... } finally { ... } previously forced a whole-function fallback
to the AST tree-walker: emitStmt short-circuited the TryNode to
OP_TRY_FINALLY (generic AST delegation) before reaching emitTry, which
itself returned unsupportedf for the finally branch. Both gates are gone.

The native lowering:

  * Extends TryHandler with HasFinally / FinallyPC / FinallyEnd. The
    finally-protected region is [Start, FinallyPC) — wider than the try
    body so a throw originating inside a catch routes through finally.
  * Frame gains a single-slot pendingControl register tagging a deferred
    return or throw, plus findEnclosingFinally(pc) for the runtime PC
    scan over TryHandlers (innermost-first via emit order).
  * OpRet / OpRetNull check for an enclosing finally and park the value
    in pending before jumping to FinallyPC; OP_FINALLY_END inspects
    pending and either falls through (none), chains the return into an
    outer finally (return), or re-raises the held PhpThrow (throw).
  * dispatchTryHandler routes uncaught throws (and throws originating
    inside catch bodies) to the finally with pending=throw, clearing
    stale pending when a fresh catch matches. The bug53511 destructor-
    during-catch-binding path now also routes through finally when one
    is present.
  * emitTry emits finally body after the catches at FinallyPC=AfterCatch
    so normal completion from try/catch falls through with pending=none.
    Cross-finally break/continue (target loop sits below the active
    finally's emit-time depth) is detected at emit time and falls back
    via unsupportedf — this rare case keeps using the AST until a
    pending-aware jump opcode lands.
  * The slot-unsafe gate on try+finally in dispatch.go is removed; the
    recursive GetChildren walk already covers try body, catches, and
    finally for the per-construct slot-safety probe.

Smoke tests covering all exit paths ... (continued)

83 of 129 new or added lines in 5 files covered. (64.34%)

76 existing lines in 6 files now uncovered.

14599 of 117793 relevant lines covered (12.39%)

2582.65 hits per line

Uncovered Changes

Lines Coverage ∆ File
20
61.54
-8.73% core/vm/ops_try.go
13
60.37
-0.45% core/vm/vm.go
8
73.24
-1.57% core/vm/vmcompiler/emit_stmt.go
3
83.12
0.36% core/vm/frame.go
2
84.62
6.35% core/vm/vmcompiler/emit_try.go

Coverage Regressions

Lines Coverage ∆ File
58
25.4
-18.41% core/compiler/compile-try-catch.go
6
60.37
-0.45% core/vm/vm.go
4
33.33
-22.22% core/compiler/compile-throw.go
3
23.47
-0.15% core/compiler/compile-object.go
3
4.92
-4.92% core/phpv/error.go
2
81.82
-18.18% core/vm/function.go
Jobs
ID Job ID Ran Files Coverage
1 26350583292.1 24 May 2026 03:17AM UTC 398
12.39
GitHub Action Run
Source Files on build 26350583292
  • Tree
  • List 398
  • Changed 13
  • Source Changed 9
  • Coverage Changed 13
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26350583292
  • 24b68ccc on github
  • Prev Build on master (#26145542672)
  • Next Build on master (#26350835409)
  • Delete
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