On Tue, Sep 28, 2010 at 11:02 PM, Maciej Stachowiak <[email protected]> wrote:
>> And what I have written for this is like following:
>>
>> if (!exec->argument(1).isNull() && !exec->argument(1).isUndefined() &&
>> exec->argument(1).isObject() &&
>> !exec->argument(1).inherits(&JSFlags::s_info)) {
>>        JSObject* object = exec->argument(1).getObject();
>>        flags = Flags::create();
>>        JSValue jsCreate = object->get(exec, Identifier(exec, "create"));
>>        flags->setCreate(jsCreate.toBoolean(exec));
>>        JSValue jsExclusive = object->get(exec, Identifier(exec, 
>> "exclusive"));
>>        flags->setExclusive(jsExclusive.toBoolean(exec));
>> }
>>
>> Basically the code calls JSObject::get() to get values for the given
>> property names.
>> This looked straightforward, but I was told that the get(exec)
>> re-enters Javascript and could do any arbitrary thing.
>
> This much is true. In principle, any property can be a getter, so get() could 
> re-enter into arbitrary JS code.
>
>> This means that during the get() even the parameter object or the
>> calling object (imp) may get deallocated.
>
> This part, I think not. As long as they are referenced by currently executing 
> code (either by JS or by the machine stack via a local variable) they won't 
> get deallocated.

Ah... that sounds right.  They must be referenced by the executing code/context.

> That being said, others may have suggestions for better ways to code this. 
> Perhaps Geoff or Oliver have suggestions.

I'll try digging this a bit more (for myself) and will upload a patch
like that, but if anyone has suggestions for better ways I'd be very
glad to change/improve it.

>> So here I have two questions:
>>
>> 1) How can I write a safe binding code that reads JSON-format
>> parameters?  Is there some recommended way or any good idea?
>>
>> 2) I saw several other code doing the same/similar thing as I do
>> (calling JSObject::get()) to get arbitrary parameter values.
>> Are they safe?  Is there a guarantee that the code executed during
>> get() doesn't deallocate some objects?
>
> Nothing that has a live reference to it will get collected, and there's no 
> such thing as explicit deallocation in JS.

Makes sense, all the objects must be deallocated in that way.

Thanks very much!
Kinuko
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to