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

KarpelesLab / goro / 26391351891
13%

Build:
DEFAULT BRANCH: master
Ran 25 May 2026 08:33AM 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

25 May 2026 08:32AM UTC coverage: 12.51% (+0.03%) from 12.482%
26391351891

push

github

MagicalTux
vm: lower \$obj->prop OP= rhs to OP_OBJECT_COMPOUND_ASSIGN

Compound assigns on object properties (e.g. $obj->n += 5, $obj->s .= ' x')
were delegated to the AST runner via emitAssignViaAST. They now lower to
a dedicated OP_OBJECT_COMPOUND_ASSIGN opcode.

Encoding:
  A = const-pool name index (ZString prop name)
  B = tokenizer ItemType (e.g. T_PLUS_EQUAL, T_CONCAT_EQUAL)
  C bit 0 = "keep value on stack" (expr vs stmt context)

Stack: pops rhs, pops receiver. Inside the handler:
  cur := objectGet(receiver, name) (NULL on undefined)
  cur := cur.Dup() (bug81705-style snapshot)
  res := compoundOp(op)(cur, rhs)
  objectSet(receiver, name, res)
  if C&1 { push(res) }

Only the static-name, non-nullsafe shape goes native; dynamic-name
\$obj->{\$x} += v and nullsafe \$obj?->prop += v still fall through to
emitAssignViaAST. Typed properties, hooks, and asymmetric visibility are
already handled by the downstream ZObject.ObjectSet, so the native path
inherits them unchanged. Verified locally:
  - int/string/nullable compound assigns
  - .= with array→string coercion
  - typed-prop weak-mode coercion (numeric string warning + float
    deprecation notice)
  - property hooks fire (set hook called with post-op value)
  - expr-context: \$x = (\$obj->n += 100) yields 100

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

48 of 76 new or added lines in 3 files covered. (63.16%)

3 existing lines in 2 files now uncovered.

14832 of 118565 relevant lines covered (12.51%)

2578.5 hits per line

Uncovered Changes

Lines Coverage ∆ File
14
58.57
-0.11% core/vm/vm.go
13
66.82
-0.91% core/vm/vmcompiler/emit_object.go
1
62.07
0.22% core/vm/vmcompiler/emit_expr.go

Coverage Regressions

Lines Coverage ∆ File
2
23.1
-0.11% core/compiler/run-operator.go
1
22.38
-0.05% core/compiler/compile-object.go
Jobs
ID Job ID Ran Files Coverage
1 26391351891.1 25 May 2026 08:33AM UTC 398
12.51
GitHub Action Run
Source Files on build 26391351891
  • Tree
  • List 398
  • Changed 6
  • Source Changed 4
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26391351891
  • bb1672f7 on github
  • Prev Build on master (#26391006057)
  • Next Build on master (#26391453745)
  • 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