Skip to content

perry-codegen Phase 2: String.matchAll codegen not implemented #317

Closed

Description

@proggeramlug

What happened

Perry's codegen aborts with a hard "not yet supported" message on any use of String.prototype.matchAll(regex):

perry-codegen Phase 2: expression StringMatchAll not yet supported

Surfaced compiling effect/src/internal/cause.ts (func 140) during the #309 compat sweep.

What you expected

MDN spec for String.prototype.matchAll: returns an iterator of all matches of a (global) regex against a string. Standard ES2020 surface, widely used.

Minimal reproduction

const text = "key=val&foo=bar&baz=qux";
const re = /([a-z]+)=([a-z]+)/g;
for (const m of text.matchAll(re)) {
  console.log(m[1], "->", m[2]);
}
perry compile repro.ts -o /tmp/out
# fails with: perry-codegen Phase 2: expression StringMatchAll not yet supported

Likely fix site

The HIR variant Expr::StringMatchAll already exists (the error message comes from a missing codegen arm), so HIR lowering is done. Adding the codegen arm in crates/perry-codegen/src/expr.rs and a runtime helper in crates/perry-runtime/src/string.rs (or a regex-aware path) should be a contained change. Consider matching the iterator-protocol shape String.prototype.match with the global flag already produces (returns array, not iterator) — matchAll is the iterator version.

Environment

  • Perry version: 0.5.405
  • Host OS: macOS 26.4 (arm64)
  • Target: native
  • Effect version: 3.21.2 (where this surfaced)

Discovered as part of the #309 long tail.

Activity

  1. proggeramlug commented on Apr 30, 2026

    @proggeramlug
    ContributorAuthor

    Tracked under umbrella #321 (Effect framework end-to-end compat).

  2. added a commit that references this issue on Apr 30, 2026
    8573e54
  3. added 4 commits that reference this issue on Apr 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugConfirmed defect or regression

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions