Skip to content

Stdlib: pow, strval, and expanded PHPT specs - #6

Merged
PurHur merged 1 commit into
masterfrom
stdlib-pow-strval
May 17, 2026
Merged

Stdlib: pow, strval, and expanded PHPT specs#6
PurHur merged 1 commit into
masterfrom
stdlib-pow-strval

Conversation

@PurHur

@PurHur PurHur commented May 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • Implement pow() for two integer or float arguments (VM + JIT via libm).
  • Implement strval() for null, bool, int, float, and string scalars (VM + JIT).
  • Add compliance PHPT specs for pow and strval, plus integration tests.

Test plan

  • make test (CircleCI / Docker) passes VM and JIT compliance suites
  • New pow.phpt, pow_int.phpt, and strval.phpt compliance cases pass
  • stdlib_strval_pow.phpt and updated stdlib_casts.phpt integration tests pass

Made with Cursor

Add pow() and strval() for supported scalar types with VM and JIT paths,
register libm pow in jitInit, and extend compliance and integration tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit c0be95c into master May 17, 2026
@PurHur
PurHur deleted the stdlib-pow-strval branch May 17, 2026 09:36
PurHur added a commit that referenced this pull request Jul 28, 2026
… (Phase 2.5) (#24387)

RELEASE-PLAN Phase 2.5 wants extensions to become separate, discoverable, side-loadable modules. The
blocker measured in #24285: Module declares no dependencies and no default-enabled flag, so the set
cannot be selected per build and the load order lives only in a hand-maintained list in
Runtime::loadCoreModules().

Adds two declarations, with defaults in ModuleAbstract that preserve current behaviour exactly:

  getExtensionDependencies(): list<string>   default []      — ordering constraints, today implicit
  isDefaultEnabled(): bool                   default true    — all 76 load unconditionally now

Safe to add to the interface: all 76 ext/*/Module.php extend ModuleAbstract and it is the only
implementor, so nothing needs updating.

Declares the libxml family, where the constraint is real and currently only remembered — php-src
ext/dom, simplexml, xml, xmlreader, xmlwriter build on ext/libxml, and xsl additionally on dom:

  dom, simplexml, xml, xmlreader, xmlwriter -> libxml
  xsl -> libxml, dom

A declaration nobody verifies is worse than none — it reads as authoritative while being free to
drift — so script/check-extension-dependencies.php asserts every declared dependency exists, is
loaded, and loads BEFORE its dependent in Runtime::loadCoreModules(). It reorders nothing; its job is
to prove the declarations describe reality, which is the precondition for later deriving the order
from them instead of hand-maintaining it.

Validated in both directions:

  as declared                          ok — 6 extensions, 7 edges, all satisfied
  with dom -> xsl (xsl loads later)    FAILED: dom (load #6) declares dependency "xsl" but xsl
                                       loads later at #7                              exit 1

Nothing consumes isDefaultEnabled() yet. The declaration comes first so the set can be made
selectable without a flag day.

Gate (touches lib/Module.php and lib/ModuleAbstract.php, which every extension implements), branch
vs a clean master checkout, run sequentially, both cold, waiting for each sweep to COMPLETE before
diffing:

  cold aot-smoke : 8/8 both sides
  VM  --repeat 2 : 110/110 both sides, exit 0
  AOT --repeat 3 : master 18 failing, branch 18 failing
                   regressions (branch-only): NONE
                   fixed (master-only)      : NONE

Co-authored-by: PurHur <tedyyyyy@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
PurHur added a commit that referenced this pull request Aug 7, 2026
…8798) (#28802)

Emit userland TypeError from ExceptionSupport::setExceptionPrevious for
non-Throwable $previous (Exception/Error arg #3, ErrorException #6), and
validate/store previous in the JIT ExceptionConstruct path.

Co-authored-by: PurHur <PurHur@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant