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

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

Issue 14384004: Get rid of [Callback] extended attribute for parameters in IDL files (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix whitespace issue in generated bindings 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
« no previous file with comments | « Source/bindings/scripts/CodeGenerator.pm ('k') | Source/bindings/scripts/IDLAttributes.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/scripts/CodeGeneratorV8.pm
diff --git a/Source/bindings/scripts/CodeGeneratorV8.pm b/Source/bindings/scripts/CodeGeneratorV8.pm
index 51f55b24d159ceb733b6a24ec7edbc237b26d9ce..3fedfe5fe162c7e356108e005f0a1d95b9645926 100644
--- a/Source/bindings/scripts/CodeGeneratorV8.pm
+++ b/Source/bindings/scripts/CodeGeneratorV8.pm
@@ -8,6 +8,7 @@
# Copyright (C) Research In Motion Limited 2010. All rights reserved.
# Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
# Copyright (C) 2012 Ericsson AB. All rights reserved.
+# Copyright (C) 2013 Samsung Electronics. All rights reserved.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
@@ -1823,7 +1824,7 @@ sub GenerateParametersCheckExpression
if ($parameter->extendedAttributes->{"StrictTypeChecking"}) {
push(@andExpression, "(${value}->IsNull() || ${value}->IsUndefined() || ${value}->IsString() || ${value}->IsObject())");
}
- } elsif ($parameter->extendedAttributes->{"Callback"}) {
+ } elsif (IsCallbackInterface($parameter->type)) {
# For Callbacks only checks if the value is null or object.
push(@andExpression, "(${value}->IsNull() || ${value}->IsFunction())");
} elsif (GetArrayType($type) || GetSequenceType($type)) {
@@ -2068,7 +2069,7 @@ END
my $raisesExceptions = $function->signature->extendedAttributes->{"RaisesException"};
if (!$raisesExceptions) {
foreach my $parameter (@{$function->parameters}) {
- if ((!$parameter->extendedAttributes->{"Callback"} and TypeCanFailConversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
+ if ((!IsCallbackInterface($parameter->type) and TypeCanFailConversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
$raisesExceptions = 1;
}
}
@@ -2190,7 +2191,7 @@ sub GenerateParametersCheck
# Optional arguments without [Default=...] should generate an early call with fewer arguments.
# Optional arguments with [Optional=...] should not generate the early call.
# Optional Dictionary arguments always considered to have default of empty dictionary.
- if ($parameter->isOptional && !$parameter->extendedAttributes->{"Default"} && $nativeType ne "Dictionary" && !$parameter->extendedAttributes->{"Callback"}) {
+ if ($parameter->isOptional && !$parameter->extendedAttributes->{"Default"} && $nativeType ne "Dictionary" && !IsCallbackInterface($parameter->type)) {
$parameterCheckString .= " if (args.Length() <= $paramIndex) {\n";
my $functionCall = GenerateFunctionCallString($function, $paramIndex, " " x 2, $interfaceName, $forMainWorldSuffix, %replacements);
$parameterCheckString .= $functionCall;
@@ -2205,7 +2206,7 @@ sub GenerateParametersCheck
my $parameterName = $parameter->name;
AddToImplIncludes("core/dom/ExceptionCode.h");
- if ($parameter->extendedAttributes->{"Callback"}) {
+ if (IsCallbackInterface($parameter->type)) {
my $v8InterfaceName = "V8" . $parameter->type;
AddToImplIncludes("$v8InterfaceName.h");
if ($parameter->isOptional) {
@@ -2358,7 +2359,7 @@ sub GenerateSingleConstructorCallback
}
if (!$raisesExceptions) {
foreach my $parameter (@{$function->parameters}) {
- if ((!$parameter->extendedAttributes->{"Callback"} and TypeCanFailConversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
+ if ((!IsCallbackInterface($parameter->type) and TypeCanFailConversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
$raisesExceptions = 1;
}
}
@@ -2583,7 +2584,7 @@ sub GenerateNamedConstructor
}
if (!$raisesExceptions) {
foreach my $parameter (@{$function->parameters}) {
- if ((!$parameter->extendedAttributes->{"Callback"} and TypeCanFailConversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
+ if ((!IsCallbackInterface($parameter->type) and TypeCanFailConversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
$raisesExceptions = 1;
}
}
@@ -2615,9 +2616,9 @@ END
$code .= <<END;
static v8::Handle<v8::Value> ${v8InterfaceName}ConstructorCallback(const v8::Arguments& args)
{
- ${maybeObserveFeature}
- ${maybeDeprecateFeature}
END
+ $code .= $maybeObserveFeature if $maybeObserveFeature;
+ $code .= $maybeDeprecateFeature if $maybeDeprecateFeature;
$code .= GenerateConstructorHeader();
AddToImplIncludes("V8Document.h");
$code .= <<END;
@@ -4705,7 +4706,7 @@ sub RequiresCustomSignature
return 0;
}
foreach my $parameter (@{$function->parameters}) {
- if (($parameter->isOptional && !$parameter->extendedAttributes->{"Default"}) || $parameter->extendedAttributes->{"Callback"}) {
+ if (($parameter->isOptional && !$parameter->extendedAttributes->{"Default"}) || IsCallbackInterface($parameter->type)) {
return 0;
}
}
@@ -4757,6 +4758,26 @@ sub IsWrapperType
return !($non_wrapper_types{$type});
}
+sub IsCallbackInterface
+{
+ my $type = shift;
+ return 0 unless IsWrapperType($type);
+ # FIXME: Those checks for Sequence and Array types should probably
+ # be moved to IsWrapperType().
+ return 0 if GetArrayType($type);
+ return 0 if GetSequenceType($type);
+
+ my $idlFile = IDLFileForInterface($type)
+ or die("Could NOT find IDL file for interface \"$type\"!\n");
+
+ open FILE, "<", $idlFile;
+ my @lines = <FILE>;
+ close FILE;
+
+ my $fileContents = join('', @lines);
+ return ($fileContents =~ /callback\s+interface\s+(\w+)/gs);
+}
+
sub GetTypeNameOfExternalTypedArray
{
my $interface = shift;
« no previous file with comments | « Source/bindings/scripts/CodeGenerator.pm ('k') | Source/bindings/scripts/IDLAttributes.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698