Changeset 97109 in webkit


Ignore:
Timestamp:
Oct 10, 2011 5:11:14 PM (12 years ago)
Author:
abarth@webkit.org
Message:

[V8] CodeGeneratorV8 shouldn't hardcode the list of ActiveDOMObjects
https://bugs.webkit.org/show_bug.cgi?id=69792

Reviewed by Nate Chapin.

We used to hard code the list of active DOM objects in the code
generator, but now we have an IDL attribute. This patch switches the
code generator over to using the IDL attribute.

  • bindings/scripts/CodeGeneratorV8.pm:

(GenerateHeader):
(GenerateNormalAttrGetter):
(GenerateImplementation):
(GetDomMapFunction):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r97103 r97109  
     12011-10-10  Adam Barth  <abarth@webkit.org>
     2
     3        [V8] CodeGeneratorV8 shouldn't hardcode the list of ActiveDOMObjects
     4        https://bugs.webkit.org/show_bug.cgi?id=69792
     5
     6        Reviewed by Nate Chapin.
     7
     8        We used to hard code the list of active DOM objects in the code
     9        generator, but now we have an IDL attribute.  This patch switches the
     10        code generator over to using the IDL attribute.
     11
     12        * bindings/scripts/CodeGeneratorV8.pm:
     13        (GenerateHeader):
     14        (GenerateNormalAttrGetter):
     15        (GenerateImplementation):
     16        (GetDomMapFunction):
     17
    1182011-10-10  Nico Weber  <thakis@chromium.org>
    219
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm

    r96835 r97109  
    266266    $codeGenerator->AddMethodsConstantsAndAttributesFromParentClasses($dataNode, \@allParents, 1);
    267267
    268     my $hasDependentLifetime = $dataNode->extendedAttributes->{"V8DependentLifetime"} || IsActiveDomType($interfaceName) || $className =~ /SVG/;
     268    my $hasDependentLifetime = $dataNode->extendedAttributes->{"V8DependentLifetime"} || $dataNode->extendedAttributes->{"ActiveDOMObject"} || $className =~ /SVG/;
    269269    if (!$hasDependentLifetime) {
    270270        foreach (@{$dataNode->parents}) {
     
    350350    static WrapperTypeInfo info;
    351351END
    352     if (IsActiveDomType($implClassName)) {
     352    if ($dataNode->extendedAttributes->{"ActiveDOMObject"}) {
    353353        push(@headerContent, "    static ActiveDOMObject* toActiveDOMObject(v8::Handle<v8::Object>);\n");
    354354    }
     
    421421
    422422    push(@headerContent, <<END);
     423    static v8::Handle<v8::Object> existingWrapper(${nativeType}*);
     424
    423425private:
    424426    static v8::Handle<v8::Object> wrapSlow(${nativeType}*);
     
    428430
    429431    push(@headerContent, <<END);
    430 
    431 v8::Handle<v8::Object> ${className}::wrap(${nativeType}* impl${forceNewObjectInput})
    432 {
    433 END
    434     push(@headerContent, "    if (!forceNewObject) {\n") if IsDOMNodeType($interfaceName);
     432ALWAYS_INLINE v8::Handle<v8::Object> ${className}::existingWrapper(${nativeType}* impl)
     433{
     434END
    435435    my $getWrapper = IsNodeSubType($dataNode) ? "V8DOMWrapper::getWrapper(impl)" : "${domMapFunction}.get(impl)";
    436436    push(@headerContent, <<END);
    437         v8::Handle<v8::Object> wrapper = ${getWrapper};
     437    return ${getWrapper};
     438}
     439
     440v8::Handle<v8::Object> ${className}::wrap(${nativeType}* impl${forceNewObjectInput})
     441{
     442END
     443    push(@headerContent, "    if (!forceNewObject) {\n") if IsDOMNodeType($interfaceName);
     444    push(@headerContent, <<END);
     445        v8::Handle<v8::Object> wrapper = existingWrapper(impl);
    438446        if (!wrapper.IsEmpty())
    439447            return wrapper;
     
    881889        && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) {
    882890        AddIncludesForType($returnType);
    883         my $domMapFunction = GetDomMapFunction(0, $returnType);
    884891        # Check for a wrapper in the wrapper cache. If there is one, we know that a hidden reference has already
    885892        # been created. If we don't find a wrapper, we create both a wrapper and a hidden reference.
    886893        push(@implContentDecls, "    RefPtr<$returnType> result = ${getterString};\n");
    887         push(@implContentDecls, "    v8::Handle<v8::Value> wrapper = result.get() ? ${domMapFunction}.get(result.get()) : v8::Handle<v8::Value>();\n");
     894        push(@implContentDecls, "    v8::Handle<v8::Value> wrapper = result.get() ? V8${returnType}::existingWrapper(result.get()) : v8::Handle<v8::Object>();\n");
    888895        push(@implContentDecls, "    if (wrapper.IsEmpty()) {\n");
    889896        push(@implContentDecls, "        wrapper = toV8(result.get());\n");
     
    19171924    AddIncludesForType($interfaceName);
    19181925
    1919     my $toActive = IsActiveDomType($interfaceName) ? "${className}::toActiveDOMObject" : "0";
     1926    my $toActive = $dataNode->extendedAttributes->{"ActiveDOMObject"} ? "${className}::toActiveDOMObject" : "0";
    19201927
    19211928    # Find the super descriptor.
     
    24432450END
    24442451
    2445     if (IsActiveDomType($interfaceName)) {
     2452    if ($dataNode->extendedAttributes->{"ActiveDOMObject"}) {
    24462453        # MessagePort is handled like an active dom object even though it doesn't inherit
    24472454        # from ActiveDOMObject, so don't try to cast it to ActiveDOMObject.
     
    28532860    my $type = shift;
    28542861    return "getDOMSVGElementInstanceMap()" if $type eq "SVGElementInstance";
    2855     return "getDOMNodeMap()" if ($dataNode && IsNodeSubType($dataNode));
    2856     return "getActiveDOMObjectMap()" if IsActiveDomType($type);
     2862    return "getDOMNodeMap()" if (IsNodeSubType($dataNode));
     2863    return "getActiveDOMObjectMap()" if $dataNode->extendedAttributes->{"ActiveDOMObject"};
    28572864    return "getDOMObjectMap()";
    2858 }
    2859 
    2860 sub IsActiveDomType
    2861 {
    2862     # FIXME: Consider making this an .idl attribute.
    2863     my $type = shift;
    2864     return 1 if $type eq "EventSource";
    2865     return 1 if $type eq "MessagePort";
    2866     return 1 if $type eq "XMLHttpRequest";
    2867     return 1 if $type eq "WebSocket";
    2868     return 1 if $type eq "Worker";
    2869     return 1 if $type eq "SharedWorker";
    2870     return 1 if $type eq "IDBRequest";
    2871     return 1 if $type eq "IDBTransaction";
    2872     return 1 if $type eq "FileReader";
    2873     return 1 if $type eq "FileWriter";
    2874     return 0;
    28752865}
    28762866
Note: See TracChangeset for help on using the changeset viewer.