in lib/src/header_parser/sub_parsers/functiondecl_parser.dart [26:90]
Func? parseFunctionDeclaration(clang_types.CXCursor cursor) {
_stack.push(_ParserFunc());
final funcUsr = cursor.usr();
final funcName = cursor.spelling();
if (shouldIncludeFunc(funcUsr, funcName)) {
_logger.fine('++++ Adding Function: ${cursor.completeStringRepr()}');
final rt = _getFunctionReturnType(cursor);
final parameters = _getParameters(cursor, funcName);
if (clang.clang_Cursor_isFunctionInlined(cursor) != 0) {
_logger.fine(
'---- Removed Function, reason: inline function: ${cursor.completeStringRepr()}');
_logger.warning(
"Skipped Function '$funcName', inline functions are not supported.");
return _stack
.pop()
.func; // Returning null so that [addToBindings] function excludes this.
}
if (rt.isIncompleteCompound || _stack.top.incompleteStructParameter) {
_logger.fine(
'---- Removed Function, reason: Incomplete struct pass/return by value: ${cursor.completeStringRepr()}');
_logger.warning(
"Skipped Function '$funcName', Incomplete struct pass/return by value not supported.");
return _stack
.pop()
.func; // Returning null so that [addToBindings] function excludes this.
}
if (rt.getBaseType().broadType == BroadType.Unimplemented ||
_stack.top.unimplementedParameterType) {
_logger.fine(
'---- Removed Function, reason: unsupported return type or parameter type: ${cursor.completeStringRepr()}');
_logger.warning(
"Skipped Function '$funcName', function has unsupported return type or parameter type.");
return _stack
.pop()
.func; // Returning null so that [addToBindings] function excludes this.
}
_stack.top.func = Func(
dartDoc: getCursorDocComment(
cursor,
nesting.length + commentPrefix.length,
),
usr: funcUsr,
name: config.functionDecl.renameUsingConfig(funcName),
originalName: funcName,
returnType: rt,
parameters: parameters,
exposeSymbolAddress:
config.functionDecl.shouldIncludeSymbolAddress(funcName),
exposeFunctionTypedefs:
config.exposeFunctionTypedefs.shouldInclude(funcName),
isLeaf: config.leafFunctions.shouldInclude(funcName),
);
bindingsIndex.addFuncToSeen(funcUsr, _stack.top.func!);
} else if (bindingsIndex.isSeenFunc(funcUsr)) {
_stack.top.func = bindingsIndex.getSeenFunc(funcUsr);
}
return _stack.pop().func;
}