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

Side by Side 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, 7 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 unified diff | Download patch
« no previous file with comments | « Source/bindings/scripts/CodeGenerator.pm ('k') | Source/bindings/scripts/IDLAttributes.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> 1 # Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
2 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> 2 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com>
3 # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> 3 # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
4 # Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org> 4 # Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org>
5 # Copyright (C) 2006 Apple Computer, Inc. 5 # Copyright (C) 2006 Apple Computer, Inc.
6 # Copyright (C) 2007, 2008, 2009, 2012 Google Inc. 6 # Copyright (C) 2007, 2008, 2009, 2012 Google Inc.
7 # Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> 7 # Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
8 # Copyright (C) Research In Motion Limited 2010. All rights reserved. 8 # Copyright (C) Research In Motion Limited 2010. All rights reserved.
9 # Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 # Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 # Copyright (C) 2012 Ericsson AB. All rights reserved. 10 # Copyright (C) 2012 Ericsson AB. All rights reserved.
11 # Copyright (C) 2013 Samsung Electronics. All rights reserved.
11 # 12 #
12 # This library is free software; you can redistribute it and/or 13 # This library is free software; you can redistribute it and/or
13 # modify it under the terms of the GNU Library General Public 14 # modify it under the terms of the GNU Library General Public
14 # License as published by the Free Software Foundation; either 15 # License as published by the Free Software Foundation; either
15 # version 2 of the License, or (at your option) any later version. 16 # version 2 of the License, or (at your option) any later version.
16 # 17 #
17 # This library is distributed in the hope that it will be useful, 18 # This library is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of 19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 # Library General Public License for more details. 21 # Library General Public License for more details.
(...skipping 1795 matching lines...) Expand 10 before | Expand all | Expand 10 after
1816 1817
1817 # Only DOMString or wrapper types are checked. 1818 # Only DOMString or wrapper types are checked.
1818 # For DOMString with StrictTypeChecking only Null, Undefined and Object 1819 # For DOMString with StrictTypeChecking only Null, Undefined and Object
1819 # are accepted for compatibility. Otherwise, no restrictions are made to 1820 # are accepted for compatibility. Otherwise, no restrictions are made to
1820 # match the non-overloaded behavior. 1821 # match the non-overloaded behavior.
1821 # FIXME: Implement WebIDL overload resolution algorithm. 1822 # FIXME: Implement WebIDL overload resolution algorithm.
1822 if ($type eq "DOMString") { 1823 if ($type eq "DOMString") {
1823 if ($parameter->extendedAttributes->{"StrictTypeChecking"}) { 1824 if ($parameter->extendedAttributes->{"StrictTypeChecking"}) {
1824 push(@andExpression, "(${value}->IsNull() || ${value}->IsUndefin ed() || ${value}->IsString() || ${value}->IsObject())"); 1825 push(@andExpression, "(${value}->IsNull() || ${value}->IsUndefin ed() || ${value}->IsString() || ${value}->IsObject())");
1825 } 1826 }
1826 } elsif ($parameter->extendedAttributes->{"Callback"}) { 1827 } elsif (IsCallbackInterface($parameter->type)) {
1827 # For Callbacks only checks if the value is null or object. 1828 # For Callbacks only checks if the value is null or object.
1828 push(@andExpression, "(${value}->IsNull() || ${value}->IsFunction()) "); 1829 push(@andExpression, "(${value}->IsNull() || ${value}->IsFunction()) ");
1829 } elsif (GetArrayType($type) || GetSequenceType($type)) { 1830 } elsif (GetArrayType($type) || GetSequenceType($type)) {
1830 if ($parameter->isNullable) { 1831 if ($parameter->isNullable) {
1831 push(@andExpression, "(${value}->IsNull() || ${value}->IsArray() )"); 1832 push(@andExpression, "(${value}->IsNull() || ${value}->IsArray() )");
1832 } else { 1833 } else {
1833 push(@andExpression, "(${value}->IsArray())"); 1834 push(@andExpression, "(${value}->IsArray())");
1834 } 1835 }
1835 } elsif (IsWrapperType($type)) { 1836 } elsif (IsWrapperType($type)) {
1836 if ($parameter->isNullable) { 1837 if ($parameter->isNullable) {
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
2061 AddToImplIncludes("core/page/Frame.h"); 2062 AddToImplIncludes("core/page/Frame.h");
2062 $code .= <<END; 2063 $code .= <<END;
2063 if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp ->frame())) 2064 if (!BindingSecurity::shouldAllowAccessToFrame(BindingState::instance(), imp ->frame()))
2064 return v8Undefined(); 2065 return v8Undefined();
2065 END 2066 END
2066 } 2067 }
2067 2068
2068 my $raisesExceptions = $function->signature->extendedAttributes->{"RaisesExc eption"}; 2069 my $raisesExceptions = $function->signature->extendedAttributes->{"RaisesExc eption"};
2069 if (!$raisesExceptions) { 2070 if (!$raisesExceptions) {
2070 foreach my $parameter (@{$function->parameters}) { 2071 foreach my $parameter (@{$function->parameters}) {
2071 if ((!$parameter->extendedAttributes->{"Callback"} and TypeCanFailCo nversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) { 2072 if ((!IsCallbackInterface($parameter->type) and TypeCanFailConversio n($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
2072 $raisesExceptions = 1; 2073 $raisesExceptions = 1;
2073 } 2074 }
2074 } 2075 }
2075 } 2076 }
2076 2077
2077 if ($raisesExceptions) { 2078 if ($raisesExceptions) {
2078 AddToImplIncludes("core/dom/ExceptionCode.h"); 2079 AddToImplIncludes("core/dom/ExceptionCode.h");
2079 $code .= " ExceptionCode ec = 0;\n"; 2080 $code .= " ExceptionCode ec = 0;\n";
2080 $code .= " {\n"; 2081 $code .= " {\n";
2081 # The brace here is needed to prevent the ensuing 'goto fail's from jump ing past constructors 2082 # The brace here is needed to prevent the ensuing 'goto fail's from jump ing past constructors
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
2183 my $parameterCheckString = ""; 2184 my $parameterCheckString = "";
2184 my $paramIndex = 0; 2185 my $paramIndex = 0;
2185 my %replacements = (); 2186 my %replacements = ();
2186 2187
2187 foreach my $parameter (@{$function->parameters}) { 2188 foreach my $parameter (@{$function->parameters}) {
2188 my $nativeType = GetNativeTypeFromSignature($parameter, $paramIndex); 2189 my $nativeType = GetNativeTypeFromSignature($parameter, $paramIndex);
2189 2190
2190 # Optional arguments without [Default=...] should generate an early call with fewer arguments. 2191 # Optional arguments without [Default=...] should generate an early call with fewer arguments.
2191 # Optional arguments with [Optional=...] should not generate the early c all. 2192 # Optional arguments with [Optional=...] should not generate the early c all.
2192 # Optional Dictionary arguments always considered to have default of emp ty dictionary. 2193 # Optional Dictionary arguments always considered to have default of emp ty dictionary.
2193 if ($parameter->isOptional && !$parameter->extendedAttributes->{"Default "} && $nativeType ne "Dictionary" && !$parameter->extendedAttributes->{"Callback "}) { 2194 if ($parameter->isOptional && !$parameter->extendedAttributes->{"Default "} && $nativeType ne "Dictionary" && !IsCallbackInterface($parameter->type)) {
2194 $parameterCheckString .= " if (args.Length() <= $paramIndex) {\n" ; 2195 $parameterCheckString .= " if (args.Length() <= $paramIndex) {\n" ;
2195 my $functionCall = GenerateFunctionCallString($function, $paramIndex , " " x 2, $interfaceName, $forMainWorldSuffix, %replacements); 2196 my $functionCall = GenerateFunctionCallString($function, $paramIndex , " " x 2, $interfaceName, $forMainWorldSuffix, %replacements);
2196 $parameterCheckString .= $functionCall; 2197 $parameterCheckString .= $functionCall;
2197 $parameterCheckString .= " }\n"; 2198 $parameterCheckString .= " }\n";
2198 } 2199 }
2199 2200
2200 my $parameterDefaultPolicy = "DefaultIsUndefined"; 2201 my $parameterDefaultPolicy = "DefaultIsUndefined";
2201 my $default = defined $parameter->extendedAttributes->{"Default"} ? $par ameter->extendedAttributes->{"Default"} : ""; 2202 my $default = defined $parameter->extendedAttributes->{"Default"} ? $par ameter->extendedAttributes->{"Default"} : "";
2202 if ($parameter->isOptional and $default eq "NullString") { 2203 if ($parameter->isOptional and $default eq "NullString") {
2203 $parameterDefaultPolicy = "DefaultIsNullString"; 2204 $parameterDefaultPolicy = "DefaultIsNullString";
2204 } 2205 }
2205 2206
2206 my $parameterName = $parameter->name; 2207 my $parameterName = $parameter->name;
2207 AddToImplIncludes("core/dom/ExceptionCode.h"); 2208 AddToImplIncludes("core/dom/ExceptionCode.h");
2208 if ($parameter->extendedAttributes->{"Callback"}) { 2209 if (IsCallbackInterface($parameter->type)) {
2209 my $v8InterfaceName = "V8" . $parameter->type; 2210 my $v8InterfaceName = "V8" . $parameter->type;
2210 AddToImplIncludes("$v8InterfaceName.h"); 2211 AddToImplIncludes("$v8InterfaceName.h");
2211 if ($parameter->isOptional) { 2212 if ($parameter->isOptional) {
2212 $parameterCheckString .= " RefPtr<" . $parameter->type . "> $ parameterName;\n"; 2213 $parameterCheckString .= " RefPtr<" . $parameter->type . "> $ parameterName;\n";
2213 $parameterCheckString .= " if (args.Length() > $paramIndex && !args[$paramIndex]->IsNull() && !args[$paramIndex]->IsUndefined()) {\n"; 2214 $parameterCheckString .= " if (args.Length() > $paramIndex && !args[$paramIndex]->IsNull() && !args[$paramIndex]->IsUndefined()) {\n";
2214 $parameterCheckString .= " if (!args[$paramIndex]->IsFunc tion())\n"; 2215 $parameterCheckString .= " if (!args[$paramIndex]->IsFunc tion())\n";
2215 $parameterCheckString .= " return throwTypeError(0, a rgs.GetIsolate());\n"; 2216 $parameterCheckString .= " return throwTypeError(0, a rgs.GetIsolate());\n";
2216 $parameterCheckString .= " $parameterName = ${v8Interface Name}::create(args[$paramIndex], getScriptExecutionContext());\n"; 2217 $parameterCheckString .= " $parameterName = ${v8Interface Name}::create(args[$paramIndex], getScriptExecutionContext());\n";
2217 $parameterCheckString .= " }\n"; 2218 $parameterCheckString .= " }\n";
2218 } else { 2219 } else {
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2351 if ($function->{overloadedIndex} > 0) { 2352 if ($function->{overloadedIndex} > 0) {
2352 $overloadedIndexString .= $function->{overloadedIndex}; 2353 $overloadedIndexString .= $function->{overloadedIndex};
2353 } 2354 }
2354 2355
2355 my $raisesExceptions = $function->signature->extendedAttributes->{"RaisesExc eption"}; 2356 my $raisesExceptions = $function->signature->extendedAttributes->{"RaisesExc eption"};
2356 if ($interface->extendedAttributes->{"RaisesException"}) { 2357 if ($interface->extendedAttributes->{"RaisesException"}) {
2357 $raisesExceptions = 1; 2358 $raisesExceptions = 1;
2358 } 2359 }
2359 if (!$raisesExceptions) { 2360 if (!$raisesExceptions) {
2360 foreach my $parameter (@{$function->parameters}) { 2361 foreach my $parameter (@{$function->parameters}) {
2361 if ((!$parameter->extendedAttributes->{"Callback"} and TypeCanFailCo nversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) { 2362 if ((!IsCallbackInterface($parameter->type) and TypeCanFailConversio n($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
2362 $raisesExceptions = 1; 2363 $raisesExceptions = 1;
2363 } 2364 }
2364 } 2365 }
2365 } 2366 }
2366 2367
2367 my @beforeArgumentList; 2368 my @beforeArgumentList;
2368 my @afterArgumentList; 2369 my @afterArgumentList;
2369 my $code = ""; 2370 my $code = "";
2370 $code .= <<END; 2371 $code .= <<END;
2371 static v8::Handle<v8::Value> constructor${overloadedIndexString}(const v8::Argum ents& args) 2372 static v8::Handle<v8::Value> constructor${overloadedIndexString}(const v8::Argum ents& args)
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
2576 my $interface = shift; 2577 my $interface = shift;
2577 2578
2578 my $interfaceName = $interface->name; 2579 my $interfaceName = $interface->name;
2579 my $v8InterfaceName = "V8$interfaceName"; 2580 my $v8InterfaceName = "V8$interfaceName";
2580 my $raisesExceptions = $function->signature->extendedAttributes->{"RaisesExc eption"}; 2581 my $raisesExceptions = $function->signature->extendedAttributes->{"RaisesExc eption"};
2581 if ($interface->extendedAttributes->{"RaisesException"}) { 2582 if ($interface->extendedAttributes->{"RaisesException"}) {
2582 $raisesExceptions = 1; 2583 $raisesExceptions = 1;
2583 } 2584 }
2584 if (!$raisesExceptions) { 2585 if (!$raisesExceptions) {
2585 foreach my $parameter (@{$function->parameters}) { 2586 foreach my $parameter (@{$function->parameters}) {
2586 if ((!$parameter->extendedAttributes->{"Callback"} and TypeCanFailCo nversion($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) { 2587 if ((!IsCallbackInterface($parameter->type) and TypeCanFailConversio n($parameter)) or $parameter->extendedAttributes->{"IsIndex"}) {
2587 $raisesExceptions = 1; 2588 $raisesExceptions = 1;
2588 } 2589 }
2589 } 2590 }
2590 } 2591 }
2591 2592
2592 my $maybeObserveFeature = GenerateFeatureObservation($function->signature->e xtendedAttributes->{"MeasureAs"}); 2593 my $maybeObserveFeature = GenerateFeatureObservation($function->signature->e xtendedAttributes->{"MeasureAs"});
2593 my $maybeDeprecateFeature = GenerateDeprecationNotification($function->signa ture->extendedAttributes->{"DeprecateAs"}); 2594 my $maybeDeprecateFeature = GenerateDeprecationNotification($function->signa ture->extendedAttributes->{"DeprecateAs"});
2594 2595
2595 my @beforeArgumentList; 2596 my @beforeArgumentList;
2596 my @afterArgumentList; 2597 my @afterArgumentList;
(...skipping 11 matching lines...) Expand all
2608 AddToImplIncludes("core/page/Frame.h"); 2609 AddToImplIncludes("core/page/Frame.h");
2609 AddToImplContent(<<END); 2610 AddToImplContent(<<END);
2610 WrapperTypeInfo ${v8InterfaceName}Constructor::info = { ${v8InterfaceName}Constr uctor::GetTemplate, ${v8InterfaceName}::derefObject, $toActiveDOMObject, $toEven tTarget, 0, ${v8InterfaceName}::installPerContextPrototypeProperties, 0, Wrapper TypeObjectPrototype }; 2611 WrapperTypeInfo ${v8InterfaceName}Constructor::info = { ${v8InterfaceName}Constr uctor::GetTemplate, ${v8InterfaceName}::derefObject, $toActiveDOMObject, $toEven tTarget, 0, ${v8InterfaceName}::installPerContextPrototypeProperties, 0, Wrapper TypeObjectPrototype };
2611 2612
2612 END 2613 END
2613 2614
2614 my $code = ""; 2615 my $code = "";
2615 $code .= <<END; 2616 $code .= <<END;
2616 static v8::Handle<v8::Value> ${v8InterfaceName}ConstructorCallback(const v8::Arg uments& args) 2617 static v8::Handle<v8::Value> ${v8InterfaceName}ConstructorCallback(const v8::Arg uments& args)
2617 { 2618 {
2618 ${maybeObserveFeature}
2619 ${maybeDeprecateFeature}
2620 END 2619 END
2620 $code .= $maybeObserveFeature if $maybeObserveFeature;
2621 $code .= $maybeDeprecateFeature if $maybeDeprecateFeature;
2621 $code .= GenerateConstructorHeader(); 2622 $code .= GenerateConstructorHeader();
2622 AddToImplIncludes("V8Document.h"); 2623 AddToImplIncludes("V8Document.h");
2623 $code .= <<END; 2624 $code .= <<END;
2624 Document* document = currentDocument(BindingState::instance()); 2625 Document* document = currentDocument(BindingState::instance());
2625 2626
2626 // Make sure the document is added to the DOM Node map. Otherwise, the ${int erfaceName} instance 2627 // Make sure the document is added to the DOM Node map. Otherwise, the ${int erfaceName} instance
2627 // may end up being the only node in the map and get garbage-collected prema turely. 2628 // may end up being the only node in the map and get garbage-collected prema turely.
2628 toV8(document, args.Holder(), args.GetIsolate()); 2629 toV8(document, args.Holder(), args.GetIsolate());
2629 2630
2630 END 2631 END
(...skipping 2067 matching lines...) Expand 10 before | Expand all | Expand 10 after
4698 return 0; 4699 return 0;
4699 } 4700 }
4700 if ($function->isStatic) { 4701 if ($function->isStatic) {
4701 return 0; 4702 return 0;
4702 } 4703 }
4703 # Type checking is performed in the generated code 4704 # Type checking is performed in the generated code
4704 if ($function->signature->extendedAttributes->{"StrictTypeChecking"}) { 4705 if ($function->signature->extendedAttributes->{"StrictTypeChecking"}) {
4705 return 0; 4706 return 0;
4706 } 4707 }
4707 foreach my $parameter (@{$function->parameters}) { 4708 foreach my $parameter (@{$function->parameters}) {
4708 if (($parameter->isOptional && !$parameter->extendedAttributes->{"Defaul t"}) || $parameter->extendedAttributes->{"Callback"}) { 4709 if (($parameter->isOptional && !$parameter->extendedAttributes->{"Defaul t"}) || IsCallbackInterface($parameter->type)) {
4709 return 0; 4710 return 0;
4710 } 4711 }
4711 } 4712 }
4712 4713
4713 foreach my $parameter (@{$function->parameters}) { 4714 foreach my $parameter (@{$function->parameters}) {
4714 if (IsWrapperType($parameter->type)) { 4715 if (IsWrapperType($parameter->type)) {
4715 return 1; 4716 return 1;
4716 } 4717 }
4717 } 4718 }
4718 return 0; 4719 return 0;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
4750 4751
4751 4752
4752 sub IsWrapperType 4753 sub IsWrapperType
4753 { 4754 {
4754 my $type = shift; 4755 my $type = shift;
4755 # FIXME: Should this return false for Sequence and Array types? 4756 # FIXME: Should this return false for Sequence and Array types?
4756 return 0 if IsEnumType($type); 4757 return 0 if IsEnumType($type);
4757 return !($non_wrapper_types{$type}); 4758 return !($non_wrapper_types{$type});
4758 } 4759 }
4759 4760
4761 sub IsCallbackInterface
4762 {
4763 my $type = shift;
4764 return 0 unless IsWrapperType($type);
4765 # FIXME: Those checks for Sequence and Array types should probably
4766 # be moved to IsWrapperType().
4767 return 0 if GetArrayType($type);
4768 return 0 if GetSequenceType($type);
4769
4770 my $idlFile = IDLFileForInterface($type)
4771 or die("Could NOT find IDL file for interface \"$type\"!\n");
4772
4773 open FILE, "<", $idlFile;
4774 my @lines = <FILE>;
4775 close FILE;
4776
4777 my $fileContents = join('', @lines);
4778 return ($fileContents =~ /callback\s+interface\s+(\w+)/gs);
4779 }
4780
4760 sub GetTypeNameOfExternalTypedArray 4781 sub GetTypeNameOfExternalTypedArray
4761 { 4782 {
4762 my $interface = shift; 4783 my $interface = shift;
4763 my $interfaceName = $interface->name; 4784 my $interfaceName = $interface->name;
4764 my $viewType = $interface->extendedAttributes->{"TypedArray"}; 4785 my $viewType = $interface->extendedAttributes->{"TypedArray"};
4765 return "v8::kExternalByteArray" if $viewType eq "signed char" and $interface Name eq "Int8Array"; 4786 return "v8::kExternalByteArray" if $viewType eq "signed char" and $interface Name eq "Int8Array";
4766 return "v8::kExternalPixelArray" if $viewType eq "unsigned char" and $interf aceName eq "Uint8ClampedArray"; 4787 return "v8::kExternalPixelArray" if $viewType eq "unsigned char" and $interf aceName eq "Uint8ClampedArray";
4767 return "v8::kExternalUnsignedByteArray" if $viewType eq "unsigned char" and $interfaceName eq "Uint8Array"; 4788 return "v8::kExternalUnsignedByteArray" if $viewType eq "unsigned char" and $interfaceName eq "Uint8Array";
4768 return "v8::kExternalShortArray" if $viewType eq "short" and $interfaceName eq "Int16Array"; 4789 return "v8::kExternalShortArray" if $viewType eq "short" and $interfaceName eq "Int16Array";
4769 return "v8::kExternalUnsignedShortArray" if $viewType eq "unsigned short" an d $interfaceName eq "Uint16Array"; 4790 return "v8::kExternalUnsignedShortArray" if $viewType eq "unsigned short" an d $interfaceName eq "Uint16Array";
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after
5527 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { 5548 if ($currentInterface->extendedAttributes->{$extendedAttribute}) {
5528 $found = 1; 5549 $found = 1;
5529 } 5550 }
5530 return 1 if $found; 5551 return 1 if $found;
5531 }, 0); 5552 }, 0);
5532 5553
5533 return $found; 5554 return $found;
5534 } 5555 }
5535 5556
5536 1; 5557 1;
OLDNEW
« 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