OLD | NEW |
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 Loading... |
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->{"SetWrapperReferenceTo"} || SVGTypeNeedsT
oHoldContextElement($interface->name); | 516 return ExtendedAttributeContains($interface->extendedAttributes->{"Custom"},
"VisitDOMWrapper") || $interface->extendedAttributes->{"SetWrapperReferenceFrom
"} || $interface->extendedAttributes->{"SetWrapperReferenceFromReference"} || $i
nterface->extendedAttributes->{"SetWrapperReferenceTo"} || SVGTypeNeedsToHoldCon
textElement($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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 ${setReferenceImplType}* ${setReferenceName} = impl->${setReferenceName}(); | 566 ${setReferenceImplType}* ${setReferenceName} = impl->${setReferenceName}(); |
567 if (${setReferenceName}) { | 567 if (${setReferenceName}) { |
568 if (!DOMDataStore::containsWrapper<${setReferenceV8Type}>(${setReference
Name}, isolate)) | 568 if (!DOMDataStore::containsWrapper<${setReferenceV8Type}>(${setReference
Name}, isolate)) |
569 wrap(${setReferenceName}, creationContext, isolate); | 569 wrap(${setReferenceName}, creationContext, isolate); |
570 DOMDataStore::setWrapperReference<${setReferenceV8Type}>(wrapper, ${setR
eferenceName}, isolate); | 570 DOMDataStore::setWrapperReference<${setReferenceV8Type}>(wrapper, ${setR
eferenceName}, isolate); |
571 } | 571 } |
572 END | 572 END |
573 } | 573 } |
574 | 574 |
575 my $isReachableMethod = $interface->extendedAttributes->{"SetWrapperReferenc
eFrom"}; | 575 my $isReachableMethod = $interface->extendedAttributes->{"SetWrapperReferenc
eFrom"}; |
576 if ($isReachableMethod) { | 576 my $isReachableReferenceMethod = $interface->extendedAttributes->{"SetWrappe
rReferenceFromReference"}; |
| 577 |
| 578 if ($isReachableMethod || $isReachableReferenceMethod) { |
577 AddToImplIncludes("bindings/v8/V8GCController.h"); | 579 AddToImplIncludes("bindings/v8/V8GCController.h"); |
578 AddToImplIncludes("core/dom/Element.h"); | 580 AddToImplIncludes("core/dom/Element.h"); |
579 $code .= <<END; | 581 if ($isReachableMethod) { |
| 582 $code .= <<END; |
580 if (Node* owner = impl->${isReachableMethod}()) { | 583 if (Node* owner = impl->${isReachableMethod}()) { |
581 Node* root = V8GCController::opaqueRootForGC(owner, isolate); | 584 Node* root = V8GCController::opaqueRootForGC(owner, isolate); |
582 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r
oot)), wrapper); | 585 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r
oot)), wrapper); |
583 return; | 586 return; |
584 } | 587 } |
585 END | 588 END |
| 589 } else { |
| 590 $code .= <<END; |
| 591 Node* root = V8GCController::opaqueRootForGC(&impl->${isReachableReferenceMe
thod}(), isolate); |
| 592 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(root)
), wrapper); |
| 593 } |
| 594 |
| 595 END |
| 596 } |
586 } | 597 } |
587 | 598 |
588 $code .= <<END; | 599 if (!$isReachableReferenceMethod) { |
| 600 $code .= <<END; |
589 setObjectGroup(object, wrapper, isolate); | 601 setObjectGroup(object, wrapper, isolate); |
590 } | 602 } |
591 | 603 |
592 END | 604 END |
| 605 } |
| 606 |
593 $implementation{nameSpaceWebCore}->add($code); | 607 $implementation{nameSpaceWebCore}->add($code); |
594 } | 608 } |
595 | 609 |
596 sub GetSVGPropertyTypes | 610 sub GetSVGPropertyTypes |
597 { | 611 { |
598 my $implType = shift; | 612 my $implType = shift; |
599 | 613 |
600 my $svgPropertyType; | 614 my $svgPropertyType; |
601 my $svgListPropertyType; | 615 my $svgListPropertyType; |
602 my $svgNativeType; | 616 my $svgNativeType; |
(...skipping 5855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6458 if ($parameter->type eq "SerializedScriptValue") { | 6472 if ($parameter->type eq "SerializedScriptValue") { |
6459 return 1; | 6473 return 1; |
6460 } elsif (IsIntegerType($parameter->type)) { | 6474 } elsif (IsIntegerType($parameter->type)) { |
6461 return 1; | 6475 return 1; |
6462 } | 6476 } |
6463 } | 6477 } |
6464 return 0; | 6478 return 0; |
6465 } | 6479 } |
6466 | 6480 |
6467 1; | 6481 1; |
OLD | NEW |