OLD | NEW |
1 #!/usr/bin/perl -w | 1 #!/usr/bin/perl -w |
2 # | 2 # |
3 # Copyright (C) 2005 Apple Computer, Inc. | 3 # Copyright (C) 2005 Apple Computer, Inc. |
4 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> | 4 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> |
5 # | 5 # |
6 # This file is part of WebKit | 6 # This file is part of WebKit |
7 # | 7 # |
8 # This library is free software; you can redistribute it and/or | 8 # This library is free software; you can redistribute it and/or |
9 # modify it under the terms of the GNU Library General Public | 9 # modify it under the terms of the GNU Library General Public |
10 # License as published by the Free Software Foundation; either | 10 # License as published by the Free Software Foundation; either |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 if ($verbose) { | 77 if ($verbose) { |
78 print "$targetIdlFile\n"; | 78 print "$targetIdlFile\n"; |
79 } | 79 } |
80 my $targetInterfaceName = fileparse(basename($targetIdlFile), ".idl"); | 80 my $targetInterfaceName = fileparse(basename($targetIdlFile), ".idl"); |
81 | 81 |
82 my $idlFound = 0; | 82 my $idlFound = 0; |
83 my @supplementedIdlFiles; | 83 my @supplementedIdlFiles; |
84 if ($supplementalDependencyFile) { | 84 if ($supplementalDependencyFile) { |
85 # The format of a supplemental dependency file: | 85 # The format of a supplemental dependency file: |
86 # | 86 # |
87 # Window.idl P.idl Q.idl R.idl | 87 # DOMWindow.idl P.idl Q.idl R.idl |
88 # Document.idl S.idl | 88 # Document.idl S.idl |
89 # Event.idl | 89 # Event.idl |
90 # ... | 90 # ... |
91 # | 91 # |
92 # The above indicates that Window.idl is supplemented by P.idl, Q.idl and R.
idl, | 92 # The above indicates that DOMWindow.idl is supplemented by P.idl, Q.idl and
R.idl, |
93 # Document.idl is supplemented by S.idl, and Event.idl is supplemented by no
IDLs. | 93 # Document.idl is supplemented by S.idl, and Event.idl is supplemented by no
IDLs. |
94 # The IDL that supplements another IDL (e.g. P.idl) never appears in the dep
endency file. | 94 # The IDL that supplements another IDL (e.g. P.idl) never appears in the dep
endency file. |
95 open FH, "< $supplementalDependencyFile" or die "Cannot open $supplementalDe
pendencyFile\n"; | 95 open FH, "< $supplementalDependencyFile" or die "Cannot open $supplementalDe
pendencyFile\n"; |
96 while (my $line = <FH>) { | 96 while (my $line = <FH>) { |
97 my ($idlFile, @followingIdlFiles) = split(/\s+/, $line); | 97 my ($idlFile, @followingIdlFiles) = split(/\s+/, $line); |
98 if ($idlFile and basename($idlFile) eq basename($targetIdlFile)) { | 98 if ($idlFile and basename($idlFile) eq basename($targetIdlFile)) { |
99 $idlFound = 1; | 99 $idlFound = 1; |
100 @supplementedIdlFiles = @followingIdlFiles; | 100 @supplementedIdlFiles = @followingIdlFiles; |
101 } | 101 } |
102 } | 102 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 } | 143 } |
144 } | 144 } |
145 die "Not found an interface ${targetInterfaceName} in ${targetInterf
aceName}.idl." unless defined $targetDataNode; | 145 die "Not found an interface ${targetInterfaceName} in ${targetInterf
aceName}.idl." unless defined $targetDataNode; |
146 | 146 |
147 # Support for attributes of partial interfaces. | 147 # Support for attributes of partial interfaces. |
148 foreach my $attribute (@{$interface->attributes}) { | 148 foreach my $attribute (@{$interface->attributes}) { |
149 # Record that this attribute is implemented by $interfaceName. | 149 # Record that this attribute is implemented by $interfaceName. |
150 $attribute->signature->extendedAttributes->{"ImplementedBy"} = $
interfaceName; | 150 $attribute->signature->extendedAttributes->{"ImplementedBy"} = $
interfaceName; |
151 | 151 |
152 # Add interface-wide extended attributes to each attribute. | 152 # Add interface-wide extended attributes to each attribute. |
153 applyInterfaceExtendedAttributes($interface, $attribute->signatu
re->extendedAttributes); | 153 foreach my $extendedAttributeName (keys %{$interface->extendedAt
tributes}) { |
154 | 154 $attribute->signature->extendedAttributes->{$extendedAttribu
teName} = $interface->extendedAttributes->{$extendedAttributeName}; |
| 155 } |
155 push(@{$targetDataNode->attributes}, $attribute); | 156 push(@{$targetDataNode->attributes}, $attribute); |
156 } | 157 } |
157 | 158 |
158 # Support for methods of partial interfaces. | 159 # Support for methods of partial interfaces. |
159 foreach my $function (@{$interface->functions}) { | 160 foreach my $function (@{$interface->functions}) { |
160 # Record that this method is implemented by $interfaceName. | 161 # Record that this method is implemented by $interfaceName. |
161 $function->signature->extendedAttributes->{"ImplementedBy"} = $i
nterfaceName; | 162 $function->signature->extendedAttributes->{"ImplementedBy"} = $i
nterfaceName; |
162 | 163 |
163 # Add interface-wide extended attributes to each method. | 164 # Add interface-wide extended attributes to each method. |
164 applyInterfaceExtendedAttributes($interface, $function->signatur
e->extendedAttributes); | 165 foreach my $extendedAttributeName (keys %{$interface->extendedAt
tributes}) { |
165 | 166 $function->signature->extendedAttributes->{$extendedAttribut
eName} = $interface->extendedAttributes->{$extendedAttributeName}; |
| 167 } |
166 push(@{$targetDataNode->functions}, $function); | 168 push(@{$targetDataNode->functions}, $function); |
167 } | 169 } |
168 | 170 |
169 # Support for constants of partial interfaces. | 171 # Support for constants of partial interfaces. |
170 foreach my $constant (@{$interface->constants}) { | 172 foreach my $constant (@{$interface->constants}) { |
171 # Record that this constant is implemented by $interfaceName. | 173 # Record that this constant is implemented by $interfaceName. |
172 $constant->extendedAttributes->{"ImplementedBy"} = $interfaceNam
e; | 174 $constant->extendedAttributes->{"ImplementedBy"} = $interfaceNam
e; |
173 | 175 |
174 # Add interface-wide extended attributes to each constant. | 176 # Add interface-wide extended attributes to each constant. |
175 applyInterfaceExtendedAttributes($interface, $constant->extended
Attributes); | 177 foreach my $extendedAttributeName (keys %{$interface->extendedAt
tributes}) { |
176 | 178 $constant->extendedAttributes->{$extendedAttributeName} = $i
nterface->extendedAttributes->{$extendedAttributeName}; |
| 179 } |
177 push(@{$targetDataNode->constants}, $constant); | 180 push(@{$targetDataNode->constants}, $constant); |
178 } | 181 } |
179 } else { | 182 } else { |
180 die "$idlFile is not a supplemental dependency of $targetIdlFile. Th
ere maybe a bug in the the supplemental dependency generator (preprocess_idls.py
).\n"; | 183 die "$idlFile is not a supplemental dependency of $targetIdlFile. Th
ere maybe a bug in the the supplemental dependency generator (preprocess_idls.py
).\n"; |
181 } | 184 } |
182 } | 185 } |
183 } | 186 } |
184 | 187 |
185 # FIXME: This code will be removed once IDLParser.pm and CodeGeneratorV8.pm | 188 # FIXME: This code will be removed once IDLParser.pm and CodeGeneratorV8.pm |
186 # are connected via JSON files. See http://crbug.com/242795 | 189 # are connected via JSON files. See http://crbug.com/242795 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 | 268 |
266 foreach my $function (@{$interface->functions}) { | 269 foreach my $function (@{$interface->functions}) { |
267 checkIfIDLAttributesExists($idlAttributes, $function->signature->ext
endedAttributes, $idlFile); | 270 checkIfIDLAttributesExists($idlAttributes, $function->signature->ext
endedAttributes, $idlFile); |
268 foreach my $parameter (@{$function->parameters}) { | 271 foreach my $parameter (@{$function->parameters}) { |
269 checkIfIDLAttributesExists($idlAttributes, $parameter->extendedA
ttributes, $idlFile); | 272 checkIfIDLAttributesExists($idlAttributes, $parameter->extendedA
ttributes, $idlFile); |
270 } | 273 } |
271 } | 274 } |
272 } | 275 } |
273 } | 276 } |
274 | 277 |
275 sub applyInterfaceExtendedAttributes | |
276 { | |
277 my $interface = shift; | |
278 my $extendedAttributes = shift; | |
279 | |
280 foreach my $extendedAttributeName (keys %{$interface->extendedAttributes}) { | |
281 next if $extendedAttributeName eq "ImplementedAs"; | |
282 $extendedAttributes->{$extendedAttributeName} = $interface->extendedAttr
ibutes->{$extendedAttributeName}; | |
283 } | |
284 } | |
285 | |
286 sub checkIfIDLAttributesExists | 278 sub checkIfIDLAttributesExists |
287 { | 279 { |
288 my $idlAttributes = shift; | 280 my $idlAttributes = shift; |
289 my $extendedAttributes = shift; | 281 my $extendedAttributes = shift; |
290 my $idlFile = shift; | 282 my $idlFile = shift; |
291 | 283 |
292 my $error; | 284 my $error; |
293 OUTER: for my $name (keys %$extendedAttributes) { | 285 OUTER: for my $name (keys %$extendedAttributes) { |
294 if (!exists $idlAttributes->{$name}) { | 286 if (!exists $idlAttributes->{$name}) { |
295 $error = "Unknown IDL attribute [$name] is found at $idlFile."; | 287 $error = "Unknown IDL attribute [$name] is found at $idlFile."; |
296 last OUTER; | 288 last OUTER; |
297 } | 289 } |
298 if ($idlAttributes->{$name}{"*"}) { | 290 if ($idlAttributes->{$name}{"*"}) { |
299 next; | 291 next; |
300 } | 292 } |
301 for my $rightValue (split /\s*\|\s*/, $extendedAttributes->{$name}) { | 293 for my $rightValue (split /\s*\|\s*/, $extendedAttributes->{$name}) { |
302 if (!exists $idlAttributes->{$name}{$rightValue}) { | 294 if (!exists $idlAttributes->{$name}{$rightValue}) { |
303 $error = "Unknown IDL attribute [$name=" . $extendedAttributes->
{$name} . "] is found at $idlFile."; | 295 $error = "Unknown IDL attribute [$name=" . $extendedAttributes->
{$name} . "] is found at $idlFile."; |
304 last OUTER; | 296 last OUTER; |
305 } | 297 } |
306 } | 298 } |
307 } | 299 } |
308 if ($error) { | 300 if ($error) { |
309 die "IDL ATTRIBUTE CHECKER ERROR: $error | 301 die "IDL ATTRIBUTE CHECKER ERROR: $error |
310 If you want to add a new IDL attribute, you need to add it to bindings/scripts/I
DLAttributes.txt and add explanations to the Blink IDL document (http://chromium
.org/blink/webidl). | 302 If you want to add a new IDL attribute, you need to add it to bindings/scripts/I
DLAttributes.txt and add explanations to the Blink IDL document (http://chromium
.org/blink/webidl). |
311 "; | 303 "; |
312 } | 304 } |
313 } | 305 } |
OLD | NEW |