[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