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

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

Issue 181513002: Kill [SetWrapperReferenceFromReference] IDL extended attribute (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix nit Created 6 years, 10 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 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 my $idlFilename = Cwd::abs_path(IDLFileForInterface($interfaceName)) or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); 506 my $idlFilename = Cwd::abs_path(IDLFileForInterface($interfaceName)) or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n");
507 my $idlRelPath = File::Spec->abs2rel($idlFilename, $sourceRoot); 507 my $idlRelPath = File::Spec->abs2rel($idlFilename, $sourceRoot);
508 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); 508 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h");
509 } 509 }
510 return @includes; 510 return @includes;
511 } 511 }
512 512
513 sub NeedsVisitDOMWrapper 513 sub NeedsVisitDOMWrapper
514 { 514 {
515 my $interface = shift; 515 my $interface = shift;
516 return ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "VisitDOMWrapper") || $interface->extendedAttributes->{"SetWrapperReferenceFrom "} || $interface->extendedAttributes->{"SetWrapperReferenceFromReference"} || $i nterface->extendedAttributes->{"SetWrapperReferenceTo"} || SVGTypeNeedsToHoldCon textElement($interface->name); 516 return ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "VisitDOMWrapper") || $interface->extendedAttributes->{"SetWrapperReferenceFrom "} || $interface->extendedAttributes->{"SetWrapperReferenceTo"} || SVGTypeNeedsT oHoldContextElement($interface->name);
517 } 517 }
518 518
519 sub GenerateVisitDOMWrapper 519 sub GenerateVisitDOMWrapper
520 { 520 {
521 my $interface = shift; 521 my $interface = shift;
522 my $implClassName = GetImplName($interface); 522 my $implClassName = GetImplName($interface);
523 my $v8ClassName = GetV8ClassName($interface); 523 my $v8ClassName = GetV8ClassName($interface);
524 524
525 if (ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "V isitDOMWrapper")) { 525 if (ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "V isitDOMWrapper")) {
526 return; 526 return;
(...skipping 28 matching lines...) Expand all
555 $code .= <<END; 555 $code .= <<END;
556 ${setReferenceImplType}* ${setReferenceName} = impl->${setReferenceName}(); 556 ${setReferenceImplType}* ${setReferenceName} = impl->${setReferenceName}();
557 if (${setReferenceName}) { 557 if (${setReferenceName}) {
558 if (!DOMDataStore::containsWrapper<${setReferenceV8Type}>(${setReference Name}, isolate)) 558 if (!DOMDataStore::containsWrapper<${setReferenceV8Type}>(${setReference Name}, isolate))
559 wrap(${setReferenceName}, creationContext, isolate); 559 wrap(${setReferenceName}, creationContext, isolate);
560 DOMDataStore::setWrapperReference<${setReferenceV8Type}>(wrapper, ${setR eferenceName}, isolate); 560 DOMDataStore::setWrapperReference<${setReferenceV8Type}>(wrapper, ${setR eferenceName}, isolate);
561 } 561 }
562 END 562 END
563 } 563 }
564 564
565 my $isReachableMethod = $interface->extendedAttributes->{"SetWrapperReferenc eFrom"}; 565 my $setWrapperReferenceMethod = $interface->extendedAttributes->{"SetWrapper ReferenceFrom"};
566 my $isReachableReferenceMethod = $interface->extendedAttributes->{"SetWrappe rReferenceFromReference"}; 566 if ($setWrapperReferenceMethod) {
567
568 if ($isReachableMethod || $isReachableReferenceMethod) {
569 AddToImplIncludes("bindings/v8/V8GCController.h"); 567 AddToImplIncludes("bindings/v8/V8GCController.h");
570 AddToImplIncludes("core/dom/Element.h"); 568 AddToImplIncludes("core/dom/Element.h");
571 if ($isReachableMethod) { 569 $code .= <<END;
572 $code .= <<END; 570 // The ${setWrapperReferenceMethod}() method may return a reference or a poi nter but
573 if (Node* owner = impl->${isReachableMethod}()) { 571 // RefPtr can be constructed from either.
574 Node* root = V8GCController::opaqueRootForGC(owner, isolate); 572 if (RefPtr<Node> owner = PassRefPtr<Node>(impl->${setWrapperReferenceMethod} ())) {
adamk 2014/02/26 17:55:38 Why make a RefPTr here when we didn't make one bef
Inactive 2014/02/26 18:01:56 Yes, this is the trick, we construct a RefPtr beca
573 Node* root = V8GCController::opaqueRootForGC(owner.get(), isolate);
575 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r oot)), wrapper); 574 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r oot)), wrapper);
576 return; 575 return;
577 } 576 }
578 END 577 END
579 } else {
580 $code .= <<END;
581 Node* root = V8GCController::opaqueRootForGC(&impl->${isReachableReferenceMe thod}(), isolate);
582 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(root) ), wrapper);
583 }
584
585 END
586 }
587 } 578 }
588 579
589 if (!$isReachableReferenceMethod) { 580 $code .= <<END;
590 $code .= <<END;
591 setObjectGroup(object, wrapper, isolate); 581 setObjectGroup(object, wrapper, isolate);
592 } 582 }
593 583
594 END 584 END
595 }
596 585
597 $implementation{nameSpaceWebCore}->add($code); 586 $implementation{nameSpaceWebCore}->add($code);
598 } 587 }
599 588
600 sub GetSVGPropertyTypes 589 sub GetSVGPropertyTypes
601 { 590 {
602 my $implType = shift; 591 my $implType = shift;
603 592
604 my $svgPropertyType; 593 my $svgPropertyType;
605 my $svgListPropertyType; 594 my $svgListPropertyType;
(...skipping 5862 matching lines...) Expand 10 before | Expand all | Expand 10 after
6468 if ($parameter->type eq "SerializedScriptValue") { 6457 if ($parameter->type eq "SerializedScriptValue") {
6469 return 1; 6458 return 1;
6470 } elsif (IsIntegerType($parameter->type)) { 6459 } elsif (IsIntegerType($parameter->type)) {
6471 return 1; 6460 return 1;
6472 } 6461 }
6473 } 6462 }
6474 return 0; 6463 return 0;
6475 } 6464 }
6476 6465
6477 1; 6466 1;
OLDNEW
« no previous file with comments | « Source/bindings/IDLExtendedAttributes.txt ('k') | Source/bindings/scripts/unstable/v8_interface.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698