This is an automated email from the ASF dual-hosted git repository. tvb pushed a commit to branch tristan/partial-variables-manual-string-join in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 310b29486b2b8f0bd20ce3454f4c2beadcdeb308 Author: Tristan van Berkom <[email protected]> AuthorDate: Wed Jul 1 19:56:47 2020 +0900 _variables.pyx: Use a linked list for ValuePart instead of a list. --- src/buildstream/_variables.pyx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/buildstream/_variables.pyx b/src/buildstream/_variables.pyx index 9730948..2a01b1c 100644 --- a/src/buildstream/_variables.pyx +++ b/src/buildstream/_variables.pyx @@ -437,10 +437,12 @@ cdef class ValueLink: cdef class ValuePart: cdef str text cdef bint is_variable + cdef ValuePart next_part cdef init(self, str text, bint is_variable): self.text = text self.is_variable = is_variable + self.next_part = None cdef EMPTY_SET = set() @@ -490,15 +492,17 @@ cdef class Value: cdef list parts = [] if self._resolved is None: - for part_object in self._value_class.parts: - part = <ValuePart> part_object + part = self._value_class.parts + while part: if part.is_variable: part_var = <Value> values[part.text] parts.append(part_var._resolved) else: parts.append(part.text) + part = part.next_part + self._resolved = "".join(parts) return self._resolved @@ -573,7 +577,7 @@ cdef class ValueClass: # Public # cdef set variable_names # A set of variable names - cdef list parts # A list of ValuePart objects + cdef ValuePart parts # The linked list of ValuePart objects # init(): # @@ -584,7 +588,7 @@ cdef class ValueClass: # cdef init(self, str string): self.variable_names = set() - self.parts = [] + self.parts = None self._parse_string(string) # _parse_string() @@ -619,6 +623,7 @@ cdef class ValueClass: cdef Py_ssize_t split_idx = 0 cdef bint is_variable cdef ValuePart part + cdef ValuePart last_part = None # # Collect the weird regex return value into something @@ -643,7 +648,11 @@ cdef class ValueClass: part = ValuePart() part.init(split, is_variable) - self.parts.append(part) + if last_part: + last_part.next_part = part + else: + self.parts = part + last_part = part split_idx += 1
