source: webkit/trunk/JavaScriptCore/kjs/Parser.cpp@ 37845

Last change on this file since 37845 was 37622, checked in by [email protected], 17 years ago

JavaScriptCore:

2008-10-15 Geoffrey Garen <[email protected]>

Reviewed by Cameron Zwarich.

Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
Start the debugger without reloading the inspected page

  • VM/CodeBlock.h: (JSC::EvalCodeCache::get): Updated for tweak to parsing API.
  • kjs/CollectorHeapIterator.h: Added. An iterator for the object heap, which we use to find all the live functions and recompile them.
  • kjs/DebuggerCallFrame.cpp: (JSC::DebuggerCallFrame::evaluate): Updated for tweak to parsing API.
  • kjs/FunctionConstructor.cpp: (JSC::constructFunction): Updated for tweak to parsing API.
  • kjs/JSFunction.cpp: (JSC::JSFunction::JSFunction): Try to validate our SourceCode in debug builds by ASSERTing that it's syntactically valid. This doesn't catch all SourceCode bugs, but it catches a lot of them.
  • kjs/JSGlobalObjectFunctions.cpp: (JSC::globalFuncEval): Updated for tweak to parsing API.
  • kjs/Parser.cpp: (JSC::Parser::parse):
  • kjs/Parser.h: (JSC::Parser::parse): Tweaked the parser to make it possible to parse without an ExecState, and to allow the client to specify a debugger to notify (or not) about the source we parse. This allows the inspector to recompile even though no JavaScript is executing, then notify the debugger about all source code when it's done.
  • kjs/Shell.cpp: (prettyPrintScript): Updated for tweak to parsing API.
  • kjs/SourceRange.h: (JSC::SourceCode::isNull): Added to help with ASSERTs.
  • kjs/collector.cpp: (JSC::Heap::heapAllocate): (JSC::Heap::sweep): (JSC::Heap::primaryHeapBegin): (JSC::Heap::primaryHeapEnd):
  • kjs/collector.h: (JSC::): Moved a bunch of declarations around to enable compilation of CollectorHeapIterator.
  • kjs/interpreter.cpp: (JSC::Interpreter::checkSyntax): (JSC::Interpreter::evaluate): Updated for tweak to parsing API.
  • kjs/lexer.h: (JSC::Lexer::sourceCode): BUG FIX: Calculate SourceCode ranges relative to the SourceCode range in which we're lexing, otherwise nested functions that are compiled individually get SourceCode ranges that don't reflect their nesting.
  • kjs/nodes.cpp: (JSC::FunctionBodyNode::FunctionBodyNode): (JSC::FunctionBodyNode::finishParsing): (JSC::FunctionBodyNode::create): (JSC::FunctionBodyNode::copyParameters):
  • kjs/nodes.h: (JSC::ScopeNode::setSource): (JSC::FunctionBodyNode::parameterCount): Added some helper functions for copying one FunctionBodyNode's parameters to another. The recompiler uses these when calling "finishParsing".

WebCore:

2008-10-15 Geoffrey Garen <[email protected]>

Reviewed by Cameron Zwarich.

Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
Start the debugger without reloading the inspected page

  • WebCore.base.exp: New symbols.
  • ForwardingHeaders/kjs/CollectorHeapIterator.h: Copied from ForwardingHeaders/kjs/ustring.h.
  • ForwardingHeaders/kjs/Parser.h: Copied from ForwardingHeaders/kjs/ustring.h.
  • WebCore.xcodeproj/project.pbxproj: New forwarding headers.
  • inspector/InspectorController.cpp: (WebCore::InspectorController::setWindowVisible): (WebCore::InspectorController::windowScriptObjectAvailable): (WebCore::InspectorController::startDebugging):
  • inspector/InspectorController.h: Renamed startDebuggingAndReloadInspectedPage to startDebugging, and changed its behavior to match.
  • inspector/JavaScriptDebugListener.h:
  • inspector/JavaScriptDebugServer.cpp: (WebCore::JavaScriptDebugServer::JavaScriptDebugServer): (WebCore::JavaScriptDebugServer::addListener): (WebCore::JavaScriptDebugServer::removeListener): (WebCore::JavaScriptDebugServer::recompileAllJSFunctions): (WebCore::JavaScriptDebugServer::willAddFirstListener): (WebCore::JavaScriptDebugServer::didRemoveLastListener):
  • inspector/JavaScriptDebugServer.h: Refactored the JavaScriptDebugServer to centralize handling of adding the first listener and removing the last. Then, added a feature to recompile all JS functions in these cases. This allows us to dynamically add and remove hooks like the debugger hooks without reloading the page.
  • inspector/front-end/ScriptsPanel.js:
  • English.lproj/localizedStrings.js: Updated for startDebuggingAndReloadInspectedPage => startDebugging rename. Removed all UI that claimed that starting the debugger would reload the page.

WebKit/mac:

2008-10-15 Geoffrey Garen <[email protected]>

Reviewed by Cameron Zwarich.

Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
Start the debugger without reloading the inspected page

WebKit/win:

2008-10-15 Geoffrey Garen <[email protected]>

Reviewed by Cameron Zwarich.

Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
Start the debugger without reloading the inspected page

  • WebInspector.cpp: (WebInspector::toggleDebuggingJavaScript): Updated for rename.
  • Property svn:eol-style set to native
File size: 2.3 KB
Line 
1/*
2 * Copyright (C) 1999-2001 Harri Porten ([email protected])
3 * Copyright (C) 2001 Peter Kelly ([email protected])
4 * Copyright (C) 2003, 2006, 2007, 2008 Apple Inc. All rights reserved.
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 *
21 */
22
23#include "config.h"
24#include "Parser.h"
25
26#include "debugger.h"
27#include "lexer.h"
28#include <wtf/HashSet.h>
29#include <wtf/Vector.h>
30
31extern int kjsyyparse(void*);
32
33namespace JSC {
34
35void Parser::parse(JSGlobalData* globalData, int* errLine, UString* errMsg)
36{
37 ASSERT(!m_sourceElements);
38
39 int defaultErrLine;
40 UString defaultErrMsg;
41
42 if (!errLine)
43 errLine = &defaultErrLine;
44 if (!errMsg)
45 errMsg = &defaultErrMsg;
46
47 *errLine = -1;
48 *errMsg = 0;
49
50 Lexer& lexer = *globalData->lexer;
51 lexer.setCode(*m_source);
52
53 int parseError = kjsyyparse(globalData);
54 bool lexError = lexer.sawError();
55 lexer.clear();
56
57 ParserRefCounted::deleteNewObjects(globalData);
58
59 if (parseError || lexError) {
60 *errLine = lexer.lineNo();
61 *errMsg = "Parse error";
62 m_sourceElements.clear();
63 }
64}
65
66void Parser::didFinishParsing(SourceElements* sourceElements, ParserRefCountedData<DeclarationStacks::VarStack>* varStack,
67 ParserRefCountedData<DeclarationStacks::FunctionStack>* funcStack, CodeFeatures features, int lastLine, int numConstants)
68{
69 m_sourceElements = sourceElements;
70 m_varDeclarations = varStack;
71 m_funcDeclarations = funcStack;
72 m_features = features;
73 m_lastLine = lastLine;
74 m_numConstants = numConstants;
75}
76
77} // namespace JSC
Note: See TracBrowser for help on using the repository browser.