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

Side by Side Diff: Source/bindings/scripts/deprecated_code_generator_v8.pm

Issue 19230002: Use V8 implementation of TypedArrays and DataView in Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased for relanding Created 7 years, 4 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/bindings.gypi ('k') | Source/bindings/tests/results/V8Float64Array.cpp » ('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.
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 419
420 return if SkipIncludeHeader($type); 420 return if SkipIncludeHeader($type);
421 421
422 # Default includes 422 # Default includes
423 if ($type eq "EventListener") { 423 if ($type eq "EventListener") {
424 AddToImplIncludes("core/dom/EventListener.h"); 424 AddToImplIncludes("core/dom/EventListener.h");
425 } elsif ($type eq "SerializedScriptValue") { 425 } elsif ($type eq "SerializedScriptValue") {
426 AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); 426 AddToImplIncludes("bindings/v8/SerializedScriptValue.h");
427 } elsif ($type eq "any" || IsCallbackFunctionType($type)) { 427 } elsif ($type eq "any" || IsCallbackFunctionType($type)) {
428 AddToImplIncludes("bindings/v8/ScriptValue.h"); 428 AddToImplIncludes("bindings/v8/ScriptValue.h");
429 } elsif ($type eq "ArrayBuffer") { 429 } elsif (IsTypedArrayType($type)) {
430 AddToImplIncludes("bindings/v8/custom/V8ArrayBufferCustom.h"); 430 AddToImplIncludes("bindings/v8/custom/V8${type}Custom.h");
431 } else { 431 } else {
432 AddToImplIncludes("V8${type}.h"); 432 AddToImplIncludes("V8${type}.h");
433 } 433 }
434 } 434 }
435 435
436 sub HeaderFilesForInterface 436 sub HeaderFilesForInterface
437 { 437 {
438 my $interfaceName = shift; 438 my $interfaceName = shift;
439 my $implClassName = shift; 439 my $implClassName = shift;
440 440
441 my @includes = (); 441 my @includes = ();
442 if (IsTypedArrayType($interfaceName) or $interfaceName eq "ArrayBuffer") { 442 if (IsTypedArrayType($interfaceName)) {
443 push(@includes, "wtf/${interfaceName}.h"); 443 push(@includes, "wtf/${interfaceName}.h");
444 } elsif (!SkipIncludeHeader($interfaceName)) { 444 } elsif (!SkipIncludeHeader($interfaceName)) {
445 my $idlFilename = IDLFileForInterface($interfaceName) or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); 445 my $idlFilename = IDLFileForInterface($interfaceName) or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n");
446 my $idlRelPath= "bindings/" . File::Spec->abs2rel($idlFilename, $sourceR oot); 446 my $idlRelPath= "bindings/" . File::Spec->abs2rel($idlFilename, $sourceR oot);
447 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); 447 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h");
448 } 448 }
449 return @includes; 449 return @includes;
450 } 450 }
451 451
452 sub NeedsOpaqueRootForGC 452 sub NeedsOpaqueRootForGC
(...skipping 2267 matching lines...) Expand 10 before | Expand all | Expand 10 after
2720 } 2720 }
2721 2721
2722 $code .= <<END; 2722 $code .= <<END;
2723 return true; 2723 return true;
2724 } 2724 }
2725 2725
2726 END 2726 END
2727 $implementation{nameSpaceWebCore}->add($code); 2727 $implementation{nameSpaceWebCore}->add($code);
2728 } 2728 }
2729 2729
2730 sub GenerateTypedArrayConstructor
2731 {
2732 my $interface = shift;
2733 my $implClassName = GetImplName($interface);
2734 my $v8ClassName = GetV8ClassName($interface);
2735
2736 my ($nativeType, $arrayType) = GetNativeTypeOfTypedArray($interface);
2737 AddToImplIncludes("bindings/v8/custom/V8ArrayBufferViewCustom.h");
2738
2739 $implementation{nameSpaceInternal}->add(<<END);
2740 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
2741 {
2742 return constructWebGLArray<$implClassName, ${v8ClassName}, $nativeType>(args , &${v8ClassName}::info, $arrayType);
2743 }
2744
2745 END
2746 }
2747
2748 sub GenerateNamedConstructor 2730 sub GenerateNamedConstructor
2749 { 2731 {
2750 my $function = shift; 2732 my $function = shift;
2751 my $interface = shift; 2733 my $interface = shift;
2752 2734
2753 my $implClassName = GetImplName($interface); 2735 my $implClassName = GetImplName($interface);
2754 my $v8ClassName = GetV8ClassName($interface); 2736 my $v8ClassName = GetV8ClassName($interface);
2755 my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; 2737 my $raisesExceptions = $function->extendedAttributes->{"RaisesException"};
2756 if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { 2738 if ($interface->extendedAttributes->{"ConstructorRaisesException"}) {
2757 $raisesExceptions = 1; 2739 $raisesExceptions = 1;
(...skipping 1384 matching lines...) Expand 10 before | Expand all | Expand 10 after
4142 $implementation{nameSpaceWebCore}->add($code); 4124 $implementation{nameSpaceWebCore}->add($code);
4143 } 4125 }
4144 4126
4145 if (!HasCustomConstructor($interface)) { 4127 if (!HasCustomConstructor($interface)) {
4146 if ($interface->extendedAttributes->{"NamedConstructor"}) { 4128 if ($interface->extendedAttributes->{"NamedConstructor"}) {
4147 GenerateNamedConstructor(@{$interface->constructors}[0], $interface) ; 4129 GenerateNamedConstructor(@{$interface->constructors}[0], $interface) ;
4148 } elsif ($interface->extendedAttributes->{"Constructor"}) { 4130 } elsif ($interface->extendedAttributes->{"Constructor"}) {
4149 GenerateConstructor($interface); 4131 GenerateConstructor($interface);
4150 } elsif (IsConstructorTemplate($interface, "Event")) { 4132 } elsif (IsConstructorTemplate($interface, "Event")) {
4151 GenerateEventConstructor($interface); 4133 GenerateEventConstructor($interface);
4152 } elsif (IsConstructorTemplate($interface, "TypedArray")) {
4153 GenerateTypedArrayConstructor($interface);
4154 } 4134 }
4155 } 4135 }
4156 if (IsConstructable($interface)) { 4136 if (IsConstructable($interface)) {
4157 GenerateConstructorCallback($interface); 4137 GenerateConstructorCallback($interface);
4158 } 4138 }
4159 4139
4160 my $access_check = ""; 4140 my $access_check = "";
4161 if ($interface->extendedAttributes->{"CheckSecurity"} && $interfaceName ne " Window") { 4141 if ($interface->extendedAttributes->{"CheckSecurity"} && $interfaceName ne " Window") {
4162 $access_check = "instance->SetAccessCheckCallbacks(${implClassName}V8Int ernal::namedSecurityCheck, ${implClassName}V8Internal::indexedSecurityCheck, v8: :External::New(&${v8ClassName}::info));"; 4142 $access_check = "instance->SetAccessCheckCallbacks(${implClassName}V8Int ernal::namedSecurityCheck, ${implClassName}V8Internal::indexedSecurityCheck, v8: :External::New(&${v8ClassName}::info));";
4163 } 4143 }
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after
5026 return "Dictionary" if $type eq "Dictionary"; 5006 return "Dictionary" if $type eq "Dictionary";
5027 5007
5028 return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; 5008 return "RefPtr<DOMStringList>" if $type eq "DOMStringList";
5029 return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener" ; 5009 return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener" ;
5030 return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; 5010 return "RefPtr<NodeFilter>" if $type eq "NodeFilter";
5031 return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; 5011 return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue";
5032 return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; 5012 return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver";
5033 5013
5034 die "UnionType is not supported" if IsUnionType($type); 5014 die "UnionType is not supported" if IsUnionType($type);
5035 5015
5036 if ($type eq "ArrayBuffer") { 5016 if (IsTypedArrayType($type)) {
5037 return $isParameter ? "ArrayBuffer*" : "RefPtr<ArrayBuffer>"; 5017 return $isParameter ? "${type}*" : "RefPtr<${type}>";
5038 } 5018 }
5039 5019
5040 # We need to check [ImplementedAs] extended attribute for wrapper types. 5020 # We need to check [ImplementedAs] extended attribute for wrapper types.
5041 if (IsWrapperType($type)) { 5021 if (IsWrapperType($type)) {
5042 my $interface = ParseInterface($type); 5022 my $interface = ParseInterface($type);
5043 my $implClassName = GetImplName($interface); 5023 my $implClassName = GetImplName($interface);
5044 return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; 5024 return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>";
5045 } 5025 }
5046 return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; 5026 return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter;
5047 5027
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
5155 5135
5156 if ($type eq "MediaQueryListListener") { 5136 if ($type eq "MediaQueryListListener") {
5157 AddToImplIncludes("core/css/MediaQueryListListener.h"); 5137 AddToImplIncludes("core/css/MediaQueryListListener.h");
5158 return "MediaQueryListListener::create(" . $value . ")"; 5138 return "MediaQueryListListener::create(" . $value . ")";
5159 } 5139 }
5160 5140
5161 if ($type eq "EventTarget") { 5141 if ($type eq "EventTarget") {
5162 return "V8DOMWrapper::isDOMWrapper($value) ? toWrapperTypeInfo(v8::Handl e<v8::Object>::Cast($value))->toEventTarget(v8::Handle<v8::Object>::Cast($value) ) : 0"; 5142 return "V8DOMWrapper::isDOMWrapper($value) ? toWrapperTypeInfo(v8::Handl e<v8::Object>::Cast($value))->toEventTarget(v8::Handle<v8::Object>::Cast($value) ) : 0";
5163 } 5143 }
5164 5144
5165 if ($type eq "ArrayBuffer") { 5145 if (IsTypedArrayType($type)) {
5166 AddIncludesForType($type); 5146 AddIncludesForType($type);
5167 return "$value->IsArrayBuffer() ? V8ArrayBuffer::toNative(v8::Handle<v8: :ArrayBuffer>::Cast($value)) : 0" 5147 return "$value->Is${type}() ? V8${type}::toNative(v8::Handle<v8::${type} >::Cast($value)) : 0"
5168 } 5148 }
5169 5149
5170 if ($type eq "XPathNSResolver") { 5150 if ($type eq "XPathNSResolver") {
5171 return "toXPathNSResolver($value, $getIsolate)"; 5151 return "toXPathNSResolver($value, $getIsolate)";
5172 } 5152 }
5173 5153
5174 my $arrayOrSequenceType = GetArrayOrSequenceType($type); 5154 my $arrayOrSequenceType = GetArrayOrSequenceType($type);
5175 5155
5176 if ($arrayOrSequenceType) { 5156 if ($arrayOrSequenceType) {
5177 if (IsRefPtrType($arrayOrSequenceType)) { 5157 if (IsRefPtrType($arrayOrSequenceType)) {
(...skipping 13 matching lines...) Expand all
5191 { 5171 {
5192 my $function = shift; 5172 my $function = shift;
5193 my $count = @{$function->parameters}; 5173 my $count = @{$function->parameters};
5194 my $name = $function->name; 5174 my $name = $function->name;
5195 my $code = " const int ${name}Argc = ${count};\n" . 5175 my $code = " const int ${name}Argc = ${count};\n" .
5196 " v8::Handle<v8::FunctionTemplate> ${name}Argv[${name}Argc] = { "; 5176 " v8::Handle<v8::FunctionTemplate> ${name}Argv[${name}Argc] = { ";
5197 my $first = 1; 5177 my $first = 1;
5198 foreach my $parameter (@{$function->parameters}) { 5178 foreach my $parameter (@{$function->parameters}) {
5199 if ($first) { $first = 0; } 5179 if ($first) { $first = 0; }
5200 else { $code .= ", "; } 5180 else { $code .= ", "; }
5201 if (IsWrapperType($parameter->type) && $parameter->type ne "ArrayBuffer" ) { 5181 if (IsWrapperType($parameter->type) && not IsTypedArrayType($parameter-> type)) {
5202 if ($parameter->type eq "XPathNSResolver") { 5182 if ($parameter->type eq "XPathNSResolver") {
5203 # Special case for XPathNSResolver. All other browsers accepts a callable, 5183 # Special case for XPathNSResolver. All other browsers accepts a callable,
5204 # so, even though it's against IDL, accept objects here. 5184 # so, even though it's against IDL, accept objects here.
5205 $code .= "v8::Handle<v8::FunctionTemplate>()"; 5185 $code .= "v8::Handle<v8::FunctionTemplate>()";
5206 } else { 5186 } else {
5207 my $type = $parameter->type; 5187 my $type = $parameter->type;
5208 my $arrayOrSequenceType = GetArrayOrSequenceType($type); 5188 my $arrayOrSequenceType = GetArrayOrSequenceType($type);
5209 5189
5210 if ($arrayOrSequenceType) { 5190 if ($arrayOrSequenceType) {
5211 if (IsRefPtrType($arrayOrSequenceType)) { 5191 if (IsRefPtrType($arrayOrSequenceType)) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
5280 return 0 if IsEnumType($type); 5260 return 0 if IsEnumType($type);
5281 return 0 if IsPrimitiveType($type); 5261 return 0 if IsPrimitiveType($type);
5282 return 0 if $type eq "DOMString"; 5262 return 0 if $type eq "DOMString";
5283 return !$nonWrapperTypes{$type}; 5263 return !$nonWrapperTypes{$type};
5284 } 5264 }
5285 5265
5286 sub IsCallbackInterface 5266 sub IsCallbackInterface
5287 { 5267 {
5288 my $type = shift; 5268 my $type = shift;
5289 return 0 unless IsWrapperType($type); 5269 return 0 unless IsWrapperType($type);
5290 return 0 if $type eq "ArrayBuffer"; 5270 return 0 if IsTypedArrayType($type);
5291 5271
5292 my $idlFile = IDLFileForInterface($type) 5272 my $idlFile = IDLFileForInterface($type)
5293 or die("Could NOT find IDL file for interface \"$type\"!\n"); 5273 or die("Could NOT find IDL file for interface \"$type\"!\n");
5294 5274
5295 open FILE, "<", $idlFile; 5275 open FILE, "<", $idlFile;
5296 my @lines = <FILE>; 5276 my @lines = <FILE>;
5297 close FILE; 5277 close FILE;
5298 5278
5299 my $fileContents = join('', @lines); 5279 my $fileContents = join('', @lines);
5300 return ($fileContents =~ /callback\s+interface\s+(\w+)/gs); 5280 return ($fileContents =~ /callback\s+interface\s+(\w+)/gs);
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
6020 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { 6000 if ($currentInterface->extendedAttributes->{$extendedAttribute}) {
6021 $found = 1; 6001 $found = 1;
6022 } 6002 }
6023 return 1 if $found; 6003 return 1 if $found;
6024 }, 0); 6004 }, 0);
6025 6005
6026 return $found; 6006 return $found;
6027 } 6007 }
6028 6008
6029 1; 6009 1;
OLDNEW
« no previous file with comments | « Source/bindings/bindings.gypi ('k') | Source/bindings/tests/results/V8Float64Array.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698