• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

dart-lang / ffigen / 6725753357

01 Nov 2023 10:20PM CUT coverage: 92.243% (+0.1%) from 92.094%
6725753357

Pull #638

github

web-flow
Merge 475bd4c30 into 9c3b631f7
Pull Request #638: Bump subosito/flutter-action from 2.10.0 to 2.12.0

3722 of 4035 relevant lines covered (92.24%)

28.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.89
/lib/src/header_parser/sub_parsers/unnamed_enumdecl_parser.dart
1
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
2
// for details. All rights reserved. Use of this source code is governed by a
3
// BSD-style license that can be found in the LICENSE file.
4

5
import 'dart:ffi';
6

7
import 'package:ffigen/src/code_generator.dart';
8
import 'package:ffigen/src/header_parser/data.dart';
9
import 'package:ffigen/src/header_parser/includer.dart';
10
import 'package:logging/logging.dart';
11

12
import '../clang_bindings/clang_bindings.dart' as clang_types;
13
import '../utils.dart';
14

15
final _logger = Logger('ffigen.header_parser.unnamed_enumdecl_parser');
18✔
16

17
Pointer<
18
        NativeFunction<
19
            Int32 Function(
20
                clang_types.CXCursor, clang_types.CXCursor, Pointer<Void>)>>?
21
    _unnamedenumCursorVisitorPtr;
22

23
/// Saves unnamed enums.
24
void saveUnNamedEnum(clang_types.CXCursor cursor) {
6✔
25
  final resultCode = clang.clang_visitChildren(
12✔
26
    cursor,
27
    _unnamedenumCursorVisitorPtr ??= Pointer.fromFunction(
28
        _unnamedenumCursorVisitor, exceptional_visitor_return),
29
    nullptr,
6✔
30
  );
31

32
  visitChildrenResultChecker(resultCode);
6✔
33
}
34

35
/// Visitor for a enum cursor [clang.CXCursorKind.CXCursor_EnumDecl].
36
///
37
/// Invoked on every enum directly under rootCursor.
38
/// Used for for extracting enum values.
39
int _unnamedenumCursorVisitor(clang_types.CXCursor cursor,
6✔
40
    clang_types.CXCursor parent, Pointer<Void> clientData) {
41
  try {
42
    _logger
6✔
43
        .finest('  unnamedenumCursorVisitor: ${cursor.completeStringRepr()}');
18✔
44
    switch (clang.clang_getCursorKind(cursor)) {
12✔
45
      case clang_types.CXCursorKind.CXCursor_EnumConstantDecl:
6✔
46
        if (shouldIncludeUnnamedEnumConstant(cursor.usr(), cursor.spelling())) {
18✔
47
          _addUnNamedEnumConstant(cursor);
4✔
48
        }
49
        break;
50
      case clang_types.CXCursorKind.CXCursor_UnexposedAttr:
2✔
51
        // Ignore.
52
        break;
53
      default:
54
        _logger.severe('Invalid enum constant.');
×
55
    }
56
  } catch (e, s) {
57
    _logger.severe(e);
×
58
    _logger.severe(s);
×
59
    rethrow;
60
  }
61
  return clang_types.CXChildVisitResult.CXChildVisit_Continue;
62
}
63

64
/// Adds the parameter to func in [functiondecl_parser.dart].
65
void _addUnNamedEnumConstant(clang_types.CXCursor cursor) {
4✔
66
  _logger.fine(
8✔
67
      '++++ Adding Constant from unnamed enum: ${cursor.completeStringRepr()}');
8✔
68
  final constant = Constant(
4✔
69
    usr: cursor.usr(),
4✔
70
    originalName: cursor.spelling(),
4✔
71
    name: config.unnamedEnumConstants.renameUsingConfig(
12✔
72
      cursor.spelling(),
4✔
73
    ),
74
    rawType: 'int',
75
    rawValue: clang.clang_getEnumConstantDeclValue(cursor).toString(),
12✔
76
  );
77
  bindingsIndex.addUnnamedEnumConstantToSeen(cursor.usr(), constant);
12✔
78
  unnamedEnumConstants.add(constant);
8✔
79
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc