From 47ec0867a897a54efd20e1a17a29309a2aa7ea24 Mon Sep 17 00:00:00 2001 From: iska Date: Tue, 25 Apr 2017 00:12:39 +0200 Subject: [PATCH] Improve reverseObjectEnumerator usage while parsing HTML Do not use the `allObjects` call on the reverse enumerators in the Parser and the List of Active Formatting Elements to prevent allocating a new array of the unenumerated objects. This should reduce memory consumption while parsing, see issue #10 --- Sources/HTMLListOfActiveFormattingElements.m | 2 +- Sources/HTMLParser.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/HTMLListOfActiveFormattingElements.m b/Sources/HTMLListOfActiveFormattingElements.m index d0fb8b0..665ce8f 100644 --- a/Sources/HTMLListOfActiveFormattingElements.m +++ b/Sources/HTMLListOfActiveFormattingElements.m @@ -46,7 +46,7 @@ - (void)addElement:(HTMLElement *)element { NSUInteger existing = 0; - for (HTMLElement *node in _list.reverseObjectEnumerator.allObjects) { + for (HTMLElement *node in _list.reverseObjectEnumerator) { if ([node isEqual:[HTMLMarker marker]]) { break; } diff --git a/Sources/HTMLParser.m b/Sources/HTMLParser.m index 74844bc..3137081 100644 --- a/Sources/HTMLParser.m +++ b/Sources/HTMLParser.m @@ -1272,7 +1272,7 @@ @"dd": @[@"dd", @"dt"], @"dt": @[@"dd", @"dt"]}; - for (HTMLElement *node in _stackOfOpenElements.reverseObjectEnumerator.allObjects) { + for (HTMLElement *node in _stackOfOpenElements.reverseObjectEnumerator) { if ([map[tagName] containsObject:node.tagName]) { [self generateImpliedEndTagsExceptForElement:node.tagName]; if (![self.currentNode.tagName isEqualToString:node.tagName]) { @@ -1590,7 +1590,7 @@ - (void)processAnyOtherEndTagTokenInBody:(HTMLTagToken *)token { - for (HTMLElement *node in _stackOfOpenElements.reverseObjectEnumerator.allObjects) { + for (HTMLElement *node in _stackOfOpenElements.reverseObjectEnumerator) { if ([node.tagName isEqualToString:token.tagName]) { [self generateImpliedEndTagsExceptForElement:token.tagName]; if (![node.tagName isEqualToString:self.currentNode.tagName]) {