Skip to content

[TS] Concatenate symbolic strings - #460

Open
CaelmBleidd wants to merge 1 commit into
caelmbleidd/ts-423-string-truthinessfrom
caelmbleidd/ts-424-symbolic-concat
Open

CaelmBleidd wants to merge 1 commit into
caelmbleidd/ts-423-string-truthinessfrom
caelmbleidd/ts-424-symbolic-concat

Conversation

@CaelmBleidd

@CaelmBleidd CaelmBleidd commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Closes #424.

Stack

This #424-only PR is based on #456 at df0b9afe4b6730b9e88a466c796fd7989b539b9a. It contains one issue-specific commit. Independent pinned core correctness and AI code hygiene my-review passes on the exact head found no actionable defects. This PR is ready for review as a stacked change; merge after #456. The shared Node replay helper comes from the parent stack.

Change

  • Concatenate modeled symbolic strings by copying UTF-16 code units between private string backing arrays with symbolic memcpy ranges. Preserve left-to-right operand evaluation and existing conversion of concrete Boolean, Number, null, and undefined operands.
  • Register the result backing for subsequent string equality. Report feasible results exceeding TsOptions.maxArraySize as explicit unsupported paths while retaining supported paths.
  • Accept both string and string literal typed fields materialized by [TS] Make empty strings falsy in symbolic conditions #456. Check ordinary analyzeWithOutcome states and replay resolved witnesses in Node.js for a typed field, an empty literal field, and a nonempty literal field containing NUL and a surrogate pair.

Verification

  • The original symbolic-concat regression failed on the earlier [TS] Materialize symbolic string inputs in generated tests #421 base with Symbolic string concatenation is not supported for left operand.
  • On this exact head with JacoDB [TS PBT] Schedule assertion, coverage and hypothesis targets under one budget #399 b5e10a1a: TsSymbolicStringConcatTest 4/4, TsStringEqualityTest 6/6, TsSymbolicStringInputTest 11/11, and TsDynamicTruthinessTest 1/1 passed, including the new any-object regression and Node replays. :usvm-ts:detektMain and :usvm-ts:detektTest passed with zero code smells. git diff --check passed.
  • Manual CI run 37103421052 checked this exact head 5760fe85: the JVM, lint, core, and TS PBT jobs passed. ci-ts stopped during ArkAnalyzer setup because its ohos-typescript dependency was missing; the TS test step did not run in that job. The local TS checks above passed on this head. Historical run 37102162252 succeeded for the previous head 20da8a6f and does not verify this SHA.

Boundary

A symbolic string reference still requires modeled backing. Symbolic Number-to-string conversion and object ToPrimitive remain unsupported. Result lengths above the configured bound produce explicit unsupported paths.

@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-424-symbolic-concat branch from 137c2bf to 6709ce3 Compare October 2, 2026 22:12
@CaelmBleidd
CaelmBleidd changed the base branch from caelmbleidd/ts-421-symbolic-string to caelmbleidd/ts-422-string-value-equality October 2, 2026 22:13
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-424-symbolic-concat branch from 6709ce3 to ba5bfb6 Compare October 2, 2026 23:04
@CaelmBleidd
CaelmBleidd changed the base branch from caelmbleidd/ts-422-string-value-equality to caelmbleidd/ts-423-string-truthiness October 2, 2026 23:05
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-423-string-truthiness branch from 2c08f04 to 9d511c1 Compare October 3, 2026 05:26
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-424-symbolic-concat branch 3 times, most recently from 20da8a6 to 9af3ed8 Compare October 3, 2026 06:23
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-424-symbolic-concat branch from 9af3ed8 to 5760fe8 Compare October 3, 2026 06:30
@CaelmBleidd
CaelmBleidd marked this pull request as ready for review October 3, 2026 06:43
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.

2 participants