[webkit-reviews] review denied: [Bug 51311] SegmentedString should provide column position : [Attachment 76962] Proposed Patch.
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Tue Dec 21 00:47:54 PST 2010
Adam Barth <abarth at webkit.org> has denied Peter Rybin <peter.rybin at gmail.com>'s
request for review:
Bug 51311: SegmentedString should provide column position
https://bugs.webkit.org/show_bug.cgi?id=51311
Attachment 76962: Proposed Patch.
https://bugs.webkit.org/attachment.cgi?id=76962&action=review
------- Additional Comments from Adam Barth <abarth at webkit.org>
View in context: https://bugs.webkit.org/attachment.cgi?id=76962&action=review
> WebCore/html/parser/HTMLDocumentParser.cpp:82
> - , m_treeBuilder(HTMLTreeBuilder::create(m_tokenizer.get(), document,
reportErrors, usePreHTML5ParserQuirks(document)))
> + , m_treeBuilder(HTMLTreeBuilder::create(this, m_tokenizer.get(),
document, reportErrors, usePreHTML5ParserQuirks(document)))
Hum... I'm not sure we want to teach the tree builder about the document
parser...
> WebCore/html/parser/HTMLInputStream.h:140
> + // Generated script part inherits current position.
Comments should be complete sentences.
> WebCore/html/parser/HTMLTreeBuilder.cpp:2783
> - TextPosition0 position =
TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(m_tokenizer->lineNumber())
, WTF::ZeroBasedNumber::base());
> + ScriptableDocumentParser* parserUpcast = m_parser;
> + TextPosition0 position = parserUpcast->textPosition();
Why do we need to do this? HTMLDocumentParser inherits from
ScriptableDocumentParser... Rather than pass in the whole HTMLDocumentParser,
we should just pass in the textPosition.
> WebCore/html/parser/HTMLTreeBuilder.h:248
> + HTMLDocumentParser* m_parser;
What's the point of storing this object in a member variable if you only ever
use it in the constructor?
> WebCore/platform/text/SegmentedString.cpp:56
> + m_lineBeginCharactersConsumedValue =
other.m_lineBeginCharactersConsumedValue;
m_lineBeginCharactersConsumedValue is a mouthful. What does this variable
represent?
> WebCore/platform/text/SegmentedString.cpp:248
> + ++lineNumber;
> + ++m_currentLine;
Four-space indent please.
> WebCore/platform/text/SegmentedString.cpp:249
> + m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();
I see. This probably should be called
m_numberOfCharactersConsumedPriorToCurrentLine to match
m_numberOfCharactersConsumedPriorToCurrentString.
> WebCore/platform/text/SegmentedString.cpp:262
> +WTF::ZeroBasedNumber SegmentedString::currentColumn() const
So, this function is moderately slow. Might be worth mentioning in the header.
> WebCore/platform/text/SegmentedString.cpp:272
> +void SegmentedString::setCurrentPosition(WTF::ZeroBasedNumber line,
WTF::ZeroBasedNumber column, int offset)
> +{
> + m_currentLine = line.zeroBasedInt();
> + m_lineBeginCharactersConsumedValue = numberOfCharactersConsumedSlow() +
offset - column.zeroBasedInt();
> +}
This offset business is pretty mysterious. Can we use a more descriptive
variable name?
> WebCore/platform/text/SegmentedString.h:167
> + if (newLineFlag)
> + m_lineBeginCharactersConsumedValue =
numberOfCharactersConsumed();
Isn't the whole point of this codepath to avoid branching on newLineFlag?
> WebCore/platform/text/SegmentedString.h:193
> - lineNumber += (*m_currentString.m_current == '\n') &
m_currentString.doNotExcludeLineNumbers();
> + int newLineFlag = (*m_currentString.m_current == '\n') &
m_currentString.doNotExcludeLineNumbers();
> + lineNumber += newLineFlag;
> + m_currentLine += newLineFlag;
> + if (newLineFlag)
> + m_lineBeginCharactersConsumedValue =
numberOfCharactersConsumed() + 1;
Same here. These branches are bad for performance. Did you benchmark this
patch using the html-parser benchmark in WebCore/benchmarks ?
More information about the webkit-reviews
mailing list