Diff
Modified: trunk/Source/WebCore/ChangeLog (98703 => 98704)
--- trunk/Source/WebCore/ChangeLog 2011-10-28 07:19:44 UTC (rev 98703)
+++ trunk/Source/WebCore/ChangeLog 2011-10-28 07:20:58 UTC (rev 98704)
@@ -1,3 +1,32 @@
+2011-10-27 Adam Barth <[email protected]>
+
+ Refactor make_event_factory.pl to use InFilesCompiler.pm
+ https://bugs.webkit.org/show_bug.cgi?id=71094
+
+ Reviewed by Eric Seidel.
+
+ This refactoring helps share code with
+ make_exception_code_descriptions.pl, which is coming in a future patch.
+ I have a dream of refactoring make_names.pl to use this module as well.
+
+ * CodeGenerators.pri:
+ * DerivedSources.make:
+ * GNUmakefile.am:
+ * WebCore.gyp/scripts/action_makenames.py:
+ * bindings/scripts/InFilesCompiler.pm: Added.
+ (itemHandler):
+ (parameterHandler):
+ (new):
+ (compile):
+ (license):
+ * dom/make_event_factory.pl:
+ (defaultItemFactory):
+ (interfaceForEvent):
+ (generateCode):
+ (printFactoryFile):
+ (printMacroFile):
+ (printHeadersFile):
+
2011-10-26 Nat Duca <[email protected]>
[chromium] Implement frame rate control portions of CCScheduler
Modified: trunk/Source/WebCore/CodeGenerators.pri (98703 => 98704)
--- trunk/Source/WebCore/CodeGenerators.pri 2011-10-28 07:19:44 UTC (rev 98703)
+++ trunk/Source/WebCore/CodeGenerators.pri 2011-10-28 07:20:58 UTC (rev 98704)
@@ -758,7 +758,7 @@
eventfactory.output = $${WC_GENERATED_SOURCES_DIR}/EventFactory.cpp
eventfactory.input = EVENT_FACTORY
eventfactory.wkScript = $$PWD/dom/make_event_factory.pl
-eventfactory.commands = perl -I$$PWD/bindings/scripts $$eventfactory.wkScript --events $$EVENT_FACTORY --outputDir $$WC_GENERATED_SOURCES_DIR
+eventfactory.commands = perl -I$$PWD/bindings/scripts $$eventfactory.wkScript --input $$EVENT_FACTORY --outputDir $$WC_GENERATED_SOURCES_DIR
eventfactory.depends = $$PWD/dom/make_event_factory.pl $$EVENT_FACTORY
addExtraCompiler(eventfactory)
@@ -766,7 +766,7 @@
eventtargetfactory.output = $${WC_GENERATED_SOURCES_DIR}/EventTargetInterfaces.h
eventtargetfactory.input = EVENT_TARGET_FACTORY
eventtargetfactory.wkScript = $$PWD/dom/make_event_factory.pl
-eventtargetfactory.commands = perl -I$$PWD/bindings/scripts $$eventfactory.wkScript --events $$EVENT_TARGET_FACTORY --outputDir $$WC_GENERATED_SOURCES_DIR
+eventtargetfactory.commands = perl -I$$PWD/bindings/scripts $$eventfactory.wkScript --input $$EVENT_TARGET_FACTORY --outputDir $$WC_GENERATED_SOURCES_DIR
eventtargetfactory.depends = $$PWD/dom/make_event_factory.pl $$EVENT_TARGET_FACTORY
addExtraCompiler(eventtargetfactory)
Modified: trunk/Source/WebCore/DerivedSources.make (98703 => 98704)
--- trunk/Source/WebCore/DerivedSources.make 2011-10-28 07:19:44 UTC (rev 98703)
+++ trunk/Source/WebCore/DerivedSources.make 2011-10-28 07:20:58 UTC (rev 98704)
@@ -851,10 +851,10 @@
# Register event constructors and targets
EventFactory.cpp EventHeaders.h EventInterfaces.h : dom/make_event_factory.pl dom/EventFactory.in
- perl -I $(WebCore)/bindings/scripts $< --events $(WebCore)/dom/EventFactory.in
+ perl -I $(WebCore)/bindings/scripts $< --input $(WebCore)/dom/EventFactory.in
EventTargetHeaders.h EventTargetInterfaces.h : dom/make_event_factory.pl dom/EventTargetFactory.in
- perl -I $(WebCore)/bindings/scripts $< --events $(WebCore)/dom/EventTargetFactory.in
+ perl -I $(WebCore)/bindings/scripts $< --input $(WebCore)/dom/EventTargetFactory.in
# --------
Modified: trunk/Source/WebCore/GNUmakefile.am (98703 => 98704)
--- trunk/Source/WebCore/GNUmakefile.am 2011-10-28 07:19:44 UTC (rev 98703)
+++ trunk/Source/WebCore/GNUmakefile.am 2011-10-28 07:20:58 UTC (rev 98704)
@@ -691,10 +691,10 @@
$(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --attrs $(WebCore)/xml/xmlattrs.in --outputDir "$(GENSOURCES_WEBCORE)"
DerivedSources/WebCore/EventFactory.cpp DerivedSources/WebCore/EventHeaders.h DerivedSources/WebCore/EventInterfaces.h: $(WebCore)/dom/make_event_factory.pl $(WebCore)/dom/EventFactory.in
- $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --events $(WebCore)/dom/EventFactory.in --outputDir "$(GENSOURCES_WEBCORE)"
+ $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --input $(WebCore)/dom/EventFactory.in --outputDir "$(GENSOURCES_WEBCORE)"
DerivedSources/WebCore/EventTargetHeaders.h DerivedSources/WebCore/EventTargetInterfaces.h: $(WebCore)/dom/make_event_factory.pl $(WebCore)/dom/EventTargetFactory.in
- $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --events $(WebCore)/dom/EventTargetFactory.in --outputDir "$(GENSOURCES_WEBCORE)"
+ $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --input $(WebCore)/dom/EventTargetFactory.in --outputDir "$(GENSOURCES_WEBCORE)"
# All Web Inspector generated files are created with this one call to CodeGeneratorInspector.py
DerivedSources/WebCore/InspectorProtocolVersion.h : $(WebCore)/inspector/Inspector.json $(WebCore)/inspector/generate-inspector-protocol-version
Modified: trunk/Source/WebCore/WebCore.gyp/scripts/action_makenames.py (98703 => 98704)
--- trunk/Source/WebCore/WebCore.gyp/scripts/action_makenames.py 2011-10-28 07:19:44 UTC (rev 98703)
+++ trunk/Source/WebCore/WebCore.gyp/scripts/action_makenames.py 2011-10-28 07:20:58 UTC (rev 98704)
@@ -155,7 +155,7 @@
if attrInput != None:
command.extend(['--attrs', attrInput])
if eventsInput != None:
- command.extend(['--events', eventsInput])
+ command.extend(['--input', eventsInput])
command.extend(options)
# Do it. check_call is new in 2.5, so simulate its behavior with call and
Added: trunk/Source/WebCore/bindings/scripts/InFilesCompiler.pm (0 => 98704)
--- trunk/Source/WebCore/bindings/scripts/InFilesCompiler.pm (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/InFilesCompiler.pm 2011-10-28 07:20:58 UTC (rev 98704)
@@ -0,0 +1,125 @@
+#!/usr/bin/perl -w
+
+# Copyright (C) 2011 Adam Barth <[email protected]>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+use strict;
+
+use IO::File;
+use InFilesParser;
+
+package InFilesCompiler;
+
+my $defaultItemFactory;
+
+my %parsedItems;
+my %parsedParameters;
+
+sub itemHandler($$$)
+{
+ my ($itemName, $property, $value) = @_;
+
+ $parsedItems{$itemName} = { &$defaultItemFactory($itemName) } if !defined($parsedItems{$itemName});
+
+ return unless $property;
+
+ die "Unknown property $property for $itemName\n" if !defined($parsedItems{$itemName}{$property});
+ $parsedItems{$itemName}{$property} = $value;
+}
+
+sub parameterHandler($$)
+{
+ my ($parameter, $value) = @_;
+
+ die "Unknown parameter $parameter\n" if !defined($parsedParameters{$parameter});
+ $parsedParameters{$parameter} = $value;
+}
+
+sub new()
+{
+ my $object = shift;
+ my $reference = { };
+
+ my $defaultParametersRef = shift;
+ %parsedParameters = %{ $defaultParametersRef };
+ $defaultItemFactory = shift;
+
+ %parsedItems = ();
+
+ bless($reference, $object);
+ return $reference;
+}
+
+sub compile()
+{
+ my $object = shift;
+
+ my $inputFile = shift;
+ my $generateCode = shift;
+
+ my $file = new IO::File;
+ open($file, $inputFile) or die "Failed to open file: $!";
+
+ my $InParser = InFilesParser->new();
+ $InParser->parse($file, \¶meterHandler, \&itemHandler);
+
+ close($file);
+ die "Failed to read from file: $inputFile" if (keys %parsedItems == 0);
+
+ &$generateCode(\%parsedParameters, \%parsedItems);
+}
+
+sub license()
+{
+ return "/*
+ * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
+ *
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+";
+}
+
+1;
Modified: trunk/Source/WebCore/dom/make_event_factory.pl (98703 => 98704)
--- trunk/Source/WebCore/dom/make_event_factory.pl 2011-10-28 07:19:44 UTC (rev 98703)
+++ trunk/Source/WebCore/dom/make_event_factory.pl 2011-10-28 07:20:58 UTC (rev 98704)
@@ -37,36 +37,31 @@
use File::Path;
use File::Spec;
use IO::File;
-use InFilesParser;
+use InFilesCompiler;
-sub readEvents($);
-sub printFactoryFile($);
-sub printMacroFile($);
-sub printHeadersFile($);
+require Config;
-my $eventsFile = "";
+my $inputFile = "";
my $outputDir = ".";
-my %parsedEvents = ();
-my $namespace;
-require Config;
-
GetOptions(
- 'events=s' => \$eventsFile,
+ 'input=s' => \$inputFile,
'outputDir=s' => \$outputDir,
);
mkpath($outputDir);
-die "You must specify --events <file>" unless length($eventsFile);
+die "You must specify --input <file>" unless length($inputFile);
-my %events = %{readEvents($eventsFile)};
+my %defaultParameters = (
+ 'namespace' => 0
+);
-printFactoryFile("$outputDir/${namespace}Factory.cpp") if $namespace eq "Event";
-printMacroFile("$outputDir/${namespace}Interfaces.h");
-printHeadersFile("$outputDir/${namespace}Headers.h");
+my $InCompiler = InFilesCompiler->new(\%defaultParameters, \&defaultItemFactory);
-sub defaultEventPropertyHash
+$InCompiler->compile($inputFile, \&generateCode);
+
+sub defaultItemFactory
{
return (
'interfaceName' => 0,
@@ -74,53 +69,13 @@
);
}
-sub eventHandler($$$)
+sub interfaceForEvent($$)
{
- my ($event, $property, $value) = @_;
+ my ($eventName, $parsedItemsRef) = @_;
- $parsedEvents{$event} = { defaultEventPropertyHash($event) } if !defined($parsedEvents{$event});
+ my %parsedItems = %{ $parsedItemsRef };
- if ($property) {
- die "Unknown property $property for event $event\n" if !defined($parsedEvents{$event}{$property});
- $parsedEvents{$event}{$property} = $value;
- }
-}
-
-sub parametersHandler
-{
- my ($parameter, $value) = @_;
-
- die "Unknown parameter $parameter\n" unless $parameter eq "namespace";
- $namespace = $value;
-}
-
-sub readNames($$$)
-{
- my ($namesFile, $hashToFillRef, $handler) = @_;
-
- my $names = new IO::File;
- open($names, $namesFile) or die "Failed to open file: $namesFile";
-
- my $InParser = InFilesParser->new();
- $InParser->parse($names, \¶metersHandler, $handler);
-
- close($names);
- die "Failed to read names from file: $namesFile" if (keys %{$hashToFillRef} == 0);
- return $hashToFillRef;
-}
-
-sub readEvents($)
-{
- my ($namesFile) = @_;
- %parsedEvents = ();
- return readNames($namesFile, \%parsedEvents, \&eventHandler);
-}
-
-sub interfaceForEvent($)
-{
- my ($eventName) = @_;
-
- my $interfaceName = $parsedEvents{$eventName}{"interfaceName"};
+ my $interfaceName = $parsedItems{$eventName}{"interfaceName"};
$interfaceName = $eventName unless $interfaceName;
return $interfaceName;
@@ -136,15 +91,36 @@
die "Ok, you got me. This script is really just a giant hack.";
}
-sub printFactoryFile($)
+sub generateCode()
{
- my $path = shift;
+ my $parsedParametersRef = shift;
+ my $parsedItemsRef = shift;
+
+ printFactoryFile($parsedParametersRef, $parsedItemsRef);
+ printMacroFile($parsedParametersRef, $parsedItemsRef);
+ printHeadersFile($parsedParametersRef, $parsedItemsRef);
+}
+
+sub printFactoryFile()
+{
+ my $parsedParametersRef = shift;
+ my $parsedItemsRef = shift;
+
my $F;
+ my %parsedEvents = %{ $parsedItemsRef };
+ my %parsedParameters = %{ $parsedParametersRef };
- open F, ">$path";
+ my $namespace = $parsedParameters{"namespace"};
- printLicenseHeader($F);
+ # Currently, only Events have factory files.
+ return if $namespace ne "Event";
+ my $outputFile = "$outputDir/${namespace}Factory.cpp";
+
+ open F, ">$outputFile" or die "Failed to open file: $!";
+
+ print F $InCompiler->license();
+
print F "#include \"config.h\"\n";
print F "#include \"${namespace}Factory.h\"\n";
print F "\n";
@@ -157,7 +133,7 @@
for my $eventName (sort keys %parsedEvents) {
my $conditional = $parsedEvents{$eventName}{"conditional"};
- my $interfaceName = interfaceForEvent($eventName);
+ my $interfaceName = interfaceForEvent($eventName, $parsedItemsRef);
print F "#if ENABLE($conditional)\n" if $conditional;
print F " if (type == \"$eventName\")\n";
@@ -169,18 +145,27 @@
print F "}\n";
print F "\n";
print F "} // namespace WebCore\n";
+
close F;
}
-sub printMacroFile($)
+sub printMacroFile()
{
- my $path = shift;
+ my $parsedParametersRef = shift;
+ my $parsedItemsRef = shift;
+
my $F;
+ my %parsedEvents = %{ $parsedItemsRef };
+ my %parsedParameters = %{ $parsedParametersRef };
- open F, ">$path";
+ my $namespace = $parsedParameters{"namespace"};
- printLicenseHeader($F);
+ my $outputFile = "$outputDir/${namespace}Interfaces.h";
+ open F, ">$outputFile" or die "Failed to open file: $!";
+
+ print F $InCompiler->license();
+
print F "#ifndef ${namespace}Interfaces_h\n";
print F "#define ${namespace}Interfaces_h\n";
print F "\n";
@@ -190,7 +175,7 @@
for my $eventName (sort keys %parsedEvents) {
my $conditional = $parsedEvents{$eventName}{"conditional"};
- my $interfaceName = interfaceForEvent($eventName);
+ my $interfaceName = interfaceForEvent($eventName, $parsedItemsRef);
if ($conditional) {
if (!defined($interfacesByConditional{$conditional})) {
@@ -236,15 +221,23 @@
close F;
}
-sub printHeadersFile($)
+sub printHeadersFile()
{
- my $path = shift;
+ my $parsedParametersRef = shift;
+ my $parsedItemsRef = shift;
+
my $F;
+ my %parsedEvents = %{ $parsedItemsRef };
+ my %parsedParameters = %{ $parsedParametersRef };
- open F, ">$path";
+ my $namespace = $parsedParameters{"namespace"};
- printLicenseHeader($F);
+ my $outputFile = "$outputDir/${namespace}Headers.h";
+ open F, ">$outputFile" or die "Failed to open file: $!";
+
+ print F $InCompiler->license();
+
print F "#ifndef ${namespace}Headers_h\n";
print F "#define ${namespace}Headers_h\n";
print F "\n";
@@ -253,7 +246,7 @@
for my $eventName (sort keys %parsedEvents) {
my $conditional = $parsedEvents{$eventName}{"conditional"};
- my $interfaceName = interfaceForEvent($eventName);
+ my $interfaceName = interfaceForEvent($eventName, $parsedItemsRef);
next if defined($includedInterfaces{$interfaceName});
$includedInterfaces{$interfaceName} = 1;
@@ -273,40 +266,3 @@
close F;
}
-
-sub printLicenseHeader($)
-{
- my ($F) = @_;
-
- print F "/*
- * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
- *
- * This file was generated by the dom/make_event_factory.pl script.
- *
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-";
-}
-
Modified: trunk/Source/cmake/WebKitMacros.cmake (98703 => 98704)
--- trunk/Source/cmake/WebKitMacros.cmake 2011-10-28 07:19:44 UTC (rev 98703)
+++ trunk/Source/cmake/WebKitMacros.cmake 2011-10-28 07:20:58 UTC (rev 98704)
@@ -43,7 +43,7 @@
ADD_CUSTOM_COMMAND(
OUTPUT ${DERIVED_SOURCES_WEBCORE_DIR}/${_outfile}
DEPENDS ${NAMES_GENERATOR} ${SCRIPTS_BINDINGS} ${_infile}
- COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${NAMES_GENERATOR} --events ${_infile} --outputDir ${DERIVED_SOURCES_WEBCORE_DIR}
+ COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${NAMES_GENERATOR} --input ${_infile} --outputDir ${DERIVED_SOURCES_WEBCORE_DIR}
VERBATIM)
ENDMACRO ()