Changeset 38327 in webkit


Ignore:
Timestamp:
Nov 11, 2008 5:53:37 PM (15 years ago)
Author:
eric@webkit.org
Message:

Reviewed by Antti Koivisto and Sam Weinig.

Clean up HTMLTokenizer a litle
https://bugs.webkit.org/show_bug.cgi?id=22188

Rename pendingScripts to m_pendingScripts
Rename scriptNode to m_scriptNode make the type specific
Rename pendingSrc to m_pendingSrc
Rename currentPrependingSrc to m_currentPrependingSrc
Rename noMoreData to m_noMoreData and cBuffer to m_cBuffer
Remove long-since-dead kdDebug and qDebug calls
Rename brokenComments to m_brokenComments
Remove HTMLTokenizer includes and document the rest
Rename src to m_src
Rename parser to m_parser and make it an OwnPtr
Rename inWrite to m_inWrite and jsProxy to scriptController
Rename brokenServer to m_brokenServer
Rename buffer to m_buffer and dest to m_dest
Rename size to m_bufferSize
Rename attrName to m_attrName
Rename searchStopper to m_searchStopper and searchStopperLen to m_searchStopperLen
Rename scriptCode* to m_scriptCode* and change scriptCodeMax to m_scriptCodeCapacity
Rename scriptStartLineno to m_currentScriptTagStartLineNumber and tagStartLineno to m_currentTagStartLineNumber
Rename scriptSrc to m_scriptTagSrcAttrValue and scriptSrcCharset to m_scriptTagCharsetAttrValue -- a bit unwieldy, but more precise
Rename flat to selfClosingTag
Rename currToken to m_currentToken

  • css/CSSParser.cpp:
  • dom/XMLTokenizer.cpp:
  • dom/XMLTokenizerLibxml2.cpp:
  • html/HTMLDocument.cpp:
  • html/HTMLElement.cpp:
  • html/HTMLFormControlElement.cpp:
  • html/HTMLParser.h:
  • html/HTMLTokenizer.cpp: (WebCore::Token::addAttribute): (WebCore::HTMLTokenizer::HTMLTokenizer): (WebCore::HTMLTokenizer::reset): (WebCore::HTMLTokenizer::begin): (WebCore::HTMLTokenizer::processListing): (WebCore::HTMLTokenizer::parseSpecial): (WebCore::HTMLTokenizer::scriptHandler): (WebCore::HTMLTokenizer::scriptExecution): (WebCore::HTMLTokenizer::parseComment): (WebCore::HTMLTokenizer::parseServer): (WebCore::HTMLTokenizer::parseProcessingInstruction): (WebCore::HTMLTokenizer::parseText): (WebCore::HTMLTokenizer::parseEntity): (WebCore::HTMLTokenizer::parseTag): (WebCore::HTMLTokenizer::write): (WebCore::HTMLTokenizer::processingData): (WebCore::HTMLTokenizer::end): (WebCore::HTMLTokenizer::finish): (WebCore::HTMLTokenizer::processToken): (WebCore::HTMLTokenizer::processDoctypeToken): (WebCore::HTMLTokenizer::~HTMLTokenizer): (WebCore::HTMLTokenizer::enlargeBuffer): (WebCore::HTMLTokenizer::enlargeScriptBuffer): (WebCore::HTMLTokenizer::notifyFinished): (WebCore::HTMLTokenizer::setSrc):
  • html/HTMLTokenizer.h: (WebCore::Token::Token): (WebCore::Token::reset): (WebCore::HTMLTokenizer::processingContentWrittenByScript): (WebCore::HTMLTokenizer::htmlParser): (WebCore::HTMLTokenizer::checkBuffer): (WebCore::HTMLTokenizer::checkScriptBuffer):
  • html/HTMLViewSourceDocument.h:
  • rendering/RenderBlock.cpp: (WebCore::RenderBlock::leftRelOffset): (WebCore::RenderBlock::rightRelOffset): (WebCore::RenderBlock::lineWidth):
  • xml/XSLTProcessor.cpp:
