3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-05-17 07:29:28 +00:00

Add TypeScript API parity: Solver introspection, congruence closure, and Model sort universe methods (#8129)

* Initial plan

* Add TypeScript API parity: Solver and Model introspection methods

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Format code and add API parity demo example

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Add comprehensive API parity documentation

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Fix Context usage in tests and demo - use api.Context('main')

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

* Delete src/api/js/API_PARITY.md

* Delete src/api/js/examples/high-level/api-parity-demo.ts

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Copilot 2026-01-09 09:03:53 -08:00 committed by GitHub
parent bac004047b
commit c324f41eb0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 516 additions and 43 deletions

View file

@ -150,7 +150,7 @@ async function makeTsWrapper() {
let arrayLengthParams = new Map();
let allocatedArrays: string[] = []; // Track allocated arrays for cleanup
for (let p of inParams) {
if (p.nullable && !p.isArray) {
// this would be easy to implement - just map null to 0 - but nothing actually uses nullable non-array input parameters, so we can't ensure we've done it right
@ -181,7 +181,7 @@ async function makeTsWrapper() {
}
args[sizeIndex] = `${p.name}.length`;
params[sizeIndex] = null;
// For async functions, we need to manually manage array memory
// because ccall frees it before the async thread uses it
if (isAsync && p.kind === 'in_array') {
@ -197,13 +197,14 @@ async function makeTsWrapper() {
ctypes[paramIdx] = 'number'; // Pass as pointer, not array
}
}
// Add try-finally for async functions with allocated arrays
if (isAsync && allocatedArrays.length > 0) {
prefix += `
try {
`.trim();
suffix = `
suffix =
`
} finally {
${allocatedArrays.map(arr => `Mod._free(${arr});`).join('\n ')}
}