Reviewed by Maciej.
- Phase 2 in the JS API.
- Added support for specifying static tables of values -- this should
obviate the need for using complicated callbacks for most lookups.
- API objects are now created with classes (JSClassRef) -- in order to support
static values, and in order to prevent API objects from storing their
data inline, and thus falling into the oversized (read: slow and prone to
giving Maciej the frowny face) heap.
- Added two specialized JSObject subclasses -- JSCallbackFunction and JSCallbackConstructor --
to allow JSFunctionMake and JSConstructorMake to continue to work with
the new class model. Another solution to this problem would be to create
a custom class object for each function and constructor you make. This
solution is more code but also more efficient.
- Substantially beefed up the minidom example to demonstrate and test a
lot of these techniques. Its output is still pretty haphazard, though.
- Gave the <kjs/ preface to some includes -- I'm told this matters to
building on some versions of Linux.
- Implemented JSValueIsInstanceOf and JSValueIsObjectOfClass
- Removed GetDescription callback. Something in the class datastructure
should take care of this.
* API/JSBase.h:
* API/JSCallbackConstructor.cpp: Added.
(KJS::):
(KJS::JSCallbackConstructor::JSCallbackConstructor):
(KJS::JSCallbackConstructor::implementsConstruct):
(KJS::JSCallbackConstructor::construct):
(KJS::JSCallbackConstructor::setPrivate):
(KJS::JSCallbackConstructor::getPrivate):
* API/JSCallbackConstructor.h: Added.
(KJS::JSCallbackConstructor::classInfo):
* API/JSCallbackFunction.cpp: Added.
(KJS::):
(KJS::JSCallbackFunction::JSCallbackFunction):
(KJS::JSCallbackFunction::implementsCall):
(KJS::JSCallbackFunction::callAsFunction):
(KJS::JSCallbackFunction::setPrivate):
(KJS::JSCallbackFunction::getPrivate):
* API/JSCallbackFunction.h: Added.
(KJS::JSCallbackFunction::classInfo):
* API/JSCallbackObject.cpp:
(KJS::):
(KJS::JSCallbackObject::JSCallbackObject):
(KJS::JSCallbackObject::init):
(KJS::JSCallbackObject::~JSCallbackObject):
(KJS::JSCallbackObject::className):
(KJS::JSCallbackObject::getOwnPropertySlot):
(KJS::JSCallbackObject::put):
(KJS::JSCallbackObject::deleteProperty):
(KJS::JSCallbackObject::implementsConstruct):
(KJS::JSCallbackObject::construct):
(KJS::JSCallbackObject::implementsCall):
(KJS::JSCallbackObject::callAsFunction):
(KJS::JSCallbackObject::getPropertyList):
(KJS::JSCallbackObject::toBoolean):
(KJS::JSCallbackObject::toNumber):
(KJS::JSCallbackObject::toString):
(KJS::JSCallbackObject::inherits):
(KJS::JSCallbackObject::staticValueGetter):
(KJS::JSCallbackObject::staticFunctionGetter):
(KJS::JSCallbackObject::callbackGetter):
* API/JSCallbackObject.h:
* API/JSCharBufferRef.cpp:
* API/JSClassRef.cpp: Added.
(JSClassCreate):
(JSClassRetain):
(JSClassRelease):
* API/JSClassRef.h: Added.
(StaticValueEntry::StaticValueEntry):
(StaticFunctionEntry::StaticFunctionEntry):
(__JSClass::__JSClass):
* API/JSContextRef.cpp:
(JSContextCreate):
(JSEvaluate):
* API/JSContextRef.h:
* API/JSNode.c: Added.
(JSNodePrototype_appendChild):
(JSNodePrototype_removeChild):
(JSNodePrototype_replaceChild):
(JSNodePrototype_class):
(JSNode_getNodeType):
(JSNode_getChildNodes):
(JSNode_getFirstChild):
(JSNode_finalize):
(JSNode_class):
(JSNode_prototype):
(JSNode_new):
(JSNode_construct):
* API/JSNode.h: Added.
* API/JSNodeList.c: Added.
(JSNodeListPrototype_item):
(JSNodeListPrototype_class):
(JSNodeList_length):
(JSNodeList_getProperty):
(JSNodeList_finalize):
(JSNodeList_class):
(JSNodeList_prototype):
(JSNodeList_new):
* API/JSNodeList.h: Added.
* API/JSObjectRef.cpp:
(JSObjectMake):
(JSFunctionMake):
(JSConstructorMake):
(__JSPropertyEnumerator::__JSPropertyEnumerator):
(JSObjectCreatePropertyEnumerator):
(JSPropertyEnumeratorGetNext):
(JSPropertyEnumeratorRetain):
(JSPropertyEnumeratorRelease):
* API/JSObjectRef.h:
(__JSObjectCallbacks::):
* API/JSValueRef.cpp:
(JSValueIsObjectOfClass):
(JSValueIsInstanceOf):
* API/JSValueRef.h:
* API/Node.c: Added.
(Node_new):
(Node_appendChild):
(Node_removeChild):
(Node_replaceChild):
(Node_ref):
(Node_deref):
* API/Node.h: Added.
* API/NodeList.c: Added.
(NodeList_new):
(NodeList_length):
(NodeList_item):
(NodeList_ref):
(NodeList_deref):
* API/NodeList.h: Added.
* API/minidom.c:
(main):
(print):
(createStringWithContentsOfFile):
* API/minidom.js:
* API/testapi.c:
(assertEqualsAsCharacters):
(MyObject_getProperty):
(MyObject_class):
(myConstructor_callAsConstructor):
(main):
* API/testapi.js:
* JavaScriptCore.xcodeproj/project.pbxproj:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@15133
268f45cc-cd09-0410-ab3c-
d52691b4dbfc