diff options
author | Kingsley Yung <kingsley@kkoyung.dev> | 2025-05-29 01:58:33 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-28 17:58:33 +0000 |
commit | be7efc94a384dff54556e461710d27661219dd62 (patch) | |
tree | 25a908f0a0ee7ec6a1191e0bbbb034203f61c01b /python/servo/platform/build_target.py | |
parent | 398764a928261632a498479ab40ab9f125817cd3 (diff) | |
download | servo-be7efc94a384dff54556e461710d27661219dd62.tar.gz servo-be7efc94a384dff54556e461710d27661219dd62.zip |
Refactoring `HTMLOptionElement::Text` into iterative style (#37167)
The original implementation of `HTMLOptionElement::Text` is recursive,
and the program may run out of stack space for a sufficiently large
number of iterations. The patch switches to an iterative implementation,
with `TreeIterator`.
Note that, instead of the usual `while let Some(node) = iterator.next()`
approach, we use `while let Some(node) = iterator.peek()` with the newly
added `TreeIterator::peek` function. This is because the choice of the
next node depends on some checks performed inside the `while` block,
whereas the `next` function determines the next node before entering the
block.
Moreover, the `TreeIterator::peek` function is added, instead of
wrapping the iterator into `Peekable`. This is because we will lose
access to the `TreeIterator::next_skipping_children` function if we wrap
it into `Peekable`.
Testing: This refactoring has to pass the existing tests.
Fixes: #36959
Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
Diffstat (limited to 'python/servo/platform/build_target.py')
0 files changed, 0 insertions, 0 deletions