Skip to content

Commit 0e35c91

Browse files
committed
[sipify] handle enum class forward declaration and fix monkey patching
1 parent 375a0aa commit 0e35c91

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

scripts/sipify.pl

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ sub detect_non_method_member{
675675
}
676676

677677
# Skip forward declarations
678-
if ($LINE =~ m/^\s*(class|struct) \w+(?<external> *SIP_EXTERNAL)?;\s*(\/\/.*)?$/){
678+
if ($LINE =~ m/^\s*(enum\s+)?(class|struct) \w+(?<external> *SIP_EXTERNAL)?;\s*(\/\/.*)?$/){
679679
if ($+{external}){
680680
dbg_info('do not skip external forward declaration');
681681
$COMMENT = '';
@@ -959,7 +959,7 @@ sub detect_non_method_member{
959959
my $is_scope_based = "0";
960960
$is_scope_based = "1" if defined $2;
961961
my $monkeypatch = "0";
962-
$monkeypatch = "1" if defined $is_scope_based eq "1" and $LINE =~ m/SIP_MONKEYPATCH_SCOPEENUM(:?\(\s*(?<emkb>\w+)\s*\))/;
962+
$monkeypatch = "1" if defined $is_scope_based eq "1" and $LINE =~ m/SIP_MONKEYPATCH_SCOPEENUM_UNNEST(:?\(\s*(?<emkb>\w+)\s*\))/;
963963
my $enum_mk_base = "";
964964
$enum_mk_base = $+{emkb} if defined $+{emkb};
965965
if ($LINE =~ m/\{((\s*\w+)(\s*=\s*[\w\s\d<|]+.*?)?(,?))+\s*\}/){
@@ -984,15 +984,20 @@ sub detect_non_method_member{
984984

985985
do {no warnings 'uninitialized';
986986
my $enum_decl = $LINE =~ s/^(\s*(?<em>\w+))(\s+SIP_\w+(?:\([^()]+\))?)?(?:\s*=\s*(?:[\w\s\d|+-]|::|<<)+)?(,?)(:?\s*\/\/!<\s*(?<co>.*)|.*)$/$1$3$4/r;
987-
my $enum_member = $+{em};
988-
push @enum_members_doc, "'* $enum_member: ' + $ACTUAL_CLASS.$enum_qualname.$2.__doc__";
987+
my $enum_member = $+{em};
989988
my $comment = $+{co};
990-
push @OUTPUT_PYTHON, "$ACTUAL_CLASS.$enum_qualname.$enum_member.__doc__ = \"$comment\"\n" if $is_scope_based eq "1";
991-
if ($monkeypatch eq "1") {
989+
push @enum_members_doc, "'* $enum_member: ' + $ACTUAL_CLASS.$enum_qualname.$2.__doc__";
990+
dbg_info("is_scope_based:$is_scope_based enum_mk_base:$enum_mk_base monkeypatch:$monkeypatch");
991+
if ($is_scope_based eq "1") {
992992
if ( $enum_mk_base ne "" ){
993-
push @OUTPUT_PYTHON, "$enum_mk_base.$enum_member = $enum_qualname.$enum_member\n";
993+
push @OUTPUT_PYTHON, "$enum_mk_base.$enum_member.__doc__ = \"$comment\"\n" ;
994+
if ($monkeypatch eq "1") {
995+
push @OUTPUT_PYTHON, "$enum_mk_base.$enum_member = $enum_qualname.$enum_member\n";
996+
} else {
997+
push @OUTPUT_PYTHON, "$ACTUAL_CLASS.$enum_member = $ACTUAL_CLASS.$enum_qualname.$enum_member\n";
998+
}
994999
} else {
995-
push @OUTPUT_PYTHON, "$ACTUAL_CLASS.$enum_member = $ACTUAL_CLASS.$enum_qualname.$enum_member\n";
1000+
push @OUTPUT_PYTHON, "$ACTUAL_CLASS.$enum_qualname.$enum_member.__doc__ = \"$comment\"\n";
9961001
}
9971002
}
9981003
$enum_decl = fix_annotations($enum_decl);

0 commit comments

Comments
 (0)