Ignore:
Timestamp:
Mar 21, 2010, 12:40:04 AM (15 years ago)
Author:
[email protected]
Message:

2010-03-20 Oliver Hunt <[email protected]>

Reviewed by Maciej Stachowiak.

JSC needs an API to allow custom objects to have aprivate GC-accessible properties
https://bugs.webkit.org/show_bug.cgi?id=36420

Add new API methods to support "private" properties on custom
objects.

  • API/JSCallbackObject.h: (JSC::JSCallbackObjectData::JSCallbackObjectData): (JSC::JSCallbackObjectData::~JSCallbackObjectData): (JSC::JSCallbackObjectData::getPrivateProperty): (JSC::JSCallbackObjectData::setPrivateProperty): (JSC::JSCallbackObjectData::deletePrivateProperty): (JSC::JSCallbackObjectData::markChildren): (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty): (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty): (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty): (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren): (JSC::JSCallbackObject::getPrivateProperty): (JSC::JSCallbackObject::setPrivateProperty): (JSC::JSCallbackObject::deletePrivateProperty): (JSC::JSCallbackObject::markChildren):
  • API/JSObjectRef.cpp: (JSObjectGetPrivateProperty): (JSObjectSetPrivateProperty): (JSObjectDeletePrivateProperty):
  • API/JSObjectRefPrivate.h: Added.
  • API/tests/testapi.c: (main):
  • JavaScriptCore.exp:
  • JavaScriptCore.xcodeproj/project.pbxproj:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/API/JSObjectRef.cpp

    r55633 r56314  
    2727#include "config.h"
    2828#include "JSObjectRef.h"
     29#include "JSObjectRefPrivate.h"
    2930
    3031#include "APICast.h"
     
    364365}
    365366
     367JSValueRef JSObjectGetPrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName)
     368{
     369    ExecState* exec = toJS(ctx);
     370    APIEntryShim entryShim(exec);
     371    JSObject* jsObject = toJS(object);
     372    JSValue result;
     373    Identifier name(propertyName->identifier(&exec->globalData()));
     374    if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::info))
     375        result = static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivateProperty(name);
     376    else if (jsObject->inherits(&JSCallbackObject<JSObject>::info))
     377        result = static_cast<JSCallbackObject<JSObject>*>(jsObject)->getPrivateProperty(name);
     378    return toRef(exec, result);
     379}
     380
     381bool JSObjectSetPrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value)
     382{
     383    ExecState* exec = toJS(ctx);
     384    APIEntryShim entryShim(exec);
     385    JSObject* jsObject = toJS(object);
     386    JSValue jsValue = toJS(exec, value);
     387    Identifier name(propertyName->identifier(&exec->globalData()));
     388    if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::info)) {
     389        static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivateProperty(name, jsValue);
     390        return true;
     391    }
     392    if (jsObject->inherits(&JSCallbackObject<JSObject>::info)) {
     393        static_cast<JSCallbackObject<JSObject>*>(jsObject)->setPrivateProperty(name, jsValue);
     394        return true;
     395    }
     396    return false;
     397}
     398
     399bool JSObjectDeletePrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName)
     400{
     401    ExecState* exec = toJS(ctx);
     402    APIEntryShim entryShim(exec);
     403    JSObject* jsObject = toJS(object);
     404    Identifier name(propertyName->identifier(&exec->globalData()));
     405    if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::info)) {
     406        static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->deletePrivateProperty(name);
     407        return true;
     408    }
     409    if (jsObject->inherits(&JSCallbackObject<JSObject>::info)) {
     410        static_cast<JSCallbackObject<JSObject>*>(jsObject)->deletePrivateProperty(name);
     411        return true;
     412    }
     413    return false;
     414}
     415
    366416bool JSObjectIsFunction(JSContextRef, JSObjectRef object)
    367417{
Note: See TracChangeset for help on using the changeset viewer.