mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-09 19:06:15 +01:00
mkenums: Support public/private trigraphs again
This change was previously implemented in
9ba17d511e
but got dropped during the
Python conversion of the Perl script.
See the commit message of this commit as well as
https://bugzilla.gnome.org/show_bug.cgi?id=782162
for more information.
This patch also adds a new test so we don't loose this feature again.
This commit is contained in:
parent
ca28a3fc29
commit
1261461840
@ -132,6 +132,7 @@ option_lowercase_name = '' # DEPRECATED. A lower case name to use as part
|
||||
# guess where to put the underscores.
|
||||
option_since = '' # User provided version info for the enum.
|
||||
seenbitshift = 0 # Have we seen bitshift operators?
|
||||
seenprivate = False # Have we seen a private option?
|
||||
enum_prefix = None # Prefix for this enumeration
|
||||
enumname = '' # Name for this enumeration
|
||||
enumshort = '' # $enumname without prefix
|
||||
@ -161,7 +162,7 @@ def parse_trigraph(opts):
|
||||
return result
|
||||
|
||||
def parse_entries(file, file_name):
|
||||
global entries, enumindex, enumname, seenbitshift, flags
|
||||
global entries, enumindex, enumname, seenbitshift, seenprivate, flags
|
||||
looking_for_name = False
|
||||
|
||||
while True:
|
||||
@ -239,16 +240,33 @@ def parse_entries(file, file_name):
|
||||
if flags is None and value is not None and '<<' in value:
|
||||
seenbitshift = 1
|
||||
|
||||
if seenprivate:
|
||||
continue
|
||||
|
||||
if options is not None:
|
||||
options = parse_trigraph(options)
|
||||
if 'skip' not in options:
|
||||
entries.append((name, value, options.get('nick')))
|
||||
else:
|
||||
entries.append((name, value))
|
||||
elif re.match(r's*\#', line):
|
||||
pass
|
||||
else:
|
||||
print_warning('Failed to parse "{}" in {}'.format(line, file_name))
|
||||
m = re.match(r'''\s*
|
||||
/\*< (([^*]|\*(?!/))*) >\s*\*/
|
||||
\s*$''', line, flags=re.X)
|
||||
if m:
|
||||
options = m.groups()[0]
|
||||
if options is not None:
|
||||
options = parse_trigraph(options)
|
||||
if 'private' in options:
|
||||
seenprivate = True
|
||||
continue
|
||||
if 'public' in options:
|
||||
seenprivate = False
|
||||
continue
|
||||
if re.match(r's*\#', line):
|
||||
pass
|
||||
else:
|
||||
print_warning('Failed to parse "{}" in {}'.format(line, file_name))
|
||||
return False
|
||||
|
||||
help_epilog = '''Production text substitutions:
|
||||
@ -464,7 +482,7 @@ if len(fhead) > 0:
|
||||
write_output(prod)
|
||||
|
||||
def process_file(curfilename):
|
||||
global entries, flags, seenbitshift, enum_prefix
|
||||
global entries, flags, seenbitshift, seenprivate, enum_prefix
|
||||
firstenum = True
|
||||
|
||||
try:
|
||||
@ -542,6 +560,7 @@ def process_file(curfilename):
|
||||
break
|
||||
|
||||
seenbitshift = 0
|
||||
seenprivate = False
|
||||
entries = []
|
||||
|
||||
# Now parse the entries
|
||||
|
@ -595,6 +595,61 @@ comment: {standard_bottom_comment}
|
||||
"0",
|
||||
)
|
||||
|
||||
def test_enum_private_public(self):
|
||||
"""Test private/public enums. Bug #782162."""
|
||||
h_contents1 = """
|
||||
typedef enum {
|
||||
ENUM_VALUE_PUBLIC1,
|
||||
/*< private >*/
|
||||
ENUM_VALUE_PRIVATE,
|
||||
} SomeEnumA
|
||||
"""
|
||||
|
||||
h_contents2 = """
|
||||
typedef enum {
|
||||
/*< private >*/
|
||||
ENUM_VALUE_PRIVATE,
|
||||
/*< public >*/
|
||||
ENUM_VALUE_PUBLIC2,
|
||||
} SomeEnumB;
|
||||
"""
|
||||
|
||||
result = self.runMkenumsWithHeader(h_contents1)
|
||||
self.maxDiff = None
|
||||
self.assertEqual("", result.err)
|
||||
self.assertSingleEnum(
|
||||
result,
|
||||
"SomeEnumA",
|
||||
"some_enum_a",
|
||||
"SOME_ENUM_A",
|
||||
"ENUM_A",
|
||||
"SOME",
|
||||
"",
|
||||
"enum",
|
||||
"Enum",
|
||||
"ENUM",
|
||||
"ENUM_VALUE_PUBLIC1",
|
||||
"public1",
|
||||
"0",
|
||||
)
|
||||
result = self.runMkenumsWithHeader(h_contents2)
|
||||
self.assertEqual("", result.err)
|
||||
self.assertSingleEnum(
|
||||
result,
|
||||
"SomeEnumB",
|
||||
"some_enum_b",
|
||||
"SOME_ENUM_B",
|
||||
"ENUM_B",
|
||||
"SOME",
|
||||
"",
|
||||
"enum",
|
||||
"Enum",
|
||||
"ENUM",
|
||||
"ENUM_VALUE_PUBLIC2",
|
||||
"public2",
|
||||
"0",
|
||||
)
|
||||
|
||||
|
||||
class TestRspMkenums(TestMkenums):
|
||||
"""Run all tests again in @rspfile mode"""
|
||||
|
Loading…
Reference in New Issue
Block a user