summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2012-06-28 15:13:08 -0400
committerJasper St. Pierre <jstpierre@mecheye.net>2012-06-28 17:33:57 -0400
commit393b242f1ceeef1cc6c974116b4c41578f99931a (patch)
treed5f46eef819f06ea3c400b237424f5eb5155aa0a
parente496260d95c8a7ec680b73afbc1581afc1a91857 (diff)
downloadgobject-introspection-393b242f1ceeef1cc6c974116b4c41578f99931a.tar.gz
scanner: Don't use an O(N) lookup when we already have a hashmap
This is a general code cleanup.
-rw-r--r--giscanner/ast.py1
-rw-r--r--giscanner/transformer.py11
2 files changed, 5 insertions, 7 deletions
diff --git a/giscanner/ast.py b/giscanner/ast.py
index cab38070..91c65597 100644
--- a/giscanner/ast.py
+++ b/giscanner/ast.py
@@ -822,6 +822,7 @@ class Compound(Node, Registered):
def add_gtype(self, gtype_name, get_type):
self.gtype_name = gtype_name
self.get_type = get_type
+ self.namespace.type_names[gtype_name] = self
def _walk(self, callback, chain):
for ctor in self.constructors:
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index cb785e73..834fbac5 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -836,13 +836,10 @@ Note that type resolution may not succeed."""
def _resolve_type_from_gtype_name(self, typeval):
assert typeval.gtype_name is not None
for ns in self._iter_namespaces():
- for node in ns.itervalues():
- if not (isinstance(node, (ast.Class, ast.Interface))
- or (isinstance(node, ast.Registered) and node.get_type is not None)):
- continue
- if node.gtype_name == typeval.gtype_name:
- typeval.target_giname = '%s.%s' % (ns.name, node.name)
- return True
+ node = ns.type_names.get(typeval.gtype_name, None)
+ if node is not None:
+ typeval.target_giname = '%s.%s' % (ns.name, node.name)
+ return True
return False
def resolve_type(self, typeval):