decompiler: GUInt properties for gunichar needs conversion

Fix #148

Signed-off-by: Hubert Figuière <hub@figuiere.net>
This commit is contained in:
Hubert Figuière 2024-03-11 23:17:02 -04:00
parent d47955c5a2
commit 7823b5b2a8
4 changed files with 27 additions and 0 deletions

View file

@ -118,6 +118,15 @@ class DecompileCtx:
if type is None: if type is None:
self.print(f"{name}: {escape_quote(value)};") self.print(f"{name}: {escape_quote(value)};")
elif type.assignable_to(UIntType()):
try:
val = int(value)
self.print(f"{name}: {value};")
except:
# Properties like 'invisible-char' are a unicode char
# in a guint, so we convert manually. Unlike in format.
val = ord(value)
self.print(f"{name}: {val};")
elif type.assignable_to(FloatType()): elif type.assignable_to(FloatType()):
self.print(f"{name}: {value};") self.print(f"{name}: {value};")
elif type.assignable_to(BoolType()): elif type.assignable_to(BoolType()):

5
tests/samples/entry.blp Normal file
View file

@ -0,0 +1,5 @@
using Gtk 4.0;
Entry {
invisible-char: 9679;
}

7
tests/samples/entry.ui Normal file
View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"/>
<object class="GtkEntry">
<property name="invisible-char">●</property>
</object>
</interface>

View file

@ -174,6 +174,9 @@ class TestSamples(unittest.TestCase):
for sample in samples: for sample in samples:
REQUIRE_ADW_1_4 = ["adw_breakpoint"] REQUIRE_ADW_1_4 = ["adw_breakpoint"]
REQUIRE_ADW_1_5 = ["adw_alertdialog_responses"] REQUIRE_ADW_1_5 = ["adw_alertdialog_responses"]
# Those test case that don't round trip due to ambiguous notation.
# So `assert_sample` fail on these.
AMBIGUOUS = ["entry"]
SKIP_RUN = [ SKIP_RUN = [
"expr_closure", "expr_closure",
@ -195,6 +198,8 @@ class TestSamples(unittest.TestCase):
continue continue
if sample in REQUIRE_ADW_1_5 and not self.have_adw_1_5: if sample in REQUIRE_ADW_1_5 and not self.have_adw_1_5:
continue continue
if sample in AMBIGUOUS:
continue
with self.subTest(sample): with self.subTest(sample):
self.assert_sample(sample, skip_run=sample in SKIP_RUN) self.assert_sample(sample, skip_run=sample in SKIP_RUN)
@ -222,6 +227,7 @@ class TestSamples(unittest.TestCase):
self.assert_decompile("adw_alertdialog_responses") self.assert_decompile("adw_alertdialog_responses")
self.assert_decompile("adw_messagedialog_responses") self.assert_decompile("adw_messagedialog_responses")
self.assert_decompile("child_type") self.assert_decompile("child_type")
self.assert_decompile("entry")
self.assert_decompile("file_filter") self.assert_decompile("file_filter")
self.assert_decompile("flags") self.assert_decompile("flags")
self.assert_decompile("id_prop") self.assert_decompile("id_prop")