summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <ben.c.schubert@gmail.com>2019-07-02 15:31:06 +0100
committerDaniel Silverstone <daniel.silverstone@codethink.co.uk>2019-07-15 07:40:32 +0000
commit802c215add66ce7c6e4933b01c0fcfd7aa7a1612 (patch)
tree4e397fe667f940e98399c4393e48e129062cf49a
parent7953631b460468740d57f7f3d62a8fa8691bfb8e (diff)
downloadbuildstream-802c215add66ce7c6e4933b01c0fcfd7aa7a1612.tar.gz
_yaml: move 'composite_dict' to 'MappingNode' as '_composite'
-rw-r--r--src/buildstream/_yaml.pxd1
-rw-r--r--src/buildstream/_yaml.pyx31
2 files changed, 14 insertions, 18 deletions
diff --git a/src/buildstream/_yaml.pxd b/src/buildstream/_yaml.pxd
index ced07c547..e470a7d50 100644
--- a/src/buildstream/_yaml.pxd
+++ b/src/buildstream/_yaml.pxd
@@ -51,6 +51,7 @@ cdef class MappingNode(Node):
cpdef void safe_del(self, str key)
cpdef object values(self)
+ cdef void _composite(self, MappingNode target, list path=*) except *
cdef void _compose_on_composite_dict(self, MappingNode target)
cdef void _compose_on_list(self, SequenceNode target)
cpdef list _find(self, Node target)
diff --git a/src/buildstream/_yaml.pyx b/src/buildstream/_yaml.pyx
index fd2e3fb55..3dc79b0f3 100644
--- a/src/buildstream/_yaml.pyx
+++ b/src/buildstream/_yaml.pyx
@@ -336,6 +336,15 @@ cdef class MappingNode(Node):
return {key: value.strip_node_info() for key, value in self.value.items()}
+ cdef void _composite(self, MappingNode target, list path=None) except *:
+ cdef str key
+ cdef Node value
+
+ for key, value in self.value.items():
+ path.append(key)
+ value._compose_on(key, target, path)
+ path.pop()
+
cdef void _compose_on(self, str key, MappingNode target, list path) except *:
cdef Node target_value
@@ -365,7 +374,7 @@ cdef class MappingNode(Node):
# the same provenance as the incoming dict
target.value[key] = MappingNode({}, self.file_index, self.line, self.column)
- composite_dict(target.value[key], self, path)
+ self._composite(target.value[key], path)
cdef void _compose_on_list(self, SequenceNode target):
cdef SequenceNode clobber = self.value.get("(=)")
@@ -1190,7 +1199,7 @@ cdef Node __new_node_from_list(list inlist):
return SequenceNode(ret, _SYNTHETIC_FILE_INDEX, 0, next_synthetic_counter())
-# composite_dict()
+# composite()
#
# Compose one mapping node onto another
#
@@ -1199,28 +1208,14 @@ cdef Node __new_node_from_list(list inlist):
# source (Node): The source to compose from
# path (list): The path to the current composition node
#
-# Raises: CompositeError
-#
-cpdef void composite_dict(MappingNode target, MappingNode source, list path=None) except *:
- cdef str k
- cdef Node v, target_value
-
- if path is None:
- path = []
- for k, v in source.value.items():
- path.append(k)
- v._compose_on(k, target, path)
- path.pop()
-
-
-# Like composite_dict(), but raises an all purpose LoadError for convenience
+# Raises: LoadError
#
cpdef void composite(MappingNode target, MappingNode source) except *:
assert type(source.value) is dict
assert type(target.value) is dict
try:
- composite_dict(target, source)
+ source._composite(target, [])
except CompositeError as e:
source_provenance = node_get_provenance(source)
error_prefix = ""