Index: Source/bindings/scripts/CodeGenerator.pm |
diff --git a/Source/bindings/scripts/CodeGenerator.pm b/Source/bindings/scripts/CodeGenerator.pm |
index 094b08125197c7c94570ffda2154e34257a27c83..b453193fad4515ecd34e272e06f179367ebc63bd 100644 |
--- a/Source/bindings/scripts/CodeGenerator.pm |
+++ b/Source/bindings/scripts/CodeGenerator.pm |
@@ -91,6 +91,7 @@ my %svgTypeWithWritablePropertiesNeedingTearOff = ( |
# Cache of IDL file pathnames. |
my $idlFiles; |
my $cachedInterfaces = {}; |
+my $didCacheAllInterfaces = 0; |
# Default constructor |
sub new |
@@ -242,10 +243,8 @@ sub FindSuperMethod |
return $indexer; |
} |
-sub IDLFileForInterface |
-{ |
+sub PopulateIDLFiles { |
my $object = shift; |
- my $interfaceName = shift; |
unless ($idlFiles) { |
my $sourceRoot = $ENV{SOURCE_ROOT}; |
@@ -260,6 +259,36 @@ sub IDLFileForInterface |
}; |
find($wanted, @directories); |
} |
+} |
+ |
+sub GetAllInterfaces |
+{ |
+ my $object = shift; |
+ |
+ unless ($didCacheAllInterfaces) { |
haraken
2013/04/22 11:44:50
GetAllInterfaces() is called only once (i.e. from
|
+ $object->PopulateIDLFiles(); |
+ |
+ foreach my $filename (values $idlFiles) { |
+ my $parser = IDLParser->new(1); |
+ my $document = $parser->Parse($filename, $defines, $preprocessor); |
+ |
+ foreach my $interface (@{$document->interfaces}) { |
+ $cachedInterfaces->{$interface->name} = $interface; |
+ } |
+ } |
+ |
+ $didCacheAllInterfaces = 1; |
+ } |
+ |
+ return (values $cachedInterfaces); |
+} |
+ |
+sub IDLFileForInterface |
+{ |
+ my $object = shift; |
+ my $interfaceName = shift; |
+ |
+ $object->PopulateIDLFiles(); |
return $idlFiles->{$interfaceName}; |
} |