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

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

Issue 18778002: Inherit EventTarget interface instead of duplicating its code (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix the regressions Created 7 years, 5 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 | Annotate | Revision Log
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 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 my $implClassName = GetImplName($interface); 484 my $implClassName = GetImplName($interface);
485 my $v8ClassName = GetV8ClassName($interface); 485 my $v8ClassName = GetV8ClassName($interface);
486 486
487 if ($interface->extendedAttributes->{"CustomIsReachable"}) { 487 if ($interface->extendedAttributes->{"CustomIsReachable"}) {
488 return; 488 return;
489 } 489 }
490 490
491 my $code = <<END; 491 my $code = <<END;
492 void* ${v8ClassName}::opaqueRootForGC(void* object, v8::Isolate* isolate) 492 void* ${v8ClassName}::opaqueRootForGC(void* object, v8::Isolate* isolate)
493 { 493 {
494 ${implClassName}* impl = static_cast<${implClassName}*>(object); 494 ${implClassName}* impl = fromWrappedType(object);
495 END 495 END
496 my $isReachableMethod = $interface->extendedAttributes->{"GenerateIsReachabl e"}; 496 my $isReachableMethod = $interface->extendedAttributes->{"GenerateIsReachabl e"};
497 if ($isReachableMethod) { 497 if ($isReachableMethod) {
498 AddToImplIncludes("bindings/v8/V8GCController.h"); 498 AddToImplIncludes("bindings/v8/V8GCController.h");
499 AddToImplIncludes("core/dom/Element.h"); 499 AddToImplIncludes("core/dom/Element.h");
500 $code .= <<END; 500 $code .= <<END;
501 if (Node* owner = impl->${isReachableMethod}()) 501 if (Node* owner = impl->${isReachableMethod}())
502 return V8GCController::opaqueRootForGC(owner, isolate); 502 return V8GCController::opaqueRootForGC(owner, isolate);
503 END 503 END
504 } 504 }
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 662
663 $header{class}->addHeader("class $v8ClassName {"); 663 $header{class}->addHeader("class $v8ClassName {");
664 $header{class}->addFooter("};"); 664 $header{class}->addFooter("};");
665 665
666 $header{classPublic}->add(<<END); 666 $header{classPublic}->add(<<END);
667 static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldTyp e); 667 static bool HasInstance(v8::Handle<v8::Value>, v8::Isolate*, WrapperWorldTyp e);
668 static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*); 668 static bool HasInstanceInAnyWorld(v8::Handle<v8::Value>, v8::Isolate*);
669 static v8::Handle<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWor ldType); 669 static v8::Handle<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWor ldType);
670 static ${nativeType}* toNative(v8::Handle<v8::Object> object) 670 static ${nativeType}* toNative(v8::Handle<v8::Object> object)
671 { 671 {
672 return reinterpret_cast<${nativeType}*>(object->GetAlignedPointerFromInt ernalField(v8DOMWrapperObjectIndex)); 672 return fromWrappedType(object->GetAlignedPointerFromInternalField(v8DOMW rapperObjectIndex));
673 } 673 }
674 static void derefObject(void*); 674 static void derefObject(void*);
675 static WrapperTypeInfo info; 675 static WrapperTypeInfo info;
676 END 676 END
677 677
678 if (NeedsOpaqueRootForGC($interface)) { 678 if (NeedsOpaqueRootForGC($interface)) {
679 $header{classPublic}->add(" static void* opaqueRootForGC(void*, v8::I solate*);\n"); 679 $header{classPublic}->add(" static void* opaqueRootForGC(void*, v8::I solate*);\n");
680 } 680 }
681 681
682 if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) { 682 if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 } 741 }
742 if ($attrExt->{"EnabledPerContext"}) { 742 if ($attrExt->{"EnabledPerContext"}) {
743 push(@enabledPerContextAttributes, $attribute); 743 push(@enabledPerContextAttributes, $attribute);
744 } 744 }
745 } 745 }
746 746
747 GenerateHeaderNamedAndIndexedPropertyAccessors($interface); 747 GenerateHeaderNamedAndIndexedPropertyAccessors($interface);
748 GenerateHeaderLegacyCall($interface); 748 GenerateHeaderLegacyCall($interface);
749 GenerateHeaderCustomInternalFieldIndices($interface); 749 GenerateHeaderCustomInternalFieldIndices($interface);
750 750
751 $header{classPublic}->add(<<END);
752 static inline void* toWrappedType(${nativeType}* impl)
753 {
754 END
755 if ($interface->parent) {
756 my $v8ParentClassName = "V8" . $interface->parent;
757 $header{classPublic}->add(" return ${v8ParentClassName}::toWr appedType(impl);\n");
arv (Not doing code reviews) 2013/07/08 15:51:46 How about storing the return expression in a varia
758 } else {
759 $header{classPublic}->add(" return impl;\n");
760 }
761 $header{classPublic}->add(<<END);
762 }
763
764 static inline ${nativeType}* fromWrappedType(void* object)
765 {
766 END
767 if ($interface->parent) {
768 my $v8ParentClassName = "V8" . $interface->parent;
769 $header{classPublic}->add(" return static_cast<${nativeType}* >(${v8ParentClassName}::fromWrappedType(object));\n");
arv (Not doing code reviews) 2013/07/08 15:51:46 same here, extract the argument to a variable.
770 } else {
771 $header{classPublic}->add(" return static_cast<${nativeType}* >(object);\n");
772 }
773 $header{classPublic}->add(<<END);
774 }
775 END
776
751 if ($interface->name eq "Window") { 777 if ($interface->name eq "Window") {
752 $header{classPublic}->add(<<END); 778 $header{classPublic}->add(<<END);
753 static bool namedSecurityCheckCustom(v8::Local<v8::Object> host, v8::Local<v 8::Value> key, v8::AccessType, v8::Local<v8::Value> data); 779 static bool namedSecurityCheckCustom(v8::Local<v8::Object> host, v8::Local<v 8::Value> key, v8::AccessType, v8::Local<v8::Value> data);
754 static bool indexedSecurityCheckCustom(v8::Local<v8::Object> host, uint32_t index, v8::AccessType, v8::Local<v8::Value> data); 780 static bool indexedSecurityCheckCustom(v8::Local<v8::Object> host, uint32_t index, v8::AccessType, v8::Local<v8::Value> data);
755 END 781 END
756 } 782 }
757 783
758 if (@enabledPerContextAttributes) { 784 if (@enabledPerContextAttributes) {
759 $header{classPublic}->add(<<END); 785 $header{classPublic}->add(<<END);
760 static void installPerContextProperties(v8::Handle<v8::Object>, ${nativeType }*, v8::Isolate*); 786 static void installPerContextProperties(v8::Handle<v8::Object>, ${nativeType }*, v8::Isolate*);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 $header{nameSpaceWebCore}->add(<<END); 873 $header{nameSpaceWebCore}->add(<<END);
848 874
849 v8::Handle<v8::Object> wrap(${nativeType}* impl, v8::Handle<v8::Object> creation Context, v8::Isolate*); 875 v8::Handle<v8::Object> wrap(${nativeType}* impl, v8::Handle<v8::Object> creation Context, v8::Isolate*);
850 END 876 END
851 } else { 877 } else {
852 $header{nameSpaceWebCore}->add(<<END); 878 $header{nameSpaceWebCore}->add(<<END);
853 879
854 inline v8::Handle<v8::Object> wrap(${nativeType}* impl, v8::Handle<v8::Object> c reationContext, v8::Isolate* isolate) 880 inline v8::Handle<v8::Object> wrap(${nativeType}* impl, v8::Handle<v8::Object> c reationContext, v8::Isolate* isolate)
855 { 881 {
856 ASSERT(impl); 882 ASSERT(impl);
857 ASSERT(DOMDataStore::getWrapper(impl, isolate).IsEmpty()); 883 ASSERT(DOMDataStore::getWrapper<${v8ClassName}>(impl, isolate).IsEmpty());
858 if (ScriptWrappable::wrapperCanBeStoredInObject(impl)) { 884 if (ScriptWrappable::wrapperCanBeStoredInObject(impl)) {
859 const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObje ct(impl); 885 const WrapperTypeInfo* actualInfo = ScriptWrappable::getTypeInfoFromObje ct(impl);
860 // Might be a XXXConstructor::info instead of an XXX::info. These will b oth have 886 // Might be a XXXConstructor::info instead of an XXX::info. These will b oth have
861 // the same object de-ref functions, though, so use that as the basis of the check. 887 // the same object de-ref functions, though, so use that as the basis of the check.
862 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == ${v8ClassName}::info.derefObjectFunction); 888 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(actualInfo->derefObjectFunction == ${v8ClassName}::info.derefObjectFunction);
863 } 889 }
864 return $createWrapperCall(impl, creationContext, isolate); 890 return $createWrapperCall(impl, creationContext, isolate);
865 } 891 }
866 END 892 END
867 } 893 }
868 894
869 $header{nameSpaceWebCore}->add(<<END); 895 $header{nameSpaceWebCore}->add(<<END);
870 896
871 inline v8::Handle<v8::Value> toV8(${nativeType}* impl, v8::Handle<v8::Object> cr eationContext, v8::Isolate* isolate) 897 inline v8::Handle<v8::Value> toV8(${nativeType}* impl, v8::Handle<v8::Object> cr eationContext, v8::Isolate* isolate)
872 { 898 {
873 if (UNLIKELY(!impl)) 899 if (UNLIKELY(!impl))
874 return v8NullWithCheck(isolate); 900 return v8NullWithCheck(isolate);
875 v8::Handle<v8::Value> wrapper = DOMDataStore::getWrapper(impl, isolate); 901 v8::Handle<v8::Value> wrapper = DOMDataStore::getWrapper<${v8ClassName}>(imp l, isolate);
876 if (!wrapper.IsEmpty()) 902 if (!wrapper.IsEmpty())
877 return wrapper; 903 return wrapper;
878 return wrap(impl, creationContext, isolate); 904 return wrap(impl, creationContext, isolate);
879 } 905 }
880 906
881 inline v8::Handle<v8::Value> toV8ForMainWorld(${nativeType}* impl, v8::Handle<v8 ::Object> creationContext, v8::Isolate* isolate) 907 inline v8::Handle<v8::Value> toV8ForMainWorld(${nativeType}* impl, v8::Handle<v8 ::Object> creationContext, v8::Isolate* isolate)
882 { 908 {
883 ASSERT(worldType(isolate) == MainWorld); 909 ASSERT(worldType(isolate) == MainWorld);
884 if (UNLIKELY(!impl)) 910 if (UNLIKELY(!impl))
885 return v8NullWithCheck(isolate); 911 return v8NullWithCheck(isolate);
886 v8::Handle<v8::Value> wrapper = DOMDataStore::getWrapperForMainWorld(impl); 912 v8::Handle<v8::Value> wrapper = DOMDataStore::getWrapperForMainWorld<${v8Cla ssName}>(impl);
887 if (!wrapper.IsEmpty()) 913 if (!wrapper.IsEmpty())
888 return wrapper; 914 return wrapper;
889 return wrap(impl, creationContext, isolate); 915 return wrap(impl, creationContext, isolate);
890 } 916 }
891 917
892 template<class HolderContainer, class Wrappable> 918 template<class HolderContainer, class Wrappable>
893 inline v8::Handle<v8::Value> toV8Fast(${nativeType}* impl, const HolderContainer & container, Wrappable* wrappable) 919 inline v8::Handle<v8::Value> toV8Fast(${nativeType}* impl, const HolderContainer & container, Wrappable* wrappable)
894 { 920 {
895 if (UNLIKELY(!impl)) 921 if (UNLIKELY(!impl))
896 return v8::Null(container.GetIsolate()); 922 return v8::Null(container.GetIsolate());
897 v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapperFast(impl, containe r, wrappable); 923 v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapperFast<${v8ClassName} >(impl, container, wrappable);
898 if (!wrapper.IsEmpty()) 924 if (!wrapper.IsEmpty())
899 return wrapper; 925 return wrapper;
900 return wrap(impl, container.Holder(), container.GetIsolate()); 926 return wrap(impl, container.Holder(), container.GetIsolate());
901 } 927 }
902 928
903 template<class HolderContainer, class Wrappable> 929 template<class HolderContainer, class Wrappable>
904 inline v8::Handle<v8::Value> toV8FastForMainWorld(${nativeType}* impl, const Hol derContainer& container, Wrappable* wrappable) 930 inline v8::Handle<v8::Value> toV8FastForMainWorld(${nativeType}* impl, const Hol derContainer& container, Wrappable* wrappable)
905 { 931 {
906 ASSERT(worldType(container.GetIsolate()) == MainWorld); 932 ASSERT(worldType(container.GetIsolate()) == MainWorld);
907 if (UNLIKELY(!impl)) 933 if (UNLIKELY(!impl))
908 return v8::Null(container.GetIsolate()); 934 return v8::Null(container.GetIsolate());
909 v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapperForMainWorld(impl); 935 v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapperForMainWorld<${v8Cl assName}>(impl);
910 if (!wrapper.IsEmpty()) 936 if (!wrapper.IsEmpty())
911 return wrapper; 937 return wrapper;
912 return wrap(impl, container.Holder(), container.GetIsolate()); 938 return wrap(impl, container.Holder(), container.GetIsolate());
913 } 939 }
914 940
915 template<class HolderContainer, class Wrappable> 941 template<class HolderContainer, class Wrappable>
916 inline v8::Handle<v8::Value> toV8FastForMainWorld(PassRefPtr< ${nativeType} > im pl, const HolderContainer& container, Wrappable* wrappable) 942 inline v8::Handle<v8::Value> toV8FastForMainWorld(PassRefPtr< ${nativeType} > im pl, const HolderContainer& container, Wrappable* wrappable)
917 { 943 {
918 return toV8FastForMainWorld(impl.get(), container, wrappable); 944 return toV8FastForMainWorld(impl.get(), container, wrappable);
919 } 945 }
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
1507 $code .= "}\n\n"; 1533 $code .= "}\n\n";
1508 $implementation{nameSpaceInternal}->add($code); 1534 $implementation{nameSpaceInternal}->add($code);
1509 return; 1535 return;
1510 } 1536 }
1511 1537
1512 AddIncludesForType($returnType); 1538 AddIncludesForType($returnType);
1513 AddToImplIncludes("bindings/v8/V8HiddenPropertyName.h"); 1539 AddToImplIncludes("bindings/v8/V8HiddenPropertyName.h");
1514 # Check for a wrapper in the wrapper cache. If there is one, we know tha t a hidden reference has already 1540 # Check for a wrapper in the wrapper cache. If there is one, we know tha t a hidden reference has already
1515 # been created. If we don't find a wrapper, we create both a wrapper and a hidden reference. 1541 # been created. If we don't find a wrapper, we create both a wrapper and a hidden reference.
1516 my $nativeReturnType = GetNativeType($returnType); 1542 my $nativeReturnType = GetNativeType($returnType);
1543 my $v8ReturnType = "V8" . $returnType;
1517 $code .= " $nativeReturnType result = ${getterString};\n"; 1544 $code .= " $nativeReturnType result = ${getterString};\n";
1518 if ($forMainWorldSuffix) { 1545 if ($forMainWorldSuffix) {
1519 $code .= " v8::Handle<v8::Value> wrapper = result.get() ? v8::Handl e<v8::Value>(DOMDataStore::getWrapper${forMainWorldSuffix}(result.get())) : v8Un defined();\n"; 1546 $code .= " v8::Handle<v8::Value> wrapper = result.get() ? v8::Handl e<v8::Value>(DOMDataStore::getWrapper${forMainWorldSuffix}<${v8ReturnType}>(resu lt.get())) : v8Undefined();\n";
1520 } else { 1547 } else {
1521 $code .= " v8::Handle<v8::Value> wrapper = result.get() ? v8::Handl e<v8::Value>(DOMDataStore::getWrapper(result.get(), info.GetIsolate())) : v8Unde fined();\n"; 1548 $code .= " v8::Handle<v8::Value> wrapper = result.get() ? v8::Handl e<v8::Value>(DOMDataStore::getWrapper<${v8ReturnType}>(result.get(), info.GetIso late())) : v8Undefined();\n";
1522 } 1549 }
1523 $code .= " if (wrapper.IsEmpty()) {\n"; 1550 $code .= " if (wrapper.IsEmpty()) {\n";
1524 $code .= " wrapper = toV8(result.get(), info.Holder(), info.GetIs olate());\n"; # FIXME: Could use wrap here since the wrapper is empty. 1551 $code .= " wrapper = toV8(result.get(), info.Holder(), info.GetIs olate());\n"; # FIXME: Could use wrap here since the wrapper is empty.
1525 $code .= " if (!wrapper.IsEmpty())\n"; 1552 $code .= " if (!wrapper.IsEmpty())\n";
1526 $code .= " V8HiddenPropertyName::setNamedHiddenReference(info .Holder(), \"${attrName}\", wrapper);\n"; 1553 $code .= " V8HiddenPropertyName::setNamedHiddenReference(info .Holder(), \"${attrName}\", wrapper);\n";
1527 $code .= " }\n"; 1554 $code .= " }\n";
1528 $code .= " v8SetReturnValue(info, wrapper);\n"; 1555 $code .= " v8SetReturnValue(info, wrapper);\n";
1529 $code .= " return;\n"; 1556 $code .= " return;\n";
1530 $code .= "}\n\n"; 1557 $code .= "}\n\n";
1531 $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; 1558 $code .= "#endif // ${conditionalString}\n\n" if $conditionalString;
(...skipping 1030 matching lines...) Expand 10 before | Expand all | Expand 10 after
2562 2589
2563 if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { 2590 if ($interface->extendedAttributes->{"ConstructorRaisesException"}) {
2564 $code .= " if (ec) {\n"; 2591 $code .= " if (ec) {\n";
2565 $code .= " setDOMException(ec, args.GetIsolate());\n"; 2592 $code .= " setDOMException(ec, args.GetIsolate());\n";
2566 $code .= " return;\n"; 2593 $code .= " return;\n";
2567 $code .= " }\n"; 2594 $code .= " }\n";
2568 } 2595 }
2569 2596
2570 $code .= <<END; 2597 $code .= <<END;
2571 2598
2572 V8DOMWrapper::associateObjectWithWrapper(impl.release(), &${v8ClassName}::in fo, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent); 2599 V8DOMWrapper::associateObjectWithWrapper<${v8ClassName}>(impl.release(), &${ v8ClassName}::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent) ;
2573 args.GetReturnValue().Set(wrapper); 2600 args.GetReturnValue().Set(wrapper);
2574 } 2601 }
2575 2602
2576 END 2603 END
2577 $implementation{nameSpaceInternal}->add($code); 2604 $implementation{nameSpaceInternal}->add($code);
2578 } 2605 }
2579 2606
2580 # The Web IDL specification states that Interface objects for interfaces MUST ha ve a property named 2607 # The Web IDL specification states that Interface objects for interfaces MUST ha ve a property named
2581 # "length" that returns the length of the shortest argument list of the entries in the effective 2608 # "length" that returns the length of the shortest argument list of the entries in the effective
2582 # overload set for constructors. In other words, use the lowest number of mandat ory arguments among 2609 # overload set for constructors. In other words, use the lowest number of mandat ory arguments among
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2656 ${implClassName}Init eventInit; 2683 ${implClassName}Init eventInit;
2657 if (args.Length() >= 2) { 2684 if (args.Length() >= 2) {
2658 V8TRYCATCH_VOID(Dictionary, options, Dictionary(args[1], args.GetIsolate ())); 2685 V8TRYCATCH_VOID(Dictionary, options, Dictionary(args[1], args.GetIsolate ()));
2659 if (!fill${implClassName}Init(eventInit, options)) 2686 if (!fill${implClassName}Init(eventInit, options))
2660 return; 2687 return;
2661 } 2688 }
2662 2689
2663 RefPtr<${implClassName}> event = ${implClassName}::create(type, eventInit); 2690 RefPtr<${implClassName}> event = ${implClassName}::create(type, eventInit);
2664 2691
2665 v8::Handle<v8::Object> wrapper = args.Holder(); 2692 v8::Handle<v8::Object> wrapper = args.Holder();
2666 V8DOMWrapper::associateObjectWithWrapper(event.release(), &${v8ClassName}::i nfo, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent); 2693 V8DOMWrapper::associateObjectWithWrapper<${v8ClassName}>(event.release(), &$ {v8ClassName}::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent );
2667 args.GetReturnValue().Set(wrapper); 2694 args.GetReturnValue().Set(wrapper);
2668 } 2695 }
2669 END 2696 END
2670 2697
2671 my $code = ""; 2698 my $code = "";
2672 $code .= <<END; 2699 $code .= <<END;
2673 bool fill${implClassName}Init(${implClassName}Init& eventInit, const Dictionary& options) 2700 bool fill${implClassName}Init(${implClassName}Init& eventInit, const Dictionary& options)
2674 { 2701 {
2675 END 2702 END
2676 2703
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
2811 2838
2812 if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { 2839 if ($interface->extendedAttributes->{"ConstructorRaisesException"}) {
2813 $code .= " if (ec) {\n"; 2840 $code .= " if (ec) {\n";
2814 $code .= " setDOMException(ec, args.GetIsolate());\n"; 2841 $code .= " setDOMException(ec, args.GetIsolate());\n";
2815 $code .= " return;\n"; 2842 $code .= " return;\n";
2816 $code .= " }\n"; 2843 $code .= " }\n";
2817 } 2844 }
2818 2845
2819 $code .= <<END; 2846 $code .= <<END;
2820 2847
2821 V8DOMWrapper::associateObjectWithWrapper(impl.release(), &${v8ClassName}Cons tructor::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent); 2848 V8DOMWrapper::associateObjectWithWrapper<${v8ClassName}>(impl.release(), &${ v8ClassName}Constructor::info, wrapper, args.GetIsolate(), WrapperConfiguration: :Dependent);
2822 args.GetReturnValue().Set(wrapper); 2849 args.GetReturnValue().Set(wrapper);
2823 } 2850 }
2824 2851
2825 END 2852 END
2826 $implementation{nameSpaceWebCore}->add($code); 2853 $implementation{nameSpaceWebCore}->add($code);
2827 2854
2828 $code = <<END; 2855 $code = <<END;
2829 v8::Handle<v8::FunctionTemplate> ${v8ClassName}Constructor::GetTemplate(v8::Isol ate* isolate, WrapperWorldType currentWorldType) 2856 v8::Handle<v8::FunctionTemplate> ${v8ClassName}Constructor::GetTemplate(v8::Isol ate* isolate, WrapperWorldType currentWorldType)
2830 { 2857 {
2831 static v8::Persistent<v8::FunctionTemplate> cachedTemplate; 2858 static v8::Persistent<v8::FunctionTemplate> cachedTemplate;
(...skipping 1642 matching lines...) Expand 10 before | Expand all | Expand 10 after
4474 } 4501 }
4475 4502
4476 END 4503 END
4477 } 4504 }
4478 4505
4479 GenerateToV8Converters($interface, $v8ClassName, $nativeType); 4506 GenerateToV8Converters($interface, $v8ClassName, $nativeType);
4480 4507
4481 $implementation{nameSpaceWebCore}->add(<<END); 4508 $implementation{nameSpaceWebCore}->add(<<END);
4482 void ${v8ClassName}::derefObject(void* object) 4509 void ${v8ClassName}::derefObject(void* object)
4483 { 4510 {
4484 static_cast<${nativeType}*>(object)->deref(); 4511 fromWrappedType(object)->deref();
4485 } 4512 }
4486 4513
4487 END 4514 END
4488 } 4515 }
4489 4516
4490 sub GenerateHeaderContentHeader 4517 sub GenerateHeaderContentHeader
4491 { 4518 {
4492 my $interface = shift; 4519 my $interface = shift;
4493 my $v8ClassName = GetV8ClassName($interface); 4520 my $v8ClassName = GetV8ClassName($interface);
4494 my $conditionalString = GenerateConditionalString($interface); 4521 my $conditionalString = GenerateConditionalString($interface);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
4720 || $v8ClassName =~ /SVG/) { 4747 || $v8ClassName =~ /SVG/) {
4721 $wrapperConfiguration = "WrapperConfiguration::Dependent"; 4748 $wrapperConfiguration = "WrapperConfiguration::Dependent";
4722 } 4749 }
4723 4750
4724 my $code = ""; 4751 my $code = "";
4725 $code .= <<END; 4752 $code .= <<END;
4726 4753
4727 v8::Handle<v8::Object> ${v8ClassName}::createWrapper(${createWrapperArgumentType } impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) 4754 v8::Handle<v8::Object> ${v8ClassName}::createWrapper(${createWrapperArgumentType } impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
4728 { 4755 {
4729 ASSERT(impl.get()); 4756 ASSERT(impl.get());
4730 ASSERT(DOMDataStore::getWrapper(impl.get(), isolate).IsEmpty()); 4757 ASSERT(DOMDataStore::getWrapper<${v8ClassName}>(impl.get(), isolate).IsEmpty ());
4731 END 4758 END
4732 4759
4733 $code .= <<END if ($baseType ne $interfaceName); 4760 $code .= <<END if ($baseType ne $interfaceName);
4734 ASSERT(static_cast<void*>(static_cast<${baseType}*>(impl.get())) == static_c ast<void*>(impl.get()));
4735 END 4761 END
4736 4762
4737 if (InheritsInterface($interface, "Document")) { 4763 if (InheritsInterface($interface, "Document")) {
4738 $code .= <<END; 4764 $code .= <<END;
4739 if (Frame* frame = impl->frame()) { 4765 if (Frame* frame = impl->frame()) {
4740 if (frame->script()->initializeMainWorld()) { 4766 if (frame->script()->initializeMainWorld()) {
4741 // initializeMainWorld may have created a wrapper for the object, re try from the start. 4767 // initializeMainWorld may have created a wrapper for the object, re try from the start.
4742 v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapper(impl.get() , isolate); 4768 v8::Handle<v8::Object> wrapper = DOMDataStore::getWrapper<${v8ClassN ame}>(impl.get(), isolate);
4743 if (!wrapper.IsEmpty()) 4769 if (!wrapper.IsEmpty())
4744 return wrapper; 4770 return wrapper;
4745 } 4771 }
4746 } 4772 }
4747 END 4773 END
4748 } 4774 }
4749 4775
4750 $code .= <<END; 4776 $code .= <<END;
4751 4777
4752 v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext , &info, impl.get(), isolate); 4778 v8::Handle<v8::Object> wrapper = V8DOMWrapper::createWrapper(creationContext , &info, toWrappedType(impl.get()), isolate);
4753 if (UNLIKELY(wrapper.IsEmpty())) 4779 if (UNLIKELY(wrapper.IsEmpty()))
4754 return wrapper; 4780 return wrapper;
4755 END 4781 END
4756 if (IsTypedArrayType($interface->name)) { 4782 if (IsTypedArrayType($interface->name)) {
4757 AddToImplIncludes("bindings/v8/custom/V8ArrayBufferCustom.h"); 4783 AddToImplIncludes("bindings/v8/custom/V8ArrayBufferCustom.h");
4758 $code .= <<END; 4784 $code .= <<END;
4759 if (!impl->buffer()->hasDeallocationObserver()) { 4785 if (!impl->buffer()->hasDeallocationObserver()) {
4760 v8::V8::AdjustAmountOfExternalAllocatedMemory(impl->buffer()->byteLength ()); 4786 v8::V8::AdjustAmountOfExternalAllocatedMemory(impl->buffer()->byteLength ());
4761 impl->buffer()->setDeallocationObserver(V8ArrayBufferDeallocationObserve r::instance()); 4787 impl->buffer()->setDeallocationObserver(V8ArrayBufferDeallocationObserve r::instance());
4762 } 4788 }
4763 END 4789 END
4764 } 4790 }
4765 4791
4766 $code .= <<END; 4792 $code .= <<END;
4767 installPerContextProperties(wrapper, impl.get(), isolate); 4793 installPerContextProperties(wrapper, impl.get(), isolate);
4768 V8DOMWrapper::associateObjectWithWrapper(impl, &info, wrapper, isolate, $wra pperConfiguration); 4794 V8DOMWrapper::associateObjectWithWrapper<$v8ClassName>(impl, &info, wrapper, isolate, $wrapperConfiguration);
4769 return wrapper; 4795 return wrapper;
4770 } 4796 }
4771 END 4797 END
4772 $implementation{nameSpaceWebCore}->add($code); 4798 $implementation{nameSpaceWebCore}->add($code);
4773 } 4799 }
4774 4800
4775 sub GenerateSecurityCheckFunctions 4801 sub GenerateSecurityCheckFunctions
4776 { 4802 {
4777 my $interface = shift; 4803 my $interface = shift;
4778 my $implClassName = GetImplName($interface); 4804 my $implClassName = GetImplName($interface);
(...skipping 1248 matching lines...) Expand 10 before | Expand all | Expand 10 after
6027 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { 6053 if ($currentInterface->extendedAttributes->{$extendedAttribute}) {
6028 $found = 1; 6054 $found = 1;
6029 } 6055 }
6030 return 1 if $found; 6056 return 1 if $found;
6031 }, 0); 6057 }, 0);
6032 6058
6033 return $found; 6059 return $found;
6034 } 6060 }
6035 6061
6036 1; 6062 1;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698