diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 380f288..f7d8a39 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -19,7 +19,7 @@ build:
- ninja -C _build docs/en
- git clone https://gitlab.gnome.org/jwestman/blueprint-regression-tests.git
- cd blueprint-regression-tests
- - git checkout e1a2b04ce13838794eec9678deff95802fa278d1
+ - git checkout 58fda9381dac4a9c42c18a4b06149ed59ee702dc
- ./test.sh
- cd ..
coverage: '/TOTAL.*\s([.\d]+)%/'
diff --git a/blueprintcompiler/decompiler.py b/blueprintcompiler/decompiler.py
index 145e4be..565d420 100644
--- a/blueprintcompiler/decompiler.py
+++ b/blueprintcompiler/decompiler.py
@@ -127,7 +127,11 @@ class DecompileCtx:
def print_attribute(self, name, value, type):
def get_enum_name(value):
for member in type.members.values():
- if member.nick == value or member.c_ident == value:
+ if (
+ member.nick == value
+ or member.c_ident == value
+ or str(member.value) == value
+ ):
return member.name
return value.replace("-", "_")
diff --git a/blueprintcompiler/gir.py b/blueprintcompiler/gir.py
index a1bb419..12c9772 100644
--- a/blueprintcompiler/gir.py
+++ b/blueprintcompiler/gir.py
@@ -462,11 +462,11 @@ class EnumMember(GirNode):
super().__init__(ns, tl)
@property
- def value(self):
+ def value(self) -> int:
return self.tl.VALUE_VALUE
@cached_property
- def name(self):
+ def name(self) -> str:
return self.tl.VALUE_NAME
@cached_property
@@ -487,7 +487,7 @@ class Enumeration(GirNode, GirType):
super().__init__(ns, tl)
@cached_property
- def members(self):
+ def members(self) -> T.Dict[str, EnumMember]:
members = {}
n_values = self.tl.ENUM_N_VALUES
values = self.tl.ENUM_VALUES
diff --git a/blueprintcompiler/language/values.py b/blueprintcompiler/language/values.py
index db28490..4a71247 100644
--- a/blueprintcompiler/language/values.py
+++ b/blueprintcompiler/language/values.py
@@ -168,6 +168,20 @@ class NumberValue(Value):
class Flag(AstNode):
grammar = UseIdent("value")
+ @property
+ def name(self) -> str:
+ return self.tokens["value"]
+
+ @property
+ def value(self) -> T.Optional[int]:
+ type = self.parent.parent.value_type
+ if not isinstance(type, Enumeration):
+ return None
+ elif member := type.members.get(self.tokens["value"]):
+ return member.value
+ else:
+ return None
+
@docs()
def docs(self):
type = self.parent.parent.value_type
diff --git a/blueprintcompiler/outputs/xml/__init__.py b/blueprintcompiler/outputs/xml/__init__.py
index e7e33d9..79f24f3 100644
--- a/blueprintcompiler/outputs/xml/__init__.py
+++ b/blueprintcompiler/outputs/xml/__init__.py
@@ -159,14 +159,16 @@ class XmlOutput(OutputFormat):
if isinstance(value, IdentValue):
if isinstance(value.parent.value_type, gir.Enumeration):
xml.put_text(
- value.parent.value_type.members[value.tokens["value"]].nick
+ str(value.parent.value_type.members[value.tokens["value"]].value)
)
else:
xml.put_text(value.tokens["value"])
elif isinstance(value, QuotedValue) or isinstance(value, NumberValue):
xml.put_text(value.value)
elif isinstance(value, FlagsValue):
- xml.put_text("|".join([flag.tokens["value"] for flag in value.children]))
+ xml.put_text(
+ "|".join([str(flag.value or flag.name) for flag in value.children])
+ )
elif isinstance(value, TranslatedStringValue):
raise CompilerBugError("translated values must be handled in the parent")
elif isinstance(value, TypeValue):
diff --git a/tests/samples/accessibility.ui b/tests/samples/accessibility.ui
index 50e98c8..321f20f 100644
--- a/tests/samples/accessibility.ui
+++ b/tests/samples/accessibility.ui
@@ -5,7 +5,7 @@
Hello, world!
my_label
- true
+ 1
diff --git a/tests/samples/enum.ui b/tests/samples/enum.ui
index acad161..d2cda1e 100644
--- a/tests/samples/enum.ui
+++ b/tests/samples/enum.ui
@@ -2,6 +2,6 @@
diff --git a/tests/samples/flags.ui b/tests/samples/flags.ui
index d2bac55..56fbf31 100644
--- a/tests/samples/flags.ui
+++ b/tests/samples/flags.ui
@@ -2,9 +2,9 @@
diff --git a/tests/samples/property.ui b/tests/samples/property.ui
index a2d5a1b..ba8089d 100644
--- a/tests/samples/property.ui
+++ b/tests/samples/property.ui
@@ -2,6 +2,6 @@
diff --git a/tests/samples/size_group.ui b/tests/samples/size_group.ui
index 6d92edd..218b023 100644
--- a/tests/samples/size_group.ui
+++ b/tests/samples/size_group.ui
@@ -2,7 +2,7 @@