JavaScriptCore:

2008-10-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler and Cameron Zwarich.

        Preliminary step toward dynamic recompilation: Standardized and
        simplified the parsing interface.
        
        The main goal in this patch is to make it easy to ask for a duplicate
        compilation, and get back a duplicate result -- same source URL, same
        debugger / profiler ID, same toString behavior, etc.
        
        The basic unit of compilation and evaluation is now SourceCode, which
        encompasses a SourceProvider, a range in that provider, and a starting
        line number.

        A SourceProvider now encompasses a source URL, and *is* a source ID,
        since a pointer is a unique identifier.

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since
        other APIs are no longer supported.
        
        * VM/CodeBlock.h:
        (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since
        other APIs are no longer supported.
        (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed
        by our caller -- this is a better bottleneck.

        * VM/CodeGenerator.cpp:
        (JSC::CodeGenerator::CodeGenerator): Updated for the fact that
        FunctionBodyNode's parameters are no longer a WTF::Vector.

        * kjs/Arguments.cpp:
        (JSC::Arguments::Arguments): ditto

        * kjs/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser,
        since other APIs are no longer supported.

        * kjs/FunctionConstructor.cpp:
        (JSC::constructFunction): Provide a SourceCode to the Parser, since
        other APIs are no longer supported. Adopt FunctionBodyNode's new
        "finishParsing" API.

        * kjs/JSFunction.cpp:
        (JSC::JSFunction::lengthGetter):
        (JSC::JSFunction::getParameterName): Updated for the fact that
        FunctionBodyNode's parameters are no longer a wtf::Vector.

        * kjs/JSFunction.h: Nixed some cruft.

        * kjs/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval): Provide a SourceCode to the Parser, since
        other APIs are no longer supported. 

        * kjs/Parser.cpp:
        (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch
        of broken out parameters. Stop tracking sourceId as an integer, since we
        use the SourceProvider pointer for this now. Don't clamp the
        startingLineNumber, since SourceCode does that now.

        * kjs/Parser.h:
        (JSC::Parser::parse): Standardized the parsing interface to require a
        SourceCode.

        * kjs/Shell.cpp:
        (functionRun):
        (functionLoad):
        (prettyPrintScript):
        (runWithScripts):
        (runInteractive): Provide a SourceCode to the Interpreter, since
        other APIs are no longer supported.

        * kjs/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider):
        (JSC::SourceProvider::url):
        (JSC::SourceProvider::asId):
        (JSC::UStringSourceProvider::create):
        (JSC::UStringSourceProvider::UStringSourceProvider): Added new
        responsibilities described above.

        * kjs/SourceRange.h:
        (JSC::SourceCode::SourceCode):
        (JSC::SourceCode::toString):
        (JSC::SourceCode::provider):
        (JSC::SourceCode::firstLine):
        (JSC::SourceCode::data):
        (JSC::SourceCode::length): Added new responsibilities described above.
        Renamed SourceRange to SourceCode, based on review feedback. Added
        a makeSource function for convenience.

        * kjs/debugger.h: Provide a SourceCode to the client, since other APIs
        are no longer supported.

        * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode.

        * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision
        on 64bit platforms.

        * kjs/interpreter.cpp:
        (JSC::Interpreter::checkSyntax):
        (JSC::Interpreter::evaluate):
        * kjs/interpreter.h: Require a SourceCode instead of broken out arguments.

        * kjs/lexer.cpp:
        (JSC::Lexer::setCode):
        * kjs/lexer.h:
        (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number
        into a SourceCode. Fixed a bug where the Lexer would accidentally keep
        alive the last SourceProvider forever.

        * kjs/nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::ProgramNode::ProgramNode):
        (JSC::ProgramNode::create):
        (JSC::EvalNode::EvalNode):
        (JSC::EvalNode::generateCode):
        (JSC::EvalNode::create):
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::finishParsing):
        (JSC::FunctionBodyNode::create):
        (JSC::FunctionBodyNode::generateCode):
        (JSC::ProgramNode::generateCode):
        (JSC::FunctionBodyNode::paramString):
        * kjs/nodes.h:
        (JSC::ScopeNode::):
        (JSC::ScopeNode::sourceId):
        (JSC::FunctionBodyNode::):
        (JSC::FunctionBodyNode::parameterCount):
        (JSC::FuncExprNode::):
        (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since
        SourceCode is now responsible for tracking URL, ID, etc. Streamlined
        some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to
        help make clear what you need to do in order to finish parsing a
        FunctionBodyNode.

        * wtf/Vector.h:
        (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called
        when buffer is not 0, since FunctionBodyNode is more than happy
        to get back a 0 buffer, and other functions like RefPtr::release() allow
        for 0, too.

JavaScriptGlue:

2008-10-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler and Cameron Zwarich.

        * JSRun.cpp:
        (JSRun::Evaluate):
        (JSRun::CheckSyntax): Provide a SourceCode to the Interpreter, since
        other APIs are no longer supported.

WebCore:

2008-10-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler and Cameron Zwarich.

        Updated for JavaScriptCore API changes: use a SourceCode instead of
        broken out parameters; treat sourceId as intptr_t.

        * ForwardingHeaders/kjs/SourceRange.h: Copied from ForwardingHeaders/kjs/SourceProvider.h.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::create):
        (WebCore::StringSourceProvider::StringSourceProvider):

        (WebCore::makeSource): Added a makeSource function for convenience.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject evaluateWebScript:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):

        * bridge/jni/jni_runtime.h:
        (JSC::Bindings::JavaString::operator UString): Replaced the explicit
        ustring() function with an implicit operator because this class already
        holds a UString::rep.

        * page/Console.cpp:
        (WebCore::retrieveLastCaller):
        (WebCore::Console::trace):
        * page/InspectorController.cpp:
        (WebCore::jsStringRef):
        (WebCore::InspectorController::addBreakpoint):
        (WebCore::InspectorController::removeBreakpoint):
        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::failedToParseSource):
        * page/InspectorController.h:
        * page/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::JavaScriptCallFrame):
        * page/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::create):
        (WebCore::JavaScriptCallFrame::sourceIdentifier):
        (WebCore::JavaScriptCallFrame::update):
        * page/JavaScriptDebugListener.h:
        * page/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::addBreakpoint):
        (WebCore::JavaScriptDebugServer::removeBreakpoint):
        (WebCore::JavaScriptDebugServer::hasBreakpoint):
        (WebCore::dispatchDidParseSource):
        (WebCore::dispatchFailedToParseSource):
        (WebCore::JavaScriptDebugServer::sourceParsed):
        (WebCore::JavaScriptDebugServer::callEvent):
        (WebCore::JavaScriptDebugServer::atStatement):
        (WebCore::JavaScriptDebugServer::returnEvent):
        (WebCore::JavaScriptDebugServer::exception):
        (WebCore::JavaScriptDebugServer::willExecuteProgram):
        (WebCore::JavaScriptDebugServer::didExecuteProgram):
        (WebCore::JavaScriptDebugServer::didReachBreakpoint):
        * page/JavaScriptDebugServer.h:
        * page/inspector/ScriptsPanel.js: Renamed internal uses of sourceId and 
        sourceIdentifier to sourceID.

WebKit/mac:

2008-10-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler and Cameron Zwarich.

        Updated for JavaScriptCore API changes: use a SourceCode instead of
        broken out parameters; treat sourceId as intptr_t.
        
        We still treat sourceId as int in some cases because of DashCode. See
        <rdar://problem/6263293> WebScriptDebugDelegate should use intptr_t for
        sourceId, not int.

        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (toNSString):
        (WebScriptDebugger::sourceParsed):
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):
        (WebScriptDebugger::willExecuteProgram):
        (WebScriptDebugger::didExecuteProgram):
        (WebScriptDebugger::didReachBreakpoint):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@37184 268f45cc-cd09-0410-ab3c-d52691b4dbfc
55 files changed