Location:
trunk/WebCore
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r38321 r38327  
     12008-11-11  Eric Seidel  <eric@webkit.org>
     2
     3        Reviewed by Antti Koivisto and Sam Weinig.
     4
     5        Clean up HTMLTokenizer a litle
     6        https://bugs.webkit.org/show_bug.cgi?id=22188
     7
     8        Rename pendingScripts to m_pendingScripts
     9        Rename scriptNode to m_scriptNode make the type specific
     10        Rename pendingSrc to m_pendingSrc
     11        Rename currentPrependingSrc to m_currentPrependingSrc
     12        Rename noMoreData to m_noMoreData and cBuffer to m_cBuffer
     13        Remove long-since-dead kdDebug and qDebug calls
     14        Rename brokenComments to m_brokenComments
     15        Remove HTMLTokenizer includes and document the rest
     16        Rename src to m_src
     17        Rename parser to m_parser and make it an OwnPtr
     18        Rename inWrite to m_inWrite and jsProxy to scriptController
     19        Rename brokenServer to m_brokenServer
     20        Rename buffer to m_buffer and dest to m_dest
     21        Rename size to m_bufferSize
     22        Rename attrName to m_attrName
     23        Rename searchStopper to m_searchStopper and searchStopperLen to m_searchStopperLen
     24        Rename scriptCode* to m_scriptCode* and change scriptCodeMax to m_scriptCodeCapacity
     25        Rename scriptStartLineno to m_currentScriptTagStartLineNumber and tagStartLineno to m_currentTagStartLineNumber
     26        Rename scriptSrc to m_scriptTagSrcAttrValue and scriptSrcCharset to m_scriptTagCharsetAttrValue -- a bit unwieldy, but more precise
     27        Rename flat to selfClosingTag
     28        Rename currToken to m_currentToken
     29
     30        * css/CSSParser.cpp:
     31        * dom/XMLTokenizer.cpp:
     32        * dom/XMLTokenizerLibxml2.cpp:
     33        * html/HTMLDocument.cpp:
     34        * html/HTMLElement.cpp:
     35        * html/HTMLFormControlElement.cpp:
     36        * html/HTMLParser.h:
     37        * html/HTMLTokenizer.cpp:
     38        (WebCore::Token::addAttribute):
     39        (WebCore::HTMLTokenizer::HTMLTokenizer):
     40        (WebCore::HTMLTokenizer::reset):
     41        (WebCore::HTMLTokenizer::begin):
     42        (WebCore::HTMLTokenizer::processListing):
     43        (WebCore::HTMLTokenizer::parseSpecial):
     44        (WebCore::HTMLTokenizer::scriptHandler):
     45        (WebCore::HTMLTokenizer::scriptExecution):
     46        (WebCore::HTMLTokenizer::parseComment):
     47        (WebCore::HTMLTokenizer::parseServer):
     48        (WebCore::HTMLTokenizer::parseProcessingInstruction):
     49        (WebCore::HTMLTokenizer::parseText):
     50        (WebCore::HTMLTokenizer::parseEntity):
     51        (WebCore::HTMLTokenizer::parseTag):
     52        (WebCore::HTMLTokenizer::write):
     53        (WebCore::HTMLTokenizer::processingData):
     54        (WebCore::HTMLTokenizer::end):
     55        (WebCore::HTMLTokenizer::finish):
     56        (WebCore::HTMLTokenizer::processToken):
     57        (WebCore::HTMLTokenizer::processDoctypeToken):
     58        (WebCore::HTMLTokenizer::~HTMLTokenizer):
     59        (WebCore::HTMLTokenizer::enlargeBuffer):
     60        (WebCore::HTMLTokenizer::enlargeScriptBuffer):
     61        (WebCore::HTMLTokenizer::notifyFinished):
     62        (WebCore::HTMLTokenizer::setSrc):
     63        * html/HTMLTokenizer.h:
     64        (WebCore::Token::Token):
     65        (WebCore::Token::reset):
     66        (WebCore::HTMLTokenizer::processingContentWrittenByScript):
     67        (WebCore::HTMLTokenizer::htmlParser):
     68        (WebCore::HTMLTokenizer::checkBuffer):
     69        (WebCore::HTMLTokenizer::checkScriptBuffer):
     70        * html/HTMLViewSourceDocument.h:
     71        * rendering/RenderBlock.cpp:
     72        (WebCore::RenderBlock::leftRelOffset):
     73        (WebCore::RenderBlock::rightRelOffset):
     74        (WebCore::RenderBlock::lineWidth):
     75        * xml/XSLTProcessor.cpp:
     76
    1772008-11-11  Sam Weinig  <sam@webkit.org>
    278
  • trunk/WebCore/css/CSSParser.cpp

    r38117 r38327  
    41394139}
    41404140
    4141 #ifdef CSS_DEBUG
    4142 
    4143 static inline int yyerror(const char *str)
    4144 {
    4145     kdDebug(6080) << "CSS parse error " << str << endl;
    4146     return 1;
    4147 }
    4148 
    4149 #else
    4150 
    41514141static inline int yyerror(const char*) { return 1; }
    4152 
    4153 #endif
    41544142
    41554143#define END_TOKEN 0
  • trunk/WebCore/dom/XMLTokenizer.cpp

    r37061 r38327  
    4141#include "HTMLScriptElement.h"
    4242#include "HTMLStyleElement.h"
    43 #include "HTMLTokenizer.h"
    4443#include "ScriptController.h"
    4544#include "ProcessingInstruction.h"
  • trunk/WebCore/dom/XMLTokenizerLibxml2.cpp

    r38094 r38327  
    3939#include "HTMLLinkElement.h"
    4040#include "HTMLStyleElement.h"
    41 #include "HTMLTokenizer.h"
     41#include "HTMLTokenizer.h" // for decodeNamedEntity
    4242#include "ScriptController.h"
    4343#include "ProcessingInstruction.h"
  • trunk/WebCore/html/HTMLDocument.cpp

    r34574 r38327  
    6767#include "FrameView.h"
    6868#include "HTMLBodyElement.h"
    69 #include "HTMLElement.h"
    7069#include "HTMLElementFactory.h"
    7170#include "HTMLNames.h"
  • trunk/WebCore/html/HTMLElement.cpp

    r38207 r38327  
    3737#include "HTMLFormElement.h"
    3838#include "HTMLNames.h"
    39 #include "HTMLTokenizer.h"
     39#include "HTMLTokenizer.h" // parseHTMLDocumentFragment
    4040#include "RenderWordBreak.h"
    4141#include "Settings.h"
  • trunk/WebCore/html/HTMLFormControlElement.cpp

    r38094 r38327  
    3636#include "HTMLTokenizer.h"
    3737#include "RenderTheme.h"
    38 #include "Tokenizer.h"
    3938
    4039namespace WebCore {
  • trunk/WebCore/html/HTMLParser.cpp

    r38207 r38327  
    225225            // split large blocks of text to nodes of manageable size
    226226            n = Text::createWithLengthLimit(document, text, charsLeft);
    227             if (!insertNode(n.get(), t->flat))
     227            if (!insertNode(n.get(), t->selfClosingTag))
    228228                return 0;
    229229        }
     
    255255    }
    256256
    257     if (!insertNode(n.get(), t->flat)) {
     257    if (!insertNode(n.get(), t->selfClosingTag)) {
    258258        // we couldn't insert the node
    259259
     
    722722{
    723723    RefPtr<Node> n = handleIsindex(t);
    724     if (!inBody) {
     724    if (!inBody)
    725725        m_isindexElement = n.release();
    726     } else {
    727         t->flat = true;
     726    else {
     727        t->selfClosingTag = true;
    728728        result = n.release();
    729729    }
  • trunk/WebCore/html/HTMLParser.h

    r34507 r38327  
    4040class HTMLMapElement;
    4141class Node;
    42 class Token;
    4342
    4443struct HTMLStackElem;
     44struct Token;
    4545
    4646/**
  • trunk/WebCore/html/HTMLTokenizer.cpp

    r38094 r38327  
    132132}
    133133
    134 inline void Token::addAttribute(Document* doc, AtomicString& attrName, const AtomicString& v, bool viewSourceMode)
     134inline void Token::addAttribute(Document* doc, AtomicString& attrName, const AtomicString& attributeValue, bool viewSourceMode)
    135135{
    136136    if (!attrName.isEmpty()) {
    137137        ASSERT(!attrName.contains('/'));
    138         RefPtr<MappedAttribute> a = MappedAttribute::create(attrName, v);
     138        RefPtr<MappedAttribute> a = MappedAttribute::create(attrName, attributeValue);
    139139        if (!attrs) {
    140140            attrs = NamedMappedAttrMap::create();
     
    151151HTMLTokenizer::HTMLTokenizer(HTMLDocument* doc, bool reportErrors)
    152152    : Tokenizer()
    153     , buffer(0)
    154     , scriptCode(0)
    155     , scriptCodeSize(0)
    156     , scriptCodeMaxSize(0)
    157     , scriptCodeResync(0)
     153    , m_buffer(0)
     154    , m_scriptCode(0)
     155    , m_scriptCodeSize(0)
     156    , m_scriptCodeCapacity(0)
     157    , m_scriptCodeResync(0)
    158158    , m_executingScript(0)
    159159    , m_requestingScript(false)
     
    161161    , m_timer(this, &HTMLTokenizer::timerFired)
    162162    , m_doc(doc)
    163     , parser(new HTMLParser(doc, reportErrors))
    164     , inWrite(false)
     163    , m_parser(new HTMLParser(doc, reportErrors))
     164    , m_inWrite(false)
    165165    , m_fragment(false)
    166166{
     
    170170HTMLTokenizer::HTMLTokenizer(HTMLViewSourceDocument* doc)
    171171    : Tokenizer(true)
    172     , buffer(0)
    173     , scriptCode(0)
    174     , scriptCodeSize(0)
    175     , scriptCodeMaxSize(0)
    176     , scriptCodeResync(0)
     172    , m_buffer(0)
     173    , m_scriptCode(0)
     174    , m_scriptCodeSize(0)
     175    , m_scriptCodeCapacity(0)
     176    , m_scriptCodeResync(0)
    177177    , m_executingScript(0)
    178178    , m_requestingScript(false)
     
    180180    , m_timer(this, &HTMLTokenizer::timerFired)
    181181    , m_doc(doc)
    182     , parser(0)
    183     , inWrite(false)
     182    , m_parser(0)
     183    , m_inWrite(false)
    184184    , m_fragment(false)
    185185{
     
    188188
    189189HTMLTokenizer::HTMLTokenizer(DocumentFragment* frag)
    190     : buffer(0)
    191     , scriptCode(0)
    192     , scriptCodeSize(0)
    193     , scriptCodeMaxSize(0)
    194     , scriptCodeResync(0)
     190    : m_buffer(0)
     191    , m_scriptCode(0)
     192    , m_scriptCodeSize(0)
     193    , m_scriptCodeCapacity(0)
     194    , m_scriptCodeResync(0)
    195195    , m_executingScript(0)
    196196    , m_requestingScript(false)
     
    198198    , m_timer(this, &HTMLTokenizer::timerFired)
    199199    , m_doc(frag->document())
    200     , inWrite(false)
     200    , m_parser(new HTMLParser(frag))
     201    , m_inWrite(false)
    201202    , m_fragment(true)
    202203{
    203     parser = new HTMLParser(frag);
    204204    begin();
    205205}
     
    209209    ASSERT(m_executingScript == 0);
    210210
    211     while (!pendingScripts.isEmpty()) {
    212         CachedScript *cs = pendingScripts.first().get();
    213         pendingScripts.removeFirst();
     211    while (!m_pendingScripts.isEmpty()) {
     212        CachedScript* cs = m_pendingScripts.first().get();
     213        m_pendingScripts.removeFirst();
    214214        ASSERT(cache()->disabled() || cs->accessCount() > 0);
    215215        cs->removeClient(this);
    216216    }
    217    
    218     fastFree(buffer);
    219     buffer = dest = 0;
    220     size = 0;
    221 
    222     fastFree(scriptCode);
    223     scriptCode = 0;
    224     scriptCodeSize = scriptCodeMaxSize = scriptCodeResync = 0;
     217
     218    fastFree(m_buffer);
     219    m_buffer = m_dest = 0;
     220    m_bufferSize = 0;
     221
     222    fastFree(m_scriptCode);
     223    m_scriptCode = 0;
     224    m_scriptCodeSize = m_scriptCodeCapacity = m_scriptCodeResync = 0;
    225225
    226226    m_timer.stop();
     
    228228    m_state.setForceSynchronous(false);
    229229
    230     currToken.reset();
     230    m_currentToken.reset();
    231231    m_doctypeToken.reset();
    232232    m_doctypeSearchCount = 0;
     
    241241    m_state.setLoadingExtScript(false);
    242242    reset();
    243     size = 254;
    244     buffer = static_cast<UChar*>(fastMalloc(sizeof(UChar) * 254));
    245     dest = buffer;
     243    m_bufferSize = 254;
     244    m_buffer = static_cast<UChar*>(fastMalloc(sizeof(UChar) * 254));
     245    m_dest = m_buffer;
    246246    tquote = NoQuote;
    247247    searchCount = 0;
    248248    m_state.setEntityState(NoEntity);
    249     scriptSrc = String();
    250     pendingSrc.clear();
    251     currentPrependingSrc = 0;
    252     noMoreData = false;
    253     brokenComments = false;
    254     brokenServer = false;
     249    m_scriptTagSrcAttrValue = String();
     250    m_pendingSrc.clear();
     251    m_currentPrependingSrc = 0;
     252    m_noMoreData = false;
     253    m_brokenComments = false;
     254    m_brokenServer = false;
    255255    m_lineNumber = 0;
    256     scriptStartLineno = 0;
    257     tagStartLineno = 0;
     256    m_currentScriptTagStartLineNumber = 0;
     257    m_currentTagStartLineNumber = 0;
    258258    m_state.setForceSynchronous(false);
    259259
     
    295295                state.setDiscardLF(false); // We have discarded 1 LF
    296296            else
    297                 *dest++ = '\n';
     297                *m_dest++ = '\n';
    298298
    299299            /* Check for MS-DOS CRLF sequence */
     
    304304        } else {
    305305            state.setDiscardLF(false);
    306             *dest++ = *list;
     306            *m_dest++ = *list;
    307307            list.advance();
    308308        }
     
    312312}
    313313
    314 HTMLTokenizer::State HTMLTokenizer::parseSpecial(SegmentedString &src, State state)
     314HTMLTokenizer::State HTMLTokenizer::parseSpecial(SegmentedString& src, State state)
    315315{
    316316    ASSERT(state.inTextArea() || state.inTitle() || state.inIFrame() || !state.hasEntityState());
    317317    ASSERT(!state.hasTagState());
    318318    ASSERT(state.inXmp() + state.inTextArea() + state.inTitle() + state.inStyle() + state.inScript() + state.inIFrame() == 1 );
    319     if (state.inScript() && !scriptStartLineno)
    320         scriptStartLineno = m_lineNumber + 1; // Script line numbers are 1 based.
     319    if (state.inScript() && !m_currentScriptTagStartLineNumber)
     320        m_currentScriptTagStartLineNumber = m_lineNumber;
    321321
    322322    if (state.inComment())
     
    324324
    325325    int lastDecodedEntityPosition = -1;
    326     while ( !src.isEmpty() ) {
     326    while (!src.isEmpty()) {
    327327        checkScriptBuffer();
    328328        UChar ch = *src;
    329329
    330         if (!scriptCodeResync && !brokenComments &&
    331             !state.inXmp() && ch == '-' && scriptCodeSize >= 3 && !src.escaped() &&
    332             scriptCode[scriptCodeSize-3] == '<' && scriptCode[scriptCodeSize-2] == '!' && scriptCode[scriptCodeSize-1] == '-' &&
    333             (lastDecodedEntityPosition < scriptCodeSize - 3)) {
     330        if (!m_scriptCodeResync && !m_brokenComments &&
     331            !state.inXmp() && ch == '-' && m_scriptCodeSize >= 3 && !src.escaped() &&
     332            m_scriptCode[m_scriptCodeSize - 3] == '<' && m_scriptCode[m_scriptCodeSize - 2] == '!' && m_scriptCode[m_scriptCodeSize - 1] == '-' &&
     333            (lastDecodedEntityPosition < m_scriptCodeSize - 3)) {
    334334            state.setInComment(true);
    335335            state = parseComment(src, state);
    336336            continue;
    337337        }
    338         if (scriptCodeResync && !tquote && ch == '>') {
     338        if (m_scriptCodeResync && !tquote && ch == '>') {
    339339            src.advancePastNonNewline();
    340             scriptCodeSize = scriptCodeResync-1;
    341             scriptCodeResync = 0;
    342             scriptCode[ scriptCodeSize ] = scriptCode[ scriptCodeSize + 1 ] = 0;
     340            m_scriptCodeSize = m_scriptCodeResync - 1;
     341            m_scriptCodeResync = 0;
     342            m_scriptCode[m_scriptCodeSize] = m_scriptCode[m_scriptCodeSize + 1] = 0;
    343343            if (state.inScript())
    344344                state = scriptHandler(state);
    345345            else {
    346                 state = processListing(SegmentedString(scriptCode, scriptCodeSize), state);
     346                state = processListing(SegmentedString(m_scriptCode, m_scriptCodeSize), state);
    347347                processToken();
    348348                if (state.inStyle()) {
    349                     currToken.tagName = styleTag.localName();
    350                     currToken.beginTag = false;
     349                    m_currentToken.tagName = styleTag.localName();
     350                    m_currentToken.beginTag = false;
    351351                } else if (state.inTextArea()) {
    352                     currToken.tagName = textareaTag.localName();
    353                     currToken.beginTag = false;
     352                    m_currentToken.tagName = textareaTag.localName();
     353                    m_currentToken.beginTag = false;
    354354                } else if (state.inTitle()) {
    355                     currToken.tagName = titleTag.localName();
    356                     currToken.beginTag = false;
     355                    m_currentToken.tagName = titleTag.localName();
     356                    m_currentToken.beginTag = false;
    357357                } else if (state.inXmp()) {
    358                     currToken.tagName = xmpTag.localName();
    359                     currToken.beginTag = false;
     358                    m_currentToken.tagName = xmpTag.localName();
     359                    m_currentToken.beginTag = false;
    360360                } else if (state.inIFrame()) {
    361                     currToken.tagName = iframeTag.localName();
    362                     currToken.beginTag = false;
     361                    m_currentToken.tagName = iframeTag.localName();
     362                    m_currentToken.beginTag = false;
    363363                }
    364364                processToken();
     
    370370                state.setInIFrame(false);
    371371                tquote = NoQuote;
    372                 scriptCodeSize = scriptCodeResync = 0;
     372                m_scriptCodeSize = m_scriptCodeResync = 0;
    373373            }
    374374            return state;
    375375        }
    376376        // possible end of tagname, lets check.
    377         if (!scriptCodeResync && !state.escaped() && !src.escaped() && (ch == '>' || ch == '/' || isASCIISpace(ch)) &&
    378              scriptCodeSize >= searchStopperLen &&
    379              tagMatch(searchStopper, scriptCode + scriptCodeSize - searchStopperLen, searchStopperLen) &&
    380              (lastDecodedEntityPosition < scriptCodeSize - searchStopperLen)) {
    381             scriptCodeResync = scriptCodeSize-searchStopperLen+1;
     377        if (!m_scriptCodeResync && !state.escaped() && !src.escaped() && (ch == '>' || ch == '/' || isASCIISpace(ch)) &&
     378             m_scriptCodeSize >= m_searchStopperLength &&
     379             tagMatch(m_searchStopper, m_scriptCode + m_scriptCodeSize - m_searchStopperLength, m_searchStopperLength) &&
     380             (lastDecodedEntityPosition < m_scriptCodeSize - m_searchStopperLength)) {
     381            m_scriptCodeResync = m_scriptCodeSize-m_searchStopperLength+1;
    382382            tquote = NoQuote;
    383383            continue;
    384384        }
    385         if (scriptCodeResync && !state.escaped()) {
     385        if (m_scriptCodeResync && !state.escaped()) {
    386386            if (ch == '\"')
    387387                tquote = (tquote == NoQuote) ? DoubleQuote : ((tquote == SingleQuote) ? SingleQuote : NoQuote);
     
    392392        }
    393393        state.setEscaped(!state.escaped() && ch == '\\');
    394         if (!scriptCodeResync && (state.inTextArea() || state.inTitle() || state.inIFrame()) && !src.escaped() && ch == '&') {
    395             UChar* scriptCodeDest = scriptCode+scriptCodeSize;
     394        if (!m_scriptCodeResync && (state.inTextArea() || state.inTitle() || state.inIFrame()) && !src.escaped() && ch == '&') {
     395            UChar* scriptCodeDest = m_scriptCode + m_scriptCodeSize;
    396396            src.advancePastNonNewline();
    397397            state = parseEntity(src, scriptCodeDest, state, m_cBufferPos, true, false);
    398             if (scriptCodeDest == scriptCode + scriptCodeSize)
    399                 lastDecodedEntityPosition = scriptCodeSize;
     398            if (scriptCodeDest == m_scriptCode + m_scriptCodeSize)
     399                lastDecodedEntityPosition = m_scriptCodeSize;
    400400            else
    401                 scriptCodeSize = scriptCodeDest - scriptCode;
     401                m_scriptCodeSize = scriptCodeDest - m_scriptCode;
    402402        } else {
    403             scriptCode[scriptCodeSize++] = ch;
     403            m_scriptCode[m_scriptCodeSize++] = ch;
    404404            src.advance(m_lineNumber);
    405405        }
     
    413413    // We are inside a <script>
    414414    bool doScriptExec = false;
    415     int startLine = scriptStartLineno;
    416 
    417     // Reset scriptStartLineno to indicate that we've finished parsing the current script element
    418     scriptStartLineno = 0;
     415    int startLine = m_currentScriptTagStartLineNumber + 1; // Script line numbers are 1 based, HTMLTokenzier line numbers are 0 based
     416
     417    // Reset m_currentScriptTagStartLineNumber to indicate that we've finished parsing the current script element
     418    m_currentScriptTagStartLineNumber = 0;
    419419
    420420    // (Bugzilla 3837) Scripts following a frameset element should not execute or,
     
    425425    // don't load external scripts for standalone documents (for now)
    426426    if (!inViewSourceMode()) {
    427         if (!scriptSrc.isEmpty() && m_doc->frame()) {
     427        if (!m_scriptTagSrcAttrValue.isEmpty() && m_doc->frame()) {
    428428            // forget what we just got; load from src url instead
    429             if (!parser->skipMode() && !followingFrameset) {
     429            if (!m_parser->skipMode() && !followingFrameset) {
    430430#ifdef INSTRUMENT_LAYOUT_SCHEDULING
    431431                if (!m_doc->ownerElement())
     
    434434                // The parser might have been stopped by for example a window.close call in an earlier script.
    435435                // If so, we don't want to load scripts.
    436                 if (!m_parserStopped && (cs = m_doc->docLoader()->requestScript(scriptSrc, scriptSrcCharset)))
    437                     pendingScripts.append(cs);
     436                if (!m_parserStopped && (cs = m_doc->docLoader()->requestScript(m_scriptTagSrcAttrValue, m_scriptTagCharsetAttrValue)))
     437                    m_pendingScripts.append(cs);
    438438                else
    439                     scriptNode = 0;
     439                    m_scriptNode = 0;
    440440            } else
    441                 scriptNode = 0;
    442             scriptSrc = String();
     441                m_scriptNode = 0;
     442            m_scriptTagSrcAttrValue = String();
    443443        } else {
    444             // Parse scriptCode containing <script> info
     444            // Parse m_scriptCode containing <script> info
    445445#if USE(LOW_BANDWIDTH_DISPLAY)
    446446            if (m_doc->inLowBandwidthDisplay()) {
     
    452452            } else
    453453#endif
    454             doScriptExec = static_cast<HTMLScriptElement*>(scriptNode.get())->shouldExecuteAsJavaScript();
    455             scriptNode = 0;
    456         }
    457     }
    458 
    459     state = processListing(SegmentedString(scriptCode, scriptCodeSize), state);
     454            doScriptExec = m_scriptNode->shouldExecuteAsJavaScript();
     455            m_scriptNode = 0;
     456        }
     457    }
     458
     459    state = processListing(SegmentedString(m_scriptCode, m_scriptCodeSize), state);
    460460    RefPtr<Node> node = processToken();
    461461    String scriptString = node ? node->textContent() : "";
    462     currToken.tagName = scriptTag.localName();
    463     currToken.beginTag = false;
     462    m_currentToken.tagName = scriptTag.localName();
     463    m_currentToken.beginTag = false;
    464464    processToken();
    465465
    466466    state.setInScript(false);
    467     scriptCodeSize = scriptCodeResync = 0;
     467    m_scriptCodeSize = m_scriptCodeResync = 0;
    468468   
    469469    // FIXME: The script should be syntax highlighted.
     
    471471        return state;
    472472
    473     SegmentedString *savedPrependingSrc = currentPrependingSrc;
     473    SegmentedString* savedPrependingSrc = m_currentPrependingSrc;
    474474    SegmentedString prependingSrc;
    475     currentPrependingSrc = &prependingSrc;
    476 
    477     if (!parser->skipMode() && !followingFrameset) {
     475    m_currentPrependingSrc = &prependingSrc;
     476
     477    if (!m_parser->skipMode() && !followingFrameset) {
    478478        if (cs) {
    479479            if (savedPrependingSrc)
    480                 savedPrependingSrc->append(src);
     480                savedPrependingSrc->append(m_src);
    481481            else
    482                 pendingSrc.prepend(src);
     482                m_pendingSrc.prepend(m_src);
    483483            setSrc(SegmentedString());
    484484
     
    492492            state = m_state;
    493493            // will be 0 if script was already loaded and ref() executed it
    494             if (!pendingScripts.isEmpty())
     494            if (!m_pendingScripts.isEmpty())
    495495                state.setLoadingExtScript(true);
    496496        } else if (!m_fragment && doScriptExec) {
    497497            if (!m_executingScript)
    498                 pendingSrc.prepend(src);
     498                m_pendingSrc.prepend(m_src);
    499499            else
    500                 prependingSrc = src;
     500                prependingSrc = m_src;
    501501            setSrc(SegmentedString());
    502502            state = scriptExecution(scriptString, state, String(), startLine);
     
    505505
    506506    if (!m_executingScript && !state.loadingExtScript()) {
    507         src.append(pendingSrc);
    508         pendingSrc.clear();
     507        m_src.append(m_pendingSrc);
     508        m_pendingSrc.clear();
    509509    } else if (!prependingSrc.isEmpty()) {
    510510        // restore first so that the write appends in the right place
    511511        // (does not hurt to do it again below)
    512         currentPrependingSrc = savedPrependingSrc;
     512        m_currentPrependingSrc = savedPrependingSrc;
    513513
    514514        // we need to do this slightly modified bit of one of the write() cases
    515         // because we want to prepend to pendingSrc rather than appending
     515        // because we want to prepend to m_pendingSrc rather than appending
    516516        // if there's no previous prependingSrc
    517         if (!pendingScripts.isEmpty()) {
    518             if (currentPrependingSrc) {
    519                 currentPrependingSrc->append(prependingSrc);
    520             } else {
    521                 pendingSrc.prepend(prependingSrc);
    522             }
     517        if (!m_pendingScripts.isEmpty()) {
     518            if (m_currentPrependingSrc)
     519                m_currentPrependingSrc->append(prependingSrc);
     520            else
     521                m_pendingSrc.prepend(prependingSrc);
    523522        } else {
    524523            m_state = state;
     
    529528   
    530529#if PRELOAD_SCANNER_ENABLED
    531     if (!pendingScripts.isEmpty() && !m_executingScript) {
     530    if (!m_pendingScripts.isEmpty() && !m_executingScript) {
    532531        if (!m_preloadScanner)
    533532            m_preloadScanner.set(new PreloadScanner(m_doc));
    534533        if (!m_preloadScanner->inProgress()) {
    535534            m_preloadScanner->begin();
    536             m_preloadScanner->write(pendingSrc);
     535            m_preloadScanner->write(m_pendingSrc);
    537536        }
    538537    }
    539538#endif
    540     currentPrependingSrc = savedPrependingSrc;
     539    m_currentPrependingSrc = savedPrependingSrc;
    541540
    542541    return state;
     
    550549    String url = scriptURL.isNull() ? m_doc->frame()->document()->url().string() : scriptURL;
    551550
    552     SegmentedString *savedPrependingSrc = currentPrependingSrc;
     551    SegmentedString* savedPrependingSrc = m_currentPrependingSrc;
    553552    SegmentedString prependingSrc;
    554     currentPrependingSrc = &prependingSrc;
     553    m_currentPrependingSrc = &prependingSrc;
    555554
    556555#ifdef INSTRUMENT_LAYOUT_SCHEDULING
     
    573572
    574573    if (!m_executingScript && !state.loadingExtScript()) {
    575         pendingSrc.prepend(prependingSrc);       
    576         src.append(pendingSrc);
    577         pendingSrc.clear();
     574        m_pendingSrc.prepend(prependingSrc);       
     575        m_src.append(m_pendingSrc);
     576        m_pendingSrc.clear();
    578577    } else if (!prependingSrc.isEmpty()) {
    579578        // restore first so that the write appends in the right place
    580579        // (does not hurt to do it again below)
    581         currentPrependingSrc = savedPrependingSrc;
     580        m_currentPrependingSrc = savedPrependingSrc;
    582581
    583582        // we need to do this slightly modified bit of one of the write() cases
    584         // because we want to prepend to pendingSrc rather than appending
     583        // because we want to prepend to m_pendingSrc rather than appending
    585584        // if there's no previous prependingSrc
    586         if (!pendingScripts.isEmpty()) {
    587             if (currentPrependingSrc)
    588                 currentPrependingSrc->append(prependingSrc);
     585        if (!m_pendingScripts.isEmpty()) {
     586            if (m_currentPrependingSrc)
     587                m_currentPrependingSrc->append(prependingSrc);
    589588            else
    590                 pendingSrc.prepend(prependingSrc);
     589                m_pendingSrc.prepend(prependingSrc);
    591590           
    592591#if PRELOAD_SCANNER_ENABLED
     
    605604    }
    606605
    607     currentPrependingSrc = savedPrependingSrc;
     606    m_currentPrependingSrc = savedPrependingSrc;
    608607
    609608    return state;
    610609}
    611610
    612 HTMLTokenizer::State HTMLTokenizer::parseComment(SegmentedString &src, State state)
     611HTMLTokenizer::State HTMLTokenizer::parseComment(SegmentedString& src, State state)
    613612{
    614613    // FIXME: Why does this code even run for comments inside <script> and <style>? This seems bogus.
     
    616615    while (!src.isEmpty()) {
    617616        UChar ch = *src;
    618         scriptCode[scriptCodeSize++] = ch;
     617        m_scriptCode[m_scriptCodeSize++] = ch;
    619618        if (ch == '>') {
    620             bool handleBrokenComments = brokenComments && !(state.inScript() || state.inStyle());
     619            bool handleBrokenComments = m_brokenComments && !(state.inScript() || state.inStyle());
    621620            int endCharsCount = 1; // start off with one for the '>' character
    622             if (scriptCodeSize > 2 && scriptCode[scriptCodeSize-3] == '-' && scriptCode[scriptCodeSize-2] == '-') {
     621            if (m_scriptCodeSize > 2 && m_scriptCode[m_scriptCodeSize-3] == '-' && m_scriptCode[m_scriptCodeSize-2] == '-') {
    623622                endCharsCount = 3;
    624             } else if (scriptCodeSize > 3 && scriptCode[scriptCodeSize-4] == '-' && scriptCode[scriptCodeSize-3] == '-' &&
    625                 scriptCode[scriptCodeSize-2] == '!') {
     623            } else if (m_scriptCodeSize > 3 && m_scriptCode[m_scriptCodeSize-4] == '-' && m_scriptCode[m_scriptCodeSize-3] == '-' &&
     624                m_scriptCode[m_scriptCodeSize-2] == '!') {
    626625                // Other browsers will accept --!> as a close comment, even though it's
    627626                // not technically valid.
     
    632631                if (!(state.inTitle() || state.inScript() || state.inXmp() || state.inTextArea() || state.inStyle() || state.inIFrame())) {
    633632                    checkScriptBuffer();
    634                     scriptCode[scriptCodeSize] = 0;
    635                     scriptCode[scriptCodeSize + 1] = 0;
    636                     currToken.tagName = commentAtom;
    637                     currToken.beginTag = true;
    638                     state = processListing(SegmentedString(scriptCode, scriptCodeSize - endCharsCount), state);
     633                    m_scriptCode[m_scriptCodeSize] = 0;
     634                    m_scriptCode[m_scriptCodeSize + 1] = 0;
     635                    m_currentToken.tagName = commentAtom;
     636                    m_currentToken.beginTag = true;
     637                    state = processListing(SegmentedString(m_scriptCode, m_scriptCodeSize - endCharsCount), state);
    639638                    processToken();
    640                     currToken.tagName = commentAtom;
    641                     currToken.beginTag = false;
     639                    m_currentToken.tagName = commentAtom;
     640                    m_currentToken.beginTag = false;
    642641                    processToken();
    643                     scriptCodeSize = 0;
     642                    m_scriptCodeSize = 0;
    644643                }
    645644                state.setInComment(false);
     
    658657    while (!src.isEmpty()) {
    659658        UChar ch = *src;
    660         scriptCode[scriptCodeSize++] = ch;
    661         if (ch == '>' && scriptCodeSize > 1 && scriptCode[scriptCodeSize-2] == '%') {
     659        m_scriptCode[m_scriptCodeSize++] = ch;
     660        if (ch == '>' && m_scriptCodeSize > 1 && m_scriptCode[m_scriptCodeSize - 2] == '%') {
    662661            src.advancePastNonNewline();
    663662            state.setInServer(false);
    664             scriptCodeSize = 0;
     663            m_scriptCodeSize = 0;
    665664            return state; // Finished parsing server include
    666665        }
     
    670669}
    671670
    672 HTMLTokenizer::State HTMLTokenizer::parseProcessingInstruction(SegmentedString &src, State state)
     671HTMLTokenizer::State HTMLTokenizer::parseProcessingInstruction(SegmentedString& src, State state)
    673672{
    674673    UChar oldchar = 0;
     
    696695}
    697696
    698 HTMLTokenizer::State HTMLTokenizer::parseText(SegmentedString &src, State state)
     697HTMLTokenizer::State HTMLTokenizer::parseText(SegmentedString& src, State state)
    699698{
    700699    while (!src.isEmpty()) {
     
    714713        if (cc == '\r') {
    715714            state.setSkipLF(true);
    716             *dest++ = '\n';
     715            *m_dest++ = '\n';
    717716        } else
    718             *dest++ = cc;
     717            *m_dest++ = cc;
    719718        src.advance(m_lineNumber);
    720719    }
     
    724723
    725724
    726 HTMLTokenizer::State HTMLTokenizer::parseEntity(SegmentedString &src, UChar*& dest, State state, unsigned &cBufferPos, bool start, bool parsingTag)
    727 {
    728     if (start)
    729     {
     725HTMLTokenizer::State HTMLTokenizer::parseEntity(SegmentedString& src, UChar*& dest, State state, unsigned& cBufferPos, bool start, bool parsingTag)
     726{
     727    if (start) {
    730728        cBufferPos = 0;
    731729        state.setEntityState(SearchEntity);
     
    733731    }
    734732
    735     while(!src.isEmpty())
    736     {
     733    while(!src.isEmpty()) {
    737734        UChar cc = *src;
    738735        switch(state.entityState()) {
     
    743740        case SearchEntity:
    744741            if (cc == '#') {
    745                 cBuffer[cBufferPos++] = cc;
     742                m_cBuffer[cBufferPos++] = cc;
    746743                src.advancePastNonNewline();
    747744                state.setEntityState(NumericSearch);
     
    752749        case NumericSearch:
    753750            if (cc == 'x' || cc == 'X') {
    754                 cBuffer[cBufferPos++] = cc;
     751                m_cBuffer[cBufferPos++] = cc;
    755752                src.advancePastNonNewline();
    756753                state.setEntityState(Hexadecimal);
     
    775772                    digit = (cc - 'A' + 10) & 0xF; // handle both upper and lower case without a branch
    776773                EntityUnicodeValue = EntityUnicodeValue * 16 + digit;
    777                 cBuffer[cBufferPos++] = cc;
     774                m_cBuffer[cBufferPos++] = cc;
    778775                src.advancePastNonNewline();
    779776            }
     
    794791
    795792                EntityUnicodeValue = EntityUnicodeValue * 10 + (cc - '0');
    796                 cBuffer[cBufferPos++] = cc;
     793                m_cBuffer[cBufferPos++] = cc;
    797794                src.advancePastNonNewline();
    798795            }
     
    812809                }
    813810
    814                 cBuffer[cBufferPos++] = cc;
     811                m_cBuffer[cBufferPos++] = cc;
    815812                src.advancePastNonNewline();
    816813            }
     
    829826                    ASSERT(cBufferPos < 10);
    830827                    for (; testedEntityNameLen < cBufferPos; ++testedEntityNameLen) {
    831                         if (cBuffer[testedEntityNameLen] > 0x7e)
     828                        if (m_cBuffer[testedEntityNameLen] > 0x7e)
    832829                            break;
    833                         tmpEntityNameBuffer[testedEntityNameLen] = cBuffer[testedEntityNameLen];
     830                        tmpEntityNameBuffer[testedEntityNameLen] = m_cBuffer[testedEntityNameLen];
    834831                    }
    835832
     
    872869                    *dest++ = '&';
    873870                    for (unsigned i = 0; i < cBufferPos; i++)
    874                         dest[i] = cBuffer[i];
     871                        dest[i] = m_cBuffer[i];
    875872                    dest += cBufferPos;
    876873                    if (*src == ';') {
     
    884881                *dest++ = '&';
    885882                for (unsigned i = 0; i < cBufferPos; i++)
    886                     dest[i] = cBuffer[i];
     883                    dest[i] = m_cBuffer[i];
    887884                dest += cBufferPos;
    888885            }
     
    11121109}
    11131110
    1114 HTMLTokenizer::State HTMLTokenizer::parseTag(SegmentedString &src, State state)
     1111HTMLTokenizer::State HTMLTokenizer::parseTag(SegmentedString& src, State state)
    11151112{
    11161113    ASSERT(!state.hasEntityState());
     
    11401137                        // Found '<!--' sequence
    11411138                        src.advancePastNonNewline();
    1142                         dest = buffer; // ignore the previous part of this tag
     1139                        m_dest = m_buffer; // ignore the previous part of this tag
    11431140                        state.setInComment(true);
    11441141                        state.setTagState(NoTag);
     
    11511148                            src.advancePastNonNewline();
    11521149                            if (!src.isEmpty())
    1153                                 cBuffer[cBufferPos++] = *src;
     1150                                m_cBuffer[cBufferPos++] = *src;
    11541151                        } else
    11551152                          state = parseComment(src, state);
     
    11581155                        return state; // Finished parsing tag!
    11591156                    }
    1160                     cBuffer[cBufferPos++] = *src;
     1157                    m_cBuffer[cBufferPos++] = *src;
    11611158                    src.advancePastNonNewline();
    11621159                    break;
     
    11681165                if (toASCIILower(*src) == doctypeStart[m_doctypeSearchCount]) {
    11691166                    m_doctypeSearchCount++;
    1170                     cBuffer[cBufferPos++] = *src;
     1167                    m_cBuffer[cBufferPos++] = *src;
    11711168                    src.advancePastNonNewline();
    11721169                    if (m_doctypeSearchCount == 9) {
     
    11761173                        m_doctypeToken.reset();
    11771174                        if (inViewSourceMode())
    1178                             m_doctypeToken.m_source.append(cBuffer, cBufferPos);
     1175                            m_doctypeToken.m_source.append(m_cBuffer, cBufferPos);
    11791176                        state = parseDoctype(src, state);
    11801177                        m_cBufferPos = cBufferPos;
     
    11971194                // tolower() shows up on profiles. This is faster!
    11981195                if (curchar >= 'A' && curchar <= 'Z' && !inViewSourceMode())
    1199                     cBuffer[cBufferPos++] = curchar + ('a' - 'A');
     1196                    m_cBuffer[cBufferPos++] = curchar + ('a' - 'A');
    12001197                else
    1201                     cBuffer[cBufferPos++] = curchar;
     1198                    m_cBuffer[cBufferPos++] = curchar;
    12021199                src.advancePastNonNewline();
    12031200            }
     
    12051202            // Disadvantage: we add the possible rest of the tag
    12061203            // as attribute names. ### judge if this causes problems
    1207             if(finish || CBUFLEN == cBufferPos) {
     1204            if (finish || CBUFLEN == cBufferPos) {
    12081205                bool beginTag;
    1209                 UChar* ptr = cBuffer;
     1206                UChar* ptr = m_cBuffer;
    12101207                unsigned int len = cBufferPos;
    1211                 cBuffer[cBufferPos] = '\0';
     1208                m_cBuffer[cBufferPos] = '\0';
    12121209                if ((cBufferPos > 0) && (*ptr == '/')) {
    12131210                    // End Tag
     
    12271224                // FIXME: FireFox and WinIE turn !foo nodes into comments, we ignore comments. (fast/parser/tag-with-exclamation-point.html)
    12281225                if (ptr[0] != '!' || inViewSourceMode()) {
    1229                     currToken.tagName = AtomicString(ptr);
    1230                     currToken.beginTag = beginTag;
    1231                 }
    1232                 dest = buffer;
     1226                    m_currentToken.tagName = AtomicString(ptr);
     1227                    m_currentToken.beginTag = beginTag;
     1228                }
     1229                m_dest = m_buffer;
    12331230                state.setTagState(SearchAttribute);
    12341231                cBufferPos = 0;
     
    12371234        }
    12381235        case SearchAttribute:
    1239 #if defined(TOKEN_DEBUG) && TOKEN_DEBUG > 1
    1240             qDebug("SearchAttribute");
    1241 #endif
    12421236            while(!src.isEmpty()) {
    12431237                UChar curchar = *src;
     
    12531247                }
    12541248                if (inViewSourceMode())
    1255                     currToken.addViewSourceChar(curchar);
     1249                    m_currentToken.addViewSourceChar(curchar);
    12561250                src.advance(m_lineNumber);
    12571251            }
     
    12591253        case AttributeName:
    12601254        {
    1261 #if defined(TOKEN_DEBUG) && TOKEN_DEBUG > 1
    1262             qDebug("AttributeName");
    1263 #endif
    1264             int ll = min(src.length(), CBUFLEN-cBufferPos);
    1265             while(ll--) {
     1255            int ll = min(src.length(), CBUFLEN - cBufferPos);
     1256            while (ll--) {
    12661257                UChar curchar = *src;
    12671258                // If we encounter a "/" when scanning an attribute name, treat it as a delimiter.  This allows the
    12681259                // cases like <input type=checkbox checked/> to work (and accommodates XML-style syntax as per HTML5).
    12691260                if (curchar <= '>' && (curchar >= '<' || isASCIISpace(curchar) || curchar == '/')) {
    1270                     cBuffer[cBufferPos] = '\0';
    1271                     attrName = AtomicString(cBuffer);
    1272                     dest = buffer;
    1273                     *dest++ = 0;
     1261                    m_cBuffer[cBufferPos] = '\0';
     1262                    m_attrName = AtomicString(m_cBuffer);
     1263                    m_dest = m_buffer;
     1264                    *m_dest++ = 0;
    12741265                    state.setTagState(SearchEqual);
    12751266                    if (inViewSourceMode())
    1276                         currToken.addViewSourceChar('a');
     1267                        m_currentToken.addViewSourceChar('a');
    12771268                    break;
    12781269                }
     
    12801271                // tolower() shows up on profiles. This is faster!
    12811272                if (curchar >= 'A' && curchar <= 'Z' && !inViewSourceMode())
    1282                     cBuffer[cBufferPos++] = curchar + ('a' - 'A');
     1273                    m_cBuffer[cBufferPos++] = curchar + ('a' - 'A');
    12831274                else
    1284                     cBuffer[cBufferPos++] = curchar;
     1275                    m_cBuffer[cBufferPos++] = curchar;
    12851276                   
    12861277                src.advance(m_lineNumber);
    12871278            }
    1288             if ( cBufferPos == CBUFLEN ) {
    1289                 cBuffer[cBufferPos] = '\0';
    1290                 attrName = AtomicString(cBuffer);
    1291                 dest = buffer;
    1292                 *dest++ = 0;
     1279            if (cBufferPos == CBUFLEN) {
     1280                m_cBuffer[cBufferPos] = '\0';
     1281                m_attrName = AtomicString(m_cBuffer);
     1282                m_dest = m_buffer;
     1283                *m_dest++ = 0;
    12931284                state.setTagState(SearchEqual);
    12941285                if (inViewSourceMode())
    1295                     currToken.addViewSourceChar('a');
     1286                    m_currentToken.addViewSourceChar('a');
    12961287            }
    12971288            break;
    12981289        }
    12991290        case SearchEqual:
    1300 #if defined(TOKEN_DEBUG) && TOKEN_DEBUG > 1
    1301             qDebug("SearchEqual");
    1302 #endif
    1303             while(!src.isEmpty()) {
     1291            while (!src.isEmpty()) {
    13041292                UChar curchar = *src;
    13051293
     
    13071295                    // This is a quirk (with a long sad history).  We have to do this
    13081296                    // since widgets do <script src="foo.js"/> and expect the tag to close.
    1309                     if (currToken.tagName == scriptTag)
    1310                         currToken.flat = true;
    1311                     currToken.brokenXMLStyle = true;
     1297                    if (m_currentToken.tagName == scriptTag)
     1298                        m_currentToken.selfClosingTag = true;
     1299                    m_currentToken.brokenXMLStyle = true;
    13121300                }
    13131301
     
    13151303                if (!isASCIISpace(curchar) && curchar != '\'' && curchar != '"' && curchar != '/') {
    13161304                    if (curchar == '=') {
    1317 #ifdef TOKEN_DEBUG
    1318                         kdDebug(6036) << "found equal" << endl;
    1319 #endif
    13201305                        state.setTagState(SearchValue);
    13211306                        if (inViewSourceMode())
    1322                             currToken.addViewSourceChar(curchar);
     1307                            m_currentToken.addViewSourceChar(curchar);
    13231308                        src.advancePastNonNewline();
    13241309                    } else {
    1325                         currToken.addAttribute(m_doc, attrName, emptyAtom, inViewSourceMode());
    1326                         dest = buffer;
     1310                        m_currentToken.addAttribute(m_doc, m_attrName, emptyAtom, inViewSourceMode());
     1311                        m_dest = m_buffer;
    13271312                        state.setTagState(SearchAttribute);
    13281313                        lastIsSlash = false;
     
    13311316                }
    13321317                if (inViewSourceMode())
    1333                     currToken.addViewSourceChar(curchar);
     1318                    m_currentToken.addViewSourceChar(curchar);
    13341319                   
    13351320                lastIsSlash = curchar == '/';
     
    13461331                        state.setTagState(QuotedValue);
    13471332                        if (inViewSourceMode())
    1348                             currToken.addViewSourceChar(curchar);
     1333                            m_currentToken.addViewSourceChar(curchar);
    13491334                        src.advancePastNonNewline();
    13501335                    } else
     
    13541339                }
    13551340                if (inViewSourceMode())
    1356                     currToken.addViewSourceChar(curchar);
     1341                    m_currentToken.addViewSourceChar(curchar);
    13571342                src.advance(m_lineNumber);
    13581343            }
    13591344            break;
    13601345        case QuotedValue:
    1361 #if defined(TOKEN_DEBUG) && TOKEN_DEBUG > 1
    1362             qDebug("QuotedValue");
    1363 #endif
    13641346            while (!src.isEmpty()) {
    13651347                checkBuffer();
     
    13671349                UChar curchar = *src;
    13681350                if (curchar <= '>' && !src.escaped()) {
    1369                     if (curchar == '>' && attrName.isEmpty()) {
     1351                    if (curchar == '>' && m_attrName.isEmpty()) {
    13701352                        // Handle a case like <img '>.  Just go ahead and be willing
    13711353                        // to close the whole tag.  Don't consume the character and
     
    13751357                        // It doesn't handle the general case of
    13761358                        // unmatched quotes among attributes that have names. -dwh
    1377                         while (dest > buffer + 1 && (dest[-1] == '\n' || dest[-1] == '\r'))
    1378                             dest--; // remove trailing newlines
    1379                         AtomicString v(buffer + 1, dest - buffer - 1);
    1380                         if (!v.contains('/'))
    1381                             attrName = v; // Just make the name/value match. (FIXME: Is this some WinIE quirk?)
    1382                         currToken.addAttribute(m_doc, attrName, v, inViewSourceMode());
     1359                        while (m_dest > m_buffer + 1 && (m_dest[-1] == '\n' || m_dest[-1] == '\r'))
     1360                            m_dest--; // remove trailing newlines
     1361                        AtomicString attributeValue(m_buffer + 1, m_dest - m_buffer - 1);
     1362                        if (!attributeValue.contains('/'))
     1363                            m_attrName = attributeValue; // Just make the name/value match. (FIXME: Is this some WinIE quirk?)
     1364                        m_currentToken.addAttribute(m_doc, m_attrName, attributeValue, inViewSourceMode());
    13831365                        if (inViewSourceMode())
    1384                             currToken.addViewSourceChar('x');
     1366                            m_currentToken.addViewSourceChar('x');
    13851367                        state.setTagState(SearchAttribute);
    1386                         dest = buffer;
     1368                        m_dest = m_buffer;
    13871369                        tquote = NoQuote;
    13881370                        break;
     
    13911373                    if (curchar == '&') {
    13921374                        src.advancePastNonNewline();
    1393                         state = parseEntity(src, dest, state, cBufferPos, true, true);
     1375                        state = parseEntity(src, m_dest, state, cBufferPos, true, true);
    13941376                        break;
    13951377                    }
     
    13971379                    if ((tquote == SingleQuote && curchar == '\'') || (tquote == DoubleQuote && curchar == '\"')) {
    13981380                        // some <input type=hidden> rely on trailing spaces. argh
    1399                         while (dest > buffer + 1 && (dest[-1] == '\n' || dest[-1] == '\r'))
    1400                             dest--; // remove trailing newlines
    1401                         AtomicString v(buffer + 1, dest - buffer - 1);
    1402                         if (attrName.isEmpty() && !v.contains('/')) {
    1403                             attrName = v; // Make the name match the value. (FIXME: Is this a WinIE quirk?)
     1381                        while (m_dest > m_buffer + 1 && (m_dest[-1] == '\n' || m_dest[-1] == '\r'))
     1382                            m_dest--; // remove trailing newlines
     1383                        AtomicString attributeValue(m_buffer + 1, m_dest - m_buffer - 1);
     1384                        if (m_attrName.isEmpty() && !attributeValue.contains('/')) {
     1385                            m_attrName = attributeValue; // Make the name match the value. (FIXME: Is this a WinIE quirk?)
    14041386                            if (inViewSourceMode())
    1405                                 currToken.addViewSourceChar('x');
     1387                                m_currentToken.addViewSourceChar('x');
    14061388                        } else if (inViewSourceMode())
    1407                             currToken.addViewSourceChar('v');
    1408                         currToken.addAttribute(m_doc, attrName, v, inViewSourceMode());
    1409                         dest = buffer;
     1389                            m_currentToken.addViewSourceChar('v');
     1390                        m_currentToken.addAttribute(m_doc, m_attrName, attributeValue, inViewSourceMode());
     1391                        m_dest = m_buffer;
    14101392                        state.setTagState(SearchAttribute);
    14111393                        tquote = NoQuote;
    14121394                        if (inViewSourceMode())
    1413                             currToken.addViewSourceChar(curchar);
     1395                            m_currentToken.addViewSourceChar(curchar);
    14141396                        src.advancePastNonNewline();
    14151397                        break;
     
    14171399                }
    14181400
    1419                 *dest++ = curchar;
     1401                *m_dest++ = curchar;
    14201402                src.advance(m_lineNumber);
    14211403            }
    14221404            break;
    14231405        case Value:
    1424 #if defined(TOKEN_DEBUG) && TOKEN_DEBUG > 1
    1425             qDebug("Value");
    1426 #endif
    14271406            while(!src.isEmpty()) {
    14281407                checkBuffer();
     
    14321411                    if (curchar == '&') {
    14331412                        src.advancePastNonNewline();
    1434                         state = parseEntity(src, dest, state, cBufferPos, true, true);
     1413                        state = parseEntity(src, m_dest, state, cBufferPos, true, true);
    14351414                        break;
    14361415                    }
     
    14381417                    // '/' does not delimit in IE!
    14391418                    if (isASCIISpace(curchar) || curchar == '>') {
    1440                         AtomicString v(buffer+1, dest-buffer-1);
    1441                         currToken.addAttribute(m_doc, attrName, v, inViewSourceMode());
     1419                        AtomicString attributeValue(m_buffer + 1, m_dest - m_buffer - 1);
     1420                        m_currentToken.addAttribute(m_doc, m_attrName, attributeValue, inViewSourceMode());
    14421421                        if (inViewSourceMode())
    1443                             currToken.addViewSourceChar('v');
    1444                         dest = buffer;
     1422                            m_currentToken.addViewSourceChar('v');
     1423                        m_dest = m_buffer;
    14451424                        state.setTagState(SearchAttribute);
    14461425                        break;
     
    14481427                }
    14491428
    1450                 *dest++ = curchar;
     1429                *m_dest++ = curchar;
    14511430                src.advance(m_lineNumber);
    14521431            }
     
    14541433        case SearchEnd:
    14551434        {
    1456 #if defined(TOKEN_DEBUG) && TOKEN_DEBUG > 1
    1457                 qDebug("SearchEnd");
    1458 #endif
    14591435            while (!src.isEmpty()) {
    14601436                UChar ch = *src;
     
    14621438                    break;
    14631439                if (ch == '/')
    1464                     currToken.flat = true;
     1440                    m_currentToken.selfClosingTag = true;
    14651441                if (inViewSourceMode())
    1466                     currToken.addViewSourceChar(ch);
     1442                    m_currentToken.addViewSourceChar(ch);
    14671443                src.advance(m_lineNumber);
    14681444            }
    1469             if (src.isEmpty()) break;
     1445            if (src.isEmpty())
     1446                break;
    14701447
    14711448            searchCount = 0; // Stop looking for '<!--' sequence
     
    14761453                src.advance(m_lineNumber);
    14771454
    1478             if (currToken.tagName == nullAtom) { //stop if tag is unknown
     1455            if (m_currentToken.tagName == nullAtom) { //stop if tag is unknown
    14791456                m_cBufferPos = cBufferPos;
    14801457                return state;
    14811458            }
    14821459
    1483             AtomicString tagName = currToken.tagName;
     1460            AtomicString tagName = m_currentToken.tagName;
    14841461
    14851462            // Handle <script src="foo"/> like Mozilla/Opera. We have to do this now for Dashboard
    14861463            // compatibility.
    1487             bool isSelfClosingScript = currToken.flat && currToken.beginTag && currToken.tagName == scriptTag;
    1488             bool beginTag = !currToken.flat && currToken.beginTag;
    1489             if (currToken.beginTag && currToken.tagName == scriptTag && !inViewSourceMode() && !parser->skipMode()) {
     1464            bool isSelfClosingScript = m_currentToken.selfClosingTag && m_currentToken.beginTag && m_currentToken.tagName == scriptTag;
     1465            bool beginTag = !m_currentToken.selfClosingTag && m_currentToken.beginTag;
     1466            if (m_currentToken.beginTag && m_currentToken.tagName == scriptTag && !inViewSourceMode() && !m_parser->skipMode()) {
    14901467                Attribute* a = 0;
    1491                 scriptSrc = String();
    1492                 scriptSrcCharset = String();
    1493                 if (currToken.attrs && !m_fragment) {
     1468                m_scriptTagSrcAttrValue = String();
     1469                m_scriptTagCharsetAttrValue = String();
     1470                if (m_currentToken.attrs && !m_fragment) {
    14941471                    if (m_doc->frame() && m_doc->frame()->script()->isEnabled()) {
    1495                         if ((a = currToken.attrs->getAttributeItem(srcAttr)))
    1496                             scriptSrc = m_doc->completeURL(parseURL(a->value())).string();
     1472                        if ((a = m_currentToken.attrs->getAttributeItem(srcAttr)))
     1473                            m_scriptTagSrcAttrValue = m_doc->completeURL(parseURL(a->value())).string();
    14971474                    }
    14981475                }
     
    15061483                        state.setDiscardLF(true); // Discard the first LF after we open a pre.
    15071484                } else if (tagName == scriptTag) {
    1508                     ASSERT(!scriptNode);
    1509                     scriptNode = n;
    1510                     if (n)
    1511                         scriptSrcCharset = static_cast<HTMLScriptElement*>(n.get())->scriptCharset();
     1485                    ASSERT(!m_scriptNode);
     1486                    m_scriptNode = static_pointer_cast<HTMLScriptElement>(n);
     1487                    if (m_scriptNode)
     1488                        m_scriptTagCharsetAttrValue = m_scriptNode->scriptCharset();
    15121489                    if (beginTag) {
    1513                         searchStopper = scriptEnd;
    1514                         searchStopperLen = 8;
     1490                        m_searchStopper = scriptEnd;
     1491                        m_searchStopperLength = 8;
    15151492                        state.setInScript(true);
    15161493                        state = parseSpecial(src, state);
     
    15211498                } else if (tagName == styleTag) {
    15221499                    if (beginTag) {
    1523                         searchStopper = styleEnd;
    1524                         searchStopperLen = 7;
     1500                        m_searchStopper = styleEnd;
     1501                        m_searchStopperLength = 7;
    15251502                        state.setInStyle(true);
    15261503                        state = parseSpecial(src, state);
     
    15281505                } else if (tagName == textareaTag) {
    15291506                    if (beginTag) {
    1530                         searchStopper = textareaEnd;
    1531                         searchStopperLen = 10;
     1507                        m_searchStopper = textareaEnd;
     1508                        m_searchStopperLength = 10;
    15321509                        state.setInTextArea(true);
    15331510                        state = parseSpecial(src, state);
     
    15351512                } else if (tagName == titleTag) {
    15361513                    if (beginTag) {
    1537                         searchStopper = titleEnd;
    1538                         searchStopperLen = 7;
     1514                        m_searchStopper = titleEnd;
     1515                        m_searchStopperLength = 7;
    15391516                        State savedState = state;
    15401517                        SegmentedString savedSrc = src;
     
    15471524                            // Let the parser clean up the missing </title> tag.
    15481525                            // FIXME: This is incorrect, because src.isEmpty() doesn't mean we're
    1549                             // at the end of the document unless noMoreData is also true. We need
     1526                            // at the end of the document unless m_noMoreData is also true. We need
    15501527                            // to detect this case elsewhere, and save the state somewhere other
    15511528                            // than a local variable.
     
    15531530                            src = savedSrc;
    15541531                            m_lineNumber = savedLineno;
    1555                             scriptCodeSize = 0;
     1532                            m_scriptCodeSize = 0;
    15561533                        }
    15571534                    }
    15581535                } else if (tagName == xmpTag) {
    15591536                    if (beginTag) {
    1560                         searchStopper = xmpEnd;
    1561                         searchStopperLen = 5;
     1537                        m_searchStopper = xmpEnd;
     1538                        m_searchStopperLength = 5;
    15621539                        state.setInXmp(true);
    15631540                        state = parseSpecial(src, state);
     
    15651542                } else if (tagName == iframeTag) {
    15661543                    if (beginTag) {
    1567                         searchStopper = iframeEnd;
    1568                         searchStopperLen = 8;
     1544                        m_searchStopper = iframeEnd;
     1545                        m_searchStopperLength = 8;
    15691546                        state.setInIFrame(true);
    15701547                        state = parseSpecial(src, state);
     
    16121589bool HTMLTokenizer::write(const SegmentedString& str, bool appendData)
    16131590{
    1614 #ifdef TOKEN_DEBUG
    1615     kdDebug( 6036 ) << this << " Tokenizer::write(\"" << str.toString() << "\"," << appendData << ")" << endl;
    1616 #endif
    1617 
    1618     if (!buffer)
     1591    if (!m_buffer)
    16191592        return false;
    16201593   
     
    16261599        source.setExcludeLineNumbers();
    16271600
    1628     if ((m_executingScript && appendData) || !pendingScripts.isEmpty()) {
     1601    if ((m_executingScript && appendData) || !m_pendingScripts.isEmpty()) {
    16291602        // don't parse; we will do this later
    1630         if (currentPrependingSrc)
    1631             currentPrependingSrc->append(source);
     1603        if (m_currentPrependingSrc)
     1604            m_currentPrependingSrc->append(source);
    16321605        else {
    1633             pendingSrc.append(source);
     1606            m_pendingSrc.append(source);
    16341607#if PRELOAD_SCANNER_ENABLED
    16351608            if (m_preloadScanner && m_preloadScanner->inProgress() && appendData)
     
    16451618#endif
    16461619
    1647     if (!src.isEmpty())
    1648         src.append(source);
     1620    if (!m_src.isEmpty())
     1621        m_src.append(source);
    16491622    else
    16501623        setSrc(source);
     
    16541627        return false;
    16551628
    1656     bool wasInWrite = inWrite;
    1657     inWrite = true;
     1629    bool wasInWrite = m_inWrite;
     1630    m_inWrite = true;
    16581631   
    16591632#ifdef INSTRUMENT_LAYOUT_SCHEDULING
     
    16651638    double startTime = currentTime();
    16661639
    1667     Frame *frame = m_doc->frame();
     1640    Frame* frame = m_doc->frame();
    16681641
    16691642    State state = m_state;
    16701643
    1671     while (!src.isEmpty() && (!frame || !frame->loader()->isScheduledLocationChangePending())) {
     1644    while (!m_src.isEmpty() && (!frame || !frame->loader()->isScheduledLocationChangePending())) {
    16721645        if (!continueProcessing(processedCount, startTime, state))
    16731646            break;
     
    16761649        checkBuffer();
    16771650
    1678         UChar cc = *src;
     1651        UChar cc = *m_src;
    16791652
    16801653        bool wasSkipLF = state.skipLF();
     
    16831656
    16841657        if (wasSkipLF && (cc == '\n'))
    1685             src.advance();
     1658            m_src.advance();
    16861659        else if (state.needsSpecialWriteHandling()) {
    16871660            // it's important to keep needsSpecialWriteHandling with the flags this block tests
    16881661            if (state.hasEntityState())
    1689                 state = parseEntity(src, dest, state, m_cBufferPos, false, state.hasTagState());
     1662                state = parseEntity(m_src, m_dest, state, m_cBufferPos, false, state.hasTagState());
    16901663            else if (state.inPlainText())
    1691                 state = parseText(src, state);
     1664                state = parseText(m_src, state);
    16921665            else if (state.inAnySpecial())
    1693                 state = parseSpecial(src, state);
     1666                state = parseSpecial(m_src, state);
    16941667            else if (state.inComment())
    1695                 state = parseComment(src, state);
     1668                state = parseComment(m_src, state);
    16961669            else if (state.inDoctype())
    1697                 state = parseDoctype(src, state);
     1670                state = parseDoctype(m_src, state);
    16981671            else if (state.inServer())
    1699                 state = parseServer(src, state);
     1672                state = parseServer(m_src, state);
    17001673            else if (state.inProcessingInstruction())
    1701                 state = parseProcessingInstruction(src, state);
     1674                state = parseProcessingInstruction(m_src, state);
    17021675            else if (state.hasTagState())
    1703                 state = parseTag(src, state);
     1676                state = parseTag(m_src, state);
    17041677            else if (state.startTag()) {
    17051678                state.setStartTag(false);
     
    17181691                    state.setInProcessingInstruction(true);
    17191692                    tquote = NoQuote;
    1720                     state = parseProcessingInstruction(src, state);
     1693                    state = parseProcessingInstruction(m_src, state);
    17211694                    continue;
    17221695
     
    17241697                }
    17251698                case '%':
    1726                     if (!brokenServer) {
     1699                    if (!m_brokenServer) {
    17271700                        // <% server stuff, handle as comment %>
    17281701                        state.setInServer(true);
    17291702                        tquote = NoQuote;
    1730                         state = parseServer(src, state);
     1703                        state = parseServer(m_src, state);
    17311704                        continue;
    17321705                    }
     
    17381711                        // Invalid tag
    17391712                        // Add as is
    1740                         *dest = '<';
    1741                         dest++;
     1713                        *m_dest = '<';
     1714                        m_dest++;
    17421715                        continue;
    17431716                    }
     
    17491722                m_cBufferPos = 0;
    17501723                state.setTagState(TagName);
    1751                 state = parseTag(src, state);
    1752             }
    1753         } else if (cc == '&' && !src.escaped()) {
    1754             src.advancePastNonNewline();
    1755             state = parseEntity(src, dest, state, m_cBufferPos, true, state.hasTagState());
    1756         } else if (cc == '<' && !src.escaped()) {
    1757             tagStartLineno = m_lineNumber;
    1758             src.advancePastNonNewline();
     1724                state = parseTag(m_src, state);
     1725            }
     1726        } else if (cc == '&' && !m_src.escaped()) {
     1727            m_src.advancePastNonNewline();
     1728            state = parseEntity(m_src, m_dest, state, m_cBufferPos, true, state.hasTagState());
     1729        } else if (cc == '<' && !m_src.escaped()) {
     1730            m_currentTagStartLineNumber = m_lineNumber;
     1731            m_src.advancePastNonNewline();
    17591732            state.setStartTag(true);
    17601733            state.setDiscardLF(false);
     
    17651738            else {
    17661739                // Process this LF
    1767                 *dest++ = '\n';
    1768                 if (cc == '\r' && !src.excludeLineNumbers())
     1740                *m_dest++ = '\n';
     1741                if (cc == '\r' && !m_src.excludeLineNumbers())
    17691742                    m_lineNumber++;
    17701743            }
     
    17731746            if (cc == '\r')
    17741747                state.setSkipLF(true);
    1775             src.advance(m_lineNumber);
     1748            m_src.advance(m_lineNumber);
    17761749        } else {
    17771750            state.setDiscardLF(false);
    1778             *dest++ = cc;
    1779             src.advancePastNonNewline();
     1751            *m_dest++ = cc;
     1752            m_src.advancePastNonNewline();
    17801753        }
    17811754    }
     
    17861759#endif
    17871760   
    1788     inWrite = wasInWrite;
     1761    m_inWrite = wasInWrite;
    17891762
    17901763    m_state = state;
    17911764
    1792     if (noMoreData && !inWrite && !state.loadingExtScript() && !m_executingScript && !m_timer.isActive()) {
     1765    if (m_noMoreData && !m_inWrite && !state.loadingExtScript() && !m_executingScript && !m_timer.isActive()) {
    17931766        end(); // this actually causes us to be deleted
    17941767        return true;
     
    18101783bool HTMLTokenizer::processingData() const
    18111784{
    1812     return m_timer.isActive() || inWrite;
     1785    return m_timer.isActive() || m_inWrite;
    18131786}
    18141787
     
    18361809    m_timer.stop(); // Only helps if assertion above fires, but do it anyway.
    18371810
    1838     if (buffer) {
     1811    if (m_buffer) {
    18391812        // parseTag is using the buffer for different matters
    18401813        if (!m_state.hasTagState())
    18411814            processToken();
    18421815
    1843         fastFree(scriptCode);
    1844         scriptCode = 0;
    1845         scriptCodeSize = scriptCodeMaxSize = scriptCodeResync = 0;
    1846 
    1847         fastFree(buffer);
    1848         buffer = 0;
     1816        fastFree(m_scriptCode);
     1817        m_scriptCode = 0;
     1818        m_scriptCodeSize = m_scriptCodeCapacity = m_scriptCodeResync = 0;
     1819
     1820        fastFree(m_buffer);
     1821        m_buffer = 0;
    18491822    }
    18501823
    18511824    if (!inViewSourceMode())
    1852         parser->finished();
     1825        m_parser->finished();
    18531826    else
    18541827        m_doc->finishedParsing();
     
    18581831{
    18591832    // do this as long as we don't find matching comment ends
    1860     while ((m_state.inComment() || m_state.inServer()) && scriptCode && scriptCodeSize) {
     1833    while ((m_state.inComment() || m_state.inServer()) && m_scriptCode && m_scriptCodeSize) {
    18611834        // we've found an unmatched comment start
    18621835        if (m_state.inComment())
    1863             brokenComments = true;
     1836            m_brokenComments = true;
    18641837        else
    1865             brokenServer = true;
     1838            m_brokenServer = true;
    18661839        checkScriptBuffer();
    1867         scriptCode[scriptCodeSize] = 0;
    1868         scriptCode[scriptCodeSize + 1] = 0;
     1840        m_scriptCode[m_scriptCodeSize] = 0;
     1841        m_scriptCode[m_scriptCodeSize + 1] = 0;
    18691842        int pos;
    18701843        String food;
    18711844        if (m_state.inScript() || m_state.inStyle() || m_state.inTextArea())
    1872             food = String(scriptCode, scriptCodeSize);
     1845            food = String(m_scriptCode, m_scriptCodeSize);
    18731846        else if (m_state.inServer()) {
    18741847            food = "<";
    1875             food.append(scriptCode, scriptCodeSize);
     1848            food.append(m_scriptCode, m_scriptCodeSize);
    18761849        } else {
    1877             pos = find(scriptCode, scriptCodeSize, '>');
    1878             food = String(scriptCode + pos + 1, scriptCodeSize - pos - 1);
    1879         }
    1880         fastFree(scriptCode);
    1881         scriptCode = 0;
    1882         scriptCodeSize = scriptCodeMaxSize = scriptCodeResync = 0;
     1850            pos = find(m_scriptCode, m_scriptCodeSize, '>');
     1851            food = String(m_scriptCode + pos + 1, m_scriptCodeSize - pos - 1);
     1852        }
     1853        fastFree(m_scriptCode);
     1854        m_scriptCode = 0;
     1855        m_scriptCodeSize = m_scriptCodeCapacity = m_scriptCodeResync = 0;
    18831856        m_state.setInComment(false);
    18841857        m_state.setInServer(false);
     
    18881861    // this indicates we will not receive any more data... but if we are waiting on
    18891862    // an external script to load, we can't finish parsing until that is done
    1890     noMoreData = true;
    1891     if (!inWrite && !m_state.loadingExtScript() && !m_executingScript && !m_timer.isActive())
     1863    m_noMoreData = true;
     1864    if (!m_inWrite && !m_state.loadingExtScript() && !m_executingScript && !m_timer.isActive())
    18921865        end(); // this actually causes us to be deleted
    18931866}
     
    18951868PassRefPtr<Node> HTMLTokenizer::processToken()
    18961869{
    1897     ScriptController* jsProxy = (!m_fragment && m_doc->frame()) ? m_doc->frame()->script() : 0;
    1898     if (jsProxy && m_doc->frame()->script()->isEnabled())
    1899         jsProxy->setEventHandlerLineno(tagStartLineno + 1); // Script line numbers are 1 based.
    1900     if (dest > buffer) {
    1901         currToken.text = StringImpl::createStrippingNullCharacters(buffer, dest - buffer);
    1902         if (currToken.tagName != commentAtom)
    1903             currToken.tagName = textAtom;
    1904     } else if (currToken.tagName == nullAtom) {
    1905         currToken.reset();
    1906         if (jsProxy)
    1907             jsProxy->setEventHandlerLineno(m_lineNumber + 1); // Script line numbers are 1 based.
     1870    ScriptController* scriptController = (!m_fragment && m_doc->frame()) ? m_doc->frame()->script() : 0;
     1871    if (scriptController && scriptController->isEnabled())
     1872        // FIXME: Why isn't this m_currentScriptTagStartLineNumber?  I suspect this is wrong.
     1873        scriptController->setEventHandlerLineno(m_currentTagStartLineNumber + 1); // Script line numbers are 1 based.
     1874    if (m_dest > m_buffer) {
     1875        m_currentToken.text = StringImpl::createStrippingNullCharacters(m_buffer, m_dest - m_buffer);
     1876        if (m_currentToken.tagName != commentAtom)
     1877            m_currentToken.tagName = textAtom;
     1878    } else if (m_currentToken.tagName == nullAtom) {
     1879        m_currentToken.reset();
     1880        if (scriptController)
     1881            scriptController->setEventHandlerLineno(m_lineNumber + 1); // Script line numbers are 1 based.
    19081882        return 0;
    19091883    }
    19101884
    1911     dest = buffer;
     1885    m_dest = m_buffer;
    19121886
    19131887    RefPtr<Node> n;
    19141888   
    19151889    if (!m_parserStopped) {
    1916         if (NamedMappedAttrMap* map = currToken.attrs.get())
     1890        if (NamedMappedAttrMap* map = m_currentToken.attrs.get())
    19171891            map->shrinkToLength();
    19181892        if (inViewSourceMode())
    1919             static_cast<HTMLViewSourceDocument*>(m_doc)->addViewSourceToken(&currToken);
     1893            static_cast<HTMLViewSourceDocument*>(m_doc)->addViewSourceToken(&m_currentToken);
    19201894        else
    19211895            // pass the token over to the parser, the parser DOES NOT delete the token
    1922             n = parser->parseToken(&currToken);
    1923     }
    1924     currToken.reset();
    1925     if (jsProxy)
    1926         jsProxy->setEventHandlerLineno(0);
     1896            n = m_parser->parseToken(&m_currentToken);
     1897    }
     1898    m_currentToken.reset();
     1899    if (scriptController)
     1900        scriptController->setEventHandlerLineno(0);
    19271901
    19281902    return n.release();
     
    19341908        static_cast<HTMLViewSourceDocument*>(m_doc)->addViewSourceDoctypeToken(&m_doctypeToken);
    19351909    else
    1936         parser->parseDoctypeToken(&m_doctypeToken);
     1910        m_parser->parseDoctypeToken(&m_doctypeToken);
    19371911}
    19381912
    19391913HTMLTokenizer::~HTMLTokenizer()
    19401914{
    1941     ASSERT(!inWrite);
     1915    ASSERT(!m_inWrite);
    19421916    reset();
    1943     delete parser;
    19441917}
    19451918
     
    19471920void HTMLTokenizer::enlargeBuffer(int len)
    19481921{
    1949     int newSize = max(size * 2, size + len);
    1950     int oldOffset = dest - buffer;
    1951     buffer = static_cast<UChar*>(fastRealloc(buffer, newSize * sizeof(UChar)));
    1952     dest = buffer + oldOffset;
    1953     size = newSize;
     1922    int newSize = max(m_bufferSize * 2, m_bufferSize + len);
     1923    int oldOffset = m_dest - m_buffer;
     1924    m_buffer = static_cast<UChar*>(fastRealloc(m_buffer, newSize * sizeof(UChar)));
     1925    m_dest = m_buffer + oldOffset;
     1926    m_bufferSize = newSize;
    19541927}
    19551928
    19561929void HTMLTokenizer::enlargeScriptBuffer(int len)
    19571930{
    1958     int newSize = max(scriptCodeMaxSize * 2, scriptCodeMaxSize + len);
    1959     scriptCode = static_cast<UChar*>(fastRealloc(scriptCode, newSize * sizeof(UChar)));
    1960     scriptCodeMaxSize = newSize;
     1931    int newSize = max(m_scriptCodeCapacity * 2, m_scriptCodeCapacity + len);
     1932    m_scriptCode = static_cast<UChar*>(fastRealloc(m_scriptCode, newSize * sizeof(UChar)));
     1933    m_scriptCodeCapacity = newSize;
    19611934}
    19621935   
     
    19761949#endif
    19771950
    1978     ASSERT(!pendingScripts.isEmpty());
     1951    ASSERT(!m_pendingScripts.isEmpty());
    19791952
    19801953    // Make external scripts wait for external stylesheets.
     
    19851958
    19861959    bool finished = false;
    1987     while (!finished && pendingScripts.first()->isLoaded()) {
    1988         CachedScript *cs = pendingScripts.first().get();
    1989         pendingScripts.removeFirst();
     1960    while (!finished && m_pendingScripts.first()->isLoaded()) {
     1961        CachedScript* cs = m_pendingScripts.first().get();
     1962        m_pendingScripts.removeFirst();
    19901963        ASSERT(cache()->disabled() || cs->accessCount() > 0);
    19911964
     
    19981971        bool errorOccurred = cs->errorOccurred();
    19991972        cs->removeClient(this);
    2000         RefPtr<Node> n = scriptNode.release();
     1973        RefPtr<Node> n = m_scriptNode.release();
    20011974
    20021975#ifdef INSTRUMENT_LAYOUT_SCHEDULING
     
    20131986        }
    20141987
    2015         // The state of pendingScripts.isEmpty() can change inside the scriptExecution()
     1988        // The state of m_pendingScripts.isEmpty() can change inside the scriptExecution()
    20161989        // call above, so test afterwards.
    2017         finished = pendingScripts.isEmpty();
     1990        finished = m_pendingScripts.isEmpty();
    20181991        if (finished) {
    20191992            m_state.setLoadingExtScript(false);
     
    20261999        // 'm_requestingScript' is true when we are called synchronously from
    20272000        // scriptHandler(). In that case scriptHandler() will take care
    2028         // of pendingSrc.
     2001        // of m_pendingSrc.
    20292002        if (!m_requestingScript) {
    2030             SegmentedString rest = pendingSrc;
    2031             pendingSrc.clear();
     2003            SegmentedString rest = m_pendingSrc;
     2004            m_pendingSrc.clear();
    20322005            write(rest, false);
    20332006            // we might be deleted at this point, do not access any members.
     
    20412014}
    20422015
    2043 void HTMLTokenizer::setSrc(const SegmentedString &source)
    2044 {
    2045     src = source;
     2016void HTMLTokenizer::setSrc(const SegmentedString& source)
     2017{
     2018    m_src = source;
    20462019}
    20472020
  • trunk/WebCore/html/HTMLTokenizer.h

    r36109 r38327  
    4141class Document;
    4242class HTMLDocument;
     43class HTMLScriptElement;
    4344class HTMLViewSourceDocument;
    4445class FrameView;
     
    5354 * text contains the text.
    5455 */
    55 class Token {
    56 public:
    57     Token() : beginTag(true), flat(false), brokenXMLStyle(false), m_sourceInfo(0) { }
     56struct Token {
     57    Token()
     58        : beginTag(true)
     59        , selfClosingTag(false)
     60        , brokenXMLStyle(false)
     61        , m_sourceInfo(0)
     62    { }
    5863    ~Token() { }
    5964
     
    6974        tagName = nullAtom;
    7075        beginTag = true;
    71         flat = false;
     76        selfClosingTag = false;
    7277        brokenXMLStyle = false;
    7378        if (m_sourceInfo)
     
    8186    AtomicString tagName;
    8287    bool beginTag;
    83     bool flat;
     88    bool selfClosingTag;
    8489    bool brokenXMLStyle;
    8590    OwnPtr<Vector<UChar> > m_sourceInfo;
     
    144149    virtual int columnNumber() const { return 1; }
    145150
    146     bool processingContentWrittenByScript() const { return src.excludeLineNumbers(); }
     151    bool processingContentWrittenByScript() const { return m_src.excludeLineNumbers(); }
    147152   
    148153    virtual void executeScriptsWaitingForStylesheets();
    149154   
    150155    virtual bool isHTMLTokenizer() const { return true; }
    151     HTMLParser* htmlParser() const { return parser; }
     156    HTMLParser* htmlParser() const { return m_parser.get(); }
    152157
    153158private:
     
    170175    State parseSpecial(SegmentedString&, State);
    171176    State parseTag(SegmentedString&, State);
    172     State parseEntity(SegmentedString&, UChar*& dest, State, unsigned& _cBufferPos, bool start, bool parsingTag);
     177    State parseEntity(SegmentedString&, UChar*& dest, State, unsigned& cBufferPos, bool start, bool parsingTag);
    173178    State parseProcessingInstruction(SegmentedString&, State);
    174179    State scriptHandler(State);
     
    180185    inline void checkBuffer(int len = 10)
    181186    {
    182         if ((dest - buffer) > size - len)
     187        if ((m_dest - m_buffer) > m_bufferSize - len)
    183188            enlargeBuffer(len);
    184189    }
     
    186191    inline void checkScriptBuffer(int len = 10)
    187192    {
    188         if (scriptCodeSize + len >= scriptCodeMaxSize)
     193        if (m_scriptCodeSize + len >= m_scriptCodeCapacity)
    189194            enlargeScriptBuffer(len);
    190195    }
     
    198203
    199204    // from CachedResourceClient
    200     void notifyFinished(CachedResource *finishedObj);
     205    void notifyFinished(CachedResource*);
    201206
    202207    // Internal buffers
    203208    ///////////////////
    204     UChar* buffer;
    205     UChar* dest;
    206 
    207     Token currToken;
    208 
    209     // the size of buffer
    210     int size;
     209    UChar* m_buffer;
     210    int m_bufferSize;
     211    UChar* m_dest;
     212
     213    Token m_currentToken;
    211214
    212215    // Tokenizer flags
     
    335338    int m_doctypeSecondarySearchCount;
    336339
    337     bool brokenServer;
     340    bool m_brokenServer;
    338341
    339342    // Name of an attribute that we just scanned.
    340     AtomicString attrName;
     343    AtomicString m_attrName;
    341344
    342345    // Used to store the code of a scripting sequence
    343     UChar* scriptCode;
     346    UChar* m_scriptCode;
    344347    // Size of the script sequenze stored in @ref #scriptCode
    345     int scriptCodeSize;
     348    int m_scriptCodeSize;
    346349    // Maximal size that can be stored in @ref #scriptCode
    347     int scriptCodeMaxSize;
     350    int m_scriptCodeCapacity;
    348351    // resync point of script code size
    349     int scriptCodeResync;
     352    int m_scriptCodeResync;
    350353
    351354    // Stores characters if we are scanning for a string like "</script>"
     
    355358    int searchCount;
    356359    // the stopper string
    357     const char* searchStopper;
    358     // the stopper len
    359     int searchStopperLen;
     360    const char* m_searchStopper;
     361    int m_searchStopperLength;
    360362   
    361363    // if no more data is coming, just parse what we have (including ext scripts that
    362364    // may be still downloading) and finish
    363     bool noMoreData;
     365    bool m_noMoreData;
    364366    // URL to get source code of script from
    365     String scriptSrc;
    366     String scriptSrcCharset;
     367    String m_scriptTagSrcAttrValue;
     368    String m_scriptTagCharsetAttrValue;
    367369    // the HTML code we will parse after the external script we are waiting for has loaded
    368     SegmentedString pendingSrc;
     370    SegmentedString m_pendingSrc;
    369371
    370372    // the HTML code we will parse after this particular script has
    371373    // loaded, but before all pending HTML
    372     SegmentedString *currentPrependingSrc;
     374    SegmentedString* m_currentPrependingSrc;
    373375
    374376    // true if we are executing a script while parsing a document. This causes the parsing of
    375377    // the output of the script to be postponed until after the script has finished executing
    376378    int m_executingScript;
    377     Deque<CachedResourceHandle<CachedScript> > pendingScripts;
    378     RefPtr<Node> scriptNode;
     379    Deque<CachedResourceHandle<CachedScript> > m_pendingScripts;
     380    RefPtr<HTMLScriptElement> m_scriptNode;
    379381
    380382    bool m_requestingScript;
     
    383385    // if we found one broken comment, there are most likely others as well
    384386    // store a flag to get rid of the O(n^2) behaviour in such a case.
    385     bool brokenComments;
     387    bool m_brokenComments;
    386388    // current line number
    387389    int m_lineNumber;
    388     // line number at which the current <script> started
    389     int scriptStartLineno;
    390     int tagStartLineno;
     390    int m_currentScriptTagStartLineNumber;
     391    int m_currentTagStartLineNumber;
    391392
    392393    double m_tokenizerTimeDelay;
     
    400401// we'll just make it large enough to handle all imaginable cases.
    401402#define CBUFLEN 1024
    402     UChar cBuffer[CBUFLEN + 2];
     403    UChar m_cBuffer[CBUFLEN + 2];
    403404    unsigned int m_cBufferPos;
    404405
    405     SegmentedString src;
     406    SegmentedString m_src;
    406407    Document* m_doc;
    407     HTMLParser* parser;
    408     bool inWrite;
     408    OwnPtr<HTMLParser> m_parser;
     409    bool m_inWrite;
    409410    bool m_fragment;
    410411
  • trunk/WebCore/html/HTMLViewSourceDocument.h

    r37133 r38327  
    3131
    3232class DoctypeToken;
    33 class Token;
     33struct Token;
    3434
    3535class HTMLViewSourceDocument : public HTMLDocument {
  • trunk/WebCore/rendering/RenderBlock.cpp

    r38227 r38327  
    24852485
    24862486    if (applyTextIndent && m_firstLine && style()->direction() == LTR) {
    2487         int cw=0;
     2487        int cw = 0;
    24882488        if (style()->textIndent().isPercent())
    24892489            cw = containingBlock()->availableWidth();
     
    24912491    }
    24922492
    2493     //kdDebug( 6040 ) << "leftOffset(" << y << ") = " << left << endl;
    24942493    return left;
    24952494}
     
    25232522   
    25242523    if (applyTextIndent && m_firstLine && style()->direction() == RTL) {
    2525         int cw=0;
     2524        int cw = 0;
    25262525        if (style()->textIndent().isPercent())
    25272526            cw = containingBlock()->availableWidth();
     
    25292528    }
    25302529   
    2531     //kdDebug( 6040 ) << "rightOffset(" << y << ") = " << right << endl;
    25322530    return right;
    25332531}
     
    25362534RenderBlock::lineWidth(int y) const
    25372535{
    2538     //kdDebug( 6040 ) << "lineWidth(" << y << ")=" << rightOffset(y) - leftOffset(y) << endl;
    25392536    int result = rightOffset(y) - leftOffset(y);
    25402537    return (result < 0) ? 0 : result;
  • trunk/WebCore/xml/XSLTProcessor.cpp

    r38065 r38327  
    3737#include "FrameView.h"
    3838#include "HTMLDocument.h"
    39 #include "HTMLTokenizer.h"
     39#include "HTMLTokenizer.h" // for parseHTMLDocumentFragment
    4040#include "Page.h"
    4141#include "ResourceError.h"
Note: See TracChangeset for help on using the changeset viewer.