1. 12 Jan, 2012 1 commit
    • barraclough@apple.com's avatar
      Allow accessor get/set property to be set to undefined · c709a123
      barraclough@apple.com authored
      Reviewed by Oliver Hunt.
      AccessorDescriptor properties may have their get & set properties defined to reference a function
      (Callable object) or be set to undefined. Valid PropertyDescriptors created by toPropertyDescriptor
      (defined from JS code via Object.defineProperty, etc) have get and set properties that are in one of
      three states (1) nonexistent, (2) set to undefined, or (3) a function (any Callable object).
      On the PropertyDescriptor object these three states are represneted by JSValue(), jsUndefined(), and
      any JSObject* (with a constraint that this must be callable).
      Logically the get/set property of an accessor descriptor on an object might be in any of the three
      states above, but in practice there is no way to distinguish between the first two states. As such
      we stor the get/set values in property storage in a JSObject* field, with 0 indicating absent or
      undefined. When unboxing to a PropertyDescriptor, map this back to a JS undefined value.
      * runtime/GetterSetter.h:
          - Allow the getter/setter to be cleared.
      * runtime/JSArray.cpp:
          - Changed to call getterObject/setterObject.
          - Added ASSERT.
      * runtime/JSObject.cpp:
          - Changed to call getterObject/setterObject.
      * runtime/ObjectConstructor.cpp:
          - getter/setter values read from properties on object are never missing, they will now be set as undefined by 'setDescriptor'.
          - Do not translate undefined->empty, this loses an important distinction between a get/set property being absent, or being explicitly set to undefined.
      * runtime/PropertyDescriptor.cpp:
          - Accessors to convert the get/set property to an object pointer, converting undefined to 0.
          - Translate a getter/setter internally represented at 0 to undefined, indicating that it is present.
      * runtime/PropertyDescriptor.h:
          - Declare getterObject/setterObject.
      * fast/js/Object-defineProperty-expected.txt:
      * fast/js/script-tests/Object-defineProperty.js:
          - Update a couple of inaccurate tests (it is invalid for a property to have
            both a get: and value: field; AccessorDescritor properties do not have a
            writable property). Add more test cases.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@104836 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  2. 10 Jan, 2012 1 commit
    • barraclough@apple.com's avatar
      Use SameValue to compare property descriptor values · beb7f228
      barraclough@apple.com authored
      Reviewed by Sam Weinig.
      Rather than strictEqual.
      * runtime/JSArray.cpp:
          - Missing configurablePresent() check.
      * runtime/JSObject.cpp:
          - call sameValue.
      * runtime/PropertyDescriptor.cpp:
          - Moved from JSArray.cpp, fix NaN comparison.
          - call sameValue.
      * runtime/PropertyDescriptor.h:
          - Added declaration for sameValue.
      * fast/js/array-defineOwnProperty-expected.txt:
      * fast/js/script-tests/array-defineOwnProperty.js:
          - Add new test cases.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@104602 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  3. 09 Jan, 2012 1 commit
    • barraclough@apple.com's avatar
      https://bugs.webkit.org/show_bug.cgi?id=75789 · 166c9077
      barraclough@apple.com authored
      defineOwnProperty not implemented for Array objects
      Reviewed by Sam Weinig.
      Implements support for getter/setter & non-default attribute properties on arrays,
      by forcing them into a dictionary-like 'SparseMode'. This fixes ~300 test-262
      test failures.
      * JavaScriptCore.exp:
          - Updated exports.
      * dfg/DFGOperations.cpp:
          - JSArray::pop now requires an exec state.
      * runtime/ArrayPrototype.cpp:
          - JSArray::pop now requires an exec state.
      * runtime/JSArray.cpp:
          - Add a potentially empty entry into the map.
          - Changed to call setter.
          - calls getters.
          - does not call getters.
          - Convert into 'SparseMode' - removes the vectors, don't allow it to be recreated.
          - Create a numeric property based on a descriptor.
          - See ES5.1 9.12.
          - Helper for the [[DefineOwnProperty]] algorithm.
          - Define an indexed property on an array object.
          - Marks the length read-only, enters SparseMode as necessary.
          - Defines either an indexed property or 'length' on an array object.
          - Updated to correctly handle accessor descriptors & attributes.
          - Updated to correctly handle accessor descriptors & attributes.
          - Pass strict mode flag to setLength.
          - putByIndexBeyondVectorLength requires an ExecState* rather than a JSGloablData&.
          - Pass exec to SparseArrayValueMap::put.
          - Do not allow deletion of non-configurable properties.
          - used in implementation of getOwnPropertyNames.
          - Properties in the sparse map should be iterated in order.
          - Updated to take a 'shouldThrow' flag, return a result indicating error.
          - pop should throw an error if length is not writable, even if the array is empty.
          - putByIndexBeyondVectorLength requires an ExecState* rather than a JSGloablData&.
          - Changed 'get' to 'getNonSparseMode' (can't be getters to call).
          - Changed 'get' to 'getNonSparseMode' (can't be getters to call).
      * runtime/JSArray.h:
          - Check if the length is read only.
          - Mark the length as read only.
          - Moved into header.
          - Wraps SparseArrayValueMap::lengthIsReadOnly.
      * runtime/JSObject.cpp:
          - Should be returning the result of putDescriptor.
      * runtime/PropertyDescriptor.cpp:
          - Added attributesOverridingCurrent - this should probably be merged with attributesWithOverride.
      * runtime/PropertyDescriptor.h:
          - Added attributesOverridingCurrent.
      * fast/js/array-defineOwnProperty-expected.txt: Added.
      * fast/js/array-defineOwnProperty.html: Added.
      * fast/js/script-tests/array-defineOwnProperty.js: Added.
          - Added tests for array properties with accessors & non-defulat attributes.
      * fast/js/mozilla/strict/
      * fast/js/mozilla/strict/8.12.5-expected.txt:
      * ietestcenter/Javascript/
      * ietestcenter/Javascript/
          - Check in passing results.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@104488 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  4. 03 Jan, 2012 1 commit
    • barraclough@apple.com's avatar
      https://bugs.webkit.org/show_bug.cgi?id=75429 · bfdffec8
      barraclough@apple.com authored
      ThrowTypeError should be a singleton object
      Reviewed by Sam Weinig.
      Per section 13.2.3 of the spec.
      We could change setAccessorDescriptor to be able to share the global
      GetterSetter object, rather than storing the accessor functions and
      creating a new GetterSetter in defineProperty - but this won't be a
      small change to PropertyDescriptors (and would probably mean making
      GetterSetter objects immutable?) - so I'll leave that for another
      * JavaScriptCore.exp:
          - don't export setAccessorDescriptor
      * runtime/Arguments.cpp:
          - call throwTypeErrorGetterSetter instead of createTypeErrorFunction
      * runtime/Error.cpp:
      * runtime/Error.h:
          - remove createTypeErrorFunction
      * runtime/JSFunction.cpp:
      * runtime/JSFunction.h:
          - remove unused createDescriptorForThrowingProperty
      * runtime/JSGlobalObject.cpp:
          - removed m_strictModeTypeErrorFunctionStructure.
      * runtime/JSGlobalObject.h:
          - removed m_strictModeTypeErrorFunctionStructure.
      * runtime/PropertyDescriptor.cpp:
          - changed to take a GetterSetter
      * runtime/PropertyDescriptor.h:
          - changed to take a GetterSetter
      Per section 13.2.3 of the spec.
      * fast/js/basic-strict-mode-expected.txt:
          - ThrowTypeError is a singleton, so cannot generate
            property-specific error messages.
      * fast/js/script-tests/strict-throw-type-error.js: Added.
      * fast/js/strict-throw-type-error-expected.txt: Added.
      * fast/js/strict-throw-type-error.html: Added.
          - added test case that ThrowTypeError is a singleton
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@103958 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  5. 01 Jan, 2011 1 commit
    • abarth@webkit.org's avatar
      Move JavaScriptCore to Source · 76da8fc1
      abarth@webkit.org authored
      Reviewed by Eric Seidel.
      Update references to JavaScriptCore to point to the new location.
      * Android.mk:
      * CMakeLists.txt:
      * DerivedSources.pro:
      * GNUmakefile.am:
      * Makefile:
      * WebKit.pri:
      * WebKit.pro:
      * wscript:
      Update references to JavaScriptCore to point to the new location.
      * BuildSlaveSupport/build.webkit.org-config/master.cfg:
      * DumpRenderTree/qt/DumpRenderTree.pro:
      * DumpRenderTree/qt/ImageDiff.pro:
      * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
      * DumpRenderTree/wscript:
      * Scripts/build-jsc:
      * Scripts/build-webkit:
      * Scripts/do-file-rename:
      * Scripts/do-webcore-rename:
      * Scripts/run-javascriptcore-tests:
      * Scripts/update-javascriptcore-test-results:
      * Scripts/webkitdirs.pm:
      * Scripts/webkitpy/common/config/build_unittest.py:
      * Scripts/webkitpy/style/checker.py:
      * Scripts/webkitpy/style/checker_unittest.py:
      * Scripts/webkitpy/style/checkers/cpp_unittest.py:
      * WebKitTestRunner/InjectedBundle/qt/InjectedBundle.pro:
      * WebKitTestRunner/qt/WebKitTestRunner.pro:
      * wx/build/settings.py:
      Update references to JavaScriptCore.
      * Android.derived.jscbindings.mk:
      * Android.v8bindings.mk:
      * CMakeLists.txt:
      * WebCore.gyp/WebCore.gyp:
      * WebCore.pro:
        - These changes are subtle and might not be 100% correct.
      * move-js-headers.sh:
      * WebKit.gyp:
        - Point to JavaScriptCore in its new location.
      * GNUmakefile.am:
      * docs/GNUmakefile.am:
        - Point to JavaScriptCore in its new location.
      * WebKit_pch.h:
      * docs/qtwebkit.qdocconf:
        - Point to JavaScriptCore in its new location.
      * WebKit.vcproj/WebKit.sln:
        - Point to JavaScriptCore in its new location.
      * bindings/python/wscript:
      * wscript:
        - Point to JavaScriptCore in its new location.
      * WebKit2.pro:
        - Point to JavaScriptCore in its new location.
      * PrettyPatch/PrettyPatch.rb:
        - Remove reference to JavaScriptCore as a source directory.
      * coding/assertion-guidelines.html:
        - Update documentation to point to the new location of
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@74855 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  6. 07 Dec, 2009 1 commit
    • barraclough@apple.com's avatar
      https://bugs.webkit.org/show_bug.cgi?id=32184 · b749f0bb
      barraclough@apple.com authored
      Handle out-of-memory conditions with JSC Ropes with a JS exception, rather than crashing.
      Switch from using fastMalloc to tryFastMalloc, pass an ExecState to record the exception on.
      Reviewed by Oliver Hunt.
      * API/JSCallbackObjectFunctions.h:
      * API/JSValueRef.cpp:
      * JavaScriptCore.exp:
      * bytecompiler/BytecodeGenerator.cpp:
      * debugger/DebuggerCallFrame.cpp:
      * interpreter/Interpreter.cpp:
      * jit/JITStubs.cpp:
      * profiler/ProfileGenerator.cpp:
      * profiler/Profiler.cpp:
      * profiler/Profiler.h:
      * runtime/ArrayPrototype.cpp:
      * runtime/DateConstructor.cpp:
      * runtime/FunctionPrototype.cpp:
      * runtime/InternalFunction.cpp:
      * runtime/InternalFunction.h:
      * runtime/JSCell.cpp:
      * runtime/JSCell.h:
      * runtime/JSONObject.cpp:
      * runtime/JSObject.cpp:
      * runtime/JSObject.h:
      * runtime/JSPropertyNameIterator.cpp:
      * runtime/JSString.cpp:
      * runtime/JSString.h:
      (JSC::JSString::Rope::operator new):
      * runtime/JSValue.h:
      * runtime/NativeErrorConstructor.cpp:
      * runtime/Operations.cpp:
      * runtime/Operations.h:
      * runtime/PropertyDescriptor.cpp:
      * runtime/PropertyDescriptor.h:
      * runtime/StringPrototype.cpp:
      * bindings/ScriptControllerBase.cpp:
      * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
      * bindings/js/ScriptCallStack.cpp:
      * bindings/js/ScriptValue.cpp:
      * bindings/js/ScriptValue.h:
      * bindings/js/SerializedScriptValue.cpp:
      * bindings/objc/WebScriptObject.mm:
      (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
      * page/Console.cpp:
      * WebView/WebView.mm:
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@51801 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  7. 18 Sep, 2009 1 commit
  8. 26 Aug, 2009 1 commit
    • oliver@apple.com's avatar
      [ES5] Implement getOwnPropertyDescriptor · 4b4f785d
      oliver@apple.com authored
      Reviewed by Gavin Barraclough.
      Implement the core runtime support for getOwnPropertyDescriptor.
      This adds a virtual getOwnPropertyDescriptor method to every class
      that implements getOwnPropertySlot that shadows the behaviour of
      getOwnPropertySlot.  The alternative would be to make getOwnPropertySlot
      (or PropertySlots in general) provide property attribute information,
      but quick testing showed this to be a regression.
      Implement the WebCore side of getOwnPropertyDescriptor.  This
      requires a custom implementation of getOwnPropertyDescriptor
      for every class with a custom implementation of getOwnPropertySlot.
      The bindings generator has been updated to generate appropriate
      versions of getOwnPropertyDescriptor for the general case where
      a custom getOwnPropertyDescriptor is not needed.  ES5 is vague
      about how getOwnPropertyDescriptor should work in the context of
      "host" functions with polymorphic [[GetOwnProperty]], so it seems
      okay that occasionally we "guess" what attributes -- eg. determining
      whether a property is writable.
      Test: fast/js/getOwnPropertyDescriptor.html
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@47780 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  9. 13 Aug, 2009 1 commit
    • oliver@apple.com's avatar
      Devirtualise marking · 52000e7d
      oliver@apple.com authored
      Reviewed by Maciej Stachowiak.
      Add a bit to TypeInfo to indicate that an object uses the standard
      JSObject::markChildren method.  This allows us to devirtualise marking
      of most objects (though a branch is still needed).  We also add a branch
      to identify arrays thus devirtualising marking in that case as well.
      In order to make the best use of this devirtualisation I've also reworked
      the MarkStack::drain() logic to make the iteration more efficient.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@47267 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  10. 10 Aug, 2009 1 commit
    • oliver@apple.com's avatar
      Stack overflow crash in JavaScript garbage collector mark pass · 5fca29f7
      oliver@apple.com authored
      Reviewed by Gavin Barraclough and Sam Weinig
      Make the GC mark phase iterative by using an explicit mark stack.
      To do this marking any single object is performed in multiple stages
        * The object is appended to the MarkStack, this sets the marked
          bit for the object using the new markDirect() function, and then
        * When the MarkStack is drain()ed the object is popped off the stack
          and markChildren(MarkStack&) is called on the object to collect
          all of its children.  drain() then repeats until the stack is empty.
      Additionally I renamed a number of methods from 'mark' to 'markAggregate'
      in order to make it more clear that marking of those object was not
      going to result in an actual recursive mark.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@47022 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  11. 18 Jun, 2009 1 commit
    • darin@apple.com's avatar
      JavaScriptCore: · c46cfaf6
      darin@apple.com authored
      2009-06-17  Darin Adler  <darin@apple.com>
              Reviewed by Oliver Hunt.
              Bug 26429: Make JSON.stringify non-recursive so it can handle objects
              of arbitrary complexity
              For marking I decided not to use gcProtect, because this is inside the engine
              so it's easy enough to just do marking. And that darned gcProtect does locking!
              Oliver tried to convince me to used MarkedArgumentBuffer, but the constructor
              for that class says "FIXME: Remove all clients of this API, then remove this API."
              * runtime/Collector.cpp:
              (JSC::Heap::collect): Add a call to JSONObject::markStringifiers.
              * runtime/CommonIdentifiers.cpp:
              (JSC::CommonIdentifiers::CommonIdentifiers): Added emptyIdentifier.
              * runtime/CommonIdentifiers.h: Ditto.
              * runtime/JSGlobalData.cpp:
              (JSC::JSGlobalData::JSGlobalData): Initialize firstStringifierToMark to 0.
              * runtime/JSGlobalData.h: Added firstStringifierToMark.
              * runtime/JSONObject.cpp: Cut down the includes to the needed ones only.
              (JSC::unwrapNumberOrString): Added. Helper for unwrapping number and string
              objects to get their number and string values.
              (JSC::ReplacerPropertyName::ReplacerPropertyName): Added. The class is used
              to wrap an identifier or integer so we don't have to do any work unless we
              actually call a replacer.
              (JSC::ReplacerPropertyName::value): Added.
              (JSC::gap): Added. Helper function for the Stringifier constructor.
              (JSC::PropertyNameForFunctionCall::PropertyNameForFunctionCall): Added.
              The class is used to wrap an identifier or integer so we don't have to
              allocate a number or string until we actually call toJSON or a replacer.
              (JSC::PropertyNameForFunctionCall::asJSValue): Added.
              (JSC::Stringifier::Stringifier): Updated and moved out of the class
              definition. Added code to hook this into a singly linked list for marking.
              (JSC::Stringifier::~Stringifier): Remove from the singly linked list.
              (JSC::Stringifier::mark): Mark all the objects in the holder stacks.
              (JSC::Stringifier::stringify): Updated.
              (JSC::Stringifier::appendQuotedString): Tweaked and streamlined a bit.
              (JSC::Stringifier::toJSON): Renamed from toJSONValue.
              (JSC::Stringifier::appendStringifiedValue): Renamed from stringify.
              Added code to use the m_holderStack to do non-recursive stringify of
              objects and arrays. This code also uses the timeout checker since in
              pathological cases it could be slow even without calling into the
              JavaScript virtual machine.
              (JSC::Stringifier::willIndent): Added.
              (JSC::Stringifier::indent): Added.
              (JSC::Stringifier::unindent): Added.
              (JSC::Stringifier::startNewLine): Added.
              (JSC::Stringifier::Holder::Holder): Added.
              (JSC::Stringifier::Holder::appendNextProperty): Added. This is the
              function that handles the format of arrays and objects.
              (JSC::JSONObject::getOwnPropertySlot): Moved this down to the bottom
              of the file so the JSONObject class is not interleaved with the
              Stringifier class.
              (JSC::JSONObject::markStringifiers): Added. Calls mark.
              (JSC::JSONProtoFuncStringify): Streamlined the code here. The code
              to compute the gap string is now a separate function.
              * runtime/JSONObject.h: Made everything private. Added markStringifiers.
      2009-06-17  Darin Adler  <darin@apple.com>
              Reviewed by Oliver Hunt.
              Bug 26429: Make JSON.stringify non-recursive so it can handle objects
              of arbitrary complexity
              * fast/js/JSON-stringify-expected.txt: Updated.
              * fast/js/resources/JSON-stringify.js: Changed the infinite object and
              infinite array tests to instead just test something a fixed number of
              levels deep. Otherwise we end up with an infinite loop in the test,
              which would lead to the slow-script dialog in the production web browser.
              Also raised the number from 512 to 2048 since there's no fixed limit any more.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@44813 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  12. 09 Jun, 2009 1 commit
  13. 13 May, 2009 2 commits
    • darin@apple.com's avatar
      JavaScriptCore: · d8085775
      darin@apple.com authored
      2009-05-13  Darin Adler  <darin@apple.com>
              Revert the parser arena change. It was a slowdown, not a speedup.
              Better luck next time (I'll break it up into pieces).
      2009-05-13  Darin Adler  <darin@apple.com>
              Revert the parser arena change. It was a slowdown, not a speedup.
              Better luck next time (I'll break it up into pieces).
      2009-05-13  Darin Adler  <darin@apple.com>
              Revert the parser arena change. It was a slowdown, not a speedup.
              Better luck next time (I'll break it up into pieces).
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@43661 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    • darin@apple.com's avatar
      JavaScriptCore: · 53ecc4e3
      darin@apple.com authored
      2009-05-13  Darin Adler  <darin@apple.com>
              Reviewed by Cameron Zwarich.
              Bug 25674: syntax tree nodes should use arena allocation
              Step 3: Add some actual arena allocation. About 1% SunSpider speedup.
              * JavaScriptCore.exp: Updated.
              * bytecompiler/BytecodeGenerator.cpp:
              (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack
              contains const Identifier* now.
              (JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const
              * bytecompiler/BytecodeGenerator.h: Ditto
              * bytecompiler/SegmentedVector.h: Added isEmpty.
              * debugger/Debugger.cpp:
              (JSC::Debugger::recompileAllJSFunctions): Moved this function here from
              WebCore so WebCore doesn't need the details of FunctionBodyNode.
              * debugger/Debugger.h: Ditto.
              * interpreter/Interpreter.cpp:
              (JSC::Interpreter::execute): Updated since VarStack contains const
              Identifier* now.
              * jit/JITStubs.cpp:
              (JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body
              rather than on the function object, since we can't easily have inlined
              access to the FunctionBodyNode in JSFunction.h since WebCore needs
              access to that header.
              (JSC::JITStubs::cti_op_construct_JSConstruct): Ditto.
              * profiler/Profiler.cpp:
              (JSC::Profiler::createCallIdentifier): Ditto.
              * parser/Grammar.y: Use JSGlobalData* to pass the global data pointer
              around whenever possible instead of using void*. Changed
              SET_EXCEPTION_LOCATION from a macro to an inline function. Marked
              the structure-creating functions inline. Changed the VarStack to use
              identifier pointers instead of actual identifiers. This takes
              advantage of the fact that all identifier pointers come from the
              arena and avoids referenc count churn. Changed Identifier* to
              const Identifier* to make sure we don't modify any by accident.
              Used identifiers for regular expression strings too, using the new
              scanRegExp that has out parameters instead of the old one that relied
              on side effects in the Lexer. Move the creation of numeric identifiers
              out of this file and into the PropertyNode constructor.
              * parser/Lexer.cpp:
              (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers.
              (JSC::Lexer::makeIdentifier): Changed return type to const Identifier*
              and changed to call ParserArena.
              (JSC::Lexer::scanRegExp): Added out arguments that are const Identifier*
              as well as a prefix character argument so we can handle the /= case
              without a string append.
              (JSC::Lexer::skipRegExp): Added. Skips a regular expression without
              allocating Identifier objects.
              (JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern,
              and m_flags, and added code to set m_arena to 0.
              * parser/Lexer.h: Updated for changes above.
              * parser/NodeConstructors.h:
              (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable
              on the arena.
              (JSC::ParserArenaDeletable::operator new): Changed to call the
              allocateDeletable function on the arena instead of deleteWithArena.
              (JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead
              of UString since these come from the parser which makes identifiers.
              (JSC::PropertyNode::PropertyNode): Added new constructor that makes
              numeric identifiers. Some day we might want to optimize this for
              integers so it doesn't create a string for each one.
              (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier
              since it's now a const Identifier& so it can't be left uninitialized.
              (JSC::BreakNode::BreakNode): Ditto.
              (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements*
              to keep track of the statements rather than a separate statement vector.
              (JSC::BlockNode::BlockNode): Ditto.
              (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier.
              * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here.
              It seemed strangely out of place in the header.
              (JSC::ThrowableExpressionData::emitThrowError): Added an overload for
              UString as well as Identifier.
              (JSC::SourceElements::singleStatement): Added.
              (JSC::SourceElements::lastStatement): Added.
              (JSC::RegExpNode::emitBytecode): Updated since the pattern and flags
              are now Identifier instead of UString. Also changed the throwError code
              to use the substitution mechanism instead of doing a string append.
              (JSC::SourceElements::emitBytecode): Added. Replaces the old
              statementListEmitCode function, since we now keep the SourceElements
              objects around.
              (JSC::BlockNode::lastStatement): Added.
              (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of
              (JSC::CaseClauseNode::emitBytecode): Added.
              (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode
              instead of statementListEmitCode.
              (JSC::ScopeNodeData::ScopeNodeData): Changed to store the
              SourceElements* instead of using releaseContentsIntoVector.
              (JSC::ScopeNode::emitStatementsBytecode): Added.
              (JSC::ScopeNode::singleStatement): Added.
              (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead
              of statementListEmitCode.
              (JSC::EvalNode::emitBytecode): Ditto.
              (JSC::EvalNode::generateBytecode): Removed code to clear the children
              vector. This optimization is no longer possible since everything is in
              a single arena.
              (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode
              insetad of statementListEmitCode and check for the return node using
              the new functions.
              * parser/Nodes.h: Changed VarStack to store const Identifier* instead
              of Identifier and rely on the arena to control lifetime. Added a new
              ParserArenaFreeable class. Made ParserArenaDeletable inherit from
              FastAllocBase instead of having its own operator new. Base the Node
              class on ParserArenaFreeable. Changed the various Node classes
              to use const Identifier& instead of Identifier to avoid the need to
              call their destructors and allow them to function as "freeable" in the
              arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions.
              Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode,
              CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable
              as a base class since they do not descend from Node. Eliminated the
              StatementVector type and instead have various classes use SourceElements*
              instead of StatementVector. This prevents those classes from having th
              use ParserArenaDeletable to make sure the vector destructor is called.
              * parser/Parser.cpp:
              (JSC::Parser::parse): Pass the arena to the lexer.
              * parser/Parser.h: Added an include of ParserArena.h, which is no longer
              included by Nodes.h.
              * parser/ParserArena.cpp:
              (JSC::ParserArena::ParserArena): Added. Initializes the new members,
              m_freeableMemory, m_freeablePoolEnd, and m_identifiers.
              (JSC::ParserArena::freeablePool): Added. Computes the pool pointer,
              since we store only the current pointer and the end of pool pointer.
              (JSC::ParserArena::deallocateObjects): Added. Contains the common
              memory-deallocation logic used by both the destructor and the
              reset function.
              (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects.
              (JSC::ParserArena::reset): Ditto. Also added code to zero out the
              new structures, and switched to use clear() instead of shrink(0) since
              we don't really reuse arenas.
              (JSC::ParserArena::makeNumericIdentifier): Added.
              (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool
              is empty.
              (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine
              since this is used only for assertions at the moment.
              * parser/ParserArena.h: Added an actual arena of "freeable" objects,
              ones that don't need destructors to be called. Also added the segmented
              vector of identifiers that used to be in the Lexer.
              * runtime/FunctionConstructor.cpp:
              (JSC::extractFunctionBody): Use singleStatement function rather than
              getting at a StatementVector.
              * runtime/FunctionPrototype.cpp:
              (JSC::functionProtoFuncToString): Call isHostFunction on the body
              rather than the function object.
              * runtime/JSFunction.cpp:
              (JSC::JSFunction::JSFunction): Moved the structure version of this in
              here from the header. It's not hot enough that it needs to be inlined.
              (JSC::JSFunction::isHostFunction): Moved this in here from the header.
              It's now a helper to be used only within the class.
              (JSC::JSFunction::setBody): Moved this in here. It's not hot enough that
              it needs to be inlined, and we want to be able to compile the header
              without the definition of FunctionBodyNode.
              * runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was
              exposing too much JavaScriptCore dependency to WebCore. Because of this
              change and some changes made to WebCore, we could now export a lot fewer
              headers from JavaScriptCore, but I have not done that yet in this check-in.
              Made a couple functions non-inline. Removes some isHostFunction() assertions.
              * wtf/FastAllocBase.h: Added the conventional using statements we use in
              WTF so we can use identifiers from the WTF namespace without explicit
              namespace qualification or namespace directive. This is the usual WTF style,
              although it's unconventional in the C++ world. We use the namespace primarily
              for link-time disambiguation, not compile-time.
              * wtf/FastMalloc.cpp: Fixed an incorrect comment.
      2009-05-13  Darin Adler  <darin@apple.com>
              Reviewed by Cameron Zwarich.
              Bug 25674: syntax tree nodes should use arena allocation
              * bindings/js/JSDOMBinding.h: Removed include of JSFunction.h.
              We don't want the entire DOM binding to depend on that file.
              * bindings/js/JSAudioConstructor.cpp: Added include of Error.h.
              Before we inherited this automatically because JDDOMBinding.h
              included JSFunction.h, but that was excessive.
              * bindings/js/JSDOMWindowCustom.cpp: Ditto.
              * bindings/js/JSHTMLInputElementCustom.cpp: Ditto.
              * bindings/js/JSImageConstructor.cpp: Ditto.
              * bindings/js/JSLazyEventListener.cpp: Ditto, but for JSFunction.h.
              * bindings/js/JSMessageChannelConstructor.cpp: Ditto.
              * bindings/js/JSOptionConstructor.cpp: Ditto.
              * bindings/js/JSWorkerConstructor.cpp: Ditto.
              * bindings/js/JSXMLHttpRequestConstructor.cpp: Ditto.
              * bridge/jni/jni_jsobject.mm: Ditto, but for SourceCode.h.
              * inspector/InspectorController.cpp: Ditto.
              * inspector/JavaScriptDebugServer.cpp:
              Moved mose of this function into the base class in JavaScriptCore,
              so the details of compilation don't have to be exposed.
      2009-05-13  Darin Adler  <darin@apple.com>
              Reviewed by Cameron Zwarich.
              Bug 25674: syntax tree nodes should use arena allocation
              * Plugins/Hosted/NetscapePluginInstanceProxy.mm: Updated includes.
              New ones needed due to reducing includes of JSDOMBinding.h.
              * WebView/WebScriptDebugger.mm: Ditto.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@43642 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  14. 10 May, 2009 1 commit
    • darin@apple.com's avatar
      2009-05-10 Darin Adler <darin@apple.com> · 7bf9de1d
      darin@apple.com authored
              Reviewed by Cameron Zwarich.
              Bug 25674: syntax tree nodes should use arena allocation
              Part two: Remove reference counting from most nodes.
              * JavaScriptCore.exp: Updated.
              * JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp.
              * parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of
              ParserArenaData. Took out now-nonfunctional code that tries to manually
              release declaration list. Changed the new calls that create FuncDeclNode
              and FuncExprNode so that they use the proper version of operator new for
              the reference-counted idiom, not the deletion idiom.
              * parser/NodeConstructors.h:
              (JSC::ParserArenaDeletable::operator new): Added.
              (JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added.
              (JSC::Node::Node): Removed ParserRefCounted initializer.
              (JSC::ElementNode::ElementNode): Ditto.
              (JSC::PropertyNode::PropertyNode): Ditto.
              (JSC::ArgumentsNode::ArgumentsNode): Ditto.
              (JSC::SourceElements::SourceElements): Ditto.
              (JSC::ParameterNode::ParameterNode): Ditto.
              (JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer.
              (JSC::FuncDeclNode::FuncDeclNode): Ditto.
              (JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer.
              (JSC::ClauseListNode::ClauseListNode): Ditto.
              (JSC::CaseBlockNode::CaseBlockNode): Ditto.
              * parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of
              * parser/Nodes.cpp:
              (JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer.
              (JSC::ProgramNode::create): Use the proper version of operator new for
              the reference-counted idiom, not the deletion idiom. Use the arena
              contains function instead of the vecctor find function.
              (JSC::EvalNode::create): Use the proper version of operator new for
              the reference-counted idiom, not the deletion idiom. Use the arena
              reset function instead of the vector shrink function.
              (JSC::FunctionBodyNode::createNativeThunk): Use the proper version
              of operator new for the reference-counted idiom, not the deletion idiom.
              (JSC::FunctionBodyNode::create): More of the same.
              * parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted
              to replace ParserRefCounted. Fixed inheritance so only the classes that
              need reference counting inherit from ParserArenaRefCounted.
              * parser/Parser.cpp:
              (JSC::Parser::parse): Set m_sourceElements to 0 since it now starts
              uninitialized. Just set it to 0 again in the failure case, since it's
              now just a raw pointer, not an owning one.
              (JSC::Parser::reparseInPlace): Removed now-unneeded get() function.
              (JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData
              with uses of ParserArenaData.
              * parser/Parser.h: Less RefPtr, more arena.
              * parser/ParserArena.cpp: Added.
              * parser/ParserArena.h: Added.
              * runtime/JSGlobalData.cpp:
              (JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's
              now in the Parser.
              (JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef.
              (JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit.
              * runtime/JSGlobalData.h: Removed parserArena, which is now in Parser.
              * wtf/RefCounted.h: Added deletionHasBegun function, for use in
              assertions to catch deletion not done by the deref function.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@43479 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  15. 07 May, 2009 1 commit
    • oliver@apple.com's avatar
      Improve native call performance · 459251ae
      oliver@apple.com authored
      Reviewed by Gavin Barraclough.
      Fix the windows build by adding calling convention declarations everywhere,
      chose fastcall as that seemed most sensible given we were having to declare
      the convention explicitly.  In addition switched to fastcall on mac in the
      deluded belief that documented fastcall behavior on windows would match
      actual its actual behavior.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@43372 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  16. 05 May, 2009 3 commits
  17. 20 Apr, 2009 1 commit
    • darin@apple.com's avatar
      WebKitTools: · 4fa8943e
      darin@apple.com authored
      2009-04-20  Darin Adler  <darin@apple.com>
              Reviewed by Sam Weinig.
              * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added PlainTextController.h
              and PlainTextController.mm.
              * DumpRenderTree/mac/FrameLoadDelegate.mm:
              (-[FrameLoadDelegate webView:didClearWindowObject:forFrame:]): Added PlainTextController
              as "window.plainText".
              * DumpRenderTree/mac/PlainTextController.h: Added.
              * DumpRenderTree/mac/PlainTextController.mm: Added.
      2009-04-20  Darin Adler  <darin@apple.com>
              Reviewed by Sam Weinig.
              * fast/dom/Window/window-properties.html: Added a new DumpRenderTree window
              object property, plainText.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@42681 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  18. 23 Feb, 2008 1 commit
    • ddkilzer@apple.com's avatar
      WebCore: · 267da135
      ddkilzer@apple.com authored
              Please clarify licensing for some files
              Reviewed by Darin.
              * bindings/objc/WebScriptObject.h: Added Apple BSD-style license.
              * bindings/objc/WebScriptObjectPrivate.h: Ditto.
              * platform/text/mac/ShapeArabic.c: Added ICU license from WebCore/icu/LICENSE.
              Please clarify licensing for some files
              Reviewed by Darin.
              * Plugins/WebNetscapeDeprecatedFunctions.c: Updated copyright statement
              and added Apple BSD-style license.
              * Plugins/WebNetscapeDeprecatedFunctions.h: Ditto.
              Please clarify licensing for some files
              Reviewed by Darin.
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp: Added
              copyright statement.  Replaced license with newer Apple BSD-style license.
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Ditto.
              * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.cpp: Ditto.
              * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h: Ditto.
              * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp: Ditto.
              * DumpRenderTree/win/TestNetscapePlugin/main.c: Ditto.
              * mangleme/LICENSE: Added (LGPL).
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@30520 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  19. 30 Mar, 2007 2 commits
    • andersca's avatar
      Reviewed by Geoff. · b5e193f8
      andersca authored
              * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c:
              Add casts.
              * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h:
              Don't use #import, use #include.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@20619 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    • andersca's avatar
      JavaScriptCore: · 77d5e0d0
      andersca authored
              Reviewed by Geoff.
              Implement _NPN_Enumerate support.
              * JavaScriptCore.exp:
              * bindings/NP_jsobject.cpp:
              * bindings/c/c_instance.cpp:
              * bindings/c/c_instance.h:
              * bindings/npapi.h:
              * bindings/npruntime.h:
              * bindings/npruntime_impl.h:
              * bindings/runtime.h:
              * bindings/runtime_object.cpp:
              * bindings/runtime_object.h:
              Reviewed by Geoff.
              Add enumeration test.
              * plugins/netscape-enumerate-expected.txt: Added.
              * plugins/netscape-enumerate.html: Added.
              Reviewed by Geoff.
              * Plugins/WebNetscapePluginPackage.m:
              (-[WebNetscapePluginPackage load]):
              Initialize pushpopupsenabledstate, poppopupsenabledstate and enumerate.
              * Plugins/npapi.m:
              Add stubs for these functions.
              * Plugins/npfunctions.h:
              Add new methods to NPNetscapeFuncs.
              Reviewed by Geoff.
              * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
              Add TestObject.c and TestObject.h
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
              Implement the testObject property.
              Implement testEnumerate which takes an object and an array and enumerates
              the properties of the object and adds them to the array.
              Allocate the test object.
              Free the test object.
              * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.c: Added.
              * DumpRenderTree/TestNetscapePlugIn.subproj/TestObject.h: Added.
              Add a test object with two enumerable properties.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@20613 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  20. 29 Mar, 2007 1 commit
    • ggaren's avatar
      LayoutTests: · 2663f9a7
      ggaren authored
              Reviewed by Beth Dakin.
              Layout test for <rdar://problem/5091330> REGRESSION: Repro crash in 
              -[WebBaseNetscapePluginView(WebNPPCallbacks) destroyStream:reason:] 
              navigating away from page with DivX movie plug-in (13203)
              * plugins/destroy-stream-twice-expected.txt: Added.
              * plugins/destroy-stream-twice.html: Added.
              Reviewed by Beth Dakin, reviewed by Maciej Stachowiak.
              Layout test for <rdar://problem/5091330> REGRESSION: Repro crash in 
              -[WebBaseNetscapePluginView(WebNPPCallbacks) destroyStream:reason:] 
              navigating away from page with DivX movie plug-in (13203)
              Changed LOG_ERROR to LOG so the layout test doesn't produce console spew
              every time you run it.
              * Plugins/WebBaseNetscapePluginView.mm:
              (-[WebBaseNetscapePluginView destroyStream:reason:]):
              Reviewed by Beth Dakin.
              Layout test for <rdar://problem/5091330> REGRESSION: Repro crash in 
              -[WebBaseNetscapePluginView(WebNPPCallbacks) destroyStream:reason:] 
              navigating away from page with DivX movie plug-in (13203)
              Added hasStream property and destroyStream function, used by layout test.
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
              * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@20597 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  21. 05 Mar, 2007 1 commit
    • andersca's avatar
      LayoutTests: · 526c36f0
      andersca authored
              Reviewed by Adam, Darin.
              In Mail, a crash occurs at WebCore::Frame::tree() when clicking on embedded flash object
              * plugins/get-url-with-blank-target-expected.txt: Added.
              * plugins/get-url-with-blank-target.html: Added.
              Reviewed by Adam, Darin.
              In Mail, a crash occurs at WebCore::Frame::tree() when clicking on embedded flash object
              * Plugins/WebBaseNetscapePluginView.mm:
              (-[WebBaseNetscapePluginView loadPluginRequest:]):
              Handle the case where the web view returned from the delegate method is null. Also, send out an error notification
              in that case so we can catch it.
              Reviewed by Adam, Darin.
              In Mail, a crash occurs at WebCore::Frame::tree() when clicking on embedded flash object
              Add a "getURLNotify" method to the plugin object. This lets you pass a URL, a target and a callback function
              to be run when the URL has finished (or failed) loading.
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
              * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@19966 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  22. 06 Nov, 2006 1 commit
    • ap's avatar
      Reviewed by Maciej. · fdfb9d6f
      ap authored
              REGRESSION: Flash clicks/interactivity not working properly
              * bridge/mac/FrameMac.mm:
              Restore parts of event dispatching that were removed when fixing
              bug 7323 - just bypass those for subframes.
              Teach TestNetscapePlugin to log events passed to it. To enable, set eventLoggingEnabled to true:
              <embed name="plg" type="application/x-webkit-test-netscape" width=100 height=100></embed>
                  plg.eventLoggingEnabled = true;
                  // use eventSender to simulate events...
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h:
              * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
              * plugins/mouse-events-expected.txt: Added.
              * plugins/mouse-events.html: Added.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@17611 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  23. 09 Mar, 2006 1 commit
    • darin's avatar
      Reviewed by John Sullivan. · 24fbf130
      darin authored
              - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=7681
                memory leak in the plug-in tests
              * DumpRenderTree/TestNetscapePlugIn.subproj/main.c:
              (NPP_Destroy): Added code to release the plug-in object. This is the leak fix.
              (NPP_SetWindow): Remove unneeded code to store the window pointer.
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
              Moved the browser global in here since it's declared in this file's header.
              Changed the code to set up the pluginClass structure to not use function
              pointer casts. Those are dangerous because they can hide many types of mismatch.
              And indeed when I did this I discovered that many functions were missing their
              boolean return values or had parameter declarations with the wrong types.
              (pluginGetProperty): Use STRINGZ_TO_NPVARIANT macro for greater simplicity and
              clarity. Added boolean return value: return true when successful and false when not.
              (pluginSetProperty): Added boolean return value, return false since we have no
              properties we can set.
              (pluginInvoke): Added boolean return value. Return true when successful and false
              when not. Use NPVARIANT macros where appropriate. Added a missing release for the
              return value from calling the browser. Changed code to put the strings in malloc
              buffers instead of relying on GCC's extension that allows variable-sized arrays
              on the stack.
              (pluginInvokeDefault): Added boolean return value, return false since we have no
              default function to call.
              (pluginInvalidate): Added missing parameter. Removed comment.
              (pluginAllocate): Removed unneeded cast. This is C code, not C++, so you don't have
              to cast the result of malloc.
              (pluginDeallocate): Removed uneeded cast.
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Removed some unneeded
              includes. Changed our PluginObject to use NPObject instead of re-declaring fields
              that match NPObject's fields. Removed unused NPWindow pointer.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@13233 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  24. 05 Jan, 2006 1 commit
    • ggaren's avatar
      LayoutTests: · 7dd73f87
      ggaren authored
              Layout test for http://bugzilla.opendarwin.org/show_bug.cgi?id=6318
              REGRESSION: Repro crash in JS called from Flash on bdash.net.nz
              * fast/plugins/netscape-back-forward-expected.txt: Added.
              * fast/plugins/netscape-back-forward.html: Added.
              * fast/plugins/resources/go-back.html: Added.
              Reviewed by Darin.
              - Fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=6361
              Add plugin support to DumpRenderTree
              * WebKit.exp: export WebPluginDatabase class, which DumpRenderTree
              needs to add plugins to the runtime.
              Reviewed by darin.
              - Fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=6361
              Add plugin support to DumpRenderTree
              Also wrote first test plugin.
              * DumpRenderTree/DumpRenderTree.m:
              (1) Put the WebView in an invisible window, because PlugIns are
              optimized not to load if there's no parent window.
              (2) Tell WebKit to load any PlugIns in the directory from which we
              loaded. This means we can build nasty PlugIns alongside DumpRenderTree
              and they'll load automagically during layout testing, but they won't be
              added to the user's system, hosing apps like Safari.
              * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Added new
              test PlugIn to project.
              PlugIn added to project:
              * DumpRenderTree/TestNetscapePlugIn.subproj/Info.plist: Added.
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: Added.
              * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.h: Added.
              * DumpRenderTree/TestNetscapePlugIn.subproj/main.c: Added.
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@11885 268f45cc-cd09-0410-ab3c-d52691b4dbfc