Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Unified Diff: Source/bindings/scripts/IDLParser.pm

Issue 14244017: Make length property return useful values for DOM bindings functions (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Make length property return useful values for DOM bindings functions and interfaces Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/bindings/scripts/IDLParser.pm
diff --git a/Source/bindings/scripts/IDLParser.pm b/Source/bindings/scripts/IDLParser.pm
index 5337a4a270f215b5a99418cdf6ed3b459af83912..9513dca2b0c77e206b76647e0490e03499d13164 100644
--- a/Source/bindings/scripts/IDLParser.pm
+++ b/Source/bindings/scripts/IDLParser.pm
@@ -49,6 +49,7 @@ struct( domInterface => {
attributes => '@', # List of 'domAttribute'
extendedAttributes => '$', # Extended attributes
constructors => '@', # Constructors, list of 'domFunction'
+ customConstructors => '@', # Custom constructors, list of 'domFunction'
isException => '$', # Used for exception interfaces
});
@@ -375,7 +376,7 @@ sub applyTypedefs
foreach my $attribute (@{$definition->attributes}) {
$self->applyTypedefsForSignature($attribute->signature);
}
- foreach my $function (@{$definition->functions}, @{$definition->constructors}) {
+ foreach my $function (@{$definition->functions}, @{$definition->constructors}, @{$definition->customConstructors}) {
$self->applyTypedefsForSignature($function->signature);
foreach my $signature (@{$function->parameters}) {
$self->applyTypedefsForSignature($signature);
@@ -1149,6 +1150,11 @@ sub parseAttributeRest
$self->assertTokenType($token, IdentifierToken);
$newDataNode->signature->name($token->value());
$self->assertTokenValue($self->getToken(), ";", __LINE__);
+ # CustomConstructor may also be used on attributes.
haraken 2013/04/16 11:58:27 Where can it happen?
do-not-use 2013/04/16 12:02:23 It is used in DOMWindow.idl for: [CustomConstructo
haraken 2013/04/16 12:05:44 ah.... Actually I do want to remove the [CustomCo
+ if (defined $extendedAttributeList->{"CustomConstructors"}) {
+ delete $extendedAttributeList->{"CustomConstructors"};
+ $extendedAttributeList->{"CustomConstructor"} = "VALUE_IS_MISSING";
+ }
$newDataNode->signature->extendedAttributes($extendedAttributeList);
return $newDataNode;
}
@@ -1516,6 +1522,13 @@ sub copyExtendedAttributes
foreach my $constructor (@constructors) {
push(@{$extendedAttributeList->{"Constructors"}}, $constructor);
}
+ } elsif ($key eq "CustomConstructor") {
+ push(@{$extendedAttributeList->{"CustomConstructors"}}, $attr->{$key});
+ } elsif ($key eq "CustomConstructors") {
+ my @customConstructors = @{$attr->{$key}};
+ foreach my $customConstructor (@customConstructors) {
+ push(@{$extendedAttributeList->{"CustomConstructors"}}, $customConstructor);
+ }
} else {
$extendedAttributeList->{$key} = $attr->{$key};
}
@@ -1602,7 +1615,7 @@ sub parseExtendedAttributeRest
return $attrs;
}
- if ($name eq "Constructor") {
+ if ($name eq "Constructor" || $name eq "CustomConstructor") {
$attrs->{$name} = [];
} else {
$attrs->{$name} = "VALUE_IS_MISSING";
@@ -2098,7 +2111,7 @@ sub parseInterfaceOld
if ($next->value() eq "interface") {
my $interface = domInterface->new();
$self->assertTokenValue($self->getToken(), "interface", __LINE__);
- my $extendedAttributeList = $self->parseExtendedAttributeListAllowEmpty();
+ my $extendedAttributeList = $self->parseExtendedAttributeListAllowEmpty(1);
haraken 2013/04/16 11:58:27 What is this change for?
do-not-use 2013/04/16 12:02:23 My bad. Forgot to remove this local change.
my $token = $self->getToken();
$self->assertTokenType($token, IdentifierToken);
$interface->name($token->value());
@@ -2453,6 +2466,21 @@ sub applyExtendedAttributeList
$extendedAttributeList->{"NamedConstructor"} = $constructorName;
push(@{$interface->constructors}, $newDataNode);
}
+ if (defined $extendedAttributeList->{"CustomConstructors"}) {
+ my @customConstructorParams = @{$extendedAttributeList->{"CustomConstructors"}};
+ my $index = (@customConstructorParams == 1) ? 0 : 1;
+ foreach my $param (@customConstructorParams) {
+ my $customConstructor = domFunction->new();
+ $customConstructor->signature(domSignature->new());
+ $customConstructor->signature->name("CustomConstructor");
+ $customConstructor->signature->extendedAttributes($extendedAttributeList);
+ $customConstructor->parameters($param);
+ $customConstructor->{overloadedIndex} = $index++;
+ push(@{$interface->customConstructors}, $customConstructor);
+ }
+ delete $extendedAttributeList->{"CustomConstructors"};
+ $extendedAttributeList->{"CustomConstructor"} = "VALUE_IS_MISSING";
+ }
$interface->extendedAttributes($extendedAttributeList);
}
« no previous file with comments | « Source/bindings/scripts/CodeGeneratorV8.pm ('k') | Source/bindings/tests/results/V8TestCustomNamedGetter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698