Index: Source/bindings/scripts/CodeGeneratorV8.pm |
diff --git a/Source/bindings/scripts/CodeGeneratorV8.pm b/Source/bindings/scripts/CodeGeneratorV8.pm |
index 19e2416949dafbbad4620b7c1c7d16cb3c108441..000a13fd9f6ac005543ec5e2da8443229e9319d8 100644 |
--- a/Source/bindings/scripts/CodeGeneratorV8.pm |
+++ b/Source/bindings/scripts/CodeGeneratorV8.pm |
@@ -129,7 +129,7 @@ my $idlFiles; |
my $cachedInterfaces = {}; |
my %implIncludes = (); |
-my %headerIncludeFiles = (); |
+my %headerIncludes = (); |
# Header code structure: |
# Root ... Copyright, include duplication check |
@@ -265,18 +265,6 @@ sub IDLFileForInterface |
return $idlFiles->{$interfaceName}; |
} |
-sub HeaderFileForInterface |
-{ |
- my $interfaceName = shift; |
- my $implClassName = shift || $interfaceName; |
- |
- my $idlFilename = IDLFileForInterface($interfaceName) |
- or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); |
- |
- my $idlRelPath= "bindings/" . File::Spec->abs2rel($idlFilename, $sourceRoot); |
- return dirname($idlRelPath) . "/" . $implClassName . ".h"; |
-} |
- |
sub ParseInterface |
{ |
my $interfaceName = shift; |
@@ -405,8 +393,11 @@ sub AddToImplIncludes |
sub AddToHeaderIncludes |
{ |
- my $header = shift; |
- $headerIncludeFiles{$header} = 1; |
+ my @includes = @_; |
+ |
+ for my $include (@includes) { |
+ $headerIncludes{$include} = 1; |
+ } |
} |
sub SkipIncludeHeader |
@@ -445,6 +436,25 @@ sub AddIncludesForType |
} |
} |
+sub HeaderFilesForInterface |
+{ |
+ my $interfaceName = shift; |
+ my $implClassName = shift; |
+ |
+ my @includes = (); |
+ if (IsTypedArrayType($interfaceName)) { |
+ push(@includes, "wtf/${interfaceName}.h"); |
+ } elsif ($interfaceName =~ /SVGPathSeg/) { |
+ $interfaceName =~ s/Abs|Rel//; |
+ push(@includes, "core/svg/${interfaceName}.h"); |
+ } elsif (!SkipIncludeHeader($interfaceName)) { |
+ my $idlFilename = IDLFileForInterface($interfaceName) or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); |
+ my $idlRelPath= "bindings/" . File::Spec->abs2rel($idlFilename, $sourceRoot); |
+ push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); |
+ } |
+ return @includes; |
+} |
+ |
sub NeedsCustomOpaqueRootForGC |
{ |
my $interface = shift; |
@@ -526,14 +536,9 @@ sub GetSVGPropertyTypes |
if ($svgNativeType =~ /SVGPropertyTearOff/) { |
$svgPropertyType = $svgWrappedNativeType; |
AddToImplIncludes("core/svg/properties/SVGAnimatedPropertyTearOff.h"); |
- } elsif ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/) { |
+ } elsif ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/ or $svgNativeType =~ /SVGTransformListPropertyTearOff/) { |
$svgListPropertyType = $svgWrappedNativeType; |
AddToHeaderIncludes("core/svg/properties/SVGAnimatedListPropertyTearOff.h"); |
- AddToHeaderIncludes("core/svg/properties/SVGStaticListPropertyTearOff.h"); |
- } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) { |
- $svgListPropertyType = $svgWrappedNativeType; |
- AddToHeaderIncludes("core/svg/properties/SVGAnimatedListPropertyTearOff.h"); |
- AddToHeaderIncludes("core/svg/properties/SVGTransformListPropertyTearOff.h"); |
} elsif ($svgNativeType =~ /SVGPathSegListPropertyTearOff/) { |
$svgListPropertyType = $svgWrappedNativeType; |
AddToHeaderIncludes("core/svg/properties/SVGPathSegListPropertyTearOff.h"); |
@@ -608,6 +613,8 @@ sub GenerateHeader |
# Ensure the IsDOMNodeType function is in sync. |
die("IsDOMNodeType is out of date with respect to $interfaceName") if IsDOMNodeType($interfaceName) != InheritsInterface($interface, "Node"); |
+ my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interfaceName); |
+ |
my $hasDependentLifetime = $interface->extendedAttributes->{"DependentLifetime"} || InheritsExtendedAttribute($interface, "ActiveDOMObject") || GetGenerateIsReachable($interface) || $v8ClassName =~ /SVG/; |
if (!$hasDependentLifetime) { |
foreach (@{$interface->parents}) { |
@@ -619,19 +626,10 @@ sub GenerateHeader |
AddToHeaderIncludes("bindings/v8/WrapperTypeInfo.h"); |
AddToHeaderIncludes("bindings/v8/V8Binding.h"); |
AddToHeaderIncludes("bindings/v8/V8DOMWrapper.h"); |
- AddToHeaderIncludes("v8.h"); |
- AddToHeaderIncludes("wtf/HashMap.h"); |
- AddToHeaderIncludes("wtf/text/StringHash.h"); |
- |
- my $headerClassInclude = GetHeaderClassInclude($interfaceName, $implClassName); |
- AddToHeaderIncludes($headerClassInclude) if $headerClassInclude; |
- |
- my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interfaceName); |
- |
- foreach my $headerInclude (sort keys(%headerIncludeFiles)) { |
- $header{includes}->add("#include \"${headerInclude}\"\n") unless $headerInclude =~ /v8\.h/; |
+ AddToHeaderIncludes(HeaderFilesForInterface($interfaceName, $implClassName)); |
+ foreach my $headerInclude (sort keys(%headerIncludes)) { |
+ $header{includes}->add("#include \"${headerInclude}\"\n"); |
} |
- $header{includes}->add("#include \<v8.h\>\n") if $headerIncludeFiles{"v8.h"}; |
$header{nameSpaceWebCore}->addHeader("\ntemplate<typename PropertyType> class SVGPropertyTearOff;\n") if $svgPropertyType; |
if ($svgNativeType) { |
@@ -670,7 +668,6 @@ END |
my $separator = ""; |
foreach (@{$interface->parents}) { |
my $parent = $_; |
- AddToHeaderIncludes("V8${parent}.h"); |
$code .= "${separator}V8${parent}::hasDependentLifetime"; |
$separator = " || "; |
} |
@@ -986,20 +983,6 @@ sub GetInternalFields |
return @customInternalFields; |
} |
-sub GetHeaderClassInclude |
-{ |
- my $interfaceName = shift; |
- my $implClassName = shift; |
- |
- if ($interfaceName =~ /SVGPathSeg/) { |
- $interfaceName =~ s/Abs|Rel//; |
- return "core/svg/${interfaceName}.h"; |
- } |
- return "wtf/${interfaceName}.h" if IsTypedArrayType($interfaceName); |
- return "" if (SkipIncludeHeader($interfaceName)); |
- return HeaderFileForInterface($interfaceName, $implClassName); |
-} |
- |
sub GenerateHeaderCustomInternalFieldIndices |
{ |
my $interface = shift; |
@@ -1465,7 +1448,7 @@ END |
push(@arguments, "ec") if $useExceptions; |
if ($attribute->signature->extendedAttributes->{"ImplementedBy"}) { |
my $implementedBy = $attribute->signature->extendedAttributes->{"ImplementedBy"}; |
- AddToImplIncludes(HeaderFileForInterface($implementedBy)); |
+ AddToImplIncludes(HeaderFilesForInterface($implementedBy, $implementedBy)); |
unshift(@arguments, "imp") if !$attribute->isStatic; |
$functionName = "${implementedBy}::${functionName}"; |
} elsif ($attribute->isStatic) { |
@@ -1904,7 +1887,7 @@ END |
push(@arguments, "ec") if $useExceptions; |
if ($attribute->signature->extendedAttributes->{"ImplementedBy"}) { |
my $implementedBy = $attribute->signature->extendedAttributes->{"ImplementedBy"}; |
- AddToImplIncludes(HeaderFileForInterface($implementedBy)); |
+ AddToImplIncludes(HeaderFilesForInterface($implementedBy, $implementedBy)); |
unshift(@arguments, "imp") if !$attribute->isStatic; |
$functionName = "${implementedBy}::${functionName}"; |
} elsif ($attribute->isStatic) { |
@@ -3579,7 +3562,7 @@ END |
my $attrExt = $constant->extendedAttributes; |
my $implementedBy = $attrExt->{"ImplementedBy"}; |
if ($implementedBy) { |
- AddToImplIncludes(HeaderFileForInterface($implementedBy)); |
+ AddToImplIncludes(HeaderFilesForInterface($implementedBy, $implementedBy)); |
} |
if ($attrExt->{"EnabledAtRuntime"}) { |
push(@constantsEnabledAtRuntime, $constant); |
@@ -3990,17 +3973,15 @@ sub GenerateCallbackHeader |
$header{root}->addFooter("\n"); |
- my @unsortedIncludes = (); |
- push(@unsortedIncludes, "#include \"bindings/v8/ActiveDOMCallback.h\""); |
- push(@unsortedIncludes, "#include \"bindings/v8/DOMWrapperWorld.h\""); |
- push(@unsortedIncludes, "#include \"bindings/v8/ScopedPersistent.h\""); |
- my $interfaceHeader = HeaderFileForInterface($interfaceName, $implClassName); |
- push(@unsortedIncludes, "#include \"$interfaceHeader\""); |
- push(@unsortedIncludes, "#include <v8.h>"); |
- push(@unsortedIncludes, "#include \"wtf/Forward.h\""); |
- $header{includes}->add(join("\n", sort @unsortedIncludes)); |
- unshift(@{$header{nameSpaceWebCore}->{header}}, "\n"); |
- $header{nameSpaceWebCore}->addHeader("class ScriptExecutionContext;\n\n"); |
+ my @includes = (); |
+ push(@includes, "bindings/v8/ActiveDOMCallback.h"); |
+ push(@includes, "bindings/v8/DOMWrapperWorld.h"); |
+ push(@includes, "bindings/v8/ScopedPersistent.h"); |
+ push(@includes, HeaderFilesForInterface($interfaceName, $implClassName)); |
+ for my $include (sort @includes) { |
+ $header{includes}->add("#include \"$include\"\n"); |
+ } |
+ $header{nameSpaceWebCore}->addHeader("\nclass ScriptExecutionContext;\n\n"); |
$header{class}->addHeader("class $v8ClassName : public $implClassName, public ActiveDOMCallback {"); |
$header{class}->addFooter("};\n"); |
@@ -4279,7 +4260,7 @@ sub GenerateFunctionCallString |
my $functionName; |
my $implementedBy = $function->signature->extendedAttributes->{"ImplementedBy"}; |
if ($implementedBy) { |
- AddToImplIncludes(HeaderFileForInterface($implementedBy)); |
+ AddToImplIncludes(HeaderFilesForInterface($implementedBy, $implementedBy)); |
unshift(@arguments, "imp") if !$function->isStatic; |
$functionName = "${implementedBy}::${name}"; |
} elsif ($function->isStatic) { |