[webkit-dev] javascriptcore: explicitly call default getProperties function?

Geoffrey Garen ggaren at apple.com
Tue Feb 26 11:46:09 PST 2008


Hi Michael.

One solution would be to maintain a hash or bitmap indicating which  
lazy properties you had allocated so far:

JSValueRef GetProperty(JSContextRef ctx, JSObjectRef obj, JSStringRef  
prop,
JSValueRef* exception)
{
  if (!bitmapContains(prop)) {
    JSValueRef lazy_loaded = lazy_load(...);
    JSObjectSetProperty(ctx, obj, prop, lazy_loaded, ...)
  }
  return NULL; // Forward the property request to our parent class,  
which holds the property we set through JSObjectSetProperty.
}

The hash / bitmap can be stored in the JSObjectRef, using the  
JSObjectSetPrivate API.

Geoff

On Feb 25, 2008, at 4:31 PM, Michael Bieniosek wrote:

> Hi,
>
> I have a situation where I want to do lazy-loading of a javascript  
> object's
> properties.  I'm using the C API, in particular the getProperty  
> callback.
>
> I want to write code that looks like:
>
> JSValueRef GetProperty(JSContextRef ctx, JSObjectRef obj,  
> JSStringRef prop,
> JSValueRef* exception)
> {
>  if (!JSValueHasProperty(ctx, obj, prop)) {
>    JSValueRef lazy_loaded = lazy_load(...);
>    JSObjectSetProperty(ctx, obj, prop, lazy_loaded, ...)
>    return lazy_loaded;
>  } else {
>    return JSObjectGetProperty(ctx, obj, prop, exception);
>  }
> }
>
> That is, I want use obj as a cache for my lazy_load function.  This  
> code
> doesn't work though, because the calls to JSObjectHasProperty and
> JSObjectGetProperty recursively call GetProperty.
>
> Is there a way to make this work?
>
> Thanks,
> Michael
>
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev



More information about the webkit-dev mailing list