Generate typed public constructors for nullable string and borrowing cases
This commit is contained in:
parent
4f1016f682
commit
d6fabd56ed
12 changed files with 601 additions and 1280 deletions
|
|
@ -40,6 +40,8 @@ public enum MarshalIn: Equatable, Sendable {
|
|||
case boolToGboolean
|
||||
/// Convert `String` to a C string (`withCString` / `utf8` pointer).
|
||||
case stringToC
|
||||
/// Convert `[String]` to a NULL-terminated C `char **`.
|
||||
case stringArrayToC
|
||||
/// Access the underlying pointer of an object or interface wrapper.
|
||||
case objectPointer
|
||||
/// Access the underlying pointer of an interface-typed wrapper (a
|
||||
|
|
@ -811,13 +813,24 @@ public struct ParameterPlan: Equatable, Sendable {
|
|||
/// For callback-box params: the C arg index of the separate DestroyNotify
|
||||
/// parameter. `nil` when none.
|
||||
public let destroyIndex: Int?
|
||||
/// When set, this C param is a synthesized array length (argc); its value is
|
||||
/// `<name>.count` and it is omitted from the Swift signature.
|
||||
public let synthesizedLengthOf: String?
|
||||
|
||||
public init(swiftName: String, cArgIndex: Int, mapping: Mapping,
|
||||
isInstanceParameter: Bool = false, isOutParameter: Bool = false,
|
||||
closureIndex: Int? = nil, destroyIndex: Int? = nil) {
|
||||
closureIndex: Int? = nil, destroyIndex: Int? = nil,
|
||||
synthesizedLengthOf: String? = nil) {
|
||||
self.swiftName = swiftName; self.cArgIndex = cArgIndex
|
||||
self.mapping = mapping; self.isInstanceParameter = isInstanceParameter
|
||||
self.isOutParameter = isOutParameter
|
||||
self.closureIndex = closureIndex; self.destroyIndex = destroyIndex
|
||||
self.synthesizedLengthOf = synthesizedLengthOf
|
||||
}
|
||||
}
|
||||
extension Mapping {
|
||||
/// Maps a `[String]` parameter to a NULL-terminated C `char **` array.
|
||||
static let stringArrayMapping = Mapping(
|
||||
swiftType: "[String]", cSwiftType: "UnsafeMutablePointer<UnsafeMutablePointer<CChar>?>?",
|
||||
marshalIn: .stringArrayToC, marshalOut: .unsupported(reason: "C array return not yet bridged"))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -347,6 +347,37 @@ private func renderSupport(moduleName: String, dependencyModules: [String] = [],
|
|||
func _rawPointer(_ p: OpaquePointer) -> UnsafeMutableRawPointer {
|
||||
UnsafeMutableRawPointer(p)
|
||||
}
|
||||
/// Copies a transfer-full C string into a Swift `String` and frees the source.
|
||||
@inline(__always)
|
||||
func _takeString(_ p: UnsafeMutablePointer<CChar>!) -> String {
|
||||
defer { g_free(p) }
|
||||
return String(cString: p)
|
||||
}
|
||||
|
||||
/// Copies a nullable transfer-full C string, freeing the source; `nil` in → `nil` out.
|
||||
@inline(__always)
|
||||
func _takeStringIfPresent(_ p: UnsafeMutablePointer<CChar>?) -> String? {
|
||||
guard let p else { return nil }
|
||||
defer { g_free(p) }
|
||||
return String(cString: p)
|
||||
}
|
||||
|
||||
/// Bridges an optional `String?` to a C `const char *`, passing `nil` when absent.
|
||||
@inline(__always)
|
||||
func _withOptionalCString<R>(_ s: String?, _ body: (UnsafePointer<CChar>?) throws -> R) rethrows -> R {
|
||||
guard let s else { return try body(nil) }
|
||||
return try s.withCString(body)
|
||||
}
|
||||
|
||||
/// Bridges a `[String]` to a NULL-terminated C `char **`, freeing the copies after `body`.
|
||||
@inline(__always)
|
||||
func _withStringArray<R>(_ strings: [String], _ body: (UnsafeMutablePointer<UnsafeMutablePointer<CChar>?>?) throws -> R) rethrows -> R {
|
||||
var cStrings: [UnsafeMutablePointer<CChar>?] = strings.map { g_strdup($0) }
|
||||
cStrings.append(nil)
|
||||
defer { for p in cStrings { g_free(p) } }
|
||||
return try cStrings.withUnsafeMutableBufferPointer { try body($0.baseAddress) }
|
||||
}
|
||||
|
||||
\(glibError)\(gtypeConstants)\(closureBoxSupport)\(signalSupport)\(primitiveShims)
|
||||
"""
|
||||
}
|
||||
|
|
@ -523,7 +554,7 @@ private func renderRecord(_ plan: RecordPlan) -> String {
|
|||
if let doc = plan.doc {
|
||||
lines.append(contentsOf: renderDocComment(doc))
|
||||
}
|
||||
lines.append("public final class \(plan.name) {")
|
||||
lines.append("@MainActor public final class \(plan.name) {")
|
||||
lines.append(" @_spi(SGTKInternal) public let pointer: UnsafeMutableRawPointer")
|
||||
lines.append("")
|
||||
if plan.freeFunction != nil {
|
||||
|
|
@ -635,10 +666,10 @@ private func renderInterface(_ plan: InterfacePlan) -> String {
|
|||
// `Self: \(classPrereq)` (a class-typed prerequisite), so the Ref
|
||||
// must literally subclass it — inheriting its pointer storage,
|
||||
// inits, and deinit rather than declaring its own.
|
||||
lines.append("public final class \(plan.name)Ref: \(classPrereq), @MainActor \(plan.name) {")
|
||||
lines.append("@MainActor public final class \(plan.name)Ref: \(classPrereq), @MainActor \(plan.name) {")
|
||||
lines.append("}")
|
||||
} else {
|
||||
lines.append("public final class \(plan.name)Ref: @MainActor \(plan.name) {")
|
||||
lines.append("@MainActor public final class \(plan.name)Ref: @MainActor \(plan.name) {")
|
||||
lines.append(" @_spi(SGTKInternal) public let pointer: UnsafeMutableRawPointer")
|
||||
lines.append("")
|
||||
lines.append(" @_spi(SGTKInternal) public init(retaining pointer: UnsafeMutableRawPointer) {")
|
||||
|
|
@ -685,7 +716,7 @@ private func renderClass(_ plan: ClassPlan) -> String {
|
|||
} else {
|
||||
parentDecl = ""
|
||||
}
|
||||
lines.append("\(access) class \(plan.name)\(parentDecl) {")
|
||||
lines.append("@MainActor \(access) class \(plan.name)\(parentDecl) {")
|
||||
|
||||
let isRoot = plan.parent == nil
|
||||
|
||||
|
|
@ -700,7 +731,7 @@ private func renderClass(_ plan: ClassPlan) -> String {
|
|||
let needsInits = isRoot || !plan.isAbstract
|
||||
|
||||
if needsInits {
|
||||
let initModifier = isRoot ? "" : "@_spi(SGTKInternal) public override "
|
||||
let initModifier = isRoot ? "" : "@_spi(SGTKInternal) public "
|
||||
|
||||
// takingOwnership init
|
||||
if isRoot {
|
||||
|
|
@ -938,7 +969,7 @@ private func renderSignalConnect(_ plan: SignalPlan, className: String) -> [Stri
|
|||
return lines
|
||||
}
|
||||
private func swiftSignature(_ plan: CallablePlan) -> String {
|
||||
plan.parameters.filter { !$0.isInstanceParameter && !$0.isOutParameter }.map { param in
|
||||
plan.parameters.filter { !$0.isInstanceParameter && !$0.isOutParameter && $0.synthesizedLengthOf == nil }.map { param in
|
||||
let typeStr: String
|
||||
if param.mapping.category == .callback {
|
||||
typeStr = "@escaping \(param.mapping.swiftType)"
|
||||
|
|
@ -949,6 +980,19 @@ private func swiftSignature(_ plan: CallablePlan) -> String {
|
|||
}.joined(separator: ", ")
|
||||
}
|
||||
|
||||
|
||||
/// How a string/array parameter is wrapped for the C call.
|
||||
private enum CWrapKind { case plain, optional, array }
|
||||
|
||||
/// Generates the closure opener for a string/array parameter: `withCString`,
|
||||
/// `_withOptionalCString`, or `_withStringArray`.
|
||||
private func cWrapOpener(_ cName: String, _ swiftName: String, _ kind: CWrapKind) -> String {
|
||||
switch kind {
|
||||
case .plain: return "\(swiftName).withCString { \(cName) in"
|
||||
case .optional: return "_withOptionalCString(\(swiftName)) { \(cName) in"
|
||||
case .array: return "_withStringArray(\(swiftName)) { \(cName) in"
|
||||
}
|
||||
}
|
||||
/// Builds the C call: the C-function-call string with each argument marshalled,
|
||||
/// plus the string parameters that must be wrapped in `withCString`. The
|
||||
/// instance parameter — if any — is passed as `self.pointer`.
|
||||
|
|
@ -956,13 +1000,11 @@ private func swiftSignature(_ plan: CallablePlan) -> String {
|
|||
/// Callback-box parameters: the data pointer replaces the closure arg at the
|
||||
/// callback's cArgIndex, and also replaces any separate user-data slot
|
||||
/// identified by `closureIndex`.
|
||||
private func cArguments(_ plan: CallablePlan, error: Bool = false) -> (cCall: String, stringParams: [(cName: String, swiftName: String)]) {
|
||||
var stringParams: [(cName: String, swiftName: String)] = []
|
||||
private func cArguments(_ plan: CallablePlan, error: Bool = false) -> (cCall: String, stringParams: [(cName: String, swiftName: String, kind: CWrapKind)]) {
|
||||
var stringParams: [(cName: String, swiftName: String, kind: CWrapKind)] = []
|
||||
var cArgExprs: [String] = []
|
||||
var outIndex = 0
|
||||
|
||||
// Build map: closureIndex -> callback data ptr name, so separate user-data
|
||||
// params get replaced with the box pointer.
|
||||
var closureDataMap: [Int: String] = [:]
|
||||
for p in plan.parameters {
|
||||
if case .callbackBox(_, _) = p.mapping.marshalIn, let ci = p.closureIndex {
|
||||
|
|
@ -977,9 +1019,16 @@ private func cArguments(_ plan: CallablePlan, error: Bool = false) -> (cCall: St
|
|||
outIndex += 1
|
||||
} else if param.isInstanceParameter {
|
||||
cArgExprs.append("_instancePointer(self.pointer)")
|
||||
} else if let arrName = param.synthesizedLengthOf {
|
||||
cArgExprs.append("numericCast(\(arrName).count)")
|
||||
} else if param.mapping.marshalIn == .stringToC {
|
||||
let cName = "cString\(stringParams.count)"
|
||||
stringParams.append((cName: cName, swiftName: param.swiftName))
|
||||
let kind: CWrapKind = param.mapping.swiftType.hasSuffix("?") ? .optional : .plain
|
||||
stringParams.append((cName: cName, swiftName: param.swiftName, kind: kind))
|
||||
cArgExprs.append(cName)
|
||||
} else if param.mapping.marshalIn == .stringArrayToC {
|
||||
let cName = "cArray\(stringParams.count)"
|
||||
stringParams.append((cName: cName, swiftName: param.swiftName, kind: .array))
|
||||
cArgExprs.append(cName)
|
||||
} else if let dataPtrName = closureDataMap[param.cArgIndex], !isCallbackBox(param) {
|
||||
cArgExprs.append(dataPtrName)
|
||||
|
|
@ -1071,11 +1120,10 @@ private func outParamInitValue(_ param: ParameterPlan) -> String {
|
|||
case .enumRaw, .bitfieldRaw:
|
||||
return ".init(rawValue: 0)"
|
||||
default:
|
||||
return "nil"
|
||||
return "UnsafeMutablePointer<Int8>?"
|
||||
}
|
||||
}
|
||||
|
||||
/// Generates the expression that converts an out-param's C value to Swift.
|
||||
/// `varName` is the local variable after the C call filled it in.
|
||||
private func outParamValueExpr(_ param: ParameterPlan, varName: String) -> String {
|
||||
switch param.mapping.marshalOut {
|
||||
|
|
@ -1086,11 +1134,10 @@ private func outParamValueExpr(_ param: ParameterPlan, varName: String) -> Strin
|
|||
case .gbooleanToBool:
|
||||
return "\(varName) != 0"
|
||||
case .stringCopy(let free, _):
|
||||
let note = ""
|
||||
if param.mapping.swiftType.hasSuffix("?") {
|
||||
return "\(varName).map { String(cString: $0) }\(note)"
|
||||
return free ? "_takeStringIfPresent(\(varName))" : "\(varName).map { String(cString: $0) }"
|
||||
}
|
||||
return "String(cString: \(varName)!)\(note)"
|
||||
return free ? "_takeString(\(varName))" : "String(cString: \(varName)!)"
|
||||
case .enumFromRaw(let swiftType):
|
||||
return "\(swiftType)(rawValue: numericCast(\(varName).rawValue))!"
|
||||
case .bitfieldFromRaw(let swiftType):
|
||||
|
|
@ -1189,7 +1236,7 @@ private func renderMultiStatementBody(_ plan: CallablePlan, indent: String) -> [
|
|||
var scope = indent
|
||||
for sp in stringParams {
|
||||
let openerPrefix = plan.throwsError ? "return try " : "return "
|
||||
lines.append("\(scope)\(openerPrefix)\(sp.swiftName).withCString { \(sp.cName) in")
|
||||
lines.append("\(scope)\(openerPrefix)\(cWrapOpener(sp.cName, sp.swiftName, sp.kind))")
|
||||
scope += " "
|
||||
}
|
||||
for ld in localDecls {
|
||||
|
|
@ -1219,7 +1266,7 @@ private func renderCallExpression(_ plan: CallablePlan) -> String {
|
|||
let (cCall, stringParams) = cArguments(plan)
|
||||
var expr = cCall
|
||||
for sp in stringParams.reversed() {
|
||||
expr = "\(sp.swiftName).withCString { \(sp.cName) in \(expr) }"
|
||||
expr = "\(cWrapOpener(sp.cName, sp.swiftName, sp.kind)) \(expr) }"
|
||||
}
|
||||
return expr
|
||||
}
|
||||
|
|
@ -1269,7 +1316,7 @@ private func renderCallBody(_ plan: CallablePlan, indent: String) -> [String] {
|
|||
var scope = indent
|
||||
let openerPrefix = hasReturn ? "return " : ""
|
||||
for sp in stringParams {
|
||||
lines.append("\(scope)\(openerPrefix)\(sp.swiftName).withCString { \(sp.cName) in")
|
||||
lines.append("\(scope)\(openerPrefix)\(cWrapOpener(sp.cName, sp.swiftName, sp.kind))")
|
||||
scope += " "
|
||||
}
|
||||
for stmt in setupStmts {
|
||||
|
|
@ -1331,7 +1378,7 @@ private func renderThrowingBody(_ plan: CallablePlan, indent: String) -> [String
|
|||
var lines: [String] = []
|
||||
var scope = indent
|
||||
for sp in stringParams {
|
||||
lines.append("\(scope)return try \(sp.swiftName).withCString { \(sp.cName) in")
|
||||
lines.append("\(scope)return try \(cWrapOpener(sp.cName, sp.swiftName, sp.kind))")
|
||||
scope += " "
|
||||
}
|
||||
for stmt in setupStmts {
|
||||
|
|
@ -1419,8 +1466,9 @@ private func renderStaticFunction(_ plan: CallablePlan) -> [String] {
|
|||
}
|
||||
|
||||
/// Renders a constructor as a `convenience init`. The C constructor's returned
|
||||
/// instance pointer is adopted through the designated `init(takingOwnership:)`,
|
||||
/// which sinks a floating reference for `InitiallyUnowned` descendants.
|
||||
/// instance pointer is adopted through the designated `init(takingOwnership:)`
|
||||
/// or `init(retaining:)`, depending on the GIR `transfer-ownership` annotation
|
||||
/// on the constructor's return value.
|
||||
private func renderConstructor(_ plan: CallablePlan) -> [String] {
|
||||
var lines: [String] = []
|
||||
if let doc = plan.doc { lines.append(contentsOf: renderDocComment(doc).map { " \($0)" }) }
|
||||
|
|
@ -1441,14 +1489,14 @@ private func renderConstructor(_ plan: CallablePlan) -> [String] {
|
|||
lines.append("\(indent)var error: UnsafeMutablePointer<GError>? = nil")
|
||||
lines.append("\(indent)let _ptr = \(cCall)")
|
||||
lines.append(contentsOf: errorCheck)
|
||||
lines.append("\(indent)self.init(takingOwnership: _rawPointer(_ptr!))")
|
||||
lines.append("\(indent)\(ownInitCall(plan, "_rawPointer(_ptr!)"))")
|
||||
} else {
|
||||
lines.append("\(indent)var error: UnsafeMutablePointer<GError>? = nil")
|
||||
var scope = indent
|
||||
for i in stringParams.indices {
|
||||
let sp = stringParams[i]
|
||||
let prefix = i == 0 ? "let _result = " : ""
|
||||
lines.append("\(scope)\(prefix)\(sp.swiftName).withCString { \(sp.cName) in")
|
||||
lines.append("\(scope)\(prefix)\(cWrapOpener(sp.cName, sp.swiftName, sp.kind))")
|
||||
scope += " "
|
||||
}
|
||||
// `self.init` (a delegating initializer call) cannot be nested
|
||||
|
|
@ -1465,17 +1513,31 @@ private func renderConstructor(_ plan: CallablePlan) -> [String] {
|
|||
lines.append("\(scope)}")
|
||||
}
|
||||
lines += errorCheck
|
||||
lines.append("\(indent)self.init(takingOwnership: _rawPointer(_result!))")
|
||||
lines.append("\(indent)\(ownInitCall(plan, "_rawPointer(_result!)"))")
|
||||
}
|
||||
} else {
|
||||
let expr = renderCallExpression(plan)
|
||||
lines.append(" self.init(takingOwnership: _rawPointer(\(expr)))")
|
||||
lines.append(" \(ownInitCall(plan, "_rawPointer(\(expr))"))")
|
||||
}
|
||||
|
||||
lines.append(" }")
|
||||
return lines
|
||||
}
|
||||
|
||||
/// Selects `init(takingOwnership:)` or `init(retaining:)` based on the
|
||||
/// constructor's ownership annotation from GIR.
|
||||
private func ownInitCall(_ plan: CallablePlan, _ pointerExpr: String) -> String {
|
||||
// ownershipInit is nil for non-constructor callables; default to takingOwnership.
|
||||
switch plan.ownershipInit {
|
||||
case .takingOwnership?, .sinkingRef?:
|
||||
return "self.init(takingOwnership: \(pointerExpr))"
|
||||
case .retaining?:
|
||||
return "self.init(retaining: \(pointerExpr))"
|
||||
case nil:
|
||||
return "self.init(takingOwnership: \(pointerExpr))"
|
||||
}
|
||||
}
|
||||
|
||||
/// Generates the argument expression for a callable parameter.
|
||||
private func marshalCallArg(_ param: ParameterPlan) -> String {
|
||||
switch param.mapping.marshalIn {
|
||||
|
|
@ -1498,6 +1560,8 @@ private func marshalCallArg(_ param: ParameterPlan) -> String {
|
|||
return "\(param.swiftName) ? 1 : 0"
|
||||
case .stringToC:
|
||||
return param.swiftName
|
||||
case .stringArrayToC:
|
||||
return param.swiftName
|
||||
case .objectPointer, .interfacePointer:
|
||||
return pointerArg(param)
|
||||
case .boxedPointer:
|
||||
|
|
@ -1533,11 +1597,14 @@ private func marshalReturn(_ cCall: String, mapping: Mapping) -> String {
|
|||
return "numericCast(\(cCall))"
|
||||
case .gbooleanToBool:
|
||||
return "\(cCall) != 0"
|
||||
case .stringCopy(_, _):
|
||||
if mapping.swiftType.hasSuffix("?") {
|
||||
return "\(cCall).map { String(cString: $0) }"
|
||||
case .stringCopy(let free, _):
|
||||
let optional = mapping.swiftType.hasSuffix("?")
|
||||
switch (free, optional) {
|
||||
case (true, false): return "_takeString(\(cCall))"
|
||||
case (true, true): return "_takeStringIfPresent(\(cCall))"
|
||||
case (false, false): return "String(cString: \(cCall))"
|
||||
case (false, true): return "\(cCall).map { String(cString: $0) }"
|
||||
}
|
||||
return "String(cString: \(cCall))"
|
||||
case .objectWrap:
|
||||
let isOptional = mapping.swiftType.hasSuffix("?")
|
||||
let baseType = isOptional ? String(mapping.swiftType.dropLast()) : mapping.swiftType
|
||||
|
|
@ -1724,8 +1791,24 @@ private func gvalueSetterBody(swiftType: String, girName: String,
|
|||
"g_value_unset(&gvalue)",
|
||||
]
|
||||
}
|
||||
|
||||
private func renderDocComment(_ text: String) -> [String] {
|
||||
text.components(separatedBy: "\n").map { "/// \($0)" }
|
||||
convertGtkDocToDocC(text).components(separatedBy: "\n").map { "/// \($0)" }
|
||||
}
|
||||
|
||||
/// Converts raw gtk-doc markup to DocC-compatible Markdown:
|
||||
/// - `|[<!-- language="C" -->` fences → code blocks
|
||||
/// - `#Type`, `%CONST`, `@param` → `` `backtick` `` references
|
||||
/// - `%TRUE`, `%FALSE`, `%NULL` → `` `true` ``, `` `false` ``, `` `nil` ``
|
||||
private func convertGtkDocToDocC(_ text: String) -> String {
|
||||
var s = text
|
||||
s = s.replacing(/\|\[(<!--.*?-->)?/, with: "```")
|
||||
s = s.replacing(/\]\|/, with: "```")
|
||||
s = s.replacingOccurrences(of: "%TRUE", with: "`true`")
|
||||
s = s.replacingOccurrences(of: "%FALSE", with: "`false`")
|
||||
s = s.replacingOccurrences(of: "%NULL", with: "`nil`")
|
||||
s = s.replacing(/[#%@]([A-Za-z_][A-Za-z0-9_]*)/) { "`\($0.1)`" }
|
||||
return s
|
||||
}
|
||||
|
||||
/// Converts a raw GIR bitfield value string to a Swift `UInt32` literal.
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ public func planModules(
|
|||
// labels AND types, a different selector, no relation to include).
|
||||
func methodSignature(_ m: CallablePlan) -> String {
|
||||
let params = m.parameters
|
||||
.filter { !$0.isInstanceParameter && !$0.isOutParameter }
|
||||
.filter { !$0.isInstanceParameter && !$0.isOutParameter && $0.synthesizedLengthOf == nil }
|
||||
.map { "\($0.swiftName):\($0.mapping.swiftType)" }
|
||||
.joined(separator: ",")
|
||||
return "\(m.name)|throws:\(m.throwsError)|(\(params))"
|
||||
|
|
@ -350,7 +350,7 @@ private func planNamespace(_ ns: Namespace, context: MapContext) -> ModulePlan {
|
|||
private func signatureKey(_ plan: CallablePlan) -> String {
|
||||
let retType = plan.returnMapping?.swiftType ?? "Void"
|
||||
let params = plan.parameters
|
||||
.filter { !$0.isInstanceParameter && !$0.isOutParameter }
|
||||
.filter { !$0.isInstanceParameter && !$0.isOutParameter && $0.synthesizedLengthOf == nil }
|
||||
.map { "\($0.swiftName):\($0.mapping.swiftType)" }
|
||||
.joined(separator: ",")
|
||||
return "throws:\(plan.throwsError)|ret:\(retType)|(\(params))"
|
||||
|
|
@ -606,7 +606,7 @@ private let knownMissingCFunctions: Set<String> = [
|
|||
"g_settings_backend_changed", "g_settings_backend_changed_tree",
|
||||
"g_settings_backend_get_default", "g_settings_backend_path_changed",
|
||||
"g_settings_backend_path_writable_changed", "g_settings_backend_writable_changed",
|
||||
"g_null_settings_backend_new", "g_memory_settings_backend_new",
|
||||
"g_null_settings_backend_new", "g_memory_settings_backend_new", "g_keyfile_settings_backend_new",
|
||||
// Declared in <gio/gnetworking.h>, likewise excluded from <gio/gio.h>.
|
||||
"g_networking_init",
|
||||
// Declared in the GdkPixbuf GIR but not exported through the public
|
||||
|
|
@ -1438,11 +1438,29 @@ func planConstructor(_ ctor: Constructor, className: String, descendsIU: Bool, c
|
|||
reason: .constructorOutParams,
|
||||
detail: "out-param constructors are not expressible as Swift init"))
|
||||
}
|
||||
// Derive ownership from the GIR return's transfer-ownership annotation.
|
||||
// Most GObject _new constructors return transfer-ownership="full"
|
||||
// (or a floating reference for InitiallyUnowned descendants). A
|
||||
// transfer-ownership="none" return indicates a borrowed reference,
|
||||
// which the convenience init must wrap via init(retaining:) instead
|
||||
// of init(takingOwnership:).
|
||||
//
|
||||
// CRITICAL: descendsIU takes precedence over the GIR annotation because
|
||||
// most widget constructors declare transfer-ownership="none" even though
|
||||
// they return a *floating* reference that must be sunk, not borrowed.
|
||||
let ownership: OwnershipInit
|
||||
if descendsIU {
|
||||
ownership = .sinkingRef
|
||||
} else if ctor.returnValue.transferOwnership == .none {
|
||||
ownership = .retaining
|
||||
} else {
|
||||
ownership = .takingOwnership
|
||||
}
|
||||
return .success(CallablePlan(
|
||||
name: swiftFunctionName(ctor.name), cIdentifier: ctor.cIdentifier,
|
||||
parameters: paramPlans, returnMapping: nil,
|
||||
isStatic: false, isConstructor: true,
|
||||
ownershipInit: descendsIU ? .sinkingRef : .takingOwnership,
|
||||
ownershipInit: ownership,
|
||||
throwsError: ctor.throwsGError, doc: ctor.doc))
|
||||
}
|
||||
|
||||
|
|
@ -1456,6 +1474,17 @@ func planParameters(
|
|||
// These are plain gpointer params that would otherwise fail the pointer
|
||||
// check — the callback-box mechanism handles them.
|
||||
let closureTargets = Set(parameters.compactMap(\.closureIndex))
|
||||
// Pre-scan length parameters for C arrays of strings (e.g. argc for argv).
|
||||
// Map the length param's position to the array's Swift name.
|
||||
let hasInstance = parameters.contains(where: \.isInstanceParameter)
|
||||
var lengthElision: [Int: String] = [:]
|
||||
for p in parameters {
|
||||
if case .cArray(let el, let info) = p.type,
|
||||
el == .string || el == .filename,
|
||||
let li = info.lengthParameterIndex {
|
||||
lengthElision[li + (hasInstance ? 1 : 0)] = swiftParameterName(p.name)
|
||||
}
|
||||
}
|
||||
for (index, param) in parameters.enumerated() {
|
||||
// The instance parameter is always `self` — passed as `self.pointer`,
|
||||
// never type-checked (its type is the enclosing class, which is a
|
||||
|
|
@ -1532,6 +1561,23 @@ func planParameters(
|
|||
return .skip(SkipEntry(symbol: "", cIdentifier: nil,
|
||||
reason: .inoutParameter, detail: "'\(param.name)' has direction=inout"))
|
||||
}
|
||||
// Intercept length params (argc) — synthesize from array's count.
|
||||
if let arrName = lengthElision[index] {
|
||||
plans.append(ParameterPlan(
|
||||
swiftName: swiftParameterName(param.name), cArgIndex: index,
|
||||
mapping: Mapping(swiftType: "Int", cSwiftType: "", marshalIn: .direct, marshalOut: .direct),
|
||||
synthesizedLengthOf: arrName))
|
||||
continue
|
||||
}
|
||||
// Intercept C arrays of strings with a known length param → [String].
|
||||
if case .cArray(let el, let info) = param.type,
|
||||
el == .string || el == .filename, info.lengthParameterIndex != nil {
|
||||
plans.append(ParameterPlan(
|
||||
swiftName: swiftParameterName(param.name), cArgIndex: index,
|
||||
mapping: .stringArrayMapping))
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
// Map the type
|
||||
let mappingResult = Result { try map(param.type, nullable: param.isNullable,
|
||||
|
|
@ -1550,11 +1596,6 @@ func planParameters(
|
|||
}
|
||||
|
||||
let isString = paramMapping.marshalIn == .stringToC
|
||||
// A nullable string needs an optional-aware bridge; deferred.
|
||||
if isString && paramMapping.swiftType.hasSuffix("?") {
|
||||
return .skip(SkipEntry(symbol: "", cIdentifier: nil,
|
||||
reason: .unknownType, detail: "parameter '\(param.name)' is a nullable string"))
|
||||
}
|
||||
// Only a single-level `const gchar*` input string can be bridged
|
||||
// from an immutable Swift `String` via `withCString`. A mutable
|
||||
// `gchar*` is a caller-allocated output buffer, and a `gchar**`
|
||||
|
|
|
|||
|
|
@ -62,8 +62,8 @@ struct InterfaceSignalGenerationTests {
|
|||
// pattern as class signals) — this is the D4.2 regression check:
|
||||
// the previous implementation planned interface signals but the
|
||||
// renderer silently dropped them.
|
||||
#expect(source.contains("@_cdecl(\"_trampoline_GObject_Clickable_clicked\")"))
|
||||
#expect(source.contains("nonisolated func _trampoline_GObject_Clickable_clicked("))
|
||||
#expect(source.contains("@_cdecl(\"_trampolineGObjectClickableClicked\")"))
|
||||
#expect(source.contains("nonisolated func _trampolineGObjectClickableClicked("))
|
||||
#expect(source.contains("MainActor.assumeIsolated"))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ struct PropertyGenerationTests {
|
|||
#expect(skips.isEmpty)
|
||||
#expect(plan.properties.count == 1)
|
||||
#expect(source.contains("public var length: Int32"))
|
||||
#expect(source.contains("g_value_init(&gvalue, G_TYPE_INT)"))
|
||||
#expect(source.contains("g_value_init(&gvalue, gTypeInt)"))
|
||||
#expect(source.contains("g_value_get_int(&gvalue)"))
|
||||
#expect(source.contains("g_object_get_property(_instancePointer(pointer), \"length\", &gvalue)"))
|
||||
// Read-only: no setter.
|
||||
|
|
@ -186,7 +186,7 @@ struct PropertyGenerationTests {
|
|||
#expect(skips.isEmpty)
|
||||
#expect(plan.properties.count == 1)
|
||||
#expect(source.contains("public var orientation: Orientation"))
|
||||
#expect(source.contains("g_value_init(&gvalue, G_TYPE_ENUM)"))
|
||||
#expect(source.contains("g_value_init(&gvalue, gTypeEnum)"))
|
||||
// `g_value_get_enum` returns Int32; the enum's raw value is Int, so the
|
||||
// result MUST be numericCast — a bare cast would not compile.
|
||||
#expect(source.contains("Orientation(rawValue: numericCast(g_value_get_enum(&gvalue)))!"))
|
||||
|
|
@ -201,7 +201,7 @@ struct PropertyGenerationTests {
|
|||
let (source, _, skips) = renderClass(named: "Widget", properties: [prop])
|
||||
#expect(skips.isEmpty)
|
||||
#expect(source.contains("public var stateFlags: StateFlags"))
|
||||
#expect(source.contains("g_value_init(&gvalue, G_TYPE_FLAGS)"))
|
||||
#expect(source.contains("g_value_init(&gvalue, gTypeFlags)"))
|
||||
#expect(source.contains("StateFlags(rawValue: numericCast(g_value_get_flags(&gvalue)))"))
|
||||
}
|
||||
|
||||
|
|
@ -215,7 +215,7 @@ struct PropertyGenerationTests {
|
|||
let (source, _, skips) = renderClass(named: "Bin", properties: [prop])
|
||||
#expect(skips.isEmpty)
|
||||
#expect(source.contains("public var child: Object"))
|
||||
#expect(source.contains("g_value_init(&gvalue, G_TYPE_OBJECT)"))
|
||||
#expect(source.contains("g_value_init(&gvalue, gTypeObject)"))
|
||||
#expect(source.contains("Object(retaining: g_value_get_object(&gvalue))"))
|
||||
}
|
||||
|
||||
|
|
@ -379,7 +379,7 @@ struct PropertyGenerationTests {
|
|||
if case .gvalue = plan.properties[0].getter {} else {
|
||||
Issue.record("expected GValue fallback, got \(plan.properties[0].getter)")
|
||||
}
|
||||
#expect(source.contains("g_value_init(&gvalue, G_TYPE_ENUM)"))
|
||||
#expect(source.contains("g_value_init(&gvalue, gTypeEnum)"))
|
||||
#expect(source.contains("numericCast(g_value_get_enum(&gvalue))"))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -367,4 +367,106 @@ struct RendererCallableTests {
|
|||
#expect(!content.contains("import Foundation"), "\(name) unexpectedly imports Foundation")
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - E3: nullable string constructor params
|
||||
|
||||
@Test("Constructor with nullable string parameter generates String? and _withOptionalCString")
|
||||
func nullableStringConstructorParam() throws {
|
||||
let klass = Class(
|
||||
name: "Alert", cType: "GAlert", parent: "Object",
|
||||
getTypeFunction: "g_alert_get_type",
|
||||
constructors: [
|
||||
Constructor(name: "new", cIdentifier: "g_alert_new",
|
||||
parameters: [
|
||||
Parameter(name: "message", type: .string,
|
||||
cType: "const char*", isNullable: true),
|
||||
],
|
||||
returnValue: ReturnValue(transferOwnership: .full)),
|
||||
]
|
||||
)
|
||||
let (plan, _) = planClass(klass, context: makeContext())
|
||||
let module = ModulePlan(module: "GObject", types: [.class(plan)], skips: [],
|
||||
coverage: CoverageStats())
|
||||
let src = renderModule(module)["Alert.swift"] ?? ""
|
||||
// The signature must show String? for the nullable string parameter.
|
||||
#expect(src.contains("convenience init(message: String?)"))
|
||||
// The body wraps the nullable param with _withOptionalCString.
|
||||
#expect(src.contains("_withOptionalCString(message)"))
|
||||
// The convenience init must NOT be SPI-gated (check the init line is not preceded by @_spi).
|
||||
let initLines = src.components(separatedBy: "\n")
|
||||
let convenienceLines = initLines.filter { $0.contains("convenience init") }
|
||||
#expect(!convenienceLines.isEmpty, "expected a convenience init line")
|
||||
for line in convenienceLines {
|
||||
#expect(!line.contains("@_spi"), "convenience init should not be SPI-gated, got: \(line)")
|
||||
}
|
||||
// Uses takingOwnership for transfer-ownership="full".
|
||||
if !src.contains("self.init(takingOwnership:") {
|
||||
Issue.record("expected self.init(takingOwnership:) for transfer-ownership=full")
|
||||
}
|
||||
}
|
||||
|
||||
@Test("Constructor with mixed nullable and required string params generates correct bridging")
|
||||
func constructorWithMixedNullableAndRequiredParams() throws {
|
||||
let klass = Class(
|
||||
name: "Dialog", cType: "GAlertDialog", parent: "Object",
|
||||
getTypeFunction: "g_alert_dialog_get_type",
|
||||
constructors: [
|
||||
Constructor(name: "new", cIdentifier: "g_alert_dialog_new",
|
||||
parameters: [
|
||||
Parameter(name: "heading", type: .string,
|
||||
cType: "const char*", isNullable: true),
|
||||
Parameter(name: "body", type: .string,
|
||||
cType: "const char*"),
|
||||
],
|
||||
returnValue: ReturnValue(transferOwnership: .full)),
|
||||
]
|
||||
)
|
||||
let (plan, _) = planClass(klass, context: makeContext())
|
||||
let module = ModulePlan(module: "GObject", types: [.class(plan)], skips: [],
|
||||
coverage: CoverageStats())
|
||||
let src = renderModule(module)["Dialog.swift"] ?? ""
|
||||
// The signature must show String? for the nullable param and String for the required param.
|
||||
#expect(src.contains("convenience init(heading: String?, body: String)"))
|
||||
// The nullable param gets _withOptionalCString, the required param gets .withCString.
|
||||
#expect(src.contains("_withOptionalCString(heading)"))
|
||||
#expect(src.contains("body.withCString"))
|
||||
// The convenience init line must NOT be SPI-gated (the class file has SPI-gated
|
||||
// designated inits, but the convenience init itself is public).
|
||||
let initLines2 = src.components(separatedBy: "\n")
|
||||
let convenienceLines2 = initLines2.filter { $0.contains("convenience init") }
|
||||
#expect(!convenienceLines2.isEmpty, "expected a convenience init line")
|
||||
for line in convenienceLines2 {
|
||||
#expect(!line.contains("@_spi"), "convenience init should not be SPI-gated, got: \(line)")
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - E3: constructor borrowing ownership
|
||||
|
||||
@Test("Constructor with ownership .none return generates convenience init calling self.init(retaining:)")
|
||||
func constructorBorrowedReturnUsesRetaining() throws {
|
||||
let klass = Class(
|
||||
name: "Borrowed", cType: "GBorrowed", parent: "Object",
|
||||
getTypeFunction: "g_borrowed_get_type",
|
||||
constructors: [
|
||||
Constructor(name: "new", cIdentifier: "g_borrowed_new",
|
||||
parameters: [
|
||||
Parameter(name: "name", type: .string,
|
||||
cType: "const char*"),
|
||||
],
|
||||
returnValue: ReturnValue(transferOwnership: .none)),
|
||||
]
|
||||
)
|
||||
let (plan, _) = planClass(klass, context: makeContext())
|
||||
let module3 = ModulePlan(module: "GObject", types: [.class(plan)], skips: [],
|
||||
coverage: CoverageStats())
|
||||
let src = renderModule(module3)["Borrowed.swift"] ?? ""
|
||||
#expect(src.contains("self.init(retaining:"), "expected self.init(retaining:) for transfer-ownership=none, got: \(src)")
|
||||
#expect(!src.contains("self.init(takingOwnership:"), "should NOT use init(takingOwnership:) for transfer-ownership=none")
|
||||
// The convenience init line must NOT be SPI-gated.
|
||||
let initLines3 = src.components(separatedBy: "\n")
|
||||
let convenienceLines3 = initLines3.filter { $0.contains("convenience init") }
|
||||
for line in convenienceLines3 {
|
||||
#expect(!line.contains("@_spi"), "convenience init should not be SPI-gated, got: \(line)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,8 +80,8 @@ struct SignalGenerationTests {
|
|||
let (source, plan, skips) = renderClass(named: "Object", signals: [notify])
|
||||
#expect(skips.isEmpty)
|
||||
#expect(plan.signals.count == 1)
|
||||
#expect(source.contains("@_cdecl(\"_trampoline_GObject_Object_notify\")"))
|
||||
#expect(source.contains("nonisolated func _trampoline_GObject_Object_notify("))
|
||||
#expect(source.contains("@_cdecl(\"_trampolineGObjectObjectNotify\")"))
|
||||
#expect(source.contains("nonisolated func _trampolineGObjectObjectNotify("))
|
||||
#expect(source.contains("_ instance: UnsafeMutableRawPointer"))
|
||||
#expect(source.contains("_ data: UnsafeMutableRawPointer?"))
|
||||
// Body re-enters MainActor before touching the raw pointers.
|
||||
|
|
@ -123,12 +123,12 @@ struct SignalGenerationTests {
|
|||
// The destroy closure matches GClosureNotify's 2-arg C signature
|
||||
// (gpointer data, GClosure *closure) — not GDestroyNotify's 1-arg form.
|
||||
#expect(source.contains("@convention(c) (UnsafeMutableRawPointer?, UnsafeMutableRawPointer?) -> Void"))
|
||||
#expect(source.contains("_sgtk_destroy_notify_impl(data, nil)"))
|
||||
#expect(source.contains("_sgtkDestroyNotifyImpl(data, nil)"))
|
||||
// The wired destroy arg is passed (non-nil) to the connect call —
|
||||
// the D3 leak regression this test guards against.
|
||||
#expect(source.contains("unsafeBitCast(destroyFn as (@convention(c) (UnsafeMutableRawPointer?, UnsafeMutableRawPointer?) -> Void), to: UnsafeRawPointer.self)"))
|
||||
#expect(source.contains("_sgtk_signal_connect_data("))
|
||||
#expect(!source.contains("_sgtk_signal_connect_data(ptr, cName, unsafeBitCast(\\(plan.trampolineCName)"))
|
||||
#expect(source.contains("_sgtkSignalConnectData("))
|
||||
#expect(!source.contains("_sgtkSignalConnectData(ptr, cName, unsafeBitCast(\\(plan.trampolineCName)"))
|
||||
}
|
||||
|
||||
@Test("Support.swift hides GLibError.init(consuming:), SignalHandle.instance/init, and _sgtk_* helpers behind @_spi(SGTKInternal)")
|
||||
|
|
@ -143,9 +143,9 @@ struct SignalGenerationTests {
|
|||
let support = renderModule(module)["Support.swift"] ?? ""
|
||||
#expect(support.contains("@_spi(SGTKInternal) public let instance: UnsafeMutableRawPointer"))
|
||||
#expect(support.contains("@_spi(SGTKInternal) public init(id: UInt, instance: UnsafeMutableRawPointer)"))
|
||||
#expect(support.contains("@_spi(SGTKInternal) public nonisolated func _sgtk_destroy_notify_impl("))
|
||||
#expect(support.contains("@_spi(SGTKInternal) public nonisolated func _sgtk_signal_connect_data("))
|
||||
#expect(support.contains("@_spi(SGTKInternal) public nonisolated func _sgtk_signal_handler_disconnect("))
|
||||
#expect(support.contains("@_spi(SGTKInternal) public nonisolated func _sgtkDestroyNotifyImpl("))
|
||||
#expect(support.contains("@_spi(SGTKInternal) public nonisolated func _sgtkSignalConnectData("))
|
||||
#expect(support.contains("@_spi(SGTKInternal) public nonisolated func _sgtkSignalHandlerDisconnect("))
|
||||
// SignalHandle itself and its id/disconnect() stay plain public — only
|
||||
// the raw-pointer members are hidden.
|
||||
#expect(support.contains("public struct SignalHandle {"))
|
||||
|
|
|
|||
|
|
@ -900,12 +900,6 @@
|
|||
"reason" : "deprecatedRemoved",
|
||||
"symbol" : "GLib.byte_array_unref"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_canonicalize_filename",
|
||||
"detail" : "parameter 'relative_to' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.canonicalize_filename"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_chdir",
|
||||
"detail" : "C symbol 'g_chdir' is not exported by the system library",
|
||||
|
|
@ -1182,42 +1176,12 @@
|
|||
"reason" : "deprecatedRemoved",
|
||||
"symbol" : "GLib.date_valid_year"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dcgettext",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dcgettext"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dgettext",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dgettext"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dir_make_tmp",
|
||||
"detail" : "deprecatedRemoved",
|
||||
"reason" : "deprecatedRemoved",
|
||||
"symbol" : "GLib.dir_make_tmp"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dngettext",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dngettext"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dpgettext",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dpgettext"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dpgettext2",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dpgettext2"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_environ_getenv",
|
||||
"detail" : "parameter 'envp': C array bridging not yet implemented",
|
||||
|
|
@ -1254,12 +1218,6 @@
|
|||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.file_get_contents"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_file_open_tmp",
|
||||
"detail" : "parameter 'tmpl' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.file_open_tmp"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_file_set_contents",
|
||||
"detail" : "parameter 'contents': C array bridging not yet implemented",
|
||||
|
|
@ -1272,12 +1230,6 @@
|
|||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.file_set_contents_full"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_filename_to_uri",
|
||||
"detail" : "parameter 'hostname' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.filename_to_uri"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_fopen",
|
||||
"detail" : "C symbol 'g_fopen' is not exported by the system library",
|
||||
|
|
@ -1584,18 +1536,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.idle_add_once"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_intern_static_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.intern_static_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_intern_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.intern_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_io_add_watch",
|
||||
"detail" : "shadowedSymbol",
|
||||
|
|
@ -1662,12 +1602,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.log"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_default_handler",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.log_default_handler"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_set_default_handler",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -1682,8 +1616,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_set_handler_full",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "callback param 'log_func' deferred to Phase D4.3",
|
||||
"reason" : "callbackWithoutUserData",
|
||||
"symbol" : "GLib.log_set_handler_full"
|
||||
},
|
||||
{
|
||||
|
|
@ -1710,12 +1644,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.log_structured_standard"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_variant",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.log_variant"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_default",
|
||||
"detail" : "parameter 'fields': C array bridging not yet implemented",
|
||||
|
|
@ -1724,16 +1652,10 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_default_set_debug_domains",
|
||||
"detail" : "parameter 'domains' is a nullable string",
|
||||
"detail" : "parameter 'domains' is not a single const input string ('const gchar* const*')",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.log_writer_default_set_debug_domains"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_default_would_drop",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.log_writer_default_would_drop"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_format_fields",
|
||||
"detail" : "parameter 'fields': C array bridging not yet implemented",
|
||||
|
|
@ -1872,12 +1794,6 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.nullify_pointer"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_on_error_stack_trace",
|
||||
"detail" : "parameter 'prg_name' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.on_error_stack_trace"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_once_init_enter",
|
||||
"detail" : "deprecatedRemoved",
|
||||
|
|
@ -1916,8 +1832,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_parse_debug_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'keys': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.parse_debug_string"
|
||||
},
|
||||
{
|
||||
|
|
@ -2058,24 +1974,6 @@
|
|||
"reason" : "callbackWithoutUserData",
|
||||
"symbol" : "GLib.qsort_with_data"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_quark_from_static_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.quark_from_static_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_quark_from_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.quark_from_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_quark_try_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.quark_try_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_rc_box_release_full",
|
||||
"detail" : "callback param 'clear_func' deferred to Phase D4.3",
|
||||
|
|
@ -2336,26 +2234,26 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_async",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_async"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_async_with_fds",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_async_with_fds"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_async_with_pipes",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_async_with_pipes"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_async_with_pipes_and_fds",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_async_with_pipes_and_fds"
|
||||
},
|
||||
{
|
||||
|
|
@ -2366,8 +2264,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_sync",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_sync"
|
||||
},
|
||||
{
|
||||
|
|
@ -2388,16 +2286,10 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.stpcpy"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_str_to_ascii",
|
||||
"detail" : "parameter 'from_locale' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.str_to_ascii"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_str_tokenize_and_fold",
|
||||
"detail" : "parameter 'translit_locale' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "out-param 'ascii_alternates': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.str_tokenize_and_fold"
|
||||
},
|
||||
{
|
||||
|
|
@ -2418,12 +2310,6 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strchug"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strcmp0",
|
||||
"detail" : "parameter 'str1' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strcmp0"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strconcat",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -2442,12 +2328,6 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strdown"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strdup",
|
||||
"detail" : "parameter 'str' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strdup"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strdup_printf",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -2466,12 +2346,6 @@
|
|||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strdupv"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strescape",
|
||||
"detail" : "parameter 'exceptions' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strescape"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strfreev",
|
||||
"detail" : "parameter 'str_array': C array bridging not yet implemented",
|
||||
|
|
@ -2486,8 +2360,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_strjoinv",
|
||||
"detail" : "parameter 'separator' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'str_array': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strjoinv"
|
||||
},
|
||||
{
|
||||
|
|
@ -2502,12 +2376,6 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strlcpy"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strndup",
|
||||
"detail" : "parameter 'str' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strndup"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strreverse",
|
||||
"detail" : "parameter 'string' is not a single const input string ('gchar*')",
|
||||
|
|
@ -2598,12 +2466,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.test_create_suite"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_expect_message",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.test_expect_message"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_fail_printf",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -2622,12 +2484,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.test_get_root"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_incomplete",
|
||||
"detail" : "parameter 'msg' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.test_incomplete"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_incomplete_printf",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -2676,28 +2532,16 @@
|
|||
"reason" : "plainRecord",
|
||||
"symbol" : "GLib.test_run_suite"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_skip",
|
||||
"detail" : "parameter 'msg' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.test_skip"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_skip_printf",
|
||||
"detail" : "notIntrospectable",
|
||||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.test_skip_printf"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_trap_subprocess",
|
||||
"detail" : "parameter 'test_path' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.test_trap_subprocess"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_trap_subprocess_with_envp",
|
||||
"detail" : "parameter 'test_path' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'envp': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.test_trap_subprocess_with_envp"
|
||||
},
|
||||
{
|
||||
|
|
@ -3048,12 +2892,6 @@
|
|||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.utf16_to_utf8"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_utf8_find_next_char",
|
||||
"detail" : "parameter 'end' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.utf8_find_next_char"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_utf8_strncpy",
|
||||
"detail" : "parameter 'dest' is not a single const input string ('gchar*')",
|
||||
|
|
@ -3201,7 +3039,7 @@
|
|||
],
|
||||
"module" : "GLib",
|
||||
"stats" : {
|
||||
"boundCallables" : 271,
|
||||
"boundCallables" : 298,
|
||||
"boundCallbacks" : 61,
|
||||
"boundSignals" : 0,
|
||||
"boundTypes" : 287,
|
||||
|
|
|
|||
|
|
@ -554,7 +554,7 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_object_getv",
|
||||
"detail" : "parameter 'names': C array bridging not yet implemented",
|
||||
"detail" : "parameter 'values': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.getv"
|
||||
},
|
||||
|
|
@ -576,144 +576,18 @@
|
|||
"reason" : "plainRecord",
|
||||
"symbol" : "GObject.interface_list_properties"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_boolean",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_boolean"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_boxed",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_boxed"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_char",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_char"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_double",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_double"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_enum",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_enum"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_flags",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_flags"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_float",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_float"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_gtype",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_gtype"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_int",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_int"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_int64",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_int64"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_long",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_long"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_object",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_object"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_override",
|
||||
"detail" : "notIntrospectable",
|
||||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GObject.param_spec_override"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_param",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_param"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_pointer",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_pointer"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_string",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_uchar",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_uchar"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_uint",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_uint"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_uint64",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_uint64"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_ulong",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_ulong"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_unichar",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_unichar"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_value_array",
|
||||
"detail" : "notIntrospectable",
|
||||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GObject.param_spec_value_array"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_variant",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_variant"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_type_register_static",
|
||||
"detail" : "parameter 'pspec_info': 'GObject.ParamSpecTypeInfo' has no GType registration or lifetime functions",
|
||||
|
|
@ -1113,7 +987,7 @@
|
|||
],
|
||||
"module" : "GObject",
|
||||
"stats" : {
|
||||
"boundCallables" : 113,
|
||||
"boundCallables" : 134,
|
||||
"boundCallbacks" : 32,
|
||||
"boundSignals" : 3,
|
||||
"boundTypes" : 76,
|
||||
|
|
|
|||
|
|
@ -705,7 +705,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_base64_decode",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.base64_decode"
|
||||
},
|
||||
{
|
||||
|
|
@ -723,7 +723,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_base64_encode",
|
||||
"detail" : "parameter 'data': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.base64_encode"
|
||||
},
|
||||
{
|
||||
|
|
@ -735,7 +735,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_base64_encode_step",
|
||||
"detail" : "parameter 'in': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.base64_encode_step"
|
||||
},
|
||||
{
|
||||
|
|
@ -788,8 +788,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_build_filenamev",
|
||||
"detail" : "parameter 'args': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'args': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.build_filenamev"
|
||||
},
|
||||
{
|
||||
|
|
@ -800,8 +800,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_build_pathv",
|
||||
"detail" : "parameter 'args': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'args': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.build_pathv"
|
||||
},
|
||||
{
|
||||
|
|
@ -900,12 +900,6 @@
|
|||
"reason" : "deprecatedRemoved",
|
||||
"symbol" : "GLib.byte_array_unref"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_canonicalize_filename",
|
||||
"detail" : "parameter 'relative_to' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.canonicalize_filename"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_chdir",
|
||||
"detail" : "C symbol 'g_chdir' is not exported by the system library",
|
||||
|
|
@ -969,19 +963,19 @@
|
|||
{
|
||||
"cIdentifier" : "g_compute_checksum_for_data",
|
||||
"detail" : "parameter 'data': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.compute_checksum_for_data"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_compute_hmac_for_data",
|
||||
"detail" : "parameter 'key': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.compute_hmac_for_data"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_compute_hmac_for_string",
|
||||
"detail" : "parameter 'key': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.compute_hmac_for_string"
|
||||
},
|
||||
{
|
||||
|
|
@ -993,13 +987,13 @@
|
|||
{
|
||||
"cIdentifier" : "g_convert",
|
||||
"detail" : "parameter 'str': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.convert"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_convert_with_fallback",
|
||||
"detail" : "parameter 'str': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.convert_with_fallback"
|
||||
},
|
||||
{
|
||||
|
|
@ -1182,58 +1176,28 @@
|
|||
"reason" : "deprecatedRemoved",
|
||||
"symbol" : "GLib.date_valid_year"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dcgettext",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dcgettext"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dgettext",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dgettext"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dir_make_tmp",
|
||||
"detail" : "deprecatedRemoved",
|
||||
"reason" : "deprecatedRemoved",
|
||||
"symbol" : "GLib.dir_make_tmp"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dngettext",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dngettext"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dpgettext",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dpgettext"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_dpgettext2",
|
||||
"detail" : "parameter 'domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.dpgettext2"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_environ_getenv",
|
||||
"detail" : "parameter 'envp': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'envp': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.environ_getenv"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_environ_setenv",
|
||||
"detail" : "parameter 'envp': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'envp': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.environ_setenv"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_environ_unsetenv",
|
||||
"detail" : "parameter 'envp': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'envp': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.environ_unsetenv"
|
||||
},
|
||||
{
|
||||
|
|
@ -1251,33 +1215,21 @@
|
|||
{
|
||||
"cIdentifier" : "g_file_get_contents",
|
||||
"detail" : "out-param 'contents': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.file_get_contents"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_file_open_tmp",
|
||||
"detail" : "parameter 'tmpl' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.file_open_tmp"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_file_set_contents",
|
||||
"detail" : "parameter 'contents': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.file_set_contents"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_file_set_contents_full",
|
||||
"detail" : "parameter 'contents': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.file_set_contents_full"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_filename_to_uri",
|
||||
"detail" : "parameter 'hostname' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.filename_to_uri"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_fopen",
|
||||
"detail" : "C symbol 'g_fopen' is not exported by the system library",
|
||||
|
|
@ -1322,32 +1274,32 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_get_environ",
|
||||
"detail" : "C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.get_environ"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_get_filename_charsets",
|
||||
"detail" : "out-param 'filename_charsets': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "out-param 'filename_charsets': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.get_filename_charsets"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_get_language_names",
|
||||
"detail" : "C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.get_language_names"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_get_language_names_with_category",
|
||||
"detail" : "C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.get_language_names_with_category"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_get_locale_variants",
|
||||
"detail" : "C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.get_locale_variants"
|
||||
},
|
||||
{
|
||||
|
|
@ -1358,14 +1310,14 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_get_system_config_dirs",
|
||||
"detail" : "C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.get_system_config_dirs"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_get_system_data_dirs",
|
||||
"detail" : "C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.get_system_data_dirs"
|
||||
},
|
||||
{
|
||||
|
|
@ -1584,18 +1536,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.idle_add_once"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_intern_static_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.intern_static_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_intern_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.intern_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_io_add_watch",
|
||||
"detail" : "shadowedSymbol",
|
||||
|
|
@ -1640,20 +1580,20 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_listenv",
|
||||
"detail" : "C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.listenv"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_locale_from_utf8",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.locale_from_utf8"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_locale_to_utf8",
|
||||
"detail" : "parameter 'opsysstring': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.locale_to_utf8"
|
||||
},
|
||||
{
|
||||
|
|
@ -1662,12 +1602,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.log"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_default_handler",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.log_default_handler"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_set_default_handler",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -1682,8 +1616,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_set_handler_full",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "callback param 'log_func' deferred to Phase D4.3",
|
||||
"reason" : "callbackWithoutUserData",
|
||||
"symbol" : "GLib.log_set_handler_full"
|
||||
},
|
||||
{
|
||||
|
|
@ -1701,7 +1635,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_log_structured_array",
|
||||
"detail" : "parameter 'fields': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.log_structured_array"
|
||||
},
|
||||
{
|
||||
|
|
@ -1710,52 +1644,40 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.log_structured_standard"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_variant",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.log_variant"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_default",
|
||||
"detail" : "parameter 'fields': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.log_writer_default"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_default_set_debug_domains",
|
||||
"detail" : "parameter 'domains' is a nullable string",
|
||||
"detail" : "parameter 'domains' is not a single const input string ('const gchar* const*')",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.log_writer_default_set_debug_domains"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_default_would_drop",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.log_writer_default_would_drop"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_format_fields",
|
||||
"detail" : "parameter 'fields': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.log_writer_format_fields"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_journald",
|
||||
"detail" : "parameter 'fields': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.log_writer_journald"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_standard_streams",
|
||||
"detail" : "parameter 'fields': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.log_writer_standard_streams"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_log_writer_syslog",
|
||||
"detail" : "parameter 'fields': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.log_writer_syslog"
|
||||
},
|
||||
{
|
||||
|
|
@ -1872,12 +1794,6 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.nullify_pointer"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_on_error_stack_trace",
|
||||
"detail" : "parameter 'prg_name' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.on_error_stack_trace"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_once_init_enter",
|
||||
"detail" : "deprecatedRemoved",
|
||||
|
|
@ -1916,8 +1832,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_parse_debug_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'keys': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.parse_debug_string"
|
||||
},
|
||||
{
|
||||
|
|
@ -2058,24 +1974,6 @@
|
|||
"reason" : "callbackWithoutUserData",
|
||||
"symbol" : "GLib.qsort_with_data"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_quark_from_static_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.quark_from_static_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_quark_from_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.quark_from_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_quark_try_string",
|
||||
"detail" : "parameter 'string' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.quark_try_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_rc_box_release_full",
|
||||
"detail" : "callback param 'clear_func' deferred to Phase D4.3",
|
||||
|
|
@ -2277,7 +2175,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_shell_parse_argv",
|
||||
"detail" : "out-param 'argvp': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.shell_parse_argv"
|
||||
},
|
||||
{
|
||||
|
|
@ -2336,38 +2234,38 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_async",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_async"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_async_with_fds",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_async_with_fds"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_async_with_pipes",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_async_with_pipes"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_async_with_pipes_and_fds",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_async_with_pipes_and_fds"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_command_line_sync",
|
||||
"detail" : "out-param 'standard_output': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "out-param 'standard_output': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_command_line_sync"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_spawn_sync",
|
||||
"detail" : "parameter 'working_directory' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'argv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.spawn_sync"
|
||||
},
|
||||
{
|
||||
|
|
@ -2388,16 +2286,10 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.stpcpy"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_str_to_ascii",
|
||||
"detail" : "parameter 'from_locale' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.str_to_ascii"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_str_tokenize_and_fold",
|
||||
"detail" : "parameter 'translit_locale' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "out-param 'ascii_alternates': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.str_tokenize_and_fold"
|
||||
},
|
||||
{
|
||||
|
|
@ -2418,12 +2310,6 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strchug"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strcmp0",
|
||||
"detail" : "parameter 'str1' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strcmp0"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strconcat",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -2442,12 +2328,6 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strdown"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strdup",
|
||||
"detail" : "parameter 'str' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strdup"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strdup_printf",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -2462,20 +2342,14 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_strdupv",
|
||||
"detail" : "parameter 'str_array': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'str_array': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strdupv"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strescape",
|
||||
"detail" : "parameter 'exceptions' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strescape"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strfreev",
|
||||
"detail" : "parameter 'str_array': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'str_array': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strfreev"
|
||||
},
|
||||
{
|
||||
|
|
@ -2486,8 +2360,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_strjoinv",
|
||||
"detail" : "parameter 'separator' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'str_array': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strjoinv"
|
||||
},
|
||||
{
|
||||
|
|
@ -2502,12 +2376,6 @@
|
|||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strlcpy"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strndup",
|
||||
"detail" : "parameter 'str' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.strndup"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strreverse",
|
||||
"detail" : "parameter 'string' is not a single const input string ('gchar*')",
|
||||
|
|
@ -2516,14 +2384,14 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_strsplit",
|
||||
"detail" : "C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strsplit"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strsplit_set",
|
||||
"detail" : "parameter 'delimiters': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'delimiters': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strsplit_set"
|
||||
},
|
||||
{
|
||||
|
|
@ -2534,14 +2402,14 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_strv_contains",
|
||||
"detail" : "parameter 'strv': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'strv': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strv_contains"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_strv_equal",
|
||||
"detail" : "parameter 'strv1': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'strv1': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strv_equal"
|
||||
},
|
||||
{
|
||||
|
|
@ -2552,8 +2420,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_strv_length",
|
||||
"detail" : "parameter 'str_array': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'str_array': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.strv_length"
|
||||
},
|
||||
{
|
||||
|
|
@ -2598,12 +2466,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.test_create_suite"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_expect_message",
|
||||
"detail" : "parameter 'log_domain' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.test_expect_message"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_fail_printf",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -2622,12 +2484,6 @@
|
|||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.test_get_root"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_incomplete",
|
||||
"detail" : "parameter 'msg' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.test_incomplete"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_incomplete_printf",
|
||||
"detail" : "notIntrospectable",
|
||||
|
|
@ -2676,28 +2532,16 @@
|
|||
"reason" : "plainRecord",
|
||||
"symbol" : "GLib.test_run_suite"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_skip",
|
||||
"detail" : "parameter 'msg' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.test_skip"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_skip_printf",
|
||||
"detail" : "notIntrospectable",
|
||||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GLib.test_skip_printf"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_trap_subprocess",
|
||||
"detail" : "parameter 'test_path' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.test_trap_subprocess"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_test_trap_subprocess_with_envp",
|
||||
"detail" : "parameter 'test_path' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"detail" : "parameter 'envp': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.test_trap_subprocess_with_envp"
|
||||
},
|
||||
{
|
||||
|
|
@ -2865,13 +2709,13 @@
|
|||
{
|
||||
"cIdentifier" : "g_ucs4_to_utf16",
|
||||
"detail" : "parameter 'str': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.ucs4_to_utf16"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_ucs4_to_utf8",
|
||||
"detail" : "parameter 'str': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.ucs4_to_utf8"
|
||||
},
|
||||
{
|
||||
|
|
@ -2895,7 +2739,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_unicode_canonical_ordering",
|
||||
"detail" : "parameter 'string': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.unicode_canonical_ordering"
|
||||
},
|
||||
{
|
||||
|
|
@ -3039,21 +2883,15 @@
|
|||
{
|
||||
"cIdentifier" : "g_utf16_to_ucs4",
|
||||
"detail" : "parameter 'str': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.utf16_to_ucs4"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_utf16_to_utf8",
|
||||
"detail" : "parameter 'str': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.utf16_to_utf8"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_utf8_find_next_char",
|
||||
"detail" : "parameter 'end' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GLib.utf8_find_next_char"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_utf8_strncpy",
|
||||
"detail" : "parameter 'dest' is not a single const input string ('gchar*')",
|
||||
|
|
@ -3081,13 +2919,13 @@
|
|||
{
|
||||
"cIdentifier" : "g_utf8_validate",
|
||||
"detail" : "parameter 'str': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.utf8_validate"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_utf8_validate_len",
|
||||
"detail" : "parameter 'str': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GLib.utf8_validate_len"
|
||||
},
|
||||
{
|
||||
|
|
@ -3201,7 +3039,7 @@
|
|||
],
|
||||
"module" : "GLib",
|
||||
"stats" : {
|
||||
"boundCallables" : 271,
|
||||
"boundCallables" : 298,
|
||||
"boundCallbacks" : 61,
|
||||
"boundSignals" : 0,
|
||||
"boundTypes" : 287,
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_object_newv",
|
||||
"detail" : "parameter 'parameters': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.Object.newv"
|
||||
},
|
||||
{
|
||||
|
|
@ -518,8 +518,8 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_enum_register_static",
|
||||
"detail" : "parameter 'const_static_values': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'const_static_values': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.enum_register_static"
|
||||
},
|
||||
{
|
||||
|
|
@ -548,14 +548,14 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_flags_register_static",
|
||||
"detail" : "parameter 'const_static_values': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'const_static_values': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.flags_register_static"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_object_getv",
|
||||
"detail" : "parameter 'names': C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'values': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.getv"
|
||||
},
|
||||
{
|
||||
|
|
@ -576,144 +576,18 @@
|
|||
"reason" : "plainRecord",
|
||||
"symbol" : "GObject.interface_list_properties"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_boolean",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_boolean"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_boxed",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_boxed"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_char",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_char"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_double",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_double"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_enum",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_enum"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_flags",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_flags"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_float",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_float"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_gtype",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_gtype"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_int",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_int"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_int64",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_int64"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_long",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_long"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_object",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_object"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_override",
|
||||
"detail" : "notIntrospectable",
|
||||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GObject.param_spec_override"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_param",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_param"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_pointer",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_pointer"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_string",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_string"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_uchar",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_uchar"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_uint",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_uint"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_uint64",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_uint64"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_ulong",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_ulong"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_unichar",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_unichar"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_value_array",
|
||||
"detail" : "notIntrospectable",
|
||||
"reason" : "notIntrospectable",
|
||||
"symbol" : "GObject.param_spec_value_array"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_spec_variant",
|
||||
"detail" : "parameter 'nick' is a nullable string",
|
||||
"reason" : "unknownType",
|
||||
"symbol" : "GObject.param_spec_variant"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_param_type_register_static",
|
||||
"detail" : "parameter 'pspec_info': 'GObject.ParamSpecTypeInfo' has no GType registration or lifetime functions",
|
||||
|
|
@ -722,14 +596,14 @@
|
|||
},
|
||||
{
|
||||
"cIdentifier" : "g_type_module_register_enum",
|
||||
"detail" : "parameter 'const_static_values': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'const_static_values': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.register_enum"
|
||||
},
|
||||
{
|
||||
"cIdentifier" : "g_type_module_register_flags",
|
||||
"detail" : "parameter 'const_static_values': C array has no length annotation",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"detail" : "parameter 'const_static_values': C array bridging not yet implemented",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.register_flags"
|
||||
},
|
||||
{
|
||||
|
|
@ -813,7 +687,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_signal_list_ids",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.signal_list_ids"
|
||||
},
|
||||
{
|
||||
|
|
@ -927,7 +801,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_type_children",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.type_children"
|
||||
},
|
||||
{
|
||||
|
|
@ -1029,7 +903,7 @@
|
|||
{
|
||||
"cIdentifier" : "g_type_interfaces",
|
||||
"detail" : "C array bridging not yet implemented",
|
||||
"reason" : "arrayWithoutLength",
|
||||
"reason" : "arrayBridgingUnimplemented",
|
||||
"symbol" : "GObject.type_interfaces"
|
||||
},
|
||||
{
|
||||
|
|
@ -1113,7 +987,7 @@
|
|||
],
|
||||
"module" : "GObject",
|
||||
"stats" : {
|
||||
"boundCallables" : 113,
|
||||
"boundCallables" : 134,
|
||||
"boundCallbacks" : 32,
|
||||
"boundSignals" : 3,
|
||||
"boundTypes" : 76,
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue