Changeset 97109 in webkit
- Timestamp:
- Oct 10, 2011 5:11:14 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r97103 r97109 1 2011-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 1 18 2011-10-10 Nico Weber <thakis@chromium.org> 2 19 -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
r96835 r97109 266 266 $codeGenerator->AddMethodsConstantsAndAttributesFromParentClasses($dataNode, \@allParents, 1); 267 267 268 my $hasDependentLifetime = $dataNode->extendedAttributes->{"V8DependentLifetime"} || IsActiveDomType($interfaceName)|| $className =~ /SVG/;268 my $hasDependentLifetime = $dataNode->extendedAttributes->{"V8DependentLifetime"} || $dataNode->extendedAttributes->{"ActiveDOMObject"} || $className =~ /SVG/; 269 269 if (!$hasDependentLifetime) { 270 270 foreach (@{$dataNode->parents}) { … … 350 350 static WrapperTypeInfo info; 351 351 END 352 if ( IsActiveDomType($implClassName)) {352 if ($dataNode->extendedAttributes->{"ActiveDOMObject"}) { 353 353 push(@headerContent, " static ActiveDOMObject* toActiveDOMObject(v8::Handle<v8::Object>);\n"); 354 354 } … … 421 421 422 422 push(@headerContent, <<END); 423 static v8::Handle<v8::Object> existingWrapper(${nativeType}*); 424 423 425 private: 424 426 static v8::Handle<v8::Object> wrapSlow(${nativeType}*); … … 428 430 429 431 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); 432 ALWAYS_INLINE v8::Handle<v8::Object> ${className}::existingWrapper(${nativeType}* impl) 433 { 434 END 435 435 my $getWrapper = IsNodeSubType($dataNode) ? "V8DOMWrapper::getWrapper(impl)" : "${domMapFunction}.get(impl)"; 436 436 push(@headerContent, <<END); 437 v8::Handle<v8::Object> wrapper = ${getWrapper}; 437 return ${getWrapper}; 438 } 439 440 v8::Handle<v8::Object> ${className}::wrap(${nativeType}* impl${forceNewObjectInput}) 441 { 442 END 443 push(@headerContent, " if (!forceNewObject) {\n") if IsDOMNodeType($interfaceName); 444 push(@headerContent, <<END); 445 v8::Handle<v8::Object> wrapper = existingWrapper(impl); 438 446 if (!wrapper.IsEmpty()) 439 447 return wrapper; … … 881 889 && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) { 882 890 AddIncludesForType($returnType); 883 my $domMapFunction = GetDomMapFunction(0, $returnType);884 891 # Check for a wrapper in the wrapper cache. If there is one, we know that a hidden reference has already 885 892 # been created. If we don't find a wrapper, we create both a wrapper and a hidden reference. 886 893 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"); 888 895 push(@implContentDecls, " if (wrapper.IsEmpty()) {\n"); 889 896 push(@implContentDecls, " wrapper = toV8(result.get());\n"); … … 1917 1924 AddIncludesForType($interfaceName); 1918 1925 1919 my $toActive = IsActiveDomType($interfaceName)? "${className}::toActiveDOMObject" : "0";1926 my $toActive = $dataNode->extendedAttributes->{"ActiveDOMObject"} ? "${className}::toActiveDOMObject" : "0"; 1920 1927 1921 1928 # Find the super descriptor. … … 2443 2450 END 2444 2451 2445 if ( IsActiveDomType($interfaceName)) {2452 if ($dataNode->extendedAttributes->{"ActiveDOMObject"}) { 2446 2453 # MessagePort is handled like an active dom object even though it doesn't inherit 2447 2454 # from ActiveDOMObject, so don't try to cast it to ActiveDOMObject. … … 2853 2860 my $type = shift; 2854 2861 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"}; 2857 2864 return "getDOMObjectMap()"; 2858 }2859 2860 sub IsActiveDomType2861 {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;2875 2865 } 2876 2866
Note: See TracChangeset
for help on using the changeset viewer.