On Aug 2, 2009, at 2:44 AM, Adam Barth wrote:

On Sun, Aug 2, 2009 at 2:09 AM, Darin Adler<[email protected]> wrote:
On Aug 2, 2009, at 2:05 AM, Adam Barth wrote:

In any case:

   https://bugs.webkit.org/show_bug.cgi?id=27931

I'll have a patch shortly. Please let me know if there are other call
sites you'd like changed.

Thanks! Once you pointed out this was not due to a recent change, I had
resolved to fix it myself, but I’m glad you’re going to tackle it.

Generally speaking no call site that has a Node* should call
scriptExecutionContext(). So rather than listing the call sites I want changed, I’d instead suggest that we make Node::scriptExecutionContext() private and then make sure no Node member functions or members functions of
friend classes call the function.

I tried this, and it looks like there are a bunch of instances in the
generated bindings that weren't found by cscope.  Basically, this line
of CodeGeneartorJS needs to know whether impl is a subclass of Node*:

push(@implContent, "    JSDOMGlobalObject* globalObject =
toJSDOMGlobalObject(imp->scriptExecutionContext());\n");

It's a bit too late at night for me to wrap my mind around the code
generator, but that's a clear next step.

I think the code generator doesn't try to track the whole class hierarchy. Probably a simpler way to achieve the goal here would be with overloaded inline functions, so the C++ type system can do the work:

inline ScriptExecutionContext* scriptExecutionContext(EventTarget* et)
{
    return et->scriptExecutionContext();
}

inline Document* scriptExecutionContext(Node* n)
{
    return n->document();
}

Alternately, EventTarget could have an inline nonvirtual member function that calls the virtual member function, and Node could override it with one that calls document().

Regards,
Maciej


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

Reply via email to