Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package blueprint-compiler for openSUSE:Factory checked in at 2026-07-08 17:32:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/blueprint-compiler (Old) and /work/SRC/openSUSE:Factory/.blueprint-compiler.new.1982 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "blueprint-compiler" Wed Jul 8 17:32:09 2026 rev:11 rq:1364083 version:0.20.4 Changes: -------- --- /work/SRC/openSUSE:Factory/blueprint-compiler/blueprint-compiler.changes 2026-04-10 17:45:20.494842886 +0200 +++ /work/SRC/openSUSE:Factory/.blueprint-compiler.new.1982/blueprint-compiler.changes 2026-07-08 17:32:15.044504452 +0200 @@ -1,0 +2,16 @@ +Sun Jul 5 21:19:14 UTC 2026 - Bjørn Lie <[email protected]> + +- Update to version 0.20.4: + + Fixed: Fixed a crash in Python 3.9. +- Changes from version 0.20.3: + + Fixed: + - Fixed GtkTryExpression tests that were failing on GTK 4.22. + - The decompiler no longer emits some unnecessary casts. +- Changes from version 0.20.2: + + Fixed: Fixed a test failure due to an updated version of black. +- Changes from version 0.20.1: + + Fixed: Fix casting from uint to bool, which should work but was + generating an error. + + Docs: Fixed the syntax documentation for TryExpression. + +------------------------------------------------------------------- Old: ---- blueprint-compiler-0.20.0.tar.xz New: ---- blueprint-compiler-0.20.4.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ blueprint-compiler.spec ++++++ --- /var/tmp/diff_new_pack.WQwbaJ/_old 2026-07-08 17:32:17.112576348 +0200 +++ /var/tmp/diff_new_pack.WQwbaJ/_new 2026-07-08 17:32:17.112576348 +0200 @@ -23,7 +23,7 @@ %endif Name: blueprint-compiler -Version: 0.20.0 +Version: 0.20.4 Release: 0 Summary: A markup language for GTK user interfaces License: LGPL-3.0-or-later ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.WQwbaJ/_old 2026-07-08 17:32:17.176578573 +0200 +++ /var/tmp/diff_new_pack.WQwbaJ/_new 2026-07-08 17:32:17.180578712 +0200 @@ -1,5 +1,5 @@ -mtime: 1774254144 -commit: 6474ff9d3f1f7498a86d05d68a3baf7163114e1680b4b5a4fa9ea055de9d99a4 +mtime: 1783286614 +commit: 2dd3fab6cd40258d72203eb6486e0ddbb4fd918da2956add8b6eb63a6830bd25 url: https://src.opensuse.org/GNOME/blueprint-compiler revision: factory ++++++ _service ++++++ --- /var/tmp/diff_new_pack.WQwbaJ/_old 2026-07-08 17:32:17.200579407 +0200 +++ /var/tmp/diff_new_pack.WQwbaJ/_new 2026-07-08 17:32:17.204579547 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://gitlab.gnome.org/GNOME/blueprint-compiler.git</param> - <param name="revision">v0.20.0</param> + <param name="revision">v0.20.4</param> <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">v?(.*)(?:\+0)</param> <param name="versionrewrite-replacement">\1</param> ++++++ blueprint-compiler-0.20.0.tar.xz -> blueprint-compiler-0.20.4.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/NEWS.md new/blueprint-compiler-0.20.4/NEWS.md --- old/blueprint-compiler-0.20.0/NEWS.md 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/NEWS.md 2026-03-20 03:47:16.000000000 +0100 @@ -1,3 +1,27 @@ +# v0.20.4 + +## Fixed +- Fixed a crash in Python 3.9. + +# v0.20.3 + +## Fixed +- Fixed GtkTryExpression tests that were failing on GTK 4.22. +- The decompiler no longer emits some unnecessary casts. + +# v0.20.2 + +## Fixed +- Fixed a test failure due to an updated version of black. + +# v0.20.1 + +## Fixed +- Fix casting from uint to bool, which should work but was generating an error. + +## Docs +- Fixed the syntax documentation for TryExpression. (Jamie Gravendeel) + # v0.20.0 ## Added diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/ast_utils.py new/blueprint-compiler-0.20.4/blueprintcompiler/ast_utils.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/ast_utils.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/ast_utils.py 2026-03-20 03:47:16.000000000 +0100 @@ -178,6 +178,13 @@ self.attrs_by_type[attr_type].append((name, item)) return self.attrs_by_type[attr_type] + def autofix(self) -> T.Generator[TextEdit, None, None]: + fixes = [getattr(self, name) for name, attr in self._attrs_by_type(Autofix)] + yield from [f for f in fixes if f is not None] + + for child in self.children: + yield from child.autofix() + def get_docs(self, idx: int) -> T.Optional[str]: for name, attr in self._attrs_by_type(Docs): if attr.token_name: @@ -291,6 +298,22 @@ return decorator +class Autofix: + def __init__(self, func: T.Callable[[], T.Optional[TextEdit]]): + self.func = func + + def __get__(self, instance, owner): + if instance is None: + return self + return self.func(instance) + + +def autofix(func): + """Decorator for functions that can apply auto-fixes to Blueprint files. This is used when decompiling.""" + + return Autofix(func) + + class Docs: def __init__(self, func, token_name=None): self.func = func diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/decompiler.py new/blueprint-compiler-0.20.4/blueprintcompiler/decompiler.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/decompiler.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/decompiler.py 2026-03-20 03:47:16.000000000 +0100 @@ -23,8 +23,10 @@ from enum import Enum from . import formatter +from .errors import MultipleErrors from .gir import * -from .utils import Colors, escape_quote +from .tokenizer import tokenize +from .utils import Colors, TextEdit, escape_quote from .xml_reader import Element, parse, parse_string __all__ = ["decompile"] @@ -274,22 +276,32 @@ raise e -def decompile(data: str) -> str: - ctx = DecompileCtx() +def decompile_xml(xml: Element): + from . import parser - xml = parse(data) + ctx = DecompileCtx() decompile_element(ctx, None, xml) - return ctx.result + tokens = tokenize(ctx.result) + ast, errors, warnings = parser.parse(tokens) + result = ctx.result + if ast is not None: + fixes = [*ast.autofix()] + result = TextEdit.apply_edits(ctx.result, fixes) -def decompile_string(data: str) -> str: - ctx = DecompileCtx() + return ast, errors, warnings, result - xml = parse_string(data) - decompile_element(ctx, None, xml) - return ctx.result +def decompile( + data: str, +) -> T.Tuple[T.Any, T.Optional[MultipleErrors], T.List[CompileError], str]: + return decompile_xml(parse(data)) + + +def decompile_string(data: str) -> str: + ast, errors, warnings, result = decompile_xml(parse_string(data)) + return result def canon(string: str) -> str: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/errors.py new/blueprint-compiler-0.20.4/blueprintcompiler/errors.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/errors.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/errors.py 2026-03-20 03:47:16.000000000 +0100 @@ -235,12 +235,10 @@ print(traceback.format_exc()) print(f"Arguments: {sys.argv}") print(f"Version: {main.VERSION}\n") - print( - f"""{Colors.BOLD}{Colors.RED}***** COMPILER BUG ***** + print(f"""{Colors.BOLD}{Colors.RED}***** COMPILER BUG ***** The blueprint-compiler program has crashed. Please report the above stacktrace, along with the input file(s) if possible, on GitLab: {Colors.BOLD}{Colors.BLUE}{Colors.UNDERLINE}https://gitlab.gnome.org/GNOME/blueprint-compiler/-/issues/new?issue -{Colors.CLEAR}""" - ) +{Colors.CLEAR}""") sys.exit(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/interactive_port.py new/blueprint-compiler-0.20.4/blueprintcompiler/interactive_port.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/interactive_port.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/interactive_port.py 2026-03-20 03:47:16.000000000 +0100 @@ -22,8 +22,8 @@ import os import typing as T -from . import decompiler, parser, tokenizer -from .errors import CompilerBugError, MultipleErrors, PrintableError +from . import decompiler +from .errors import CompilerBugError, PrintableError from .outputs.xml import XmlOutput from .utils import Colors @@ -44,39 +44,34 @@ return CouldNotPort("already exists") try: - decompiled = decompiler.decompile(in_file) + ast, errors, warnings, decompiled = decompiler.decompile(in_file) - try: - # make sure the output compiles - tokens = tokenizer.tokenize(decompiled) - ast, errors, warnings = parser.parse(tokens) - - for warning in warnings: - warning.pretty_print(out_file, decompiled) - - if errors: - raise errors - if not ast: - raise CompilerBugError() - - output = XmlOutput() - output.emit(ast) - except PrintableError as e: - e.pretty_print(out_file, decompiled) + for warning in warnings: + warning.pretty_print(out_file, decompiled) - print( - f"{Colors.RED}{Colors.BOLD}error: the generated file does not compile{Colors.CLEAR}" - ) - print(f"in {Colors.UNDERLINE}{out_file}{Colors.NO_UNDERLINE}") - print( - f"""{Colors.FAINT}Either the original XML file had an error, or there is a bug in the -porting tool. If you think it's a bug (which is likely), please file an issue on GitLab: -{Colors.BLUE}{Colors.UNDERLINE}https://gitlab.gnome.org/GNOME/blueprint-compiler/-/issues/new?issue{Colors.CLEAR}\n""" - ) + if errors: + raise errors + if not ast: + raise CompilerBugError() - return CouldNotPort("does not compile") + output = XmlOutput() + output.emit(ast) return decompiled + except PrintableError as e: + e.pretty_print(out_file, decompiled) + + print( + f"{Colors.RED}{Colors.BOLD}error: the generated file does not compile{Colors.CLEAR}" + ) + print(f"in {Colors.UNDERLINE}{out_file}{Colors.NO_UNDERLINE}") + print( + f"""{Colors.FAINT}Either the original XML file had an error, or there is a bug in the +porting tool. If you think it's a bug (which is likely), please file an issue on GitLab: +{Colors.BLUE}{Colors.UNDERLINE}https://gitlab.gnome.org/GNOME/blueprint-compiler/-/issues/new?issue{Colors.CLEAR}\n""" + ) + + return CouldNotPort("does not compile") except decompiler.UnsupportedError as e: e.print(in_file) @@ -133,16 +128,14 @@ VERSION = "main" if VERSION == "uninstalled" else "v" + VERSION with open("subprojects/blueprint-compiler.wrap", "w") as wrap: - wrap.write( - f"""[wrap-git] + wrap.write(f"""[wrap-git] directory = blueprint-compiler url = https://gitlab.gnome.org/GNOME/blueprint-compiler.git revision = {VERSION} depth = 1 [provide] -program_names = blueprint-compiler""" - ) +program_names = blueprint-compiler""") print() @@ -248,8 +241,7 @@ print( f"{Colors.BOLD}Paste the following into {Colors.UNDERLINE}{meson_file}{Colors.NO_UNDERLINE}:{Colors.CLEAR}" ) - print( - f""" + print(f""" blueprints = custom_target('blueprints', input: files( {file_list} @@ -257,8 +249,7 @@ output: '.', command: [find_program('blueprint-compiler'), 'batch-compile', '--minify', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'], ) -""" - ) +""") enter() print( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/language/common.py new/blueprint-compiler-0.20.4/blueprintcompiler/language/common.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/language/common.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/language/common.py 2026-03-20 03:47:16.000000000 +0100 @@ -20,7 +20,7 @@ from .. import decompiler as decompile from .. import gir -from ..ast_utils import AstNode, context, docs, validate +from ..ast_utils import AstNode, autofix, context, docs, validate from ..completions_utils import * from ..decompiler import ( DecompileCtx, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/language/expression.py new/blueprint-compiler-0.20.4/blueprintcompiler/language/expression.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/language/expression.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/language/expression.py 2026-03-20 03:47:16.000000000 +0100 @@ -77,6 +77,17 @@ f"Cannot assign {self.type.full_name} to {expected_type.full_name}{castable}" ) + @autofix + def autofix_cast(self): + expected_type = self.parent.context[ValueTypeCtx].value_type + if self.type is not None and expected_type is not None: + if not self.type.assignable_to(expected_type): + if self.type.castable_to(expected_type): + range = Range( + self.range.end, self.range.end, self.range.original_text + ) + return TextEdit(range, f" as <{expected_type.full_name}>") + class InfixExpr(ExprBase): @property @@ -246,9 +257,9 @@ if self.type is None or self.lhs.type is None: return - if not self.type.assignable_to( - self.lhs.type - ) and not self.lhs.type.assignable_to(self.type): + if not self.type.castable_to(self.lhs.type) and not self.lhs.type.castable_to( + self.type + ): raise CompileError( f"Invalid cast. No instance of {self.lhs.type.full_name} can be an instance of {self.type.full_name}." ) @@ -270,6 +281,19 @@ def ref_docs(self): return get_docs_section("Syntax CastExpression") + @autofix + def autofix_unnecessary_cast(self): + if self.type is None: + return + + expected_type = self.parent.context[ValueTypeCtx].value_type + if ( + expected_type is not None + and self.type.assignable_to(expected_type) + and expected_type.assignable_to(self.type) + ): + return TextEdit(self.range.with_preceding_whitespace, "") + class ClosureArg(AstNode): grammar = Expression @@ -497,7 +521,7 @@ if ctx.parent_node is not None and ctx.parent_node.tag == "property": ctx.print("expr ") - ctx.print("try(") + ctx.print("try{") assert ctx.current_node is not None for i, node in enumerate(ctx.current_node.children): @@ -507,4 +531,4 @@ if i < len(ctx.current_node.children) - 1: ctx.print(", ") - ctx.end_block_with(")") + ctx.end_block_with("}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/linter_rules/avoid_all_caps.py new/blueprint-compiler-0.20.4/blueprintcompiler/linter_rules/avoid_all_caps.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/linter_rules/avoid_all_caps.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/linter_rules/avoid_all_caps.py 2026-03-20 03:47:16.000000000 +0100 @@ -12,7 +12,7 @@ def check(self, type, child, stack): for property in child.content.children[Property]: if annotations.is_property_user_facing_string(property.gir_property): - (string, range) = self.get_string_value(property) + string, range = self.get_string_value(property) # Show linter error for upper case and multi letter strings if string and string.isupper() and len(string) > 1: self.problems.append( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/linter_rules/prefer_unicode_chars.py new/blueprint-compiler-0.20.4/blueprintcompiler/linter_rules/prefer_unicode_chars.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/linter_rules/prefer_unicode_chars.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/linter_rules/prefer_unicode_chars.py 2026-03-20 03:47:16.000000000 +0100 @@ -74,7 +74,7 @@ self.check_property(property) def check_property(self, property): - (string, range) = self.get_string_value(property) + string, range = self.get_string_value(property) if string is None: return diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/types.py new/blueprint-compiler-0.20.4/blueprintcompiler/types.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/types.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/types.py 2026-03-20 03:47:16.000000000 +0100 @@ -344,6 +344,9 @@ def assignable_to(self, other: GirType) -> bool: return isinstance(other, StringType) + def transformable_to(self, other: GirType) -> bool: + return isinstance(other, StringType) + class TypeType(BasicType): name = "GType" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/blueprintcompiler/utils.py new/blueprint-compiler-0.20.4/blueprintcompiler/utils.py --- old/blueprint-compiler-0.20.0/blueprintcompiler/utils.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/blueprintcompiler/utils.py 2026-03-20 03:47:16.000000000 +0100 @@ -228,3 +228,17 @@ def to_json(self): return {"range": self.range.to_json(), "newText": self.newText} + + @staticmethod + def apply_edits(string: str, edits: T.List["TextEdit"]): + offset = 0 + edits = sorted(edits, key=lambda e: e.range.start) + for edit in edits: + string = ( + string[: edit.range.start + offset] + + edit.newText + + string[edit.range.end + offset :] + ) + offset += len(edit.newText) - edit.range.length + + return string diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/docs/flatpak.rst new/blueprint-compiler-0.20.4/docs/flatpak.rst --- old/blueprint-compiler-0.20.0/docs/flatpak.rst 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/docs/flatpak.rst 2026-03-20 03:47:16.000000000 +0100 @@ -17,7 +17,7 @@ { "type": "git", "url": "https://gitlab.gnome.org/GNOME/blueprint-compiler", - "tag": "v0.20.0" + "tag": "v0.20.4" } ] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/docs/reference/expressions.rst new/blueprint-compiler-0.20.4/docs/reference/expressions.rst --- old/blueprint-compiler-0.20.0/docs/reference/expressions.rst 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/docs/reference/expressions.rst 2026-03-20 03:47:16.000000000 +0100 @@ -107,7 +107,7 @@ .. code-block:: blueprint Label { - label: bind try (template.account.username, "Guest"); + label: bind try { template.account.username, "Guest" }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/meson.build new/blueprint-compiler-0.20.4/meson.build --- old/blueprint-compiler-0.20.0/meson.build 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/meson.build 2026-03-20 03:47:16.000000000 +0100 @@ -1,5 +1,5 @@ project('blueprint-compiler', - version: '0.20.0', + version: '0.20.4', ) prefix = get_option('prefix') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/samples/cast_uint_to_bool.blp new/blueprint-compiler-0.20.4/tests/samples/cast_uint_to_bool.blp --- old/blueprint-compiler-0.20.0/tests/samples/cast_uint_to_bool.blp 1970-01-01 01:00:00.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/samples/cast_uint_to_bool.blp 2026-03-20 03:47:16.000000000 +0100 @@ -0,0 +1,5 @@ +using Gtk 4.0; + +DropDown dropdown { + visible: bind dropdown.selected as <bool>; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/samples/cast_uint_to_bool.ui new/blueprint-compiler-0.20.4/tests/samples/cast_uint_to_bool.ui --- old/blueprint-compiler-0.20.0/tests/samples/cast_uint_to_bool.ui 1970-01-01 01:00:00.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/samples/cast_uint_to_bool.ui 2026-03-20 03:47:16.000000000 +0100 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +DO NOT EDIT! +This file was @generated by blueprint-compiler. Instead, edit the +corresponding .blp file and regenerate this file with blueprint-compiler. +--> +<interface> + <requires lib="gtk" version="4.0"/> + <object class="GtkDropDown" id="dropdown"> + <property name="visible" bind-source="dropdown" bind-property="selected" bind-flags="sync-create"/> + </object> +</interface> \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/samples/expr_closure_args.blp new/blueprint-compiler-0.20.4/tests/samples/expr_closure_args.blp --- old/blueprint-compiler-0.20.0/tests/samples/expr_closure_args.blp 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/samples/expr_closure_args.blp 2026-03-20 03:47:16.000000000 +0100 @@ -1,5 +1,5 @@ using Gtk 4.0; Label { - label: bind $my-closure(true, 10, "Hello") as <string>; + label: bind $my-closure(true, 10, "Hello"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/samples/expr_closure_dec.blp new/blueprint-compiler-0.20.4/tests/samples/expr_closure_dec.blp --- old/blueprint-compiler-0.20.0/tests/samples/expr_closure_dec.blp 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/samples/expr_closure_dec.blp 2026-03-20 03:47:16.000000000 +0100 @@ -1,5 +1,5 @@ using Gtk 4.0; Label my-label { - label: bind $my-closure(my-label.margin-bottom) as <string>; + label: bind $my-closure(my-label.margin-bottom); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/samples/expr_closure_inferred_type_dec.blp new/blueprint-compiler-0.20.4/tests/samples/expr_closure_inferred_type_dec.blp --- old/blueprint-compiler-0.20.0/tests/samples/expr_closure_inferred_type_dec.blp 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/samples/expr_closure_inferred_type_dec.blp 1970-01-01 01:00:00.000000000 +0100 @@ -1,5 +0,0 @@ -using Gtk 4.0; - -Label { - label: bind $func() as <string>; -} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/samples/expr_translated.blp new/blueprint-compiler-0.20.4/tests/samples/expr_translated.blp --- old/blueprint-compiler-0.20.0/tests/samples/expr_translated.blp 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/samples/expr_translated.blp 2026-03-20 03:47:16.000000000 +0100 @@ -1,9 +1,9 @@ using Gtk 4.0; Label { - label: bind $closure(_("Hello, world!")) as <string>; + label: bind $closure(_("Hello, world!")); } Label { - label: bind $closure(C_("translation context", "Hello")) as <string>; + label: bind $closure(C_("translation context", "Hello")); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/samples/expr_try.blp new/blueprint-compiler-0.20.4/tests/samples/expr_try.blp --- old/blueprint-compiler-0.20.0/tests/samples/expr_try.blp 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/samples/expr_try.blp 2026-03-20 03:47:16.000000000 +0100 @@ -1,6 +1,6 @@ using Gtk 4.0; Button button { - label: bind try { button.label, $backup_label(button), "Hello, world!" } as <string>; + label: bind try { button.label, $backup_label(button), "Hello, world!" }; child: bind try { $expr1() as <Label>, $expr2() as <Button> }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/samples/issue_221.blp new/blueprint-compiler-0.20.4/tests/samples/issue_221.blp --- old/blueprint-compiler-0.20.0/tests/samples/issue_221.blp 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/samples/issue_221.blp 2026-03-20 03:47:16.000000000 +0100 @@ -1,5 +1,5 @@ using Gtk 4.0; Box { - orientation: bind $test() as <Orientation>; + orientation: bind $test(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blueprint-compiler-0.20.0/tests/test_samples.py new/blueprint-compiler-0.20.4/tests/test_samples.py --- old/blueprint-compiler-0.20.0/tests/test_samples.py 2026-02-27 00:51:22.000000000 +0100 +++ new/blueprint-compiler-0.20.4/tests/test_samples.py 2026-03-20 03:47:16.000000000 +0100 @@ -178,9 +178,9 @@ name = name.removesuffix("_dec") ui_path = (Path(__file__).parent / f"samples/{name}.ui").resolve() - actual = decompiler.decompile(ui_path).strip() + ast, errors, warnings, actual = decompiler.decompile(ui_path) - self.assertEqual(actual, expected) + self.assertEqual(actual.strip(), expected) except PrintableError as e: # pragma: no cover e.pretty_print(name + ".blp", expected) raise AssertionError() @@ -202,7 +202,10 @@ "expr_closure", "expr_closure_inferred_type", "expr_closure_args", + "expr_null", + "expr_null_infer_type", "expr_translated", + "expr_try", "expr_value_closure", "extern_class_with_namespace", "issue_221", ++++++ blueprint-compiler.obsinfo ++++++ --- /var/tmp/diff_new_pack.WQwbaJ/_old 2026-07-08 17:32:17.696596651 +0200 +++ /var/tmp/diff_new_pack.WQwbaJ/_new 2026-07-08 17:32:17.704596930 +0200 @@ -1,5 +1,5 @@ name: blueprint-compiler -version: 0.20.0 -mtime: 1772149882 -commit: aa5298cc1677cf855bd61f9671607362bd203f4f +version: 0.20.4 +mtime: 1773974836 +commit: 31b62c24a72c1670d2d93dcdf2d130f1ae12778e ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-07-05 23:23:34.000000000 +0200 @@ -0,0 +1,5 @@ +*.obscpio +*.osc +_build.* +.pbuild +osc-collab.*
