[webkit-dev] JSC: Array Patch, Seeking Advice

Adam Roben aroben at apple.com
Wed Aug 19 09:26:44 PDT 2009


On Aug 19, 2009, at 11:37 AM, Brian Barnes wrote:

> JSValueRef JSObjectSetArray(JSContextRef ctx,size_t valueCount,const  
> JSValueRef values[],JSValueRef *exception)

This looks to be duplicating the functionality of JSObjectMakeArray  
(see <http://trac.webkit.org/browser/trunk/JavaScriptCore/API/JSObjectRef.h#L433 
 >).

> bool JSValueIsArray(JSContextRef ctx,JSValueRef value)
> {
>   char                *ch,str[64];
>   JSStringRef            jsStr;
>   JSObjectRef            arrayObj;
>   JSValueRef            val;
>         // only check objects
>
>   if (!JSValueIsObject(ctx,value)) return(FALSE);
>         // get constructor
>
>   arrayObj=JSValueToObject(ctx,value,NULL);
>   if (arrayObj==NULL) return(FALSE);
>
>   jsStr=JSStringCreateWithUTF8CString("constructor");
>   val=JSObjectGetProperty(ctx,arrayObj,jsStr,NULL);
>   JSStringRelease(jsStr);
>
>   if (val==NULL) return(FALSE);
>
>       // get constructor as a function
>
>   jsStr=JSValueToStringCopy(ctx,val,NULL);
>   if (jsStr==NULL) return(FALSE);
>
>   JSStringGetUTF8CString(jsStr,str,64);
>   str[63]=0x0;
>
>   JSStringRelease(jsStr);
>
>       // special check to make sure we don't have Array
>       // anywhere else in a function body or there just
>       // instead a function body
>
>   ch=strchr(str,'{');
>   if (ch==NULL) return(FALSE);
>
>   *ch=0x0;
>
>       // look for array in string
>
>   return(strstr(str,"Array")!=NULL);
> }

There are definitely more efficient ways to do this below the JSC API  
layer. I don't think there's any API to do this currently.

-Adam



More information about the webkit-dev mailing list