From 866092ccf7ae495062f36043703fbbce7c6c2c90 Mon Sep 17 00:00:00 2001 From: James Westman Date: Sun, 5 Jan 2025 15:34:16 -0600 Subject: [PATCH] values: Don't allow assigning true/false to object Fix a bug in the type checking code where it would not produce an error if you assigned "true" or "false" to an object property. --- blueprintcompiler/language/values.py | 9 ++++++++- tests/sample_errors/convert_bool_to_obj.blp | 5 +++++ tests/sample_errors/convert_bool_to_obj.err | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/sample_errors/convert_bool_to_obj.blp create mode 100644 tests/sample_errors/convert_bool_to_obj.err diff --git a/blueprintcompiler/language/values.py b/blueprintcompiler/language/values.py index 833a4a3..7fa6bfa 100644 --- a/blueprintcompiler/language/values.py +++ b/blueprintcompiler/language/values.py @@ -338,7 +338,14 @@ class IdentLiteral(AstNode): raise CompileError( '"item" can only be used in an expression literal' ) - elif self.ident not in ["true", "false"]: + elif self.ident in ["true", "false"]: + if expected_type is not None and not isinstance( + expected_type, gir.BoolType + ): + raise CompileError( + f"Cannot assign boolean to {expected_type.full_name}" + ) + else: raise CompileError( f"Could not find object with ID {self.ident}", did_you_mean=( diff --git a/tests/sample_errors/convert_bool_to_obj.blp b/tests/sample_errors/convert_bool_to_obj.blp new file mode 100644 index 0000000..5f856c0 --- /dev/null +++ b/tests/sample_errors/convert_bool_to_obj.blp @@ -0,0 +1,5 @@ +using Gtk 4.0; + +Button { + child: false; +} diff --git a/tests/sample_errors/convert_bool_to_obj.err b/tests/sample_errors/convert_bool_to_obj.err new file mode 100644 index 0000000..389f69c --- /dev/null +++ b/tests/sample_errors/convert_bool_to_obj.err @@ -0,0 +1 @@ +4,10,5,Cannot assign boolean to Gtk.Widget \ No newline at end of file