X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/b37bf2e156556c589aea3e1f58a377f2b1189665..14957cd040308e3eeec43d26bae5d76da13fcd85:/API/JSCallbackObject.cpp?ds=sidebyside diff --git a/API/JSCallbackObject.cpp b/API/JSCallbackObject.cpp index 129b304..6a7462a 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,28 @@ #include "config.h" #include "JSCallbackObject.h" -#include "collector.h" +#include "Heap.h" +#include -namespace KJS { +namespace JSC { -// Define the two types of JSCallbackObjects we support. -template <> const ClassInfo JSCallbackObject::info = { "CallbackObject", 0, 0 }; -template <> const ClassInfo JSCallbackObject::info = { "CallbackGlobalObject", 0, 0 }; +ASSERT_CLASS_FITS_IN_CELL(JSCallbackObject); +ASSERT_CLASS_FITS_IN_CELL(JSCallbackObject); -COMPILE_ASSERT(sizeof(JSCallbackObject) <= CELL_SIZE, global_callback_object_fits_in_cell); +// Define the two types of JSCallbackObjects we support. +template <> const ClassInfo JSCallbackObject::s_info = { "CallbackObject", &JSObjectWithGlobalObject::s_info, 0, 0 }; +template <> const ClassInfo JSCallbackObject::s_info = { "CallbackGlobalObject", &JSGlobalObject::s_info, 0, 0 }; -} // 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); + HandleSlot slot = handle.slot(); + HandleHeap::heapFor(slot)->deallocate(slot); +} + +} // namespace JSC