diff --git a/blueprintcompiler/language/expression.py b/blueprintcompiler/language/expression.py index 5347a88..fca7f0e 100644 --- a/blueprintcompiler/language/expression.py +++ b/blueprintcompiler/language/expression.py @@ -104,8 +104,8 @@ class LiteralExpr(Expr): def type_complete(self) -> bool: from .values import IdentLiteral - if isinstance(self.literal, IdentLiteral): - if object := self.root.objects_by_id.get(self.ident): + if isinstance(self.literal.value, IdentLiteral): + if object := self.root.objects_by_id.get(self.literal.value.ident): return not isinstance(object, Template) return True @@ -141,7 +141,7 @@ class LookupOp(InfixExpr): ], ) - if isinstance(self.lhs.type, UncheckedType): + if isinstance(self.lhs.type, UncheckedType) or not self.lhs.type_complete: return elif not isinstance(self.lhs.type, gir.Class) and not isinstance( diff --git a/blueprintcompiler/outputs/xml/__init__.py b/blueprintcompiler/outputs/xml/__init__.py index f379710..6f71595 100644 --- a/blueprintcompiler/outputs/xml/__init__.py +++ b/blueprintcompiler/outputs/xml/__init__.py @@ -160,19 +160,19 @@ class XmlOutput(OutputFormat): xml.end_tag() def _emit_literal(self, literal: Literal, xml: XmlEmitter): - literal = literal.value - if isinstance(literal, IdentLiteral): - value_type = literal.context[ValueTypeCtx].value_type + value = literal.value + if isinstance(value, IdentLiteral): + value_type = value.context[ValueTypeCtx].value_type if isinstance(value_type, gir.BoolType): - xml.put_text(literal.ident) + xml.put_text(value.ident) elif isinstance(value_type, gir.Enumeration): - xml.put_text(str(value_type.members[literal.ident].value)) + xml.put_text(str(value_type.members[value.ident].value)) else: - xml.put_text(literal.ident) - elif isinstance(literal, TypeLiteral): - xml.put_text(literal.type_name.glib_type_name) + xml.put_text(value.ident) + elif isinstance(value, TypeLiteral): + xml.put_text(value.type_name.glib_type_name) else: - xml.put_text(literal.value) + xml.put_text(value.value) def _emit_value(self, value: Value, xml: XmlEmitter): if isinstance(value.child, Literal):