After adding support for multiple script languages, I needed to make 
ScriptState into an abstract class. ScriptState used to be just a typedef of 
JSC::ExecState, so the lifetime of ScriptState was controlled by JSC. Now, the 
ScriptState for JavaScript is a wrapper around ExecState, so the lifetime of 
ScriptState is controlled by WebCore.

At the moment, I never destroy ScriptStates. This is obviously wrong, so I need 
to know when and how to destroy them. Here are two solutions I can think of:

A.) Rather than pass around ScriptState* pointers, I can pass around 
OwnPtr<ScriptState>. When that OwnPtr<ScriptState> is no longer referenced, it 
will be destroyed. This means that thousands of ScriptState objects may be 
allocated and destroyed very quickly.

…or…

B.) Only create one ScriptState for each ExecState and store them in a 
HashMap<ExecState*, ScriptState*>. Then clear all the ScriptStates for a 
Document when the Document is destroyed.

Solution A seems the most correct to me, but I'm wondering if creating and 
destroying all those objects will slow everything down. Any thoughts?

Thanks,
Tim
_______________________________________________
webkit-help mailing list
webkit-help@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-help

Reply via email to