X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/b37bf2e156556c589aea3e1f58a377f2b1189665..a253471d7f8e4d91bf6ebabab00155c3b387d3d0:/API/JSCallbackObject.cpp diff --git a/API/JSCallbackObject.cpp b/API/JSCallbackObject.cpp index 129b304..68c2682 100644 --- a/API/JSCallbackObject.cpp +++ b/API/JSCallbackObject.cpp @@ -1,4 +1,3 @@ -// -*- mode: c++; c-basic-offset: 4 -*- /* * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. * Copyright (C) 2007 Eric Seidel @@ -28,14 +27,45 @@ #include "config.h" #include "JSCallbackObject.h" -#include "collector.h" +#include "Heap.h" +#include -namespace KJS { +namespace JSC { + +ASSERT_CLASS_FITS_IN_CELL(JSCallbackObject); +ASSERT_CLASS_FITS_IN_CELL(JSCallbackObject); // Define the two types of JSCallbackObjects we support. -template <> const ClassInfo JSCallbackObject::info = { "CallbackObject", 0, 0 }; -template <> const ClassInfo JSCallbackObject::info = { "CallbackGlobalObject", 0, 0 }; +template <> const ClassInfo JSCallbackObject::s_info = { "CallbackObject", &JSNonFinalObject::s_info, 0, 0, CREATE_METHOD_TABLE(JSCallbackObject) }; +template <> const ClassInfo JSCallbackObject::s_info = { "CallbackGlobalObject", &JSGlobalObject::s_info, 0, 0, CREATE_METHOD_TABLE(JSCallbackObject) }; + +template <> +Structure* JSCallbackObject::createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue proto) +{ + return Structure::create(globalData, globalObject, proto, TypeInfo(ObjectType, StructureFlags), &s_info); +} + +template <> +Structure* JSCallbackObject::createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue proto) +{ + return Structure::create(globalData, globalObject, proto, TypeInfo(GlobalObjectType, StructureFlags), &s_info); +} -COMPILE_ASSERT(sizeof(JSCallbackObject) <= CELL_SIZE, global_callback_object_fits_in_cell); +template +void JSCallbackObject::destroy(JSCell* cell) +{ + jsCast(cell)->JSCallbackObject::~JSCallbackObject(); +} -} // namespace KJS +void JSCallbackObjectData::finalize(Handle handle, void* context) +{ + JSClassRef jsClass = static_cast(context); + JSObjectRef thisRef = toRef(asObject(handle.get())); + + for (; jsClass; jsClass = jsClass->parentClass) + if (JSObjectFinalizeCallback finalize = jsClass->finalize) + finalize(thisRef); + WeakSet::deallocate(WeakImpl::asWeakImpl(handle.slot())); +} + +} // namespace JSC