mirror of
https://gitlab.gnome.org/jwestman/blueprint-compiler.git
synced 2025-05-04 15:59:08 -04:00
gir: Allow looking up basic types by name
This commit is contained in:
parent
207255897b
commit
8a7941dcbf
1 changed files with 16 additions and 2 deletions
|
@ -77,30 +77,41 @@ class BasicType(GirType):
|
||||||
|
|
||||||
class BoolType(BasicType):
|
class BoolType(BasicType):
|
||||||
name = "bool"
|
name = "bool"
|
||||||
|
glib_type_name = "gboolean"
|
||||||
|
|
||||||
def assignable_to(self, other) -> bool:
|
def assignable_to(self, other) -> bool:
|
||||||
return isinstance(other, BoolType)
|
return isinstance(other, BoolType)
|
||||||
|
|
||||||
class IntType(BasicType):
|
class IntType(BasicType):
|
||||||
name = "int"
|
name = "int"
|
||||||
|
glib_type_name = "gint"
|
||||||
|
|
||||||
def assignable_to(self, other) -> bool:
|
def assignable_to(self, other) -> bool:
|
||||||
return isinstance(other, IntType) or isinstance(other, UIntType) or isinstance(other, FloatType)
|
return isinstance(other, IntType) or isinstance(other, UIntType) or isinstance(other, FloatType)
|
||||||
|
|
||||||
class UIntType(BasicType):
|
class UIntType(BasicType):
|
||||||
name = "uint"
|
name = "uint"
|
||||||
|
glib_type_name = "guint"
|
||||||
|
|
||||||
def assignable_to(self, other) -> bool:
|
def assignable_to(self, other) -> bool:
|
||||||
return isinstance(other, IntType) or isinstance(other, UIntType) or isinstance(other, FloatType)
|
return isinstance(other, IntType) or isinstance(other, UIntType) or isinstance(other, FloatType)
|
||||||
|
|
||||||
class FloatType(BasicType):
|
class FloatType(BasicType):
|
||||||
name = "float"
|
name = "float"
|
||||||
|
glib_type_name = "gfloat"
|
||||||
|
|
||||||
def assignable_to(self, other) -> bool:
|
def assignable_to(self, other) -> bool:
|
||||||
return isinstance(other, FloatType)
|
return isinstance(other, FloatType)
|
||||||
|
|
||||||
class StringType(BasicType):
|
class StringType(BasicType):
|
||||||
name = "string"
|
name = "string"
|
||||||
|
glib_type_name = "gchararray"
|
||||||
|
|
||||||
def assignable_to(self, other) -> bool:
|
def assignable_to(self, other) -> bool:
|
||||||
return isinstance(other, StringType)
|
return isinstance(other, StringType)
|
||||||
|
|
||||||
_BASIC_TYPES = {
|
_BASIC_TYPES = {
|
||||||
|
"bool": BoolType,
|
||||||
"gboolean": BoolType,
|
"gboolean": BoolType,
|
||||||
"int": IntType,
|
"int": IntType,
|
||||||
"gint": IntType,
|
"gint": IntType,
|
||||||
|
@ -458,6 +469,9 @@ class GirContext:
|
||||||
|
|
||||||
|
|
||||||
def get_type(self, name: str, ns: str) -> T.Optional[GirNode]:
|
def get_type(self, name: str, ns: str) -> T.Optional[GirNode]:
|
||||||
|
if ns is None and name in _BASIC_TYPES:
|
||||||
|
return _BASIC_TYPES[name]()
|
||||||
|
|
||||||
ns = ns or "Gtk"
|
ns = ns or "Gtk"
|
||||||
|
|
||||||
if ns not in self.namespaces:
|
if ns not in self.namespaces:
|
||||||
|
@ -486,16 +500,16 @@ class GirContext:
|
||||||
did_you_mean=(ns, self.namespaces.keys()),
|
did_you_mean=(ns, self.namespaces.keys()),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def validate_type(self, name: str, ns: str):
|
def validate_type(self, name: str, ns: str):
|
||||||
""" Raises an exception if there is a problem looking up the given
|
""" Raises an exception if there is a problem looking up the given
|
||||||
class (it doesn't exist, it isn't a class, etc.) """
|
class (it doesn't exist, it isn't a class, etc.) """
|
||||||
|
|
||||||
ns = ns or "Gtk"
|
|
||||||
self.validate_ns(ns)
|
self.validate_ns(ns)
|
||||||
|
|
||||||
type = self.get_type(name, ns)
|
type = self.get_type(name, ns)
|
||||||
|
|
||||||
|
ns = ns or "Gtk"
|
||||||
|
|
||||||
if type is None:
|
if type is None:
|
||||||
raise CompileError(
|
raise CompileError(
|
||||||
f"Namespace {ns} does not contain a type called {name}",
|
f"Namespace {ns} does not contain a type called {name}",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue