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@lists.webkit.org > http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev _______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev