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 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 my $idlFilename = Cwd::abs_path(IDLFileForInterface($interfaceName)) or
die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); | 508 my $idlFilename = Cwd::abs_path(IDLFileForInterface($interfaceName)) or
die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); |
509 my $idlRelPath = File::Spec->abs2rel($idlFilename, $sourceRoot); | 509 my $idlRelPath = File::Spec->abs2rel($idlFilename, $sourceRoot); |
510 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); | 510 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); |
511 } | 511 } |
512 return @includes; | 512 return @includes; |
513 } | 513 } |
514 | 514 |
515 sub NeedsVisitDOMWrapper | 515 sub NeedsVisitDOMWrapper |
516 { | 516 { |
517 my $interface = shift; | 517 my $interface = shift; |
518 return ExtendedAttributeContains($interface->extendedAttributes->{"Custom"},
"VisitDOMWrapper") || $interface->extendedAttributes->{"SetWrapperReferenceFrom
"} || $interface->extendedAttributes->{"SetWrapperReferenceTo"} || SVGTypeNeedsT
oHoldContextElement($interface->name); | 518 return ExtendedAttributeContains($interface->extendedAttributes->{"Custom"},
"VisitDOMWrapper") || $interface->extendedAttributes->{"SetWrapperReferenceFrom
"} || $interface->extendedAttributes->{"SetWrapperReferenceFromReference"} || $i
nterface->extendedAttributes->{"SetWrapperReferenceTo"} || SVGTypeNeedsToHoldCon
textElement($interface->name); |
519 } | 519 } |
520 | 520 |
521 sub GenerateVisitDOMWrapper | 521 sub GenerateVisitDOMWrapper |
522 { | 522 { |
523 my $interface = shift; | 523 my $interface = shift; |
524 my $implClassName = GetImplName($interface); | 524 my $implClassName = GetImplName($interface); |
525 my $v8ClassName = GetV8ClassName($interface); | 525 my $v8ClassName = GetV8ClassName($interface); |
526 | 526 |
527 if (ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "V
isitDOMWrapper")) { | 527 if (ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "V
isitDOMWrapper")) { |
528 return; | 528 return; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 ${setReferenceType}* ${setReferenceName} = impl->${setReferenceName}(); | 567 ${setReferenceType}* ${setReferenceName} = impl->${setReferenceName}(); |
568 if (${setReferenceName}) { | 568 if (${setReferenceName}) { |
569 if (!DOMDataStore::containsWrapper<${setReferenceV8Type}>(${setReference
Name}, isolate)) | 569 if (!DOMDataStore::containsWrapper<${setReferenceV8Type}>(${setReference
Name}, isolate)) |
570 wrap(${setReferenceName}, creationContext, isolate); | 570 wrap(${setReferenceName}, creationContext, isolate); |
571 DOMDataStore::setWrapperReference<${setReferenceV8Type}>(wrapper, ${setR
eferenceName}, isolate); | 571 DOMDataStore::setWrapperReference<${setReferenceV8Type}>(wrapper, ${setR
eferenceName}, isolate); |
572 } | 572 } |
573 END | 573 END |
574 } | 574 } |
575 | 575 |
576 my $isReachableMethod = $interface->extendedAttributes->{"SetWrapperReferenc
eFrom"}; | 576 my $isReachableMethod = $interface->extendedAttributes->{"SetWrapperReferenc
eFrom"}; |
577 if ($isReachableMethod) { | 577 my $isReachableReferenceMethod = $interface->extendedAttributes->{"SetWrappe
rReferenceFromReference"}; |
| 578 |
| 579 if ($isReachableMethod || $isReachableReferenceMethod) { |
578 AddToImplIncludes("bindings/v8/V8GCController.h"); | 580 AddToImplIncludes("bindings/v8/V8GCController.h"); |
579 AddToImplIncludes("core/dom/Element.h"); | 581 AddToImplIncludes("core/dom/Element.h"); |
580 $code .= <<END; | 582 if ($isReachableMethod) { |
| 583 $code .= <<END; |
581 if (Node* owner = impl->${isReachableMethod}()) { | 584 if (Node* owner = impl->${isReachableMethod}()) { |
582 Node* root = V8GCController::opaqueRootForGC(owner, isolate); | 585 Node* root = V8GCController::opaqueRootForGC(owner, isolate); |
583 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r
oot)), wrapper); | 586 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r
oot)), wrapper); |
584 return; | 587 return; |
585 } | 588 } |
586 END | 589 END |
| 590 } else { |
| 591 $code .= <<END; |
| 592 Node* root = V8GCController::opaqueRootForGC(&impl->${isReachableReferenceMe
thod}(), isolate); |
| 593 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(root)
), wrapper); |
| 594 } |
| 595 |
| 596 END |
| 597 } |
587 } | 598 } |
588 | 599 |
589 $code .= <<END; | 600 if (!$isReachableReferenceMethod) { |
| 601 $code .= <<END; |
590 setObjectGroup(object, wrapper, isolate); | 602 setObjectGroup(object, wrapper, isolate); |
591 } | 603 } |
592 | 604 |
593 END | 605 END |
| 606 } |
| 607 |
594 $implementation{nameSpaceWebCore}->add($code); | 608 $implementation{nameSpaceWebCore}->add($code); |
595 } | 609 } |
596 | 610 |
597 sub GetSVGPropertyTypes | 611 sub GetSVGPropertyTypes |
598 { | 612 { |
599 my $implType = shift; | 613 my $implType = shift; |
600 | 614 |
601 my $svgPropertyType; | 615 my $svgPropertyType; |
602 my $svgListPropertyType; | 616 my $svgListPropertyType; |
603 my $svgNativeType; | 617 my $svgNativeType; |
(...skipping 5882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6486 if ($parameter->type eq "SerializedScriptValue") { | 6500 if ($parameter->type eq "SerializedScriptValue") { |
6487 return 1; | 6501 return 1; |
6488 } elsif (IsIntegerType($parameter->type)) { | 6502 } elsif (IsIntegerType($parameter->type)) { |
6489 return 1; | 6503 return 1; |
6490 } | 6504 } |
6491 } | 6505 } |
6492 return 0; | 6506 return 0; |
6493 } | 6507 } |
6494 | 6508 |
6495 1; | 6509 1; |
OLD | NEW |