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

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

Issue 40433002: Make wrapperTypeInfo static member const in bindings classes (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 7 years, 2 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 | « no previous file | Source/bindings/templates/interface.h » ('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 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 639
640 $header{nameSpaceWebCore}->addHeader("\nclass Dictionary;") if IsConstructor Template($interface, "Event"); 640 $header{nameSpaceWebCore}->addHeader("\nclass Dictionary;") if IsConstructor Template($interface, "Event");
641 641
642 my $nativeType = GetNativeTypeForConversions($interface); 642 my $nativeType = GetNativeTypeForConversions($interface);
643 if ($interface->extendedAttributes->{"NamedConstructor"}) { 643 if ($interface->extendedAttributes->{"NamedConstructor"}) {
644 $header{nameSpaceWebCore}->addHeader(<<END); 644 $header{nameSpaceWebCore}->addHeader(<<END);
645 645
646 class V8${nativeType}Constructor { 646 class V8${nativeType}Constructor {
647 public: 647 public:
648 static v8::Handle<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWor ldType); 648 static v8::Handle<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWor ldType);
649 static WrapperTypeInfo wrapperTypeInfo; 649 static const WrapperTypeInfo wrapperTypeInfo;
650 }; 650 };
651 END 651 END
652 } 652 }
653 653
654 $header{class}->addHeader("class $v8ClassName {"); 654 $header{class}->addHeader("class $v8ClassName {");
655 $header{class}->addFooter("};"); 655 $header{class}->addFooter("};");
656 656
657 $header{classPublic}->add(<<END); 657 $header{classPublic}->add(<<END);
658 static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldTyp e); 658 static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldTyp e);
659 static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*); 659 static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
660 static v8::Handle<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWor ldType); 660 static v8::Handle<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWor ldType);
661 static ${nativeType}* toNative(v8::Handle<v8::Object> object) 661 static ${nativeType}* toNative(v8::Handle<v8::Object> object)
662 { 662 {
663 return fromInternalPointer(object->GetAlignedPointerFromInternalField(v8 DOMWrapperObjectIndex)); 663 return fromInternalPointer(object->GetAlignedPointerFromInternalField(v8 DOMWrapperObjectIndex));
664 } 664 }
665 static void derefObject(void*); 665 static void derefObject(void*);
666 static WrapperTypeInfo wrapperTypeInfo; 666 static const WrapperTypeInfo wrapperTypeInfo;
667 END 667 END
668 668
669 if (NeedsOpaqueRootForGC($interface)) { 669 if (NeedsOpaqueRootForGC($interface)) {
670 $header{classPublic}->add(" static void* opaqueRootForGC(void*, v8::I solate*);\n"); 670 $header{classPublic}->add(" static void* opaqueRootForGC(void*, v8::I solate*);\n");
671 } 671 }
672 672
673 if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) { 673 if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) {
674 $header{classPublic}->add(" static ActiveDOMObject* toActiveDOMObject (v8::Handle<v8::Object>);\n"); 674 $header{classPublic}->add(" static ActiveDOMObject* toActiveDOMObject (v8::Handle<v8::Object>);\n");
675 } 675 }
676 676
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 friend v8::Handle<v8::Object> wrap(${nativeType}*, v8::Handle<v8::Object> cr eationContext, v8::Isolate*); 820 friend v8::Handle<v8::Object> wrap(${nativeType}*, v8::Handle<v8::Object> cr eationContext, v8::Isolate*);
821 static v8::Handle<v8::Object> createWrapper(${createWrapperArgumentType}, v8 ::Handle<v8::Object> creationContext, v8::Isolate*); 821 static v8::Handle<v8::Object> createWrapper(${createWrapperArgumentType}, v8 ::Handle<v8::Object> creationContext, v8::Isolate*);
822 END 822 END
823 } 823 }
824 824
825 $header{nameSpaceWebCore}->add(<<END); 825 $header{nameSpaceWebCore}->add(<<END);
826 826
827 template<> 827 template<>
828 class WrapperTypeTraits<${nativeType} > { 828 class WrapperTypeTraits<${nativeType} > {
829 public: 829 public:
830 static WrapperTypeInfo* wrapperTypeInfo() { return &${v8ClassName}::wrapperT ypeInfo; } 830 static const WrapperTypeInfo* wrapperTypeInfo() { return &${v8ClassName}::wr apperTypeInfo; }
831 }; 831 };
832 END 832 END
833 833
834 my $customWrap = NeedsSpecialWrap($interface); 834 my $customWrap = NeedsSpecialWrap($interface);
835 if ($noToV8) { 835 if ($noToV8) {
836 die "Can't suppress toV8 for subclass\n" if $interface->parent; 836 die "Can't suppress toV8 for subclass\n" if $interface->parent;
837 } elsif ($noWrap) { 837 } elsif ($noWrap) {
838 die "Must have custom toV8\n" if !$customWrap; 838 die "Must have custom toV8\n" if !$customWrap;
839 $header{nameSpaceWebCore}->add(<<END); 839 $header{nameSpaceWebCore}->add(<<END);
840 class ${nativeType}; 840 class ${nativeType};
(...skipping 2043 matching lines...) Expand 10 before | Expand all | Expand 10 after
2884 if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) { 2884 if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) {
2885 $toActiveDOMObject = "${v8ClassName}::toActiveDOMObject"; 2885 $toActiveDOMObject = "${v8ClassName}::toActiveDOMObject";
2886 } 2886 }
2887 2887
2888 my $toEventTarget = "0"; 2888 my $toEventTarget = "0";
2889 if (InheritsInterface($interface, "EventTarget")) { 2889 if (InheritsInterface($interface, "EventTarget")) {
2890 $toEventTarget = "${v8ClassName}::toEventTarget"; 2890 $toEventTarget = "${v8ClassName}::toEventTarget";
2891 } 2891 }
2892 2892
2893 $implementation{nameSpaceWebCore}->add(<<END); 2893 $implementation{nameSpaceWebCore}->add(<<END);
2894 WrapperTypeInfo ${v8ClassName}Constructor::wrapperTypeInfo = { ${v8ClassName}Con structor::GetTemplate, ${v8ClassName}::derefObject, $toActiveDOMObject, $toEvent Target, 0, ${v8ClassName}::installPerContextEnabledPrototypeProperties, 0, Wrapp erTypeObjectPrototype }; 2894 const WrapperTypeInfo ${v8ClassName}Constructor::wrapperTypeInfo = { ${v8ClassNa me}Constructor::GetTemplate, ${v8ClassName}::derefObject, $toActiveDOMObject, $t oEventTarget, 0, ${v8ClassName}::installPerContextEnabledPrototypeProperties, 0, WrapperTypeObjectPrototype };
2895 2895
2896 END 2896 END
2897 2897
2898 my $code = ""; 2898 my $code = "";
2899 $code .= <<END; 2899 $code .= <<END;
2900 static void ${v8ClassName}ConstructorCallback(const v8::FunctionCallbackInfo<v8: :Value>& args) 2900 static void ${v8ClassName}ConstructorCallback(const v8::FunctionCallbackInfo<v8: :Value>& args)
2901 { 2901 {
2902 END 2902 END
2903 $code .= $maybeObserveFeature if $maybeObserveFeature; 2903 $code .= $maybeObserveFeature if $maybeObserveFeature;
2904 $code .= $maybeDeprecateFeature if $maybeDeprecateFeature; 2904 $code .= $maybeDeprecateFeature if $maybeDeprecateFeature;
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
3085 # Constructor 3085 # Constructor
3086 if ($isConstructor) { 3086 if ($isConstructor) {
3087 my $constructorType = $attribute->type; 3087 my $constructorType = $attribute->type;
3088 $constructorType =~ s/Constructor$//; 3088 $constructorType =~ s/Constructor$//;
3089 # $constructorType ~= /Constructor$/ indicates that it is NamedConstruct or. 3089 # $constructorType ~= /Constructor$/ indicates that it is NamedConstruct or.
3090 # We do not generate the header file for NamedConstructor of class XXXX, 3090 # We do not generate the header file for NamedConstructor of class XXXX,
3091 # since we generate the NamedConstructor declaration into the header fil e of class XXXX. 3091 # since we generate the NamedConstructor declaration into the header fil e of class XXXX.
3092 if ($constructorType !~ /Constructor$/ || $attribute->extendedAttributes ->{"CustomConstructor"}) { 3092 if ($constructorType !~ /Constructor$/ || $attribute->extendedAttributes ->{"CustomConstructor"}) {
3093 AddToImplIncludes("V8${constructorType}.h"); 3093 AddToImplIncludes("V8${constructorType}.h");
3094 } 3094 }
3095 $data = "&V8${constructorType}::wrapperTypeInfo"; 3095 $data = "const_cast<WrapperTypeInfo*>(&V8${constructorType}::wrapperType Info)";
3096 $getter = "${implClassName}V8Internal::${implClassName}ConstructorGetter "; 3096 $getter = "${implClassName}V8Internal::${implClassName}ConstructorGetter ";
3097 $setter = "${implClassName}V8Internal::${implClassName}ReplaceableAttrib uteSetterCallback"; 3097 $setter = "${implClassName}V8Internal::${implClassName}ReplaceableAttrib uteSetterCallback";
3098 $getterForMainWorld = "0"; 3098 $getterForMainWorld = "0";
3099 $setterForMainWorld = "0"; 3099 $setterForMainWorld = "0";
3100 } else { 3100 } else {
3101 # Default Getter and Setter 3101 # Default Getter and Setter
3102 $getter = "${implClassName}V8Internal::${attrName}AttributeGetterCallbac k"; 3102 $getter = "${implClassName}V8Internal::${attrName}AttributeGetterCallbac k";
3103 $setter = "${implClassName}V8Internal::${attrName}AttributeSetterCallbac k"; 3103 $setter = "${implClassName}V8Internal::${attrName}AttributeSetterCallbac k";
3104 $getterForMainWorld = "${getter}ForMainWorld"; 3104 $getterForMainWorld = "${getter}ForMainWorld";
3105 $setterForMainWorld = "${setter}ForMainWorld"; 3105 $setterForMainWorld = "${setter}ForMainWorld";
(...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after
4038 $code .= <<END; 4038 $code .= <<END;
4039 { 4039 {
4040 WebCore::initializeScriptWrappableForInterface(object); 4040 WebCore::initializeScriptWrappableForInterface(object);
4041 } 4041 }
4042 4042
4043 namespace WebCore { 4043 namespace WebCore {
4044 END 4044 END
4045 $implementation{nameSpaceWebCore}->addHeader($code); 4045 $implementation{nameSpaceWebCore}->addHeader($code);
4046 } 4046 }
4047 4047
4048 my $code = "WrapperTypeInfo ${v8ClassName}::wrapperTypeInfo = { ${v8ClassNam e}::GetTemplate, ${v8ClassName}::derefObject, $toActiveDOMObject, $toEventTarget , "; 4048 my $code = "const WrapperTypeInfo ${v8ClassName}::wrapperTypeInfo = { ${v8Cl assName}::GetTemplate, ${v8ClassName}::derefObject, $toActiveDOMObject, $toEvent Target, ";
4049 $code .= "$rootForGC, ${v8ClassName}::installPerContextEnabledPrototypePrope rties, $parentClassInfo, $WrapperTypePrototype };\n"; 4049 $code .= "$rootForGC, ${v8ClassName}::installPerContextEnabledPrototypePrope rties, $parentClassInfo, $WrapperTypePrototype };\n";
4050 $implementation{nameSpaceWebCore}->addHeader($code); 4050 $implementation{nameSpaceWebCore}->addHeader($code);
4051 4051
4052 $implementation{nameSpaceInternal}->add("template <typename T> void V8_USE(T ) { }\n\n"); 4052 $implementation{nameSpaceInternal}->add("template <typename T> void V8_USE(T ) { }\n\n");
4053 4053
4054 my $hasConstructors = 0; 4054 my $hasConstructors = 0;
4055 my $hasReplaceable = 0; 4055 my $hasReplaceable = 0;
4056 4056
4057 # Generate property accessors for attributes. 4057 # Generate property accessors for attributes.
4058 for (my $index = 0; $index < @{$interface->attributes}; $index++) { 4058 for (my $index = 0; $index < @{$interface->attributes}; $index++) {
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
4264 } elsif (IsConstructorTemplate($interface, "Event")) { 4264 } elsif (IsConstructorTemplate($interface, "Event")) {
4265 GenerateEventConstructor($interface); 4265 GenerateEventConstructor($interface);
4266 } 4266 }
4267 } 4267 }
4268 if (IsConstructable($interface)) { 4268 if (IsConstructable($interface)) {
4269 GenerateConstructorCallback($interface); 4269 GenerateConstructorCallback($interface);
4270 } 4270 }
4271 4271
4272 my $access_check = ""; 4272 my $access_check = "";
4273 if ($interface->extendedAttributes->{"CheckSecurity"} && $interfaceName ne " Window") { 4273 if ($interface->extendedAttributes->{"CheckSecurity"} && $interfaceName ne " Window") {
4274 $access_check = "instance->SetAccessCheckCallbacks(${implClassName}V8Int ernal::namedSecurityCheck, ${implClassName}V8Internal::indexedSecurityCheck, v8: :External::New(&${v8ClassName}::wrapperTypeInfo));"; 4274 $access_check = "instance->SetAccessCheckCallbacks(${implClassName}V8Int ernal::namedSecurityCheck, ${implClassName}V8Internal::indexedSecurityCheck, v8: :External::New(const_cast<WrapperTypeInfo*>(&${v8ClassName}::wrapperTypeInfo))); ";
4275 } 4275 }
4276 4276
4277 # For the Window interface, generate the shadow object template 4277 # For the Window interface, generate the shadow object template
4278 # configuration method. 4278 # configuration method.
4279 if ($interfaceName eq "Window") { 4279 if ($interfaceName eq "Window") {
4280 $implementation{nameSpaceWebCore}->add(<<END); 4280 $implementation{nameSpaceWebCore}->add(<<END);
4281 static void ConfigureShadowObjectTemplate(v8::Handle<v8::ObjectTemplate> templ, v8::Isolate* isolate, WrapperWorldType currentWorldType) 4281 static void ConfigureShadowObjectTemplate(v8::Handle<v8::ObjectTemplate> templ, v8::Isolate* isolate, WrapperWorldType currentWorldType)
4282 { 4282 {
4283 V8DOMConfiguration::installAttributes(templ, v8::Handle<v8::ObjectTemplate>( ), shadowAttributes, WTF_ARRAY_LENGTH(shadowAttributes), isolate, currentWorldTy pe); 4283 V8DOMConfiguration::installAttributes(templ, v8::Handle<v8::ObjectTemplate>( ), shadowAttributes, WTF_ARRAY_LENGTH(shadowAttributes), isolate, currentWorldTy pe);
4284 4284
4285 // Install a security handler with V8. 4285 // Install a security handler with V8.
4286 templ->SetAccessCheckCallbacks(V8Window::namedSecurityCheckCustom, V8Window: :indexedSecurityCheckCustom, v8::External::New(&V8Window::wrapperTypeInfo)); 4286 templ->SetAccessCheckCallbacks(V8Window::namedSecurityCheckCustom, V8Window: :indexedSecurityCheckCustom, v8::External::New(const_cast<WrapperTypeInfo*>(&V8W indow::wrapperTypeInfo)));
4287 templ->SetInternalFieldCount(V8Window::internalFieldCount); 4287 templ->SetInternalFieldCount(V8Window::internalFieldCount);
4288 } 4288 }
4289 END 4289 END
4290 } 4290 }
4291 4291
4292 if (!$parentClassTemplate) { 4292 if (!$parentClassTemplate) {
4293 $parentClassTemplate = "v8::Local<v8::FunctionTemplate>()"; 4293 $parentClassTemplate = "v8::Local<v8::FunctionTemplate>()";
4294 } 4294 }
4295 4295
4296 # Generate the template configuration method 4296 # Generate the template configuration method
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
4439 # Special cases 4439 # Special cases
4440 if ($interfaceName eq "Window") { 4440 if ($interfaceName eq "Window") {
4441 $code .= <<END; 4441 $code .= <<END;
4442 4442
4443 proto->SetInternalFieldCount(V8Window::internalFieldCount); 4443 proto->SetInternalFieldCount(V8Window::internalFieldCount);
4444 desc->SetHiddenPrototype(true); 4444 desc->SetHiddenPrototype(true);
4445 instance->SetInternalFieldCount(V8Window::internalFieldCount); 4445 instance->SetInternalFieldCount(V8Window::internalFieldCount);
4446 // Set access check callbacks, but turned off initially. 4446 // Set access check callbacks, but turned off initially.
4447 // When a context is detached from a frame, turn on the access check. 4447 // When a context is detached from a frame, turn on the access check.
4448 // Turning on checks also invalidates inline caches of the object. 4448 // Turning on checks also invalidates inline caches of the object.
4449 instance->SetAccessCheckCallbacks(V8Window::namedSecurityCheckCustom, V8Wind ow::indexedSecurityCheckCustom, v8::External::New(&V8Window::wrapperTypeInfo), f alse); 4449 instance->SetAccessCheckCallbacks(V8Window::namedSecurityCheckCustom, V8Wind ow::indexedSecurityCheckCustom, v8::External::New(const_cast<WrapperTypeInfo*>(& V8Window::wrapperTypeInfo)), false);
4450 END 4450 END
4451 } 4451 }
4452 if ($interfaceName eq "HTMLDocument" or $interfaceName eq "DedicatedWorkerGl obalScope" or $interfaceName eq "SharedWorkerGlobalScope") { 4452 if ($interfaceName eq "HTMLDocument" or $interfaceName eq "DedicatedWorkerGl obalScope" or $interfaceName eq "SharedWorkerGlobalScope") {
4453 $code .= <<END; 4453 $code .= <<END;
4454 desc->SetHiddenPrototype(true); 4454 desc->SetHiddenPrototype(true);
4455 END 4455 END
4456 } 4456 }
4457 4457
4458 $code .= <<END; 4458 $code .= <<END;
4459 4459
(...skipping 1737 matching lines...) Expand 10 before | Expand all | Expand 10 after
6197 my $interface = shift; 6197 my $interface = shift;
6198 6198
6199 return 1 if $interface->extendedAttributes->{"CustomToV8"}; 6199 return 1 if $interface->extendedAttributes->{"CustomToV8"};
6200 return 1 if $interface->extendedAttributes->{"SpecialWrapFor"}; 6200 return 1 if $interface->extendedAttributes->{"SpecialWrapFor"};
6201 return 1 if InheritsInterface($interface, "Document"); 6201 return 1 if InheritsInterface($interface, "Document");
6202 6202
6203 return 0; 6203 return 0;
6204 } 6204 }
6205 6205
6206 1; 6206 1;
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/templates/interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698