3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-02-17 06:11:44 +00:00
z3/src/api/go/log.go
2026-02-15 21:24:40 -08:00

67 lines
1.1 KiB
Go

// Copyright (c) Microsoft Corporation 2025
// Z3 Go API: Logging functionality
package z3
/*
#include "z3.h"
#include <stdlib.h>
*/
import "C"
import (
"sync"
"unsafe"
)
var (
logMutex sync.Mutex
isLogOpen bool
)
// OpenLog opens an interaction log file
// Returns true if successful, false otherwise
func OpenLog(filename string) bool {
logMutex.Lock()
defer logMutex.Unlock()
cFilename := C.CString(filename)
defer C.free(unsafe.Pointer(cFilename))
result := C.Z3_open_log(cFilename)
if result != 0 {
isLogOpen = true
return true
}
return false
}
// CloseLog closes the interaction log
func CloseLog() {
logMutex.Lock()
defer logMutex.Unlock()
C.Z3_close_log()
isLogOpen = false
}
// AppendLog appends a user-provided string to the interaction log
// Panics if the log is not open
func AppendLog(s string) {
logMutex.Lock()
defer logMutex.Unlock()
if !isLogOpen {
panic("Log is not open")
}
cStr := C.CString(s)
defer C.free(unsafe.Pointer(cStr))
C.Z3_append_log(cStr)
}
// IsLogOpen returns true if the interaction log is open
func IsLogOpen() bool {
logMutex.Lock()
defer logMutex.Unlock()
return isLogOpen
}