summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <contact@benschubert.me>2019-06-05 22:14:44 +0100
committerBenjamin Schubert <contact@benschubert.me>2019-06-07 17:28:11 +0000
commite58e74ff100ad649b1025db65e11cd20ebeb4e2a (patch)
tree7b849f54f4a11d5a9efc307bdf031479e9d6ff51
parent42f2ceceafc09e53f6c6a81bd8bb237a2e8ff0f6 (diff)
downloadbuildstream-e58e74ff100ad649b1025db65e11cd20ebeb4e2a.tar.gz
_loader/types: Use an accumulator to speed up _extract_depends_from_node
We need to call this function three times in a row then concatenate the three results. Using an accumulator is slightly faster.
-rw-r--r--src/buildstream/_loader/types.pyx23
1 files changed, 8 insertions, 15 deletions
diff --git a/src/buildstream/_loader/types.pyx b/src/buildstream/_loader/types.pyx
index 7f7c968e8..59352d68d 100644
--- a/src/buildstream/_loader/types.pyx
+++ b/src/buildstream/_loader/types.pyx
@@ -135,13 +135,10 @@ cdef class Dependency:
# node (Node): A YAML loaded dictionary
# key (str): the key on the Node corresponding to the dependency type
# default_dep_type (str): type to give to the dependency
+# acc (list): a list in which to add the loaded dependencies
#
-# Returns:
-# (list): a list of Dependency objects
-#
-cdef list _extract_depends_from_node(_yaml.Node node, str key, str default_dep_type):
+cdef void _extract_depends_from_node(_yaml.Node node, str key, str default_dep_type, list acc) except *:
cdef list depends = <list> _yaml.node_get(node, list, key, None, [])
- cdef list output_deps = []
cdef int index
cdef _yaml.ProvenanceInformation dep_provenance
@@ -150,13 +147,11 @@ cdef list _extract_depends_from_node(_yaml.Node node, str key, str default_dep_t
# stripping provenance and have proper nodes for str elements
dep_provenance = <_yaml.ProvenanceInformation> _yaml.node_get_provenance(node, key=key, indices=[index])
dependency = Dependency(dep, dep_provenance, default_dep_type=default_dep_type)
- output_deps.append(dependency)
+ acc.append(dependency)
# Now delete the field, we dont want it anymore
_yaml.node_del(node, key, safe=True)
- return output_deps
-
# extract_depends_from_node():
#
@@ -173,10 +168,8 @@ cdef list _extract_depends_from_node(_yaml.Node node, str key, str default_dep_t
# (list): a list of Dependency objects
#
def extract_depends_from_node(_yaml.Node node):
- cdef list build_depends = <list> _extract_depends_from_node(
- node, <str> Symbol.BUILD_DEPENDS, <str> Symbol.BUILD)
- cdef list runtime_depends = <list> _extract_depends_from_node(
- node, <str> Symbol.RUNTIME_DEPENDS, <str> Symbol.RUNTIME)
- cdef list depends = <list> _extract_depends_from_node(
- node, <str> Symbol.DEPENDS, None)
- return build_depends + runtime_depends + depends
+ cdef list acc = []
+ _extract_depends_from_node(node, <str> Symbol.BUILD_DEPENDS, <str> Symbol.BUILD, acc)
+ _extract_depends_from_node(node, <str> Symbol.RUNTIME_DEPENDS, <str> Symbol.RUNTIME, acc)
+ _extract_depends_from_node(node, <str> Symbol.DEPENDS, None, acc)
+ return acc