Changeset 71735 in webkit
- Timestamp:
- Nov 10, 2010 6:43:50 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r71722 r71735 1 2010-11-10 Peter Rybin <peter.rybin@gmail.com> 2 3 Reviewed by Adam Barth. 4 5 HTML parser should provide script column position within HTML document to JavaScript engine 6 https://bugs.webkit.org/show_bug.cgi?id=45271 7 8 Adds TextPosition* classes -- a structure that stores line/column/generation 9 level coordinates inside text document. Adds *BasedNumber classes -- typesafe int 10 wrappers that emphasize whether int number is used as zero-based or 11 one-based. 12 13 * GNUmakefile.am: 14 * JavaScriptCore.gypi: 15 * JavaScriptCore.xcodeproj/project.pbxproj: 16 * wtf/text/TextPosition.h: Added. 17 (WTF::TextPosition::TextPosition): 18 (WTF::TextPosition::minimumPosition): 19 (WTF::TextPosition::belowRangePosition): 20 (WTF::ZeroBasedNumber::fromZeroBasedInt): 21 (WTF::ZeroBasedNumber::ZeroBasedNumber): 22 (WTF::ZeroBasedNumber::zeroBasedInt): 23 (WTF::ZeroBasedNumber::base): 24 (WTF::ZeroBasedNumber::belowBase): 25 (WTF::OneBasedNumber::fromOneBasedInt): 26 (WTF::OneBasedNumber::OneBasedNumber): 27 (WTF::OneBasedNumber::oneBasedInt): 28 (WTF::OneBasedNumber::convertAsZeroBasedInt): 29 (WTF::OneBasedNumber::convertToZeroBased): 30 (WTF::OneBasedNumber::base): 31 (WTF::OneBasedNumber::belowBase): 32 (WTF::toZeroBasedTextPosition): 33 (WTF::toOneBasedTextPosition): 34 (WTF::ZeroBasedNumber::convertToOneBased): 35 1 36 2010-11-09 Gabor Loki <loki@webkit.org> 2 37 -
trunk/JavaScriptCore/GNUmakefile.am
r70463 r71735 519 519 JavaScriptCore/wtf/text/StringImpl.h \ 520 520 JavaScriptCore/wtf/text/StringStatics.cpp \ 521 JavaScriptCore/wtf/text/TextPosition.h \ 521 522 JavaScriptCore/wtf/text/WTFString.cpp \ 522 523 JavaScriptCore/wtf/text/WTFString.h \ -
trunk/JavaScriptCore/JavaScriptCore.gypi
r70463 r71735 462 462 'wtf/text/StringImpl.h', 463 463 'wtf/text/StringStatics.cpp', 464 'wtf/text/TextPosition.h', 464 465 'wtf/text/WTFString.cpp', 465 466 'wtf/text/WTFString.h', -
trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r70463 r71735 556 556 E1EF79AA0CE97BA60088D500 /* UTF8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EF79A80CE97BA60088D500 /* UTF8.cpp */; }; 557 557 E48E0F2D0F82151700A8CA37 /* FastAllocBase.h in Headers */ = {isa = PBXBuildFile; fileRef = E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */; settings = {ATTRIBUTES = (Private, ); }; }; 558 F3BD31ED126735770065467F /* TextPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = F3BD31D0126730180065467F /* TextPosition.h */; settings = {ATTRIBUTES = (Private, ); }; }; 558 559 FE1B447A0ECCD73B004F4DD1 /* StdLibExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1B44790ECCD73B004F4DD1 /* StdLibExtras.h */; settings = {ATTRIBUTES = (Private, ); }; }; 559 560 /* End PBXBuildFile section */ … … 1145 1146 E1EF79A90CE97BA60088D500 /* UTF8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTF8.h; sourceTree = "<group>"; }; 1146 1147 E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastAllocBase.h; sourceTree = "<group>"; }; 1148 F3BD31D0126730180065467F /* TextPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextPosition.h; path = text/TextPosition.h; sourceTree = "<group>"; }; 1147 1149 F5BB2BC5030F772101FCFE1D /* Completion.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Completion.h; sourceTree = "<group>"; tabWidth = 8; }; 1148 1150 F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = JavaScriptCorePrefix.h; sourceTree = "<group>"; tabWidth = 8; }; … … 1861 1863 86B99AE2117E578100DF5A90 /* StringImplBase.h */, 1862 1864 8626BECE11928E3900782FAB /* StringStatics.cpp */, 1865 F3BD31D0126730180065467F /* TextPosition.h */, 1863 1866 868BFA15117CF19900B908B1 /* WTFString.cpp */, 1864 1867 868BFA16117CF19900B908B1 /* WTFString.h */, … … 2350 2353 A730B6121250068F009D25B1 /* StrictEvalActivation.h in Headers */, 2351 2354 933F5CDC1269229B0049191E /* NullPtr.h in Headers */, 2355 F3BD31ED126735770065467F /* TextPosition.h in Headers */, 2352 2356 ); 2353 2357 runOnlyForDeploymentPostprocessing = 0; -
trunk/WebCore/ChangeLog
r71734 r71735 1 2010-11-10 Peter Rybin <peter.rybin@gmail.com> 2 3 Reviewed by Adam Barth. 4 5 HTML parser should provide script column position within HTML document to JavaScript engine 6 https://bugs.webkit.org/show_bug.cgi?id=45271 7 8 Replaces line number with TextPosition struct so that script engine 9 gets script starting line/column. 10 11 * ForwardingHeaders/wtf/text/TextPosition.h: Added. 12 * bindings/js/ScriptSourceCode.h: 13 (WebCore::ScriptSourceCode::ScriptSourceCode): 14 * bindings/v8/ScheduledAction.cpp: 15 (WebCore::ScheduledAction::ScheduledAction): 16 * bindings/v8/ScriptController.cpp: 17 (WebCore::ScriptController::eventHandlerPosition): 18 * bindings/v8/ScriptController.h: 19 * bindings/v8/ScriptEventListener.cpp: 20 (WebCore::createAttributeEventListener): 21 * bindings/v8/ScriptSourceCode.h: 22 (WebCore::ScriptSourceCode::ScriptSourceCode): 23 (WebCore::ScriptSourceCode::startLine): 24 (WebCore::ScriptSourceCode::startPosition): 25 * bindings/v8/V8LazyEventListener.cpp: 26 (WebCore::V8LazyEventListener::V8LazyEventListener): 27 (WebCore::V8LazyEventListener::prepareListenerObject): 28 * bindings/v8/V8LazyEventListener.h: 29 (WebCore::V8LazyEventListener::create): 30 * bindings/v8/V8Proxy.cpp: 31 (WebCore::V8Proxy::compileScript): 32 (WebCore::V8Proxy::evaluate): 33 (WebCore::V8Proxy::runScript): 34 * bindings/v8/V8Proxy.h: 35 * bindings/v8/WorkerContextExecutionProxy.cpp: 36 (WebCore::WorkerContextExecutionProxy::evaluate): 37 (WebCore::WorkerContextExecutionProxy::runScript): 38 * bindings/v8/WorkerContextExecutionProxy.h: 39 * bindings/v8/WorkerScriptController.cpp: 40 (WebCore::WorkerScriptController::evaluate): 41 * dom/PendingScript.cpp: 42 (WebCore::PendingScript::releaseElementAndClear): 43 * dom/PendingScript.h: 44 (WebCore::PendingScript::PendingScript): 45 (WebCore::PendingScript::operator=): 46 (WebCore::PendingScript::startingPosition): 47 * dom/ScriptableDocumentParser.h: 48 * dom/XMLDocumentParser.h: 49 * dom/XMLDocumentParserLibxml2.cpp: 50 (WebCore::XMLDocumentParser::XMLDocumentParser): 51 (WebCore::XMLDocumentParser::startElementNs): 52 (WebCore::XMLDocumentParser::endElementNs): 53 (WebCore::XMLDocumentParser::lineNumber): 54 (WebCore::XMLDocumentParser::columnNumber): 55 (WebCore::XMLDocumentParser::textPosition): 56 (WebCore::XMLDocumentParser::textPositionOneBased): 57 * dom/XMLDocumentParserQt.cpp: 58 (WebCore::XMLDocumentParser::XMLDocumentParser): 59 (WebCore::XMLDocumentParser::textPosition): 60 (WebCore::XMLDocumentParser::parseStartElement): 61 (WebCore::XMLDocumentParser::parseEndElement): 62 * html/parser/HTMLDocumentParser.cpp: 63 (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder): 64 (WebCore::HTMLDocumentParser::textPosition): 65 * html/parser/HTMLDocumentParser.h: 66 * html/parser/HTMLScriptRunner.cpp: 67 (WebCore::HTMLScriptRunner::sourceFromPendingScript): 68 (WebCore::HTMLScriptRunner::execute): 69 (WebCore::HTMLScriptRunner::runScript): 70 * html/parser/HTMLScriptRunner.h: 71 * html/parser/HTMLTreeBuilder.cpp: 72 (WebCore::uninitializedPositionValue1): 73 (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): 74 (WebCore::HTMLTreeBuilder::takeScriptToProcess): 75 (WebCore::HTMLTreeBuilder::processEndTag): 76 (WebCore::HTMLTreeBuilder::processScriptStartTag): 77 * html/parser/HTMLTreeBuilder.h: 78 1 79 2010-11-10 Ilya Sherman <isherman@chromium.org> 2 80 -
trunk/WebCore/bindings/js/ScriptSourceCode.h
r70463 r71735 36 36 #include "StringSourceProvider.h" 37 37 #include "KURL.h" 38 #include <wtf/text/TextPosition.h> 38 39 #include <wtf/RefPtr.h> 39 40 … … 42 43 class ScriptSourceCode { 43 44 public: 44 ScriptSourceCode(const String& source, const KURL& url = KURL(), int startLine = 1)45 ScriptSourceCode(const String& source, const KURL& url = KURL(), const TextPosition1& startPosition = TextPosition1::minimumPosition()) 45 46 : m_provider(StringSourceProvider::create(source, url.isNull() ? String() : url.string())) 46 , m_code(m_provider, start Line)47 , m_code(m_provider, startPosition.m_line.oneBasedInt()) 47 48 , m_url(url) 48 49 { -
trunk/WebCore/bindings/v8/ScheduledAction.cpp
r70463 r71735 46 46 ScheduledAction::ScheduledAction(v8::Handle<v8::Context> context, v8::Handle<v8::Function> func, int argc, v8::Handle<v8::Value> argv[]) 47 47 : m_context(context) 48 , m_code(String(), KURL(), 0)48 , m_code(String(), KURL(), TextPosition1::belowRangePosition()) 49 49 { 50 50 m_function = v8::Persistent<v8::Function>::New(func); -
trunk/WebCore/bindings/v8/ScriptController.cpp
r71515 r71735 264 264 } 265 265 266 int ScriptController::eventHandlerLineNumber() const266 TextPosition0 ScriptController::eventHandlerPosition() const 267 267 { 268 268 ScriptableDocumentParser* parser = m_frame->document()->scriptableDocumentParser(); 269 269 if (parser) 270 return parser->lineNumber(); 271 return 0; 272 } 273 274 int ScriptController::eventHandlerColumnNumber() const 275 { 276 ScriptableDocumentParser* parser = m_frame->document()->scriptableDocumentParser(); 277 if (parser) 278 return parser->columnNumber(); 279 return 0; 270 return parser->textPosition(); 271 return TextPosition0::minimumPosition(); 280 272 } 281 273 -
trunk/WebCore/bindings/v8/ScriptController.h
r70463 r71735 156 156 void finishedWithEvent(Event*); 157 157 158 int eventHandlerLineNumber() const; 159 int eventHandlerColumnNumber() const; 158 TextPosition0 eventHandlerPosition() const; 160 159 161 160 void setProcessingTimerCallback(bool processingTimerCallback) { m_processingTimerCallback = processingTimerCallback; } -
trunk/WebCore/bindings/v8/ScriptEventListener.cpp
r70463 r71735 51 51 return 0; 52 52 53 int lineNumber = 1;54 int columnNumber = 0;53 // FIXME: Very strange: we initialize zero-based number with '1'. 54 TextPosition0 position(WTF::ZeroBasedNumber::fromZeroBasedInt(1), WTF::ZeroBasedNumber::base()); 55 55 String sourceURL; 56 56 … … 65 65 } 66 66 67 lineNumber = scriptController->eventHandlerLineNumber(); 68 columnNumber = scriptController->eventHandlerColumnNumber(); 67 position = scriptController->eventHandlerPosition(); 69 68 sourceURL = node->document()->url().string(); 70 69 } 71 70 72 return V8LazyEventListener::create(attr->localName().string(), node->isSVGElement(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld));71 return V8LazyEventListener::create(attr->localName().string(), node->isSVGElement(), attr->value(), sourceURL, position, WorldContextHandle(UseMainWorld)); 73 72 } 74 73 … … 82 81 return 0; 83 82 84 int lineNumber = 1;85 int columnNumber = 0;86 String sourceURL;87 88 83 ScriptController* scriptController = frame->script(); 89 84 if (!scriptController->canExecuteScripts(AboutToExecuteScript)) … … 95 90 } 96 91 97 lineNumber = scriptController->eventHandlerLineNumber(); 98 columnNumber = scriptController->eventHandlerColumnNumber(); 99 sourceURL = frame->document()->url().string(); 100 return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld)); 92 TextPosition0 position = scriptController->eventHandlerPosition(); 93 String sourceURL = frame->document()->url().string(); 94 return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, position, WorldContextHandle(UseMainWorld)); 101 95 } 102 96 -
trunk/WebCore/bindings/v8/ScriptSourceCode.h
r70463 r71735 36 36 #include "KURL.h" 37 37 #include "PlatformString.h" 38 #include <wtf/text/TextPosition.h> 38 39 39 40 namespace WebCore { … … 41 42 class ScriptSourceCode { 42 43 public: 43 ScriptSourceCode(const String& source, const KURL& url = KURL(), int startLine = 1)44 ScriptSourceCode(const String& source, const KURL& url = KURL(), const TextPosition1& startPosition = TextPosition1::minimumPosition()) 44 45 : m_source(source) 45 46 , m_cachedScript(0) 46 47 , m_url(url) 47 , m_start Line(startLine)48 , m_startPosition(startPosition) 48 49 { 49 50 } … … 55 56 , m_cachedScript(cs) 56 57 , m_url(ParsedURLString, cs->url()) 57 , m_start Line(1)58 , m_startPosition(TextPosition1::minimumPosition()) 58 59 { 59 60 } … … 64 65 CachedScript* cachedScript() const { return m_cachedScript.get(); } 65 66 const KURL& url() const { return m_url; } 66 int startLine() const { return m_startLine; } 67 int startLine() const { return m_startPosition.m_line.oneBasedInt(); } 68 const TextPosition1& startPosition() const { return m_startPosition; } 67 69 68 70 private: … … 70 72 CachedResourceHandle<CachedScript> m_cachedScript; 71 73 KURL m_url; 72 int m_startLine;74 TextPosition1 m_startPosition; 73 75 }; 74 76 -
trunk/WebCore/bindings/v8/V8LazyEventListener.cpp
r70463 r71735 42 42 namespace WebCore { 43 43 44 V8LazyEventListener::V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext)44 V8LazyEventListener::V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext) 45 45 : V8AbstractEventListener(true, worldContext) 46 46 , m_functionName(functionName) … … 48 48 , m_code(code) 49 49 , m_sourceURL(sourceURL) 50 , m_lineNumber(lineNumber) 51 , m_columnNumber(columnNumber) 50 , m_position(position) 52 51 { 53 52 } … … 115 114 code.append( "\n}).call(this, evt);}}}})"); 116 115 v8::Handle<v8::String> codeExternalString = v8ExternalString(code); 117 v8::Handle<v8::Script> script = V8Proxy::compileScript(codeExternalString, m_sourceURL, m_ lineNumber);116 v8::Handle<v8::Script> script = V8Proxy::compileScript(codeExternalString, m_sourceURL, m_position); 118 117 if (!script.IsEmpty()) { 119 118 v8::Local<v8::Value> value = proxy->runScript(script, false); -
trunk/WebCore/bindings/v8/V8LazyEventListener.h
r70463 r71735 35 35 #include "V8AbstractEventListener.h" 36 36 #include <v8.h> 37 #include <wtf/text/TextPosition.h> 37 38 #include <wtf/PassRefPtr.h> 38 39 … … 46 47 class V8LazyEventListener : public V8AbstractEventListener { 47 48 public: 48 static PassRefPtr<V8LazyEventListener> create(const String& functionName, bool isSVGEvent, const String& code, const String& sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext)49 static PassRefPtr<V8LazyEventListener> create(const String& functionName, bool isSVGEvent, const String& code, const String& sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext) 49 50 { 50 return adoptRef(new V8LazyEventListener(functionName, isSVGEvent, code, sourceURL, lineNumber, columnNumber, worldContext));51 return adoptRef(new V8LazyEventListener(functionName, isSVGEvent, code, sourceURL, position, worldContext)); 51 52 } 52 53 … … 57 58 58 59 private: 59 V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext);60 V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext); 60 61 61 62 virtual v8::Local<v8::Value> callListenerFunction(ScriptExecutionContext*, v8::Handle<v8::Value> jsEvent, Event*); … … 71 72 String m_code; 72 73 String m_sourceURL; 73 int m_lineNumber; 74 int m_columnNumber; 74 TextPosition0 m_position; 75 75 }; 76 76 -
trunk/WebCore/bindings/v8/V8Proxy.cpp
r70463 r71735 237 237 } 238 238 239 v8::Handle<v8::Script> V8Proxy::compileScript(v8::Handle<v8::String> code, const String& fileName, int baseLine, v8::ScriptData* scriptData)239 v8::Handle<v8::Script> V8Proxy::compileScript(v8::Handle<v8::String> code, const String& fileName, const TextPosition0& scriptStartPosition, v8::ScriptData* scriptData) 240 240 { 241 241 const uint16_t* fileNameString = fromWebCoreString(fileName); 242 242 v8::Handle<v8::String> name = v8::String::New(fileNameString, fileName.length()); 243 v8::Handle<v8::Integer> line = v8::Integer::New(baseLine); 244 v8::ScriptOrigin origin(name, line); 243 v8::Handle<v8::Integer> line = v8::Integer::New(scriptStartPosition.m_line.zeroBasedInt()); 244 v8::Handle<v8::Integer> column = v8::Integer::New(scriptStartPosition.m_column.zeroBasedInt()); 245 v8::ScriptOrigin origin(name, line, column); 245 246 v8::Handle<v8::Script> script = v8::Script::Compile(code, &origin, scriptData); 246 247 return script; … … 395 396 // NOTE: For compatibility with WebCore, ScriptSourceCode's line starts at 396 397 // 1, whereas v8 starts at 0. 397 v8::Handle<v8::Script> script = compileScript(code, source.url(), source.startLine() - 1, scriptData.get());398 v8::Handle<v8::Script> script = compileScript(code, source.url(), WTF::toZeroBasedTextPosition(source.startPosition()), scriptData.get()); 398 399 #if PLATFORM(CHROMIUM) 399 400 PlatformBridge::traceEventEnd("v8.compile", node, ""); … … 427 428 // script passed to us as the argument instead of using an empty string 428 429 // and 0 baseLine. 429 script = compileScript(code, "", 0);430 script = compileScript(code, "", TextPosition0::minimumPosition()); 430 431 } 431 432 -
trunk/WebCore/bindings/v8/V8Proxy.h
r70463 r71735 280 280 static v8::Handle<v8::Value> checkNewLegal(const v8::Arguments&); 281 281 282 static v8::Handle<v8::Script> compileScript(v8::Handle<v8::String> code, const String& fileName, int baseLine, v8::ScriptData* = 0);282 static v8::Handle<v8::Script> compileScript(v8::Handle<v8::String> code, const String& fileName, const TextPosition0& scriptStartPosition, v8::ScriptData* = 0); 283 283 284 284 // If the exception code is different from zero, a DOM exception is -
trunk/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
r70463 r71735 185 185 } 186 186 187 ScriptValue WorkerContextExecutionProxy::evaluate(const String& script, const String& fileName, int baseLine, WorkerContextExecutionState* state)187 ScriptValue WorkerContextExecutionProxy::evaluate(const String& script, const String& fileName, const TextPosition0& scriptStartPosition, WorkerContextExecutionState* state) 188 188 { 189 189 v8::HandleScope hs; … … 197 197 198 198 v8::Local<v8::String> scriptString = v8ExternalString(script); 199 v8::Handle<v8::Script> compiledScript = V8Proxy::compileScript(scriptString, fileName, baseLine);199 v8::Handle<v8::Script> compiledScript = V8Proxy::compileScript(scriptString, fileName, scriptStartPosition); 200 200 v8::Local<v8::Value> result = runScript(compiledScript); 201 201 … … 228 228 if (m_recursion >= kMaxRecursionDepth) { 229 229 v8::Local<v8::String> code = v8ExternalString("throw RangeError('Recursion too deep')"); 230 script = V8Proxy::compileScript(code, "", 0);230 script = V8Proxy::compileScript(code, "", TextPosition0::minimumPosition()); 231 231 } 232 232 -
trunk/WebCore/bindings/v8/WorkerContextExecutionProxy.h
r70463 r71735 37 37 #include "ScriptValue.h" 38 38 #include <v8.h> 39 #include <wtf/text/TextPosition.h> 39 40 #include <wtf/OwnPtr.h> 40 41 #include <wtf/Vector.h> … … 67 68 68 69 // Evaluate a script file in the current execution environment. 69 ScriptValue evaluate(const String& script, const String& fileName, int baseLine, WorkerContextExecutionState*);70 ScriptValue evaluate(const String& script, const String& fileName, const TextPosition0& scriptStartPosition, WorkerContextExecutionState*); 70 71 71 72 // Returns a local handle of the context. -
trunk/WebCore/bindings/v8/WorkerScriptController.cpp
r70463 r71735 76 76 77 77 WorkerContextExecutionState state; 78 ScriptValue result = m_proxy->evaluate(sourceCode.source(), sourceCode.url().string(), sourceCode.startLine() - 1, &state);78 ScriptValue result = m_proxy->evaluate(sourceCode.source(), sourceCode.url().string(), WTF::toZeroBasedTextPosition(sourceCode.startPosition()), &state); 79 79 if (state.hadException) { 80 80 if (exception) -
trunk/WebCore/dom/PendingScript.cpp
r70463 r71735 41 41 { 42 42 setCachedScript(0); 43 m_starting LineNumber = 0;43 m_startingPosition = TextPosition1::belowRangePosition(); 44 44 m_watchingForLoad = false; 45 45 return m_element.release(); -
trunk/WebCore/dom/PendingScript.h
r70463 r71735 29 29 #include "CachedResourceClient.h" 30 30 #include "CachedResourceHandle.h" 31 #include <wtf/text/TextPosition.h> 31 32 #include <wtf/PassRefPtr.h> 32 33 … … 44 45 public: 45 46 PendingScript() 46 : m_starting LineNumber(0)47 : m_startingPosition(TextPosition1::belowRangePosition()) 47 48 , m_watchingForLoad(false) 48 49 { … … 51 52 PendingScript(const PendingScript& other) 52 53 : CachedResourceClient(other) 53 , m_starting LineNumber(other.m_startingLineNumber)54 , m_startingPosition(other.m_startingPosition) 54 55 , m_watchingForLoad(other.m_watchingForLoad) 55 56 , m_element(other.m_element) … … 65 66 return *this; 66 67 67 m_starting LineNumber = other.m_startingLineNumber;68 m_startingPosition = other.m_startingPosition; 68 69 m_watchingForLoad = other.m_watchingForLoad; 69 70 m_element = other.m_element; … … 75 76 // FIXME: No setter means this is never set to anything other than 0. 76 77 // This is either unnecessary or incorrect. 77 int startingLineNumber() const { return m_startingLineNumber; }78 TextPosition1 startingPosition() const { return m_startingPosition; } 78 79 79 80 bool watchingForLoad() const { return m_watchingForLoad; } … … 90 91 91 92 private: 92 int m_startingLineNumber; // Only used for inline script tags.93 TextPosition1 m_startingPosition; // Only used for inline script tags. 93 94 bool m_watchingForLoad; 94 95 RefPtr<Element> m_element; -
trunk/WebCore/dom/ScriptableDocumentParser.h
r70463 r71735 28 28 29 29 #include "DecodedDataDocumentParser.h" 30 #include <wtf/text/TextPosition.h> 30 31 31 32 namespace WebCore { 32 33 33 class SegmentedString;34 34 class XSSAuditor; 35 35 … … 48 48 // These are used to expose the current line/column to the scripting system. 49 49 virtual int lineNumber() const = 0; 50 virtual int columnNumber() const = 0;50 virtual TextPosition0 textPosition() const = 0; 51 51 52 52 XSSAuditor* xssAuditor() const { return m_xssAuditor; } -
trunk/WebCore/dom/XMLDocumentParser.h
r70463 r71735 103 103 virtual bool wellFormed() const { return !m_sawError; } 104 104 virtual int lineNumber() const; 105 virtual int columnNumber() const;105 TextPosition0 textPosition() const; 106 106 107 107 static bool supportsXMLVersion(const String&); … … 129 129 130 130 bool appendFragmentSource(const String&); 131 132 int columnNumber() const; 133 134 // This method is introduced to temporary legalize existing line/column 135 // coordinate bug: it is believed that numbers that originally were zero-based 136 // eventually becomes one-based. 137 // FIXME: Investigate and get rid of this method. 138 TextPosition1 textPositionOneBased() const; 131 139 132 140 #if USE(QXMLSTREAM) … … 209 217 CachedResourceHandle<CachedScript> m_pendingScript; 210 218 RefPtr<Element> m_scriptElement; 211 int m_scriptStartLine;219 TextPosition1 m_scriptStartPosition; 212 220 213 221 bool m_parsingFragment; -
trunk/WebCore/dom/XMLDocumentParserLibxml2.cpp
r71503 r71735 561 561 , m_lastErrorColumn(0) 562 562 , m_pendingScript(0) 563 , m_scriptStart Line(0)563 , m_scriptStartPosition(TextPosition1::belowRangePosition()) 564 564 , m_parsingFragment(false) 565 565 , m_scriptingPermission(FragmentScriptingAllowed) … … 588 588 , m_lastErrorColumn(0) 589 589 , m_pendingScript(0) 590 , m_scriptStart Line(0)590 , m_scriptStartPosition(TextPosition1::belowRangePosition()) 591 591 , m_parsingFragment(true) 592 592 , m_scriptingPermission(scriptingPermission) … … 820 820 ScriptElement* scriptElement = toScriptElement(newElement.get()); 821 821 if (scriptElement) 822 m_scriptStart Line = lineNumber();822 m_scriptStartPosition = textPositionOneBased(); 823 823 824 824 m_currentNode->deprecatedParserAddChild(newElement.get()); … … 911 911 m_scriptElement = 0; 912 912 } else 913 m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStart Line));913 m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartPosition)); 914 914 915 915 // JavaScript may have detached the parser … … 1377 1377 int XMLDocumentParser::lineNumber() const 1378 1378 { 1379 // FIXME: The implementation probably returns 1-based int, but method should return 0-based. 1379 1380 return context() ? context()->input->line : 1; 1380 1381 } … … 1382 1383 int XMLDocumentParser::columnNumber() const 1383 1384 { 1385 // FIXME: The implementation probably returns 1-based int, but method should return 0-based. 1384 1386 return context() ? context()->input->col : 1; 1387 } 1388 1389 TextPosition0 XMLDocumentParser::textPosition() const 1390 { 1391 xmlParserCtxtPtr context = this->context(); 1392 if (!context) 1393 return TextPosition0::minimumPosition(); 1394 // FIXME: The context probably contains 1-based numbers, but we treat them as 0-based, 1395 // to be consistent with fixme's in lineNumber() and columnNumber 1396 // methods. 1397 return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(context->input->line), 1398 WTF::ZeroBasedNumber::fromZeroBasedInt(context->input->col)); 1399 } 1400 1401 // This method has a correct implementation, in contrast to textPosition() method. 1402 // It should replace textPosition(). 1403 TextPosition1 XMLDocumentParser::textPositionOneBased() const 1404 { 1405 xmlParserCtxtPtr context = this->context(); 1406 if (!context) 1407 return TextPosition1::minimumPosition(); 1408 return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(context->input->line), 1409 WTF::OneBasedNumber::fromOneBasedInt(context->input->col)); 1385 1410 } 1386 1411 -
trunk/WebCore/dom/XMLDocumentParserQt.cpp
r71654 r71735 106 106 , m_lastErrorColumn(0) 107 107 , m_pendingScript(0) 108 , m_scriptStart Line(0)108 , m_scriptStartPosition(TextPosition1::belowRangePosition()) 109 109 , m_parsingFragment(false) 110 110 , m_scriptingPermission(FragmentScriptingAllowed) … … 133 133 , m_lastErrorColumn(0) 134 134 , m_pendingScript(0) 135 , m_scriptStart Line(0)135 , m_scriptStartPosition(TextPosition1::belowRangePosition()) 136 136 , m_parsingFragment(true) 137 137 , m_scriptingPermission(permission) … … 239 239 } 240 240 241 TextPosition0 XMLDocumentParser::textPosition() const 242 { 243 return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(lineNumber()), WTF::ZeroBasedNumber::fromZeroBasedInt(columnNumber())); 244 } 245 246 // This method incorrectly reinterprets zero-base lineNumber method as one-based number. 247 // FIXME: This error is kept for compatibility. We should fix it eventually. 248 TextPosition1 XMLDocumentParser::textPositionOneBased() const 249 { 250 return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(lineNumber()), WTF::OneBasedNumber::fromOneBasedInt(columnNumber())); 251 } 252 241 253 void XMLDocumentParser::stopParsing() 242 254 { … … 523 535 ScriptElement* scriptElement = toScriptElement(newElement.get()); 524 536 if (scriptElement) 525 m_scriptStart Line = lineNumber();537 m_scriptStartPosition = textPositionOneBased(); 526 538 527 539 m_currentNode->deprecatedParserAddChild(newElement.get()); … … 600 612 m_scriptElement = 0; 601 613 } else 602 m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStart Line));614 m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartPosition)); 603 615 } 604 616 m_requestingScript = false; -
trunk/WebCore/html/parser/HTMLDocumentParser.cpp
r70463 r71735 192 192 ASSERT(m_treeBuilder->isPaused()); 193 193 194 int scriptStartLine = 0;195 RefPtr<Element> scriptElement = m_treeBuilder->takeScriptToProcess(scriptStart Line);194 TextPosition1 scriptStartPosition = TextPosition1::belowRangePosition(); 195 RefPtr<Element> scriptElement = m_treeBuilder->takeScriptToProcess(scriptStartPosition); 196 196 // We will not have a scriptRunner when parsing a DocumentFragment. 197 197 if (!m_scriptRunner) 198 198 return true; 199 return m_scriptRunner->execute(scriptElement.release(), scriptStart Line);199 return m_scriptRunner->execute(scriptElement.release(), scriptStartPosition); 200 200 } 201 201 … … 397 397 } 398 398 399 int HTMLDocumentParser::columnNumber() const 400 { 401 return m_tokenizer->columnNumber(); 399 TextPosition0 HTMLDocumentParser::textPosition() const 400 { 401 int lineZeroBased = m_tokenizer->lineNumber(); 402 int columnOneBased = m_tokenizer->columnNumber(); 403 404 return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(lineZeroBased), 405 WTF::OneBasedNumber::fromOneBasedInt(columnOneBased).convertToZeroBased()); 402 406 } 403 407 -
trunk/WebCore/html/parser/HTMLDocumentParser.h
r70463 r71735 93 93 virtual void executeScriptsWaitingForStylesheets(); 94 94 virtual int lineNumber() const; 95 virtual int columnNumber() const;95 virtual TextPosition0 textPosition() const; 96 96 97 97 // HTMLScriptRunnerHost -
trunk/WebCore/html/parser/HTMLScriptRunner.cpp
r70463 r71735 100 100 } 101 101 errorOccurred = false; 102 return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.starting LineNumber());102 return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.startingPosition()); 103 103 } 104 104 … … 173 173 // This function should match 10.2.5.11 "An end tag whose tag name is 'script'" 174 174 // Script handling lives outside the tree builder to keep the each class simple. 175 bool HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, int startLine)175 bool HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, const TextPosition1& scriptStartPosition) 176 176 { 177 177 ASSERT(scriptElement); … … 179 179 180 180 // Try to execute the script given to us. 181 runScript(scriptElement.get(), s tartLine);181 runScript(scriptElement.get(), scriptStartPosition); 182 182 183 183 if (haveParsingBlockingScript()) { … … 291 291 // This method is meant to match the HTML5 definition of "running a script" 292 292 // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#running-a-script 293 void HTMLScriptRunner::runScript(Element* script, int startingLineNumber)293 void HTMLScriptRunner::runScript(Element* script, const TextPosition1& scriptStartPosition) 294 294 { 295 295 ASSERT(m_document); … … 318 318 // ASSERT(document()->haveStylesheetsLoaded()); 319 319 ASSERT(isExecutingScript()); 320 ScriptSourceCode sourceCode(script->textContent(), documentURLForScriptExecution(m_document), s tartingLineNumber);320 ScriptSourceCode sourceCode(script->textContent(), documentURLForScriptExecution(m_document), scriptStartPosition); 321 321 executeScript(sourceCode); 322 322 } -
trunk/WebCore/html/parser/HTMLScriptRunner.h
r70463 r71735 29 29 #include "PendingScript.h" 30 30 #include <wtf/Deque.h> 31 #include <wtf/text/TextPosition.h> 31 32 #include <wtf/Noncopyable.h> 32 33 #include <wtf/PassRefPtr.h> … … 53 54 54 55 // Processes the passed in script and any pending scripts if possible. 55 bool execute(PassRefPtr<Element> scriptToProcess, int scriptStartLine);56 bool execute(PassRefPtr<Element> scriptToProcess, const TextPosition1& scriptStartPosition); 56 57 57 58 bool executeScriptsWaitingForLoad(CachedResource*); … … 77 78 bool requestPendingScript(PendingScript&, Element*) const; 78 79 79 void runScript(Element*, int startingLineNumber);80 void runScript(Element*, const TextPosition1& scriptStartPosition); 80 81 81 82 // Helpers for dealing with HTMLScriptRunnerHost -
trunk/WebCore/html/parser/HTMLTreeBuilder.cpp
r71209 r71735 56 56 57 57 static const int uninitializedLineNumberValue = -1; 58 59 static TextPosition1 uninitializedPositionValue1() 60 { 61 return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(-1), WTF::OneBasedNumber::base()); 62 } 58 63 59 64 namespace { … … 341 346 , m_originalInsertionMode(InitialMode) 342 347 , m_tokenizer(tokenizer) 343 , m_scriptToProcessStart Line(uninitializedLineNumberValue)344 , m_lastScriptElementStart Line(uninitializedLineNumberValue)348 , m_scriptToProcessStartPosition(uninitializedPositionValue1()) 349 , m_lastScriptElementStartPosition(TextPosition0::belowRangePosition()) 345 350 , m_usePreHTML5ParserQuirks(usePreHTML5ParserQuirks) 346 351 , m_hasPendingForeignInsertionModeSteps(false) … … 360 365 , m_originalInsertionMode(InitialMode) 361 366 , m_tokenizer(tokenizer) 362 , m_scriptToProcessStart Line(uninitializedLineNumberValue)363 , m_lastScriptElementStart Line(uninitializedLineNumberValue)367 , m_scriptToProcessStartPosition(uninitializedPositionValue1()) 368 , m_lastScriptElementStartPosition(TextPosition0::belowRangePosition()) 364 369 , m_usePreHTML5ParserQuirks(usePreHTML5ParserQuirks) 365 370 , m_hasPendingForeignInsertionModeSteps(false) … … 424 429 } 425 430 426 PassRefPtr<Element> HTMLTreeBuilder::takeScriptToProcess( int& scriptStartLine)431 PassRefPtr<Element> HTMLTreeBuilder::takeScriptToProcess(TextPosition1& scriptStartPosition) 427 432 { 428 433 // Unpause ourselves, callers may pause us again when processing the script. … … 431 436 // before running scripts. 432 437 m_isPaused = false; 433 scriptStart Line = m_scriptToProcessStartLine;434 m_scriptToProcessStart Line = uninitializedLineNumberValue;438 scriptStartPosition = m_scriptToProcessStartPosition; 439 m_scriptToProcessStartPosition = uninitializedPositionValue1(); 435 440 return m_scriptToProcess.release(); 436 441 } … … 2191 2196 ASSERT(m_tree.currentElement()->hasTagName(scriptTag)); 2192 2197 m_scriptToProcess = m_tree.currentElement(); 2193 m_scriptToProcessStart Line = m_lastScriptElementStartLine + 1;2198 m_scriptToProcessStartPosition = WTF::toOneBasedTextPosition(m_lastScriptElementStartPosition); 2194 2199 m_tree.openElements()->pop(); 2195 2200 if (isParsingFragment() && m_fragmentContext.scriptingPermission() == FragmentScriptingNotAllowed) … … 2771 2776 m_tokenizer->setState(HTMLTokenizer::ScriptDataState); 2772 2777 m_originalInsertionMode = m_insertionMode; 2773 m_lastScriptElementStartLine = m_tokenizer->lineNumber(); 2778 2779 TextPosition0 position = TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(m_tokenizer->lineNumber()), WTF::ZeroBasedNumber::base()); 2780 m_lastScriptElementStartPosition = position; 2781 2774 2782 setInsertionMode(TextMode); 2775 2783 } -
trunk/WebCore/html/parser/HTMLTreeBuilder.h
r70463 r71735 33 33 #include "HTMLFormattingElementList.h" 34 34 #include "HTMLTokenizer.h" 35 #include <wtf/text/TextPosition.h> 35 36 #include <wtf/Noncopyable.h> 36 37 #include <wtf/OwnPtr.h> … … 72 73 73 74 // Must be called when parser is paused before calling the parser again. 74 PassRefPtr<Element> takeScriptToProcess( int& scriptStartLine);75 PassRefPtr<Element> takeScriptToProcess(TextPosition1& scriptStartPosition); 75 76 76 77 // Done, close any open tags, etc. … … 249 250 250 251 RefPtr<Element> m_scriptToProcess; // <script> tag which needs processing before resuming the parser. 251 int m_scriptToProcessStartLine; // Starting line number of the script tag needing processing.252 TextPosition1 m_scriptToProcessStartPosition; // Starting line number of the script tag needing processing. 252 253 253 254 // FIXME: We probably want to remove this member. Originally, it was 254 255 // created to service the legacy tree builder, but it seems to be used for 255 256 // some other things now. 256 int m_lastScriptElementStartLine;257 TextPosition0 m_lastScriptElementStartPosition; 257 258 258 259 bool m_usePreHTML5ParserQuirks; -
trunk/WebKit/chromium/ChangeLog
r71705 r71735 1 2010-11-10 Peter Rybin <peter.rybin@gmail.com> 2 3 Reviewed by Adam Barth. 4 5 HTML parser should provide script column position within HTML document to JavaScript engine 6 https://bugs.webkit.org/show_bug.cgi?id=45271 7 8 Replaces script line number with TextPosition structure. 9 10 * src/WebFrameImpl.cpp: 11 (WebKit::WebFrameImpl::executeScript): 12 (WebKit::WebFrameImpl::executeScriptInIsolatedWorld): 13 (WebKit::WebFrameImpl::executeScriptAndReturnValue): 14 1 15 2010-11-09 Kenneth Russell <kbr@google.com> 2 16 -
trunk/WebKit/chromium/src/WebFrameImpl.cpp
r71437 r71735 754 754 void WebFrameImpl::executeScript(const WebScriptSource& source) 755 755 { 756 TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(source.startLine), WTF::OneBasedNumber::base()); 756 757 m_frame->script()->executeScript( 757 ScriptSourceCode(source.code, source.url, source.startLine));758 ScriptSourceCode(source.code, source.url, position)); 758 759 } 759 760 … … 765 766 766 767 for (unsigned i = 0; i < numSources; ++i) { 768 TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(sourcesIn[i].startLine), WTF::OneBasedNumber::base()); 767 769 sources.append(ScriptSourceCode( 768 sourcesIn[i].code, sourcesIn[i].url, sourcesIn[i].startLine));770 sourcesIn[i].code, sourcesIn[i].url, position)); 769 771 } 770 772 … … 818 820 const WebScriptSource& source) 819 821 { 822 TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(source.startLine), WTF::OneBasedNumber::base()); 820 823 return m_frame->script()->executeScript( 821 ScriptSourceCode(source.code, source.url, source.startLine)).v8Value();824 ScriptSourceCode(source.code, source.url, position)).v8Value(); 822 825 } 823 826
Note: See TracChangeset
for help on using the changeset viewer.