Skip to content

Go bindings: extract CGo slice-conversion helpers to eliminate boilerplate#9465

Merged
NikolajBjorner merged 2 commits into
masterfrom
copilot/code-simplifier-extract-cgo-slice-conversion-helpe
May 6, 2026
Merged

Go bindings: extract CGo slice-conversion helpers to eliminate boilerplate#9465
NikolajBjorner merged 2 commits into
masterfrom
copilot/code-simplifier-extract-cgo-slice-conversion-helpe

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 5, 2026

Reduces repetitive CGo slice-conversion patterns in src/api/go/z3.go by extracting three package-internal helpers, eliminating 13 instances of 4–9 line repeated blocks.

Helpers added

func exprsToASTs(exprs []*Expr) ([]C.Z3_ast, *C.Z3_ast)
func sortsToCSorts(sorts []*Sort) ([]C.Z3_sort, *C.Z3_sort)
func intsToCs(ints []int) ([]C.int, *C.int)

Each returns the backing slice (to keep it alive across the CGo boundary) and a nil-safe pointer to the first element.

Before / After

// Before — repeated in 13 places
cArgs := make([]C.Z3_ast, len(args))
for i, a := range args {
    cArgs[i] = a.ptr
}
var cArgsPtr *C.Z3_ast
if len(cArgs) > 0 {
    cArgsPtr = &cArgs[0]
}
return newExpr(c, C.Z3_mk_atmost(c.ptr, C.uint(len(args)), cArgsPtr, C.uint(k)))

// After
_, cArgsPtr := exprsToASTs(args)
return newExpr(c, C.Z3_mk_atmost(c.ptr, C.uint(len(args)), cArgsPtr, C.uint(k)))

Other simplification

Replaced verbose 5-line if/else C.bool assignments in MkQuantifier and MkQuantifierConst with the direct cast already used elsewhere in the bindings:

forallInt := C.bool(isForall)

Net: −66 lines. No functional changes.

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/eb6e05d8-f45a-40fb-b61f-17d4058bccb6

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Copilot AI changed the title [WIP] Simplify Go bindings by extracting CGo slice conversion helpers Go bindings: extract CGo slice-conversion helpers to eliminate boilerplate May 5, 2026
Copilot AI requested a review from NikolajBjorner May 5, 2026 18:22
@NikolajBjorner NikolajBjorner marked this pull request as ready for review May 6, 2026 19:32
@NikolajBjorner NikolajBjorner merged commit 30c74fc into master May 6, 2026
1 check passed
@NikolajBjorner NikolajBjorner deleted the copilot/code-simplifier-extract-cgo-slice-conversion-helpe branch May 6, 2026 19:32
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.

[code-simplifier] simplify Go bindings: extract CGo slice conversion helpers in z3.go

2 participants