On May 4, 2009, at 10:17 AM, Patrick Mueller wrote:

Since JSValueRef and JSObjectRef are typedef's to the same OpaqueJSValue structure (pointer)

It’s easy to get the wrong idea about this by looking at the implementation. These two typedefs use the same structure, but they use const in an unusual way to make the compiler check the relationship between the types. Because of how the types are defined all JSObjectRef values work as JSValueRef values without any type cast.

There are many JSValueRef values that are not JSObjectRef values, so converting from one to the other requires a type cast. If you want to use a JSValueRef as a JSObjectRef, you need to call JSValueIsObject and if it’s true, then you can cast the JSValueRef to a JSObjectRef. Or you can use JSValueGetType, but that could be less efficient so you should use it only if you care which specific type it is if it’s not a JSObjectRef.

It would be nice to see this documented a little better.

What documentation were you reading? Since WebKit is an open source project, if you have improvements to, say, the comments in the header, you can submit them as a patch. Most of the mechanics are covered at <http://webkit.org/coding/contributing.html >, although some of the steps don’t apply for changes that are entirely in comments.

If this was some Apple documentation you were reading, not generated directly from the header file, then you could instead file a bug at http://bugreport.apple.com suggesting improvements.

My current guess is that if JSValueGetType() returns kJSTypeObject for a JSValueRef, you can safely treat it as a JSObjectRef. If it doesn't, then you can't.

Yes, that’s right.

    -- Darin

_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to