| 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 180 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 191 | 191 | 
| 192 my %enumTypeHash = (); | 192 my %enumTypeHash = (); | 
| 193 | 193 | 
| 194 my %svgAttributesInHTMLHash = ("class" => 1, "id" => 1, "onabort" => 1, "onclick
      " => 1, | 194 my %svgAttributesInHTMLHash = ("class" => 1, "id" => 1, "onabort" => 1, "onclick
      " => 1, | 
| 195                                "onerror" => 1, "onload" => 1, "onmousedown" => 1
      , | 195                                "onerror" => 1, "onload" => 1, "onmousedown" => 1
      , | 
| 196                                "onmouseenter" => 1, "onmouseleave" => 1, | 196                                "onmouseenter" => 1, "onmouseleave" => 1, | 
| 197                                "onmousemove" => 1, "onmouseout" => 1, "onmouseov
      er" => 1, | 197                                "onmousemove" => 1, "onmouseout" => 1, "onmouseov
      er" => 1, | 
| 198                                "onmouseup" => 1, "onresize" => 1, "onscroll" => 
      1, | 198                                "onmouseup" => 1, "onresize" => 1, "onscroll" => 
      1, | 
| 199                                "onunload" => 1); | 199                                "onunload" => 1); | 
| 200 | 200 | 
|  | 201 ### DONE | 
| 201 my %svgTypeNeedingTearOff = ( | 202 my %svgTypeNeedingTearOff = ( | 
| 202     "SVGAngle" => "SVGPropertyTearOff<SVGAngle>", | 203     "SVGAngle" => "SVGPropertyTearOff<SVGAngle>", | 
| 203     "SVGLength" => "SVGPropertyTearOff<SVGLength>", | 204     "SVGLength" => "SVGPropertyTearOff<SVGLength>", | 
| 204     "SVGLengthList" => "SVGListPropertyTearOff<SVGLengthList>", | 205     "SVGLengthList" => "SVGListPropertyTearOff<SVGLengthList>", | 
| 205     "SVGMatrix" => "SVGPropertyTearOff<SVGMatrix>", | 206     "SVGMatrix" => "SVGPropertyTearOff<SVGMatrix>", | 
| 206     "SVGNumber" => "SVGPropertyTearOff<SVGNumber>", | 207     "SVGNumber" => "SVGPropertyTearOff<SVGNumber>", | 
| 207     "SVGNumberList" => "SVGListPropertyTearOff<SVGNumberList>", | 208     "SVGNumberList" => "SVGListPropertyTearOff<SVGNumberList>", | 
| 208     "SVGPathSegList" => "SVGPathSegListPropertyTearOff", | 209     "SVGPathSegList" => "SVGPathSegListPropertyTearOff", | 
| 209     "SVGPoint" => "SVGPropertyTearOff<SVGPoint>", | 210     "SVGPoint" => "SVGPropertyTearOff<SVGPoint>", | 
| 210     "SVGPointList" => "SVGListPropertyTearOff<SVGPointList>", | 211     "SVGPointList" => "SVGListPropertyTearOff<SVGPointList>", | 
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 260     bless($reference, $object); | 261     bless($reference, $object); | 
| 261     return $reference; | 262     return $reference; | 
| 262 } | 263 } | 
| 263 | 264 | 
| 264 | 265 | 
| 265 sub IDLFileForInterface | 266 sub IDLFileForInterface | 
| 266 { | 267 { | 
| 267     my $interfaceName = shift; | 268     my $interfaceName = shift; | 
| 268 | 269 | 
| 269     unless ($idlFiles) { | 270     unless ($idlFiles) { | 
|  | 271 #    use Data::Dumper; | 
|  | 272 #    print "[direc]", Dumper($idlDirectories), "\n"; | 
| 270         my @directories = map { $_ = "$sourceRoot/$_" if -d "$sourceRoot/$_"; $_
       } @$idlDirectories; | 273         my @directories = map { $_ = "$sourceRoot/$_" if -d "$sourceRoot/$_"; $_
       } @$idlDirectories; | 
| 271         push(@directories, "."); | 274         push(@directories, "."); | 
|  | 275 #        print "[directories]", Dumper(@directories), "\n"; | 
| 272 | 276 | 
| 273         $idlFiles = { }; | 277         $idlFiles = { }; | 
| 274         foreach my $idlFile (@$interfaceIdlFiles) { | 278         foreach my $idlFile (@$interfaceIdlFiles) { | 
| 275             $idlFiles->{fileparse(basename($idlFile), ".idl")} = $idlFile; | 279             $idlFiles->{fileparse(basename($idlFile), ".idl")} = $idlFile; | 
| 276         } | 280         } | 
|  | 281 #        use Data::Dumper; | 
|  | 282 #        print "[idlFiles]", Dumper($idlFiles), "\n"; | 
| 277 | 283 | 
| 278         my $wanted = sub { | 284         my $wanted = sub { | 
|  | 285 #            print "<find> ", $File::Find::name, "\n"; | 
| 279             $idlFiles->{$1} = $File::Find::name if /^([A-Z].*)\.idl$/; | 286             $idlFiles->{$1} = $File::Find::name if /^([A-Z].*)\.idl$/; | 
| 280             $File::Find::prune = 1 if /^\../; | 287             $File::Find::prune = 1 if /^\../; | 
| 281         }; | 288         }; | 
| 282         find($wanted, @directories); | 289         find($wanted, @directories); | 
|  | 290 #        print "[idlFiles]", scalar(keys($idlFiles)), "\n"; | 
| 283     } | 291     } | 
| 284 | 292 | 
| 285     return $idlFiles->{$interfaceName}; | 293     return $idlFiles->{$interfaceName}; | 
| 286 } | 294 } | 
| 287 | 295 | 
| 288 sub ParseInterface | 296 sub ParseInterface | 
| 289 { | 297 { | 
| 290     my $interfaceName = shift; | 298     my $interfaceName = shift; | 
| 291 | 299 | 
| 292     if (exists $cachedInterfaces->{$interfaceName}) { | 300     if (exists $cachedInterfaces->{$interfaceName}) { | 
| 293         return $cachedInterfaces->{$interfaceName}; | 301         return $cachedInterfaces->{$interfaceName}; | 
| 294     } | 302     } | 
| 295 | 303 | 
| 296     # Step #1: Find the IDL file associated with 'interface' | 304     # Step #1: Find the IDL file associated with 'interface' | 
| 297     my $filename = IDLFileForInterface($interfaceName) | 305     my $filename = IDLFileForInterface($interfaceName) | 
| 298       or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); | 306       or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); | 
| 299 | 307 | 
| 300     print "  |  |>  Parsing parent IDL \"$filename\" for interface \"$interfaceN
      ame\"\n" if $verbose; | 308 #    use Carp qw(cluck); | 
|  | 309 #    cluck "HEY"; | 
|  | 310 #    print "  |  |>  Parsing parent IDL \"$filename\" for interface \"$interface
      Name\"\n" if $verbose; | 
|  | 311     print "  |  |>  Parsing $interfaceName ( $filename )\n"; | 
| 301 | 312 | 
| 302     # Step #2: Parse the found IDL file (in quiet mode). | 313     # Step #2: Parse the found IDL file (in quiet mode). | 
| 303     my $parser = deprecated_idl_parser->new(1); | 314     my $parser = deprecated_idl_parser->new(1); | 
| 304     my $document = $parser->Parse($filename, $preprocessor); | 315     my $document = $parser->Parse($filename, $preprocessor); | 
| 305 | 316 | 
| 306     foreach my $interface (@{$document->interfaces}) { | 317     foreach my $interface (@{$document->interfaces}) { | 
| 307         if ($interface->name eq $interfaceName or $interface->isPartial) { | 318         if ($interface->name eq $interfaceName or $interface->isPartial) { | 
| 308             $cachedInterfaces->{$interfaceName} = $interface; | 319             $cachedInterfaces->{$interfaceName} = $interface; | 
| 309             return $interface; | 320             return $interface; | 
| 310         } | 321         } | 
| 311     } | 322     } | 
| 312 | 323 | 
| 313     die("Could NOT find interface definition for $interfaceName in $filename"); | 324     die("Could NOT find interface definition for $interfaceName in $filename"); | 
| 314 } | 325 } | 
| 315 | 326 | 
| 316 sub GenerateInterface | 327 sub GenerateInterface | 
| 317 { | 328 { | 
| 318     my $object = shift; | 329     my $object = shift; | 
| 319     my $interface = shift; | 330     my $interface = shift; | 
| 320 | 331 | 
|  | 332     print "[GenerateInterface] ", $interface->name, "\n"; | 
|  | 333 #    ForAllParents($interface, sub { | 
|  | 334 #        my $parent = shift; | 
|  | 335 #        print "    - ", $parent->name, "\n" | 
|  | 336 #    }); | 
| 321     %callbackFunctionTypeHash = map { $_->name => $_ } @{$idlDocument->callbackF
      unctions}; | 337     %callbackFunctionTypeHash = map { $_->name => $_ } @{$idlDocument->callbackF
      unctions}; | 
| 322     %enumTypeHash = map { $_->name => $_->values } @{$idlDocument->enumerations}
      ; | 338     %enumTypeHash = map { $_->name => $_->values } @{$idlDocument->enumerations}
      ; | 
| 323     my $v8ClassName = GetV8ClassName($interface); | 339     my $v8ClassName = GetV8ClassName($interface); | 
| 324     my $defineName = $v8ClassName . "_h"; | 340     my $defineName = $v8ClassName . "_h"; | 
| 325     my $internalNamespace = GetImplName($interface) . "V8Internal"; | 341     my $internalNamespace = GetImplName($interface) . "V8Internal"; | 
| 326 | 342 | 
| 327     my $conditionalString = GenerateConditionalString($interface); | 343     my $conditionalString = GenerateConditionalString($interface); | 
| 328     my $conditionalIf = ""; | 344     my $conditionalIf = ""; | 
| 329     my $conditionalEndif = ""; | 345     my $conditionalEndif = ""; | 
| 330     if ($conditionalString) { | 346     if ($conditionalString) { | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 385     } else { | 401     } else { | 
| 386         $object->GenerateHeader($interface); | 402         $object->GenerateHeader($interface); | 
| 387         $object->GenerateImplementation($interface); | 403         $object->GenerateImplementation($interface); | 
| 388     } | 404     } | 
| 389 } | 405 } | 
| 390 | 406 | 
| 391 sub AddToImplIncludes | 407 sub AddToImplIncludes | 
| 392 { | 408 { | 
| 393     my $header = shift; | 409     my $header = shift; | 
| 394     $implIncludes{$header} = 1; | 410     $implIncludes{$header} = 1; | 
|  | 411     if($header eq "core/svg/properties/SVGAnimatedPropertyTearOff.h") { | 
|  | 412 #        use Carp qw(cluck); | 
|  | 413 #        cluck "HEY"; | 
|  | 414     } | 
| 395 } | 415 } | 
| 396 | 416 | 
| 397 sub AddToHeaderIncludes | 417 sub AddToHeaderIncludes | 
| 398 { | 418 { | 
| 399     my @includes = @_; | 419     my @includes = @_; | 
| 400 | 420 | 
| 401     for my $include (@includes) { | 421     for my $include (@includes) { | 
| 402         $headerIncludes{$include} = 1; | 422         $headerIncludes{$include} = 1; | 
| 403     } | 423     } | 
| 404 } | 424 } | 
| 405 | 425 | 
|  | 426 ### DONE | 
| 406 sub SkipIncludeHeader | 427 sub SkipIncludeHeader | 
| 407 { | 428 { | 
| 408     my $type = shift; | 429     my $type = shift; | 
| 409 | 430 | 
| 410     return 1 if IsPrimitiveType($type); | 431     return 1 if IsPrimitiveType($type); | 
| 411     return 1 if IsEnumType($type); | 432     return 1 if IsEnumType($type); | 
| 412     return 1 if IsCallbackFunctionType($type); | 433     return 1 if IsCallbackFunctionType($type); | 
| 413     return 1 if $type eq "DOMString"; | 434     return 1 if $type eq "DOMString"; | 
| 414     return 0; | 435     return 0; | 
| 415 } | 436 } | 
| 416 | 437 | 
| 417 sub AddIncludesForType | 438 sub AddIncludesForType | 
| 418 { | 439 { | 
| 419     my $type = shift; | 440     my $type = shift; | 
|  | 441 #    print "BEBE AddIncludesForType ", $type, "\n"; | 
| 420 | 442 | 
| 421     return if SkipIncludeHeader($type); | 443     return if SkipIncludeHeader($type); | 
| 422 | 444 | 
| 423     # Default includes | 445     # Default includes | 
| 424     if ($type eq "EventListener" or $type eq "EventHandler") { | 446     if ($type eq "EventListener" or $type eq "EventHandler") { | 
| 425         AddToImplIncludes("core/dom/EventListener.h"); | 447         AddToImplIncludes("core/dom/EventListener.h"); | 
| 426     } elsif ($type eq "SerializedScriptValue") { | 448     } elsif ($type eq "SerializedScriptValue") { | 
| 427         AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); | 449         AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); | 
| 428     } elsif ($type eq "any" || IsCallbackFunctionType($type)) { | 450     } elsif ($type eq "any" || IsCallbackFunctionType($type)) { | 
| 429         AddToImplIncludes("bindings/v8/ScriptValue.h"); | 451         AddToImplIncludes("bindings/v8/ScriptValue.h"); | 
| 430     } elsif (IsTypedArrayType($type)) { | 452     } elsif (IsTypedArrayType($type)) { | 
| 431         AddToImplIncludes("bindings/v8/custom/V8${type}Custom.h"); | 453         AddToImplIncludes("bindings/v8/custom/V8${type}Custom.h"); | 
| 432     } else { | 454     } else { | 
| 433         AddToImplIncludes("V8${type}.h"); | 455         AddToImplIncludes("V8${type}.h"); | 
| 434     } | 456     } | 
| 435 } | 457 } | 
| 436 | 458 | 
| 437 sub HeaderFilesForInterface | 459 sub HeaderFilesForInterface | 
| 438 { | 460 { | 
| 439     my $interfaceName = shift; | 461     my $interfaceName = shift; | 
| 440     my $implClassName = shift; | 462     my $implClassName = shift; | 
| 441 | 463 | 
|  | 464     use Data::Dumper; | 
| 442     my @includes = (); | 465     my @includes = (); | 
| 443     if (IsTypedArrayType($interfaceName)) { | 466     if (IsTypedArrayType($interfaceName)) { | 
|  | 467         ### DONE | 
| 444         push(@includes, "wtf/${interfaceName}.h"); | 468         push(@includes, "wtf/${interfaceName}.h"); | 
| 445     } elsif (!SkipIncludeHeader($interfaceName)) { | 469     } elsif (!SkipIncludeHeader($interfaceName)) { | 
|  | 470         ### DONE | 
| 446         my $idlFilename = IDLFileForInterface($interfaceName) or die("Could NOT 
      find IDL file for interface \"$interfaceName\" $!\n"); | 471         my $idlFilename = IDLFileForInterface($interfaceName) or die("Could NOT 
      find IDL file for interface \"$interfaceName\" $!\n"); | 
| 447         my $idlRelPath= "bindings/" . File::Spec->abs2rel($idlFilename, $sourceR
      oot); | 472         my $idlRelPath= "bindings/" . File::Spec->abs2rel($idlFilename, $sourceR
      oot); | 
|  | 473 #        print "GEHEHE ", $idlRelPath, "\n"; | 
|  | 474 #        print "GEHEHE ", dirname($idlRelPath), "\n"; | 
| 448         push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); | 475         push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); | 
| 449     } | 476     } | 
|  | 477 #    print "[HeaderFilesForInterface]", Dumper(@includes); | 
| 450     return @includes; | 478     return @includes; | 
| 451 } | 479 } | 
| 452 | 480 | 
|  | 481 ### DONE | 
| 453 sub NeedsOpaqueRootForGC | 482 sub NeedsOpaqueRootForGC | 
| 454 { | 483 { | 
| 455     my $interface = shift; | 484     my $interface = shift; | 
| 456     return $interface->extendedAttributes->{"GenerateIsReachable"} || $interface
      ->extendedAttributes->{"CustomIsReachable"}; | 485     return $interface->extendedAttributes->{"GenerateIsReachable"} || $interface
      ->extendedAttributes->{"CustomIsReachable"}; | 
| 457 } | 486 } | 
| 458 | 487 | 
|  | 488 ### DONE | 
| 459 sub GenerateOpaqueRootForGC | 489 sub GenerateOpaqueRootForGC | 
| 460 { | 490 { | 
| 461     my $interface = shift; | 491     my $interface = shift; | 
| 462     my $implClassName = GetImplName($interface); | 492     my $implClassName = GetImplName($interface); | 
| 463     my $v8ClassName = GetV8ClassName($interface); | 493     my $v8ClassName = GetV8ClassName($interface); | 
| 464 | 494 | 
| 465     if ($interface->extendedAttributes->{"CustomIsReachable"}) { | 495     if ($interface->extendedAttributes->{"CustomIsReachable"}) { | 
| 466         return; | 496         return; | 
| 467     } | 497     } | 
| 468 | 498 | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 482     } | 512     } | 
| 483 | 513 | 
| 484     $code .= <<END; | 514     $code .= <<END; | 
| 485     return object; | 515     return object; | 
| 486 } | 516 } | 
| 487 | 517 | 
| 488 END | 518 END | 
| 489     $implementation{nameSpaceWebCore}->add($code); | 519     $implementation{nameSpaceWebCore}->add($code); | 
| 490 } | 520 } | 
| 491 | 521 | 
|  | 522 ### DONE | 
| 492 sub GetSVGPropertyTypes | 523 sub GetSVGPropertyTypes | 
| 493 { | 524 { | 
| 494     my $implType = shift; | 525     my $implType = shift; | 
| 495 | 526 | 
| 496     my $svgPropertyType; | 527     my $svgPropertyType; | 
| 497     my $svgListPropertyType; | 528     my $svgListPropertyType; | 
| 498     my $svgNativeType; | 529     my $svgNativeType; | 
| 499 | 530 | 
| 500     return ($svgPropertyType, $svgListPropertyType, $svgNativeType) if not $impl
      Type =~ /SVG/; | 531     return ($svgPropertyType, $svgListPropertyType, $svgNativeType) if not $impl
      Type =~ /SVG/; | 
| 501 | 532 | 
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 589     my $object = shift; | 620     my $object = shift; | 
| 590     my $interface = shift; | 621     my $interface = shift; | 
| 591 | 622 | 
| 592     my $interfaceName = $interface->name; | 623     my $interfaceName = $interface->name; | 
| 593     my $implClassName = GetImplName($interface); | 624     my $implClassName = GetImplName($interface); | 
| 594     my $v8ClassName = GetV8ClassName($interface); | 625     my $v8ClassName = GetV8ClassName($interface); | 
| 595 | 626 | 
| 596     LinkOverloadedFunctions($interface); | 627     LinkOverloadedFunctions($interface); | 
| 597 | 628 | 
| 598     # Ensure the IsDOMNodeType function is in sync. | 629     # Ensure the IsDOMNodeType function is in sync. | 
| 599     die("IsDOMNodeType is out of date with respect to $interfaceName") if IsDOMN
      odeType($interfaceName) != InheritsInterface($interface, "Node"); | 630 #    my $_dom = IsDOMNodeType($interfaceName) ? "DOM" : ""; | 
|  | 631 #    my $_inh = InheritsInterface($interface, "Node") ? "INH" : ""; | 
|  | 632 #    print "[DOMDOM] $_dom $_inh  ", $interface->name, "\n"; | 
|  | 633     if(IsDOMNodeType($interfaceName) != InheritsInterface($interface, "Node")) { | 
|  | 634         die("IsDOMNodeType is out of date with respect to $interfaceName") | 
|  | 635     } | 
| 600 | 636 | 
| 601     my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGProperty
      Types($interfaceName); | 637     my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGProperty
      Types($interfaceName); | 
| 602 | 638 | 
| 603     my $parentInterface = $interface->parent; | 639     my $parentInterface = $interface->parent; | 
| 604     AddToHeaderIncludes("V8${parentInterface}.h") if $parentInterface; | 640     AddToHeaderIncludes("V8${parentInterface}.h") if $parentInterface; | 
| 605     AddToHeaderIncludes("bindings/v8/WrapperTypeInfo.h"); | 641     AddToHeaderIncludes("bindings/v8/WrapperTypeInfo.h"); | 
| 606     AddToHeaderIncludes("bindings/v8/V8Binding.h"); | 642     AddToHeaderIncludes("bindings/v8/V8Binding.h"); | 
| 607     AddToHeaderIncludes("bindings/v8/V8DOMWrapper.h"); | 643     AddToHeaderIncludes("bindings/v8/V8DOMWrapper.h"); | 
| 608     AddToHeaderIncludes(HeaderFilesForInterface($interfaceName, $implClassName))
      ; | 644     AddToHeaderIncludes(HeaderFilesForInterface($interfaceName, $implClassName))
      ; | 
| 609     foreach my $headerInclude (sort keys(%headerIncludes)) { | 645     foreach my $headerInclude (sort keys(%headerIncludes)) { | 
| 610         $header{includes}->add("#include \"${headerInclude}\"\n"); | 646         $header{includes}->add("#include \"${headerInclude}\"\n"); | 
| 611     } | 647     } | 
| 612 | 648 | 
|  | 649     ### DONE | 
| 613     $header{nameSpaceWebCore}->addHeader("\ntemplate<typename PropertyType> clas
      s SVGPropertyTearOff;\n") if $svgPropertyType; | 650     $header{nameSpaceWebCore}->addHeader("\ntemplate<typename PropertyType> clas
      s SVGPropertyTearOff;\n") if $svgPropertyType; | 
| 614     if ($svgNativeType) { | 651     if ($svgNativeType) { | 
| 615         if ($svgNativeType =~ /SVGStaticListPropertyTearOff/) { | 652         if ($svgNativeType =~ /SVGStaticListPropertyTearOff/) { | 
| 616             $header{nameSpaceWebCore}->addHeader("\ntemplate<typename PropertyTy
      pe> class SVGStaticListPropertyTearOff;\n"); | 653             $header{nameSpaceWebCore}->addHeader("\ntemplate<typename PropertyTy
      pe> class SVGStaticListPropertyTearOff;\n"); | 
| 617         } else { | 654         } else { | 
| 618             $header{nameSpaceWebCore}->addHeader("\ntemplate<typename PropertyTy
      pe> class SVGListPropertyTearOff;\n"); | 655             $header{nameSpaceWebCore}->addHeader("\ntemplate<typename PropertyTy
      pe> class SVGListPropertyTearOff;\n"); | 
| 619         } | 656         } | 
| 620     } | 657     } | 
| 621 | 658 | 
|  | 659     ### DONE | 
| 622     $header{nameSpaceWebCore}->addHeader("\nclass Dictionary;") if IsConstructor
      Template($interface, "Event"); | 660     $header{nameSpaceWebCore}->addHeader("\nclass Dictionary;") if IsConstructor
      Template($interface, "Event"); | 
| 623 | 661 | 
|  | 662     ### impl_class_name and svg_type_needing_tear_off in python generator | 
| 624     my $nativeType = GetNativeTypeForConversions($interface); | 663     my $nativeType = GetNativeTypeForConversions($interface); | 
| 625     if ($interface->extendedAttributes->{"NamedConstructor"}) { | 664     if ($interface->extendedAttributes->{"NamedConstructor"}) { | 
| 626         $header{nameSpaceWebCore}->addHeader(<<END); | 665         $header{nameSpaceWebCore}->addHeader(<<END); | 
| 627 | 666 | 
| 628 class V8${nativeType}Constructor { | 667 class V8${nativeType}Constructor { | 
| 629 public: | 668 public: | 
| 630     static v8::Handle<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWor
      ldType); | 669     static v8::Handle<v8::FunctionTemplate> GetTemplate(v8::Isolate*, WrapperWor
      ldType); | 
| 631     static WrapperTypeInfo info; | 670     static WrapperTypeInfo info; | 
| 632 }; | 671 }; | 
| 633 END | 672 END | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 665     static v8::Handle<v8::ObjectTemplate> GetShadowObjectTemplate(v8::Isolate*, 
      WrapperWorldType); | 704     static v8::Handle<v8::ObjectTemplate> GetShadowObjectTemplate(v8::Isolate*, 
      WrapperWorldType); | 
| 666 END | 705 END | 
| 667     } | 706     } | 
| 668 | 707 | 
| 669     my @enabledPerContextFunctions; | 708     my @enabledPerContextFunctions; | 
| 670     foreach my $function (@{$interface->functions}) { | 709     foreach my $function (@{$interface->functions}) { | 
| 671         my $name = $function->name; | 710         my $name = $function->name; | 
| 672         next if $name eq ""; | 711         next if $name eq ""; | 
| 673         my $attrExt = $function->extendedAttributes; | 712         my $attrExt = $function->extendedAttributes; | 
| 674 | 713 | 
|  | 714 #        if (HasCustomMethod($attrExt) && !$attrExt->{"ImplementedBy"} && $funct
      ion->{overloadIndex} == 1) { | 
| 675         if (HasCustomMethod($attrExt) && $function->{overloadIndex} == 1) { | 715         if (HasCustomMethod($attrExt) && $function->{overloadIndex} == 1) { | 
| 676             my $conditionalString = GenerateConditionalString($function); | 716             my $conditionalString = GenerateConditionalString($function); | 
| 677             $header{classPublic}->add("#if ${conditionalString}\n") if $conditio
      nalString; | 717             $header{classPublic}->add("#if ${conditionalString}\n") if $conditio
      nalString; | 
| 678             $header{classPublic}->add(<<END); | 718             $header{classPublic}->add(<<END); | 
| 679     static void ${name}MethodCustom(const v8::FunctionCallbackInfo<v8::Value>&); | 719     static void ${name}MethodCustom(const v8::FunctionCallbackInfo<v8::Value>&); | 
| 680 END | 720 END | 
| 681             $header{classPublic}->add("#endif // ${conditionalString}\n") if $co
      nditionalString; | 721             $header{classPublic}->add("#endif // ${conditionalString}\n") if $co
      nditionalString; | 
| 682         } | 722         } | 
| 683         if ($attrExt->{"EnabledPerContext"}) { | 723         if ($attrExt->{"EnabledPerContext"}) { | 
| 684             push(@enabledPerContextFunctions, $function); | 724             push(@enabledPerContextFunctions, $function); | 
| 685         } | 725         } | 
| 686     } | 726     } | 
| 687 | 727 | 
| 688     if (IsConstructable($interface)) { | 728     if (IsConstructable($interface)) { | 
| 689         $header{classPublic}->add("    static void constructorCallback(const v8:
      :FunctionCallbackInfo<v8::Value>&);\n"); | 729         $header{classPublic}->add("    static void constructorCallback(const v8:
      :FunctionCallbackInfo<v8::Value>&);\n"); | 
| 690 END | 730 END | 
| 691     } | 731     } | 
| 692     if (HasCustomConstructor($interface)) { | 732     if (HasCustomConstructor($interface)) { | 
| 693         $header{classPublic}->add("    static void constructorCustom(const v8::F
      unctionCallbackInfo<v8::Value>&);\n"); | 733         $header{classPublic}->add("    static void constructorCustom(const v8::F
      unctionCallbackInfo<v8::Value>&);\n"); | 
| 694     } | 734     } | 
| 695 | 735 | 
| 696     my @enabledPerContextAttributes; | 736     my @enabledPerContextAttributes; | 
| 697     foreach my $attribute (@{$interface->attributes}) { | 737     foreach my $attribute (@{$interface->attributes}) { | 
| 698         my $name = $attribute->name; | 738         my $name = $attribute->name; | 
| 699         my $attrExt = $attribute->extendedAttributes; | 739         my $attrExt = $attribute->extendedAttributes; | 
| 700         my $conditionalString = GenerateConditionalString($attribute); | 740         my $conditionalString = GenerateConditionalString($attribute); | 
| 701         if (HasCustomGetter($attrExt) && !$attrExt->{"ImplementedBy"}) { | 741 #        if (HasCustomGetter($attrExt) && !$attrExt->{"ImplementedBy"}) { | 
|  | 742         if (HasCustomGetter($attrExt)) { | 
| 702             $header{classPublic}->add("#if ${conditionalString}\n") if $conditio
      nalString; | 743             $header{classPublic}->add("#if ${conditionalString}\n") if $conditio
      nalString; | 
| 703             $header{classPublic}->add(<<END); | 744             $header{classPublic}->add(<<END); | 
| 704     static void ${name}AttrGetterCustom(v8::Local<v8::String> name, const v8::Pr
      opertyCallbackInfo<v8::Value>&); | 745     static void ${name}AttrGetterCustom(v8::Local<v8::String> name, const v8::Pr
      opertyCallbackInfo<v8::Value>&); | 
| 705 END | 746 END | 
| 706             $header{classPublic}->add("#endif // ${conditionalString}\n") if $co
      nditionalString; | 747             $header{classPublic}->add("#endif // ${conditionalString}\n") if $co
      nditionalString; | 
| 707         } | 748         } | 
| 708         if (HasCustomSetter($attrExt) && !$attrExt->{"ImplementedBy"}) { | 749 #        if (HasCustomSetter($attrExt) && !$attrExt->{"ImplementedBy"}) { | 
|  | 750         if (HasCustomSetter($attrExt)) { | 
| 709             $header{classPublic}->add("#if ${conditionalString}\n") if $conditio
      nalString; | 751             $header{classPublic}->add("#if ${conditionalString}\n") if $conditio
      nalString; | 
| 710             $header{classPublic}->add(<<END); | 752             $header{classPublic}->add(<<END); | 
| 711     static void ${name}AttrSetterCustom(v8::Local<v8::String> name, v8::Local<v8
      ::Value>, const v8::PropertyCallbackInfo<void>&); | 753     static void ${name}AttrSetterCustom(v8::Local<v8::String> name, v8::Local<v8
      ::Value>, const v8::PropertyCallbackInfo<void>&); | 
| 712 END | 754 END | 
| 713             $header{classPublic}->add("#endif // ${conditionalString}\n") if $co
      nditionalString; | 755             $header{classPublic}->add("#endif // ${conditionalString}\n") if $co
      nditionalString; | 
| 714         } | 756         } | 
| 715         if ($attrExt->{"EnabledPerContext"}) { | 757         if ($attrExt->{"EnabledPerContext"}) { | 
| 716             push(@enabledPerContextAttributes, $attribute); | 758             push(@enabledPerContextAttributes, $attribute); | 
| 717         } | 759         } | 
| 718     } | 760     } | 
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1185     v8::Handle<v8::Value> data = info.Data(); | 1227     v8::Handle<v8::Value> data = info.Data(); | 
| 1186     ASSERT(data->IsExternal()); | 1228     ASSERT(data->IsExternal()); | 
| 1187     V8PerContextData* perContextData = V8PerContextData::from(info.Holder()->Cre
      ationContext()); | 1229     V8PerContextData* perContextData = V8PerContextData::from(info.Holder()->Cre
      ationContext()); | 
| 1188     if (!perContextData) | 1230     if (!perContextData) | 
| 1189         return; | 1231         return; | 
| 1190     v8SetReturnValue(info, perContextData->constructorForType(WrapperTypeInfo::u
      nwrap(data))); | 1232     v8SetReturnValue(info, perContextData->constructorForType(WrapperTypeInfo::u
      nwrap(data))); | 
| 1191 } | 1233 } | 
| 1192 END | 1234 END | 
| 1193 } | 1235 } | 
| 1194 | 1236 | 
|  | 1237 ### macro get_feature_observation_parameter in template | 
| 1195 sub GenerateFeatureObservation | 1238 sub GenerateFeatureObservation | 
| 1196 { | 1239 { | 
| 1197     my $measureAs = shift; | 1240     my $measureAs = shift; | 
| 1198 | 1241 | 
| 1199     if ($measureAs) { | 1242     if ($measureAs) { | 
| 1200         AddToImplIncludes("core/page/UseCounter.h"); | 1243         AddToImplIncludes("core/page/UseCounter.h"); | 
| 1201         return "    UseCounter::count(activeDOMWindow(), UseCounter::${measureAs
      });\n"; | 1244         return "    UseCounter::count(activeDOMWindow(), UseCounter::${measureAs
      });\n"; | 
| 1202     } | 1245     } | 
| 1203 | 1246 | 
| 1204     return ""; | 1247     return ""; | 
| 1205 } | 1248 } | 
| 1206 | 1249 | 
|  | 1250 ### macro deprecation_notification_parameter in template | 
| 1207 sub GenerateDeprecationNotification | 1251 sub GenerateDeprecationNotification | 
| 1208 { | 1252 { | 
| 1209     my $deprecateAs = shift; | 1253     my $deprecateAs = shift; | 
| 1210     if ($deprecateAs) { | 1254     if ($deprecateAs) { | 
| 1211         AddToImplIncludes("core/page/PageConsole.h"); | 1255         AddToImplIncludes("core/page/PageConsole.h"); | 
| 1212         AddToImplIncludes("core/page/UseCounter.h"); | 1256         AddToImplIncludes("core/page/UseCounter.h"); | 
| 1213         return "    UseCounter::countDeprecation(activeDOMWindow(), UseCounter::
      ${deprecateAs});\n"; | 1257         return "    UseCounter::countDeprecation(activeDOMWindow(), UseCounter::
      ${deprecateAs});\n"; | 
| 1214     } | 1258     } | 
| 1215     return ""; | 1259     return ""; | 
| 1216 } | 1260 } | 
| 1217 | 1261 | 
|  | 1262 ### DONE | 
| 1218 sub GenerateActivityLogging | 1263 sub GenerateActivityLogging | 
| 1219 { | 1264 { | 
| 1220     my $accessType = shift; | 1265     my $accessType = shift; | 
| 1221     my $interface = shift; | 1266     my $interface = shift; | 
| 1222     my $propertyName = shift; | 1267     my $propertyName = shift; | 
| 1223 | 1268 | 
| 1224     my $interfaceName = $interface->name; | 1269     my $interfaceName = $interface->name; | 
| 1225 | 1270 | 
| 1226     AddToImplIncludes("bindings/v8/V8Binding.h"); | 1271     AddToImplIncludes("bindings/v8/V8Binding.h"); | 
| 1227     AddToImplIncludes("bindings/v8/V8DOMActivityLogger.h"); | 1272     AddToImplIncludes("bindings/v8/V8DOMActivityLogger.h"); | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1261 { | 1306 { | 
| 1262     my $attribute = shift; | 1307     my $attribute = shift; | 
| 1263     my $interface = shift; | 1308     my $interface = shift; | 
| 1264     my $forMainWorldSuffix = shift; | 1309     my $forMainWorldSuffix = shift; | 
| 1265 | 1310 | 
| 1266     my $implClassName = GetImplName($interface); | 1311     my $implClassName = GetImplName($interface); | 
| 1267     my $v8ClassName = GetV8ClassName($interface); | 1312     my $v8ClassName = GetV8ClassName($interface); | 
| 1268     my $attrExt = $attribute->extendedAttributes; | 1313     my $attrExt = $attribute->extendedAttributes; | 
| 1269     my $attrName = $attribute->name; | 1314     my $attrName = $attribute->name; | 
| 1270 | 1315 | 
|  | 1316     ### DONE | 
| 1271     my $conditionalString = GenerateConditionalString($attribute); | 1317     my $conditionalString = GenerateConditionalString($attribute); | 
| 1272     my $code = ""; | 1318     my $code = ""; | 
| 1273     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 1319     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 
| 1274 | 1320 | 
| 1275     $code .= "static void ${attrName}AttrGetterCallback${forMainWorldSuffix}(v8:
      :Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)\n"; | 1321     $code .= "static void ${attrName}AttrGetterCallback${forMainWorldSuffix}(v8:
      :Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)\n"; | 
| 1276     $code .= "{\n"; | 1322     $code .= "{\n"; | 
|  | 1323     ### DONE | 
| 1277     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMGetter\");\n"; | 1324     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMGetter\");\n"; | 
| 1278     $code .= GenerateFeatureObservation($attrExt->{"MeasureAs"}); | 1325     $code .= GenerateFeatureObservation($attrExt->{"MeasureAs"}); | 
|  | 1326     ### DONE | 
| 1279     $code .= GenerateDeprecationNotification($attrExt->{"DeprecateAs"}); | 1327     $code .= GenerateDeprecationNotification($attrExt->{"DeprecateAs"}); | 
|  | 1328     ### DONE | 
| 1280     if (HasActivityLogging($forMainWorldSuffix, $attrExt, "Getter")) { | 1329     if (HasActivityLogging($forMainWorldSuffix, $attrExt, "Getter")) { | 
| 1281         $code .= GenerateActivityLogging("Getter", $interface, "${attrName}"); | 1330         $code .= GenerateActivityLogging("Getter", $interface, "${attrName}"); | 
| 1282     } | 1331     } | 
| 1283     if (HasCustomGetter($attrExt)) { | 1332     if (HasCustomGetter($attrExt)) { | 
|  | 1333         ### DONE | 
| 1284         $code .= "    ${v8ClassName}::${attrName}AttrGetterCustom(name, info);\n
      "; | 1334         $code .= "    ${v8ClassName}::${attrName}AttrGetterCustom(name, info);\n
      "; | 
| 1285     } else { | 1335     } else { | 
|  | 1336         ### TODO | 
| 1286         $code .= "    ${implClassName}V8Internal::${attrName}AttrGetter${forMain
      WorldSuffix}(name, info);\n"; | 1337         $code .= "    ${implClassName}V8Internal::${attrName}AttrGetter${forMain
      WorldSuffix}(name, info);\n"; | 
| 1287     } | 1338     } | 
| 1288     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"V8\", \"Execution\");\n"; | 1339     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"V8\", \"Execution\");\n"; | 
| 1289     $code .= "}\n\n"; | 1340     $code .= "}\n\n"; | 
|  | 1341     ### DONE | 
| 1290     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 1342     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 1291 | 1343 | 
| 1292     $implementation{nameSpaceInternal}->add($code); | 1344     $implementation{nameSpaceInternal}->add($code); | 
| 1293 } | 1345 } | 
| 1294 | 1346 | 
| 1295 sub GenerateNormalAttrGetter | 1347 sub GenerateNormalAttrGetter | 
| 1296 { | 1348 { | 
| 1297     my $attribute = shift; | 1349     my $attribute = shift; | 
| 1298     my $interface = shift; | 1350     my $interface = shift; | 
| 1299     my $forMainWorldSuffix = shift; | 1351     my $forMainWorldSuffix = shift; | 
| 1300 | 1352 | 
|  | 1353 print " [GenerateNormalAttrGetter]", $attribute->type, " ", $attribute->name, "\
      n"; | 
| 1301     my $interfaceName = $interface->name; | 1354     my $interfaceName = $interface->name; | 
| 1302     my $implClassName = GetImplName($interface); | 1355     my $implClassName = GetImplName($interface); | 
| 1303     my $v8ClassName = GetV8ClassName($interface); | 1356     my $v8ClassName = GetV8ClassName($interface); | 
| 1304     my $attrExt = $attribute->extendedAttributes; | 1357     my $attrExt = $attribute->extendedAttributes; | 
| 1305     my $attrName = $attribute->name; | 1358     my $attrName = $attribute->name; | 
| 1306     my $attrType = $attribute->type; | 1359     my $attrType = $attribute->type; | 
| 1307 | 1360 | 
| 1308     if (HasCustomGetter($attrExt)) { | 1361     if (HasCustomGetter($attrExt)) { | 
| 1309         return; | 1362         return; | 
| 1310     } | 1363     } | 
| 1311 | 1364 | 
| 1312     AssertNotSequenceType($attrType); | 1365     AssertNotSequenceType($attrType); | 
| 1313     my $nativeType = GetNativeType($attribute->type, $attribute->extendedAttribu
      tes, ""); | 1366     my $nativeType = GetNativeType($attribute->type, $attribute->extendedAttribu
      tes, ""); | 
| 1314     my $svgNativeType = GetSVGTypeNeedingTearOff($interfaceName); | 1367     my $svgNativeType = GetSVGTypeNeedingTearOff($interfaceName); | 
| 1315 | 1368 | 
| 1316     my $conditionalString = GenerateConditionalString($attribute); | 1369     my $conditionalString = GenerateConditionalString($attribute); | 
| 1317     my $code = ""; | 1370     my $code = ""; | 
| 1318     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 1371     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 
| 1319     $code .= <<END; | 1372     $code .= <<END; | 
| 1320 static void ${attrName}AttrGetter${forMainWorldSuffix}(v8::Local<v8::String> nam
      e, const v8::PropertyCallbackInfo<v8::Value>& info) | 1373 static void ${attrName}AttrGetter${forMainWorldSuffix}(v8::Local<v8::String> nam
      e, const v8::PropertyCallbackInfo<v8::Value>& info) | 
| 1321 { | 1374 { | 
| 1322 END | 1375 END | 
|  | 1376     ### First, get impl_class instance | 
| 1323     if ($svgNativeType) { | 1377     if ($svgNativeType) { | 
|  | 1378         ### TODO | 
| 1324         my $svgWrappedNativeType = GetSVGWrappedTypeNeedingTearOff($interfaceNam
      e); | 1379         my $svgWrappedNativeType = GetSVGWrappedTypeNeedingTearOff($interfaceNam
      e); | 
| 1325         if ($svgWrappedNativeType =~ /List/) { | 1380         if ($svgWrappedNativeType =~ /List/) { | 
| 1326             $code .= <<END; | 1381             $code .= <<END; | 
| 1327     $svgNativeType* imp = ${v8ClassName}::toNative(info.Holder()); | 1382     $svgNativeType* imp = ${v8ClassName}::toNative(info.Holder()); | 
| 1328 END | 1383 END | 
| 1329         } else { | 1384         } else { | 
| 1330             $code .= <<END; | 1385             $code .= <<END; | 
| 1331     $svgNativeType* wrapper = ${v8ClassName}::toNative(info.Holder()); | 1386     $svgNativeType* wrapper = ${v8ClassName}::toNative(info.Holder()); | 
| 1332     $svgWrappedNativeType& impInstance = wrapper->propertyReference(); | 1387     $svgWrappedNativeType& impInstance = wrapper->propertyReference(); | 
| 1333     $svgWrappedNativeType* imp = &impInstance; | 1388     $svgWrappedNativeType* imp = &impInstance; | 
| 1334 END | 1389 END | 
| 1335         } | 1390         } | 
| 1336     } elsif ($attrExt->{"OnProto"} || $attrExt->{"Unforgeable"}) { | 1391     } elsif ($attrExt->{"OnProto"} || $attrExt->{"Unforgeable"}) { | 
|  | 1392         ### TODO | 
| 1337         if ($interfaceName eq "Window") { | 1393         if ($interfaceName eq "Window") { | 
| 1338             $code .= <<END; | 1394             $code .= <<END; | 
| 1339     v8::Handle<v8::Object> holder = info.Holder(); | 1395     v8::Handle<v8::Object> holder = info.Holder(); | 
| 1340 END | 1396 END | 
| 1341         } else { | 1397         } else { | 
| 1342             # perform lookup first | 1398             # perform lookup first | 
| 1343             $code .= <<END; | 1399             $code .= <<END; | 
| 1344     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(${
      v8ClassName}::GetTemplate(info.GetIsolate(), worldType(info.GetIsolate()))); | 1400     v8::Handle<v8::Object> holder = info.This()->FindInstanceInPrototypeChain(${
      v8ClassName}::GetTemplate(info.GetIsolate(), worldType(info.GetIsolate()))); | 
| 1345     if (holder.IsEmpty()) | 1401     if (holder.IsEmpty()) | 
| 1346         return; | 1402         return; | 
| 1347 END | 1403 END | 
| 1348         } | 1404         } | 
| 1349         $code .= <<END; | 1405         $code .= <<END; | 
| 1350     ${implClassName}* imp = ${v8ClassName}::toNative(holder); | 1406     ${implClassName}* imp = ${v8ClassName}::toNative(holder); | 
| 1351 END | 1407 END | 
| 1352     } else { | 1408     } else { | 
|  | 1409         ### DONE | 
| 1353         my $reflect = $attribute->extendedAttributes->{"Reflect"}; | 1410         my $reflect = $attribute->extendedAttributes->{"Reflect"}; | 
| 1354         my $url = $attribute->extendedAttributes->{"URL"}; | 1411         my $url = $attribute->extendedAttributes->{"URL"}; | 
| 1355         if ($reflect && !$url && InheritsInterface($interface, "Node") && $attrT
      ype eq "DOMString") { | 1412         if ($reflect && !$url && InheritsInterface($interface, "Node") && $attrT
      ype eq "DOMString") { | 
| 1356             # Generate super-compact call for regular attribute getter: | 1413             # Generate super-compact call for regular attribute getter: | 
| 1357             my ($functionName, @arguments) = GetterExpression($interfaceName, $a
      ttribute); | 1414             my ($functionName, @arguments) = GetterExpression($interfaceName, $a
      ttribute); | 
| 1358             $code .= "    Element* imp = V8Element::toNative(info.Holder());\n"; | 1415             $code .= "    Element* imp = V8Element::toNative(info.Holder());\n"; | 
| 1359             $code .= "    v8SetReturnValueString(info, imp->${functionName}(" . 
      join(", ", @arguments) . "), info.GetIsolate());\n"; | 1416             $code .= "    v8SetReturnValueString(info, imp->${functionName}(" . 
      join(", ", @arguments) . "), info.GetIsolate());\n"; | 
| 1360             $code .= "    return;\n"; | 1417             $code .= "    return;\n"; | 
| 1361             $code .= "}\n\n"; | 1418             $code .= "}\n\n"; | 
| 1362             $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 1419             $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 1363             $implementation{nameSpaceInternal}->add($code); | 1420             $implementation{nameSpaceInternal}->add($code); | 
| 1364             return; | 1421             return; | 
| 1365             # Skip the rest of the function! | 1422             # Skip the rest of the function! | 
| 1366         } | 1423         } | 
| 1367         if ($attribute->type eq "SerializedScriptValue" && $attrExt->{"CachedAtt
      ribute"}) { | 1424         if ($attribute->type eq "SerializedScriptValue" && $attrExt->{"CachedAtt
      ribute"}) { | 
| 1368             $code .= <<END; | 1425             $code .= <<END; | 
| 1369     v8::Handle<v8::String> propertyName = v8::String::NewSymbol("${attrName}"); | 1426     v8::Handle<v8::String> propertyName = v8::String::NewSymbol("${attrName}"); | 
| 1370     v8::Handle<v8::Value> value = info.Holder()->GetHiddenValue(propertyName); | 1427     v8::Handle<v8::Value> value = info.Holder()->GetHiddenValue(propertyName); | 
| 1371     if (!value.IsEmpty()) { | 1428     if (!value.IsEmpty()) { | 
| 1372         v8SetReturnValue(info, value); | 1429         v8SetReturnValue(info, value); | 
| 1373         return; | 1430         return; | 
| 1374     } | 1431     } | 
| 1375 END | 1432 END | 
| 1376         } | 1433         } | 
| 1377         if (!$attribute->isStatic) { | 1434         if (!$attribute->isStatic) { | 
|  | 1435             ### generally this is taken. | 
| 1378             $code .= <<END; | 1436             $code .= <<END; | 
| 1379     ${implClassName}* imp = ${v8ClassName}::toNative(info.Holder()); | 1437     ${implClassName}* imp = ${v8ClassName}::toNative(info.Holder()); | 
| 1380 END | 1438 END | 
| 1381         } | 1439         } | 
| 1382     } | 1440     } | 
| 1383 | 1441 | 
|  | 1442     ### DONE | 
| 1384     # Generate security checks if necessary | 1443     # Generate security checks if necessary | 
| 1385     if ($attribute->extendedAttributes->{"CheckSecurityForNode"}) { | 1444     if ($attribute->extendedAttributes->{"CheckSecurityForNode"}) { | 
| 1386         AddToImplIncludes("bindings/v8/BindingSecurity.h"); | 1445         AddToImplIncludes("bindings/v8/BindingSecurity.h"); | 
| 1387         $code .= "    if (!BindingSecurity::shouldAllowAccessToNode(imp->" . Get
      ImplName($attribute) . "())) {\n"; | 1446         $code .= "    if (!BindingSecurity::shouldAllowAccessToNode(imp->" . Get
      ImplName($attribute) . "())) {\n"; | 
| 1388         $code .= "        v8SetReturnValueNull(info);\n"; | 1447         $code .= "        v8SetReturnValueNull(info);\n"; | 
| 1389         $code .= "        return;\n"; | 1448         $code .= "        return;\n"; | 
| 1390         $code .= "    }\n"; | 1449         $code .= "    }\n"; | 
| 1391     } | 1450     } | 
| 1392 | 1451 | 
| 1393     my $useExceptions = 1 if $attribute->extendedAttributes->{"GetterRaisesExcep
      tion"} ||  $attribute->extendedAttributes->{"RaisesException"}; | 1452     my $useExceptions = 1 if $attribute->extendedAttributes->{"GetterRaisesExcep
      tion"} ||  $attribute->extendedAttributes->{"RaisesException"}; | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 1422     $code .= $subCode; | 1481     $code .= $subCode; | 
| 1423     unshift(@arguments, @$arg); | 1482     unshift(@arguments, @$arg); | 
| 1424     $getterString = "${functionName}(" . join(", ", @arguments) . ")"; | 1483     $getterString = "${functionName}(" . join(", ", @arguments) . ")"; | 
| 1425 | 1484 | 
| 1426     my $expression; | 1485     my $expression; | 
| 1427     if ($attribute->type eq "EventHandler" && $interface->name eq "Window") { | 1486     if ($attribute->type eq "EventHandler" && $interface->name eq "Window") { | 
| 1428         $code .= "    if (!imp->document())\n"; | 1487         $code .= "    if (!imp->document())\n"; | 
| 1429         $code .= "        return;\n"; | 1488         $code .= "        return;\n"; | 
| 1430     } | 1489     } | 
| 1431 | 1490 | 
|  | 1491     ### TODO: always use intermediate variable v! | 
| 1432     if ($useExceptions || $isNullable) { | 1492     if ($useExceptions || $isNullable) { | 
| 1433         if ($nativeType =~ /^V8StringResource/) { | 1493         if ($nativeType =~ /^V8StringResource/) { | 
|  | 1494             ### is it necessary??? | 
| 1434             $code .= "    " . ConvertToV8StringResource($attribute, $nativeType,
       "v", $getterString) . ";\n"; | 1495             $code .= "    " . ConvertToV8StringResource($attribute, $nativeType,
       "v", $getterString) . ";\n"; | 
| 1435         } else { | 1496         } else { | 
|  | 1497             # Done | 
| 1436             $code .= "    $nativeType v = $getterString;\n"; | 1498             $code .= "    $nativeType v = $getterString;\n"; | 
| 1437         } | 1499         } | 
| 1438 | 1500 | 
|  | 1501         ### DONE | 
| 1439         if ($isNullable) { | 1502         if ($isNullable) { | 
| 1440             $code .= "    if (isNull) {\n"; | 1503             $code .= "    if (isNull) {\n"; | 
| 1441             $code .= "        v8SetReturnValueNull(info);\n"; | 1504             $code .= "        v8SetReturnValueNull(info);\n"; | 
| 1442             $code .= "        return;\n"; | 1505             $code .= "        return;\n"; | 
| 1443             $code .= "    }\n"; | 1506             $code .= "    }\n"; | 
| 1444         } | 1507         } | 
| 1445 | 1508 | 
| 1446         if ($useExceptions) { | 1509         if ($useExceptions) { | 
|  | 1510             ### DONE | 
| 1447             if ($useExceptions) { | 1511             if ($useExceptions) { | 
| 1448                 $code .= "    if (UNLIKELY(es.throwIfNeeded()))\n"; | 1512                 $code .= "    if (UNLIKELY(es.throwIfNeeded()))\n"; | 
| 1449                 $code .= "        return;\n"; | 1513                 $code .= "        return;\n"; | 
| 1450             } | 1514             } | 
| 1451 | 1515 | 
| 1452             if (ExtendedAttributeContains($attribute->extendedAttributes->{"Call
      With"}, "ScriptState")) { | 1516             if (ExtendedAttributeContains($attribute->extendedAttributes->{"Call
      With"}, "ScriptState")) { | 
|  | 1517                 ### TODO | 
| 1453                 $code .= "    if (state.hadException()) {\n"; | 1518                 $code .= "    if (state.hadException()) {\n"; | 
| 1454                 $code .= "        throwError(state.exception());\n"; | 1519                 $code .= "        throwError(state.exception());\n"; | 
| 1455                 $code .= "        return;\n"; | 1520                 $code .= "        return;\n"; | 
| 1456                 $code .= "    }\n"; | 1521                 $code .= "    }\n"; | 
| 1457             } | 1522             } | 
| 1458         } | 1523         } | 
| 1459 | 1524 | 
|  | 1525         ## getter_expression in python | 
| 1460         $expression = "v"; | 1526         $expression = "v"; | 
| 1461         $expression .= ".release()" if (IsRefPtrType($returnType)); | 1527         $expression .= ".release()" if (IsRefPtrType($returnType)); | 
| 1462     } else { | 1528     } else { | 
| 1463         # Can inline the function call into the return statement to avoid overhe
      ad of using a Ref<> temporary | 1529         # Can inline the function call into the return statement to avoid overhe
      ad of using a Ref<> temporary | 
| 1464         $expression = $getterString; | 1530         $expression = $getterString; | 
| 1465         # Fix amigious conversion problem, by casting to the base type first ($g
      etterString returns a type that inherits from SVGAnimatedEnumeration, not the ba
      se class directly). | 1531         # Fix amigious conversion problem, by casting to the base type first ($g
      etterString returns a type that inherits from SVGAnimatedEnumeration, not the ba
      se class directly). | 
| 1466         $expression = "static_pointer_cast<SVGAnimatedEnumeration>($expression)"
       if $returnType eq "SVGAnimatedEnumeration"; | 1532         $expression = "static_pointer_cast<SVGAnimatedEnumeration>($expression)"
       if $returnType eq "SVGAnimatedEnumeration"; | 
| 1467     } | 1533     } | 
| 1468 | 1534 | 
|  | 1535 #    print "[BAR] ", $expression, "\n" if $interface->name eq "WebKitSourceBuffe
      r"; | 
|  | 1536     ### FIXME: remove this special case! | 
| 1469     if (ShouldKeepAttributeAlive($interface, $attribute, $returnType)) { | 1537     if (ShouldKeepAttributeAlive($interface, $attribute, $returnType)) { | 
|  | 1538         ### DONE | 
| 1470         my $arrayType = GetArrayType($returnType); | 1539         my $arrayType = GetArrayType($returnType); | 
| 1471         if ($arrayType) { | 1540         if ($arrayType) { | 
| 1472             AddIncludeForType("V8$arrayType.h"); | 1541             AddIncludeForType("V8$arrayType.h"); | 
| 1473             $code .= "    v8SetReturnValue(info, v8Array(${getterString}, info.G
      etIsolate()));\n"; | 1542             $code .= "    v8SetReturnValue(info, v8Array(${getterString}, info.G
      etIsolate()));\n"; | 
| 1474             $code .= "    return;\n"; | 1543             $code .= "    return;\n"; | 
| 1475             $code .= "}\n\n"; | 1544             $code .= "}\n\n"; | 
| 1476             $implementation{nameSpaceInternal}->add($code); | 1545             $implementation{nameSpaceInternal}->add($code); | 
| 1477             return; | 1546             return; | 
| 1478         } | 1547         } | 
| 1479 | 1548 | 
| 1480         AddIncludesForType($returnType); | 1549         AddIncludesForType($returnType); | 
| 1481         AddToImplIncludes("bindings/v8/V8HiddenPropertyName.h"); | 1550         AddToImplIncludes("bindings/v8/V8HiddenPropertyName.h"); | 
| 1482         # Check for a wrapper in the wrapper cache. If there is one, we know tha
      t a hidden reference has already | 1551         # Check for a wrapper in the wrapper cache. If there is one, we know tha
      t a hidden reference has already | 
| 1483         # been created. If we don't find a wrapper, we create both a wrapper and
       a hidden reference. | 1552         # been created. If we don't find a wrapper, we create both a wrapper and
       a hidden reference. | 
| 1484         my $nativeReturnType = GetNativeType($returnType); | 1553         my $nativeReturnType = GetNativeType($returnType); | 
|  | 1554         # getterString is native_value_expression in python generator | 
| 1485         my $v8ReturnType = "V8" . $returnType; | 1555         my $v8ReturnType = "V8" . $returnType; | 
| 1486         $code .= "    $nativeReturnType result = ${getterString};\n"; | 1556         $code .= "    $nativeReturnType result = ${getterString};\n"; | 
| 1487         if ($forMainWorldSuffix) { | 1557         if ($forMainWorldSuffix) { | 
| 1488           $code .= "    v8::Handle<v8::Value> wrapper = result.get() ? v8::Handl
      e<v8::Value>(DOMDataStore::getWrapper${forMainWorldSuffix}<${v8ReturnType}>(resu
      lt.get())) : v8Undefined();\n"; | 1558           $code .= "    v8::Handle<v8::Value> wrapper = result.get() ? v8::Handl
      e<v8::Value>(DOMDataStore::getWrapper${forMainWorldSuffix}<${v8ReturnType}>(resu
      lt.get())) : v8Undefined();\n"; | 
| 1489         } else { | 1559         } else { | 
| 1490           $code .= "    v8::Handle<v8::Value> wrapper = result.get() ? v8::Handl
      e<v8::Value>(DOMDataStore::getWrapper<${v8ReturnType}>(result.get(), info.GetIso
      late())) : v8Undefined();\n"; | 1560           $code .= "    v8::Handle<v8::Value> wrapper = result.get() ? v8::Handl
      e<v8::Value>(DOMDataStore::getWrapper<${v8ReturnType}>(result.get(), info.GetIso
      late())) : v8Undefined();\n"; | 
| 1491         } | 1561         } | 
| 1492         $code .= "    if (wrapper.IsEmpty()) {\n"; | 1562         $code .= "    if (wrapper.IsEmpty()) {\n"; | 
| 1493         $code .= "        wrapper = toV8(result.get(), info.Holder(), info.GetIs
      olate());\n"; # FIXME: Could use wrap here since the wrapper is empty. | 1563         $code .= "        wrapper = toV8(result.get(), info.Holder(), info.GetIs
      olate());\n"; # FIXME: Could use wrap here since the wrapper is empty. | 
| 1494         $code .= "        if (!wrapper.IsEmpty())\n"; | 1564         $code .= "        if (!wrapper.IsEmpty())\n"; | 
| 1495         $code .= "            V8HiddenPropertyName::setNamedHiddenReference(info
      .Holder(), \"${attrName}\", wrapper);\n"; | 1565         $code .= "            V8HiddenPropertyName::setNamedHiddenReference(info
      .Holder(), \"${attrName}\", wrapper);\n"; | 
| 1496         $code .= "    }\n"; | 1566         $code .= "    }\n"; | 
| 1497         $code .= "    v8SetReturnValue(info, wrapper);\n"; | 1567         $code .= "    v8SetReturnValue(info, wrapper);\n"; | 
| 1498         $code .= "    return;\n"; | 1568         $code .= "    return;\n"; | 
| 1499         $code .= "}\n\n"; | 1569         $code .= "}\n\n"; | 
| 1500         $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 1570         $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 1501         $implementation{nameSpaceInternal}->add($code); | 1571         $implementation{nameSpaceInternal}->add($code); | 
| 1502         return; | 1572         return; | 
| 1503     } | 1573     } | 
| 1504 | 1574 | 
| 1505     if ((IsSVGAnimatedType($interfaceName) or $interfaceName eq "SVGViewSpec") a
      nd IsSVGTypeNeedingTearOff($attrType)) { | 1575     if ((IsSVGAnimatedType($interfaceName) or $interfaceName eq "SVGViewSpec") a
      nd IsSVGTypeNeedingTearOff($attrType)) { | 
|  | 1576         ### DONE | 
| 1506         AddToImplIncludes("V8$attrType.h"); | 1577         AddToImplIncludes("V8$attrType.h"); | 
| 1507         my $svgNativeType = GetSVGTypeNeedingTearOff($attrType); | 1578         my $svgNativeType = GetSVGTypeNeedingTearOff($attrType); | 
| 1508         # Convert from abstract SVGProperty to real type, so the right toJS() me
      thod can be invoked. | 1579         # Convert from abstract SVGProperty to real type, so the right toJS() me
      thod can be invoked. | 
| 1509         if ($forMainWorldSuffix eq "ForMainWorld") { | 1580         if ($forMainWorldSuffix eq "ForMainWorld") { | 
| 1510             $code .= "    v8SetReturnValue(info, toV8ForMainWorld(static_cast<$s
      vgNativeType*>($expression), info.Holder(), info.GetIsolate()));\n"; | 1581             $code .= "    v8SetReturnValue(info, toV8ForMainWorld(static_cast<$s
      vgNativeType*>($expression), info.Holder(), info.GetIsolate()));\n"; | 
| 1511         } else { | 1582         } else { | 
| 1512             $code .= "    v8SetReturnValue(info, toV8Fast(static_cast<$svgNative
      Type*>($expression), info, imp));\n"; | 1583             $code .= "    v8SetReturnValue(info, toV8Fast(static_cast<$svgNative
      Type*>($expression), info, imp));\n"; | 
| 1513         } | 1584         } | 
| 1514         $code .= "    return;\n"; | 1585         $code .= "    return;\n"; | 
| 1515     } elsif (IsSVGTypeNeedingTearOff($attrType) and not $interfaceName =~ /List$
      /) { | 1586     } elsif (IsSVGTypeNeedingTearOff($attrType) and not $interfaceName =~ /List$
      /) { | 
|  | 1587         ### DONE | 
| 1516         AddToImplIncludes("V8$attrType.h"); | 1588         AddToImplIncludes("V8$attrType.h"); | 
| 1517         AddToImplIncludes("core/svg/properties/SVGPropertyTearOff.h"); | 1589         AddToImplIncludes("core/svg/properties/SVGPropertyTearOff.h"); | 
| 1518         my $tearOffType = GetSVGTypeNeedingTearOff($attrType); | 1590         my $tearOffType = GetSVGTypeNeedingTearOff($attrType); | 
| 1519         my $wrappedValue; | 1591         my $wrappedValue; | 
| 1520         if (IsSVGTypeWithWritablePropertiesNeedingTearOff($attrType) and not def
      ined $attribute->extendedAttributes->{"Immutable"}) { | 1592         if (IsSVGTypeWithWritablePropertiesNeedingTearOff($attrType) and not def
      ined $attribute->extendedAttributes->{"Immutable"}) { | 
| 1521             my $getter = $expression; | 1593             my $getter = $expression; | 
| 1522             $getter =~ s/imp->//; | 1594             $getter =~ s/imp->//; | 
| 1523             $getter =~ s/\(\)//; | 1595             $getter =~ s/\(\)//; | 
| 1524 | 1596 | 
| 1525             my $updateMethod = "&${implClassName}::update" . FirstLetterToUpperC
      ase($getter); | 1597             my $updateMethod = "&${implClassName}::update" . FirstLetterToUpperC
      ase($getter); | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 1543         } else { | 1615         } else { | 
| 1544                 $wrappedValue = "WTF::getPtr(${tearOffType}::create($expression)
      )"; | 1616                 $wrappedValue = "WTF::getPtr(${tearOffType}::create($expression)
      )"; | 
| 1545         } | 1617         } | 
| 1546         if ($forMainWorldSuffix eq "ForMainWorld") { | 1618         if ($forMainWorldSuffix eq "ForMainWorld") { | 
| 1547             $code .= "    v8SetReturnValue(info, toV8ForMainWorld($wrappedValue,
       info.Holder(), info.GetIsolate()));\n"; | 1619             $code .= "    v8SetReturnValue(info, toV8ForMainWorld($wrappedValue,
       info.Holder(), info.GetIsolate()));\n"; | 
| 1548         } else { | 1620         } else { | 
| 1549             $code .= "    v8SetReturnValue(info, toV8Fast($wrappedValue, info, i
      mp));\n"; | 1621             $code .= "    v8SetReturnValue(info, toV8Fast($wrappedValue, info, i
      mp));\n"; | 
| 1550         } | 1622         } | 
| 1551         $code .= "    return;\n"; | 1623         $code .= "    return;\n"; | 
| 1552     } elsif ($attribute->type eq "SerializedScriptValue" && $attrExt->{"CachedAt
      tribute"}) { | 1624     } elsif ($attribute->type eq "SerializedScriptValue" && $attrExt->{"CachedAt
      tribute"}) { | 
|  | 1625         ### DONE | 
| 1553         my $getterFunc = ToMethodName($attribute->name); | 1626         my $getterFunc = ToMethodName($attribute->name); | 
| 1554         $code .= <<END; | 1627         $code .= <<END; | 
| 1555     RefPtr<SerializedScriptValue> serialized = imp->${getterFunc}(); | 1628     RefPtr<SerializedScriptValue> serialized = imp->${getterFunc}(); | 
| 1556     value = serialized ? serialized->deserialize() : v8::Handle<v8::Value>(v8::N
      ull(info.GetIsolate())); | 1629     value = serialized ? serialized->deserialize() : v8::Handle<v8::Value>(v8::N
      ull(info.GetIsolate())); | 
| 1557     info.Holder()->SetHiddenValue(propertyName, value); | 1630     info.Holder()->SetHiddenValue(propertyName, value); | 
| 1558     v8SetReturnValue(info, value); | 1631     v8SetReturnValue(info, value); | 
| 1559     return; | 1632     return; | 
| 1560 END | 1633 END | 
| 1561     } elsif ($attribute->type eq "EventHandler") { | 1634     } elsif ($attribute->type eq "EventHandler") { | 
|  | 1635         ### DONE | 
| 1562         AddToImplIncludes("bindings/v8/V8AbstractEventListener.h"); | 1636         AddToImplIncludes("bindings/v8/V8AbstractEventListener.h"); | 
| 1563         my $getterFunc = ToMethodName($attribute->name); | 1637         my $getterFunc = ToMethodName($attribute->name); | 
| 1564         # FIXME: Pass the main world ID for main-world-only getters. | 1638         # FIXME: Pass the main world ID for main-world-only getters. | 
| 1565         $code .= "    EventListener* listener = imp->${getterFunc}(isolatedWorld
      ForIsolate(info.GetIsolate()));\n"; | 1639         $code .= "    EventListener* listener = imp->${getterFunc}(isolatedWorld
      ForIsolate(info.GetIsolate()));\n"; | 
| 1566         $code .= "    v8SetReturnValue(info, listener ? v8::Handle<v8::Value>(V8
      AbstractEventListener::cast(listener)->getListenerObject(imp->scriptExecutionCon
      text())) : v8::Handle<v8::Value>(v8::Null(info.GetIsolate())));\n"; | 1640         $code .= "    v8SetReturnValue(info, listener ? v8::Handle<v8::Value>(V8
      AbstractEventListener::cast(listener)->getListenerObject(imp->scriptExecutionCon
      text())) : v8::Handle<v8::Value>(v8::Null(info.GetIsolate())));\n"; | 
| 1567         $code .= "    return;\n"; | 1641         $code .= "    return;\n"; | 
| 1568     } else { | 1642     } else { | 
|  | 1643         ### main | 
| 1569         my $nativeValue = NativeToJSValue($attribute->type, $attribute->extended
      Attributes, $expression, "    ", "", "info.Holder()", "info.GetIsolate()", "info
      ", "imp", $forMainWorldSuffix, "return"); | 1644         my $nativeValue = NativeToJSValue($attribute->type, $attribute->extended
      Attributes, $expression, "    ", "", "info.Holder()", "info.GetIsolate()", "info
      ", "imp", $forMainWorldSuffix, "return"); | 
| 1570         $code .= "${nativeValue}\n"; | 1645         $code .= "${nativeValue}\n"; | 
| 1571         $code .= "    return;\n"; | 1646         $code .= "    return;\n"; | 
| 1572     } | 1647     } | 
| 1573 | 1648 | 
| 1574     $code .= "}\n\n";  # end of getter | 1649     $code .= "}\n\n";  # end of getter | 
| 1575     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 1650     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 1576     $implementation{nameSpaceInternal}->add($code); | 1651     $implementation{nameSpaceInternal}->add($code); | 
| 1577 } | 1652 } | 
| 1578 | 1653 | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 1600     # depending on the attribute name. | 1675     # depending on the attribute name. | 
| 1601     return 0 if $attrName eq "self"; | 1676     return 0 if $attrName eq "self"; | 
| 1602 | 1677 | 
| 1603     # FIXME: Remove these hard-coded hacks. | 1678     # FIXME: Remove these hard-coded hacks. | 
| 1604     return 0 if $returnType eq "EventTarget"; | 1679     return 0 if $returnType eq "EventTarget"; | 
| 1605     return 0 if $returnType eq "SerializedScriptValue"; | 1680     return 0 if $returnType eq "SerializedScriptValue"; | 
| 1606     return 0 if $returnType eq "Window"; | 1681     return 0 if $returnType eq "Window"; | 
| 1607     return 0 if $returnType =~ /SVG/; | 1682     return 0 if $returnType =~ /SVG/; | 
| 1608     return 0 if $returnType =~ /HTML/; | 1683     return 0 if $returnType =~ /HTML/; | 
| 1609 | 1684 | 
|  | 1685 #    print "[FOO] ", $returnType, "\n"; | 
| 1610     return 1; | 1686     return 1; | 
| 1611 } | 1687 } | 
| 1612 | 1688 | 
|  | 1689 ### TODO | 
| 1613 sub GenerateReplaceableAttrSetterCallback | 1690 sub GenerateReplaceableAttrSetterCallback | 
| 1614 { | 1691 { | 
| 1615     my $interface = shift; | 1692     my $interface = shift; | 
| 1616     my $implClassName = GetImplName($interface); | 1693     my $implClassName = GetImplName($interface); | 
| 1617 | 1694 | 
| 1618     my $code = ""; | 1695     my $code = ""; | 
| 1619     $code .= "static void ${implClassName}ReplaceableAttrSetterCallback(v8::Loca
      l<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v
      oid>& info)\n"; | 1696     $code .= "static void ${implClassName}ReplaceableAttrSetterCallback(v8::Loca
      l<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v
      oid>& info)\n"; | 
| 1620     $code .= "{\n"; | 1697     $code .= "{\n"; | 
| 1621     $code .= GenerateFeatureObservation($interface->extendedAttributes->{"Measur
      eAs"}); | 1698     $code .= GenerateFeatureObservation($interface->extendedAttributes->{"Measur
      eAs"}); | 
| 1622     $code .= GenerateDeprecationNotification($interface->extendedAttributes->{"D
      eprecateAs"}); | 1699     $code .= GenerateDeprecationNotification($interface->extendedAttributes->{"D
      eprecateAs"}); | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 1652     } | 1729     } | 
| 1653 | 1730 | 
| 1654     $code .= <<END; | 1731     $code .= <<END; | 
| 1655     info.This()->ForceSet(name, value); | 1732     info.This()->ForceSet(name, value); | 
| 1656 } | 1733 } | 
| 1657 | 1734 | 
| 1658 END | 1735 END | 
| 1659     $implementation{nameSpaceInternal}->add($code); | 1736     $implementation{nameSpaceInternal}->add($code); | 
| 1660 } | 1737 } | 
| 1661 | 1738 | 
|  | 1739 ### DONE ... macro custom_element_invocation in python | 
| 1662 sub GenerateCustomElementInvocationScopeIfNeeded | 1740 sub GenerateCustomElementInvocationScopeIfNeeded | 
| 1663 { | 1741 { | 
| 1664     my $code = ""; | 1742     my $code = ""; | 
| 1665     my $ext = shift; | 1743     my $ext = shift; | 
| 1666     my $annotation = $ext->{"CustomElementCallbacks"} || ""; | 1744     my $annotation = $ext->{"CustomElementCallbacks"} || ""; | 
| 1667 | 1745 | 
| 1668     if ($annotation eq "None") { | 1746     if ($annotation eq "None") { | 
| 1669         # Explicit CustomElementCallbacks=None overrides any other | 1747         # Explicit CustomElementCallbacks=None overrides any other | 
| 1670         # heuristic. | 1748         # heuristic. | 
| 1671         return $code; | 1749         return $code; | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 1686     my $interface = shift; | 1764     my $interface = shift; | 
| 1687     my $forMainWorldSuffix = shift; | 1765     my $forMainWorldSuffix = shift; | 
| 1688 | 1766 | 
| 1689     my $implClassName = GetImplName($interface); | 1767     my $implClassName = GetImplName($interface); | 
| 1690     my $v8ClassName = GetV8ClassName($interface); | 1768     my $v8ClassName = GetV8ClassName($interface); | 
| 1691     my $attrExt = $attribute->extendedAttributes; | 1769     my $attrExt = $attribute->extendedAttributes; | 
| 1692     my $attrName = $attribute->name; | 1770     my $attrName = $attribute->name; | 
| 1693 | 1771 | 
| 1694     my $conditionalString = GenerateConditionalString($attribute); | 1772     my $conditionalString = GenerateConditionalString($attribute); | 
| 1695     my $code = ""; | 1773     my $code = ""; | 
|  | 1774     ### DONE | 
| 1696     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 1775     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 
| 1697 | 1776 | 
| 1698     $code .= "static void ${attrName}AttrSetterCallback${forMainWorldSuffix}(v8:
      :Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackI
      nfo<void>& info)\n"; | 1777     $code .= "static void ${attrName}AttrSetterCallback${forMainWorldSuffix}(v8:
      :Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackI
      nfo<void>& info)\n"; | 
| 1699     $code .= "{\n"; | 1778     $code .= "{\n"; | 
|  | 1779     ### DONE | 
| 1700     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMSetter\");\n"; | 1780     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMSetter\");\n"; | 
|  | 1781     ### DONE | 
| 1701     $code .= GenerateFeatureObservation($attrExt->{"MeasureAs"}); | 1782     $code .= GenerateFeatureObservation($attrExt->{"MeasureAs"}); | 
|  | 1783     ### DONE | 
| 1702     $code .= GenerateDeprecationNotification($attrExt->{"DeprecateAs"}); | 1784     $code .= GenerateDeprecationNotification($attrExt->{"DeprecateAs"}); | 
|  | 1785     ### DONE | 
| 1703     if (HasActivityLogging($forMainWorldSuffix, $attrExt, "Setter")) { | 1786     if (HasActivityLogging($forMainWorldSuffix, $attrExt, "Setter")) { | 
| 1704         $code .= GenerateActivityLogging("Setter", $interface, "${attrName}"); | 1787         $code .= GenerateActivityLogging("Setter", $interface, "${attrName}"); | 
| 1705     } | 1788     } | 
|  | 1789     ### DONE | 
| 1706     $code .= GenerateCustomElementInvocationScopeIfNeeded($attrExt); | 1790     $code .= GenerateCustomElementInvocationScopeIfNeeded($attrExt); | 
| 1707     if (HasCustomSetter($attrExt)) { | 1791     if (HasCustomSetter($attrExt)) { | 
|  | 1792         ### DONE | 
| 1708         $code .= "    ${v8ClassName}::${attrName}AttrSetterCustom(name, value, i
      nfo);\n"; | 1793         $code .= "    ${v8ClassName}::${attrName}AttrSetterCustom(name, value, i
      nfo);\n"; | 
| 1709     } else { | 1794     } else { | 
|  | 1795         ### DONE | 
| 1710         $code .= "    ${implClassName}V8Internal::${attrName}AttrSetter${forMain
      WorldSuffix}(name, value, info);\n"; | 1796         $code .= "    ${implClassName}V8Internal::${attrName}AttrSetter${forMain
      WorldSuffix}(name, value, info);\n"; | 
| 1711     } | 1797     } | 
|  | 1798     ### DONE | 
| 1712     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"V8\", \"Execution\");\n"; | 1799     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"V8\", \"Execution\");\n"; | 
| 1713     $code .= "}\n\n"; | 1800     $code .= "}\n\n"; | 
|  | 1801     ### DONE | 
| 1714     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 1802     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 1715     $implementation{nameSpaceInternal}->add($code); | 1803     $implementation{nameSpaceInternal}->add($code); | 
| 1716 } | 1804 } | 
| 1717 | 1805 | 
| 1718 sub GenerateNormalAttrSetter | 1806 sub GenerateNormalAttrSetter | 
| 1719 { | 1807 { | 
| 1720     my $attribute = shift; | 1808     my $attribute = shift; | 
| 1721     my $interface = shift; | 1809     my $interface = shift; | 
| 1722     my $forMainWorldSuffix = shift; | 1810     my $forMainWorldSuffix = shift; | 
| 1723 | 1811 | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 1736     my $code = ""; | 1824     my $code = ""; | 
| 1737     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 1825     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 
| 1738     $code .= "static void ${attrName}AttrSetter${forMainWorldSuffix}(v8::Local<v
      8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void
      >& info)\n"; | 1826     $code .= "static void ${attrName}AttrSetter${forMainWorldSuffix}(v8::Local<v
      8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void
      >& info)\n"; | 
| 1739     $code .= "{\n"; | 1827     $code .= "{\n"; | 
| 1740 | 1828 | 
| 1741     # If the "StrictTypeChecking" extended attribute is present, and the attribu
      te's type is an | 1829     # If the "StrictTypeChecking" extended attribute is present, and the attribu
      te's type is an | 
| 1742     # interface type, then if the incoming value does not implement that interfa
      ce, a TypeError is | 1830     # interface type, then if the incoming value does not implement that interfa
      ce, a TypeError is | 
| 1743     # thrown rather than silently passing NULL to the C++ code. | 1831     # thrown rather than silently passing NULL to the C++ code. | 
| 1744     # Per the Web IDL and ECMAScript specifications, incoming values can always 
      be converted to both | 1832     # Per the Web IDL and ECMAScript specifications, incoming values can always 
      be converted to both | 
| 1745     # strings and numbers, so do not throw TypeError if the attribute is of thes
      e types. | 1833     # strings and numbers, so do not throw TypeError if the attribute is of thes
      e types. | 
|  | 1834     ### TODO | 
| 1746     if ($attribute->extendedAttributes->{"StrictTypeChecking"}) { | 1835     if ($attribute->extendedAttributes->{"StrictTypeChecking"}) { | 
| 1747         my $argType = $attribute->type; | 1836         my $argType = $attribute->type; | 
| 1748         if (IsWrapperType($argType)) { | 1837         if (IsWrapperType($argType)) { | 
| 1749             $code .= "    if (!isUndefinedOrNull(value) && !V8${argType}::HasIns
      tance(value, info.GetIsolate(), worldType(info.GetIsolate()))) {\n"; | 1838             $code .= "    if (!isUndefinedOrNull(value) && !V8${argType}::HasIns
      tance(value, info.GetIsolate(), worldType(info.GetIsolate()))) {\n"; | 
| 1750             $code .= "        throwTypeError(info.GetIsolate());\n"; | 1839             $code .= "        throwTypeError(info.GetIsolate());\n"; | 
| 1751             $code .= "        return;\n"; | 1840             $code .= "        return;\n"; | 
| 1752             $code .= "    }\n"; | 1841             $code .= "    }\n"; | 
| 1753         } | 1842         } | 
| 1754     } | 1843     } | 
| 1755 | 1844 | 
| 1756     my $svgNativeType = GetSVGTypeNeedingTearOff($interfaceName); | 1845     my $svgNativeType = GetSVGTypeNeedingTearOff($interfaceName); | 
| 1757     if ($svgNativeType) { | 1846     if ($svgNativeType) { | 
|  | 1847         ### TODO | 
| 1758         my $svgWrappedNativeType = GetSVGWrappedTypeNeedingTearOff($interfaceNam
      e); | 1848         my $svgWrappedNativeType = GetSVGWrappedTypeNeedingTearOff($interfaceNam
      e); | 
| 1759         if ($svgWrappedNativeType =~ /List$/) { | 1849         if ($svgWrappedNativeType =~ /List$/) { | 
| 1760             $code .= <<END; | 1850             $code .= <<END; | 
| 1761     $svgNativeType* imp = ${v8ClassName}::toNative(info.Holder()); | 1851     $svgNativeType* imp = ${v8ClassName}::toNative(info.Holder()); | 
| 1762 END | 1852 END | 
| 1763         } else { | 1853         } else { | 
| 1764             AddToImplIncludes("bindings/v8/ExceptionState.h"); | 1854             AddToImplIncludes("bindings/v8/ExceptionState.h"); | 
| 1765             $code .= "    $svgNativeType* wrapper = ${v8ClassName}::toNative(inf
      o.Holder());\n"; | 1855             $code .= "    $svgNativeType* wrapper = ${v8ClassName}::toNative(inf
      o.Holder());\n"; | 
| 1766             $code .= "    if (wrapper->isReadOnly()) {\n"; | 1856             $code .= "    if (wrapper->isReadOnly()) {\n"; | 
| 1767             $code .= "        setDOMException(NoModificationAllowedError, info.G
      etIsolate());\n"; | 1857             $code .= "        setDOMException(NoModificationAllowedError, info.G
      etIsolate());\n"; | 
| 1768             $code .= "        return;\n"; | 1858             $code .= "        return;\n"; | 
| 1769             $code .= "    }\n"; | 1859             $code .= "    }\n"; | 
| 1770             $code .= "    $svgWrappedNativeType& impInstance = wrapper->property
      Reference();\n"; | 1860             $code .= "    $svgWrappedNativeType& impInstance = wrapper->property
      Reference();\n"; | 
| 1771             $code .= "    $svgWrappedNativeType* imp = &impInstance;\n"; | 1861             $code .= "    $svgWrappedNativeType* imp = &impInstance;\n"; | 
| 1772         } | 1862         } | 
| 1773     } elsif ($attrExt->{"OnProto"}) { | 1863     } elsif ($attrExt->{"OnProto"}) { | 
|  | 1864         ### TODO | 
| 1774         $code .= <<END; | 1865         $code .= <<END; | 
| 1775     ${implClassName}* imp = ${v8ClassName}::toNative(info.Holder()); | 1866     ${implClassName}* imp = ${v8ClassName}::toNative(info.Holder()); | 
| 1776 END | 1867 END | 
| 1777     } else { | 1868     } else { | 
|  | 1869         ### main path | 
| 1778         my $reflect = $attribute->extendedAttributes->{"Reflect"}; | 1870         my $reflect = $attribute->extendedAttributes->{"Reflect"}; | 
| 1779         if ($reflect && InheritsInterface($interface, "Node") && $attrType eq "D
      OMString") { | 1871         if ($reflect && InheritsInterface($interface, "Node") && $attrType eq "D
      OMString") { | 
| 1780             # Generate super-compact call for regular attribute setter: | 1872             # Generate super-compact call for regular attribute setter: | 
| 1781             my $contentAttributeName = $reflect eq "VALUE_IS_MISSING" ? lc $attr
      Name : $reflect; | 1873             my $contentAttributeName = $reflect eq "VALUE_IS_MISSING" ? lc $attr
      Name : $reflect; | 
| 1782             my $namespace = NamespaceForAttributeName($interfaceName, $contentAt
      tributeName); | 1874             my $namespace = NamespaceForAttributeName($interfaceName, $contentAt
      tributeName); | 
| 1783             AddToImplIncludes("${namespace}.h"); | 1875             AddToImplIncludes("${namespace}.h"); | 
| 1784             $code .= "    Element* imp = V8Element::toNative(info.Holder());\n"; | 1876             $code .= "    Element* imp = V8Element::toNative(info.Holder());\n"; | 
| 1785             $code .= "    V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<
      WithNullCheck>, stringResource, value);\n"; | 1877             $code .= "    V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<
      WithNullCheck>, stringResource, value);\n"; | 
| 1786             $code .= "    imp->setAttribute(${namespace}::${contentAttributeName
      }Attr, stringResource);\n"; | 1878             $code .= "    imp->setAttribute(${namespace}::${contentAttributeName
      }Attr, stringResource);\n"; | 
| 1787             $code .= "}\n\n"; | 1879             $code .= "}\n\n"; | 
| 1788             $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 1880             $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 1789             $implementation{nameSpaceInternal}->add($code); | 1881             $implementation{nameSpaceInternal}->add($code); | 
| 1790             return; | 1882             return; | 
| 1791             # Skip the rest of the function! | 1883             # Skip the rest of the function! | 
| 1792         } | 1884         } | 
| 1793 | 1885 | 
| 1794         if (!$attribute->isStatic) { | 1886         if (!$attribute->isStatic) { | 
| 1795             $code .= <<END; | 1887             $code .= <<END; | 
| 1796     ${implClassName}* imp = ${v8ClassName}::toNative(info.Holder()); | 1888     ${implClassName}* imp = ${v8ClassName}::toNative(info.Holder()); | 
| 1797 END | 1889 END | 
| 1798         } | 1890         } | 
| 1799     } | 1891     } | 
| 1800 | 1892 | 
| 1801     my $nativeType = GetNativeType($attribute->type, $attribute->extendedAttribu
      tes, "parameter"); | 1893     my $nativeType = GetNativeType($attribute->type, $attribute->extendedAttribu
      tes, "parameter"); | 
| 1802     if ($attribute->type eq "EventHandler") { | 1894     if ($attribute->type eq "EventHandler") { | 
|  | 1895         ### DONE | 
| 1803         if ($interface->name eq "Window") { | 1896         if ($interface->name eq "Window") { | 
| 1804             $code .= "    if (!imp->document())\n"; | 1897             $code .= "    if (!imp->document())\n"; | 
| 1805             $code .= "        return;\n"; | 1898             $code .= "        return;\n"; | 
| 1806         } | 1899         } | 
| 1807     } else { | 1900     } else { | 
|  | 1901         ### DONE | 
| 1808         $code .= JSValueToNativeStatement($attribute->type, $attribute->extended
      Attributes, "value", "v", "    ", "info.GetIsolate()"); | 1902         $code .= JSValueToNativeStatement($attribute->type, $attribute->extended
      Attributes, "value", "v", "    ", "info.GetIsolate()"); | 
| 1809     } | 1903     } | 
| 1810 | 1904 | 
|  | 1905     ### TODO | 
| 1811     if (IsEnumType($attrType)) { | 1906     if (IsEnumType($attrType)) { | 
| 1812         # setter ignores invalid enumeration values | 1907         # setter ignores invalid enumeration values | 
| 1813         my @enumValues = ValidEnumValues($attrType); | 1908         my @enumValues = ValidEnumValues($attrType); | 
| 1814         my @validEqualities = (); | 1909         my @validEqualities = (); | 
| 1815         foreach my $enumValue (@enumValues) { | 1910         foreach my $enumValue (@enumValues) { | 
| 1816             push(@validEqualities, "string == \"$enumValue\""); | 1911             push(@validEqualities, "string == \"$enumValue\""); | 
| 1817         } | 1912         } | 
| 1818         my $enumValidationExpression = join(" || ", @validEqualities); | 1913         my $enumValidationExpression = join(" || ", @validEqualities); | 
| 1819         $code .= <<END; | 1914         $code .= <<END; | 
| 1820     String string = v; | 1915     String string = v; | 
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1947 | 2042 | 
| 1948         $parameterIndex++; | 2043         $parameterIndex++; | 
| 1949     } | 2044     } | 
| 1950     my $res = join(" && ", @andExpression); | 2045     my $res = join(" && ", @andExpression); | 
| 1951     $res = "($res)" if @andExpression > 1; | 2046     $res = "($res)" if @andExpression > 1; | 
| 1952     return $res; | 2047     return $res; | 
| 1953 } | 2048 } | 
| 1954 | 2049 | 
| 1955 # As per Web IDL specification, the length of a function Object is | 2050 # As per Web IDL specification, the length of a function Object is | 
| 1956 # its number of mandatory parameters. | 2051 # its number of mandatory parameters. | 
|  | 2052 ### get_function_mandatory_parameters in python generator | 
| 1957 sub GetFunctionLength | 2053 sub GetFunctionLength | 
| 1958 { | 2054 { | 
| 1959     my $function = shift; | 2055     my $function = shift; | 
| 1960 | 2056 | 
| 1961     my $numMandatoryParams = 0; | 2057     my $numMandatoryParams = 0; | 
| 1962     foreach my $parameter (@{$function->parameters}) { | 2058     foreach my $parameter (@{$function->parameters}) { | 
| 1963         # Abort as soon as we find the first optional parameter as no mandatory | 2059         # Abort as soon as we find the first optional parameter as no mandatory | 
| 1964         # parameter can follow an optional one. | 2060         # parameter can follow an optional one. | 
| 1965         last if $parameter->isOptional; | 2061         last if $parameter->isOptional; | 
| 1966         $numMandatoryParams++; | 2062         $numMandatoryParams++; | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 1986             last; | 2082             last; | 
| 1987         } | 2083         } | 
| 1988         $numParameters++; | 2084         $numParameters++; | 
| 1989     } | 2085     } | 
| 1990     if (!$hasVariadic) { | 2086     if (!$hasVariadic) { | 
| 1991         push(@orExpression, GenerateParametersCheckExpression($numParameters, $f
      unction)); | 2087         push(@orExpression, GenerateParametersCheckExpression($numParameters, $f
      unction)); | 
| 1992     } | 2088     } | 
| 1993     return ($numMandatoryParams, join(" || ", @orExpression)); | 2089     return ($numMandatoryParams, join(" || ", @orExpression)); | 
| 1994 } | 2090 } | 
| 1995 | 2091 | 
|  | 2092 ### TODO | 
| 1996 sub GenerateOverloadedFunction | 2093 sub GenerateOverloadedFunction | 
| 1997 { | 2094 { | 
| 1998     my $function = shift; | 2095     my $function = shift; | 
| 1999     my $interface = shift; | 2096     my $interface = shift; | 
| 2000     my $forMainWorldSuffix = shift; | 2097     my $forMainWorldSuffix = shift; | 
| 2001 | 2098 | 
| 2002     # Generate code for choosing the correct overload to call. Overloads are | 2099     # Generate code for choosing the correct overload to call. Overloads are | 
| 2003     # chosen based on the total number of arguments passed and the type of | 2100     # chosen based on the total number of arguments passed and the type of | 
| 2004     # values passed in non-primitive argument slots. When more than a single | 2101     # values passed in non-primitive argument slots. When more than a single | 
| 2005     # overload is applicable, precedence is given according to the order of | 2102     # overload is applicable, precedence is given according to the order of | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2056     } | 2153     } | 
| 2057 | 2154 | 
| 2058     my $conditionalString = GenerateConditionalString($function); | 2155     my $conditionalString = GenerateConditionalString($function); | 
| 2059     my $code = ""; | 2156     my $code = ""; | 
| 2060     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 2157     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 
| 2061     $code .= <<END; | 2158     $code .= <<END; | 
| 2062 static void ${name}MethodCallback${forMainWorldSuffix}(const v8::FunctionCallbac
      kInfo<v8::Value>& args) | 2159 static void ${name}MethodCallback${forMainWorldSuffix}(const v8::FunctionCallbac
      kInfo<v8::Value>& args) | 
| 2063 { | 2160 { | 
| 2064 END | 2161 END | 
| 2065     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMMethod\");\n"; | 2162     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"Blink\", \"DOMMethod\");\n"; | 
|  | 2163     ### DONE | 
| 2066     $code .= GenerateFeatureObservation($function->extendedAttributes->{"Measure
      As"}); | 2164     $code .= GenerateFeatureObservation($function->extendedAttributes->{"Measure
      As"}); | 
|  | 2165     ### DONE | 
| 2067     $code .= GenerateDeprecationNotification($function->extendedAttributes->{"De
      precateAs"}); | 2166     $code .= GenerateDeprecationNotification($function->extendedAttributes->{"De
      precateAs"}); | 
|  | 2167     ### DONE | 
| 2068     if (HasActivityLogging($forMainWorldSuffix, $function->extendedAttributes, "
      Access")) { | 2168     if (HasActivityLogging($forMainWorldSuffix, $function->extendedAttributes, "
      Access")) { | 
| 2069         $code .= GenerateActivityLogging("Method", $interface, "${name}"); | 2169         $code .= GenerateActivityLogging("Method", $interface, "${name}"); | 
| 2070     } | 2170     } | 
| 2071     if (HasCustomMethod($function->extendedAttributes)) { | 2171     if (HasCustomMethod($function->extendedAttributes)) { | 
| 2072         $code .= "    ${v8ClassName}::${name}MethodCustom(args);\n"; | 2172         $code .= "    ${v8ClassName}::${name}MethodCustom(args);\n"; | 
| 2073     } else { | 2173     } else { | 
| 2074         $code .= "    ${implClassName}V8Internal::${name}Method${forMainWorldSuf
      fix}(args);\n"; | 2174         $code .= "    ${implClassName}V8Internal::${name}Method${forMainWorldSuf
      fix}(args);\n"; | 
| 2075     } | 2175     } | 
| 2076     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"V8\", \"Execution\");\n"; | 2176     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"V8\", \"Execution\");\n"; | 
| 2077     $code .= "}\n\n"; | 2177     $code .= "}\n\n"; | 
| 2078     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 2178     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 2079     $implementation{nameSpaceInternal}->add($code); | 2179     $implementation{nameSpaceInternal}->add($code); | 
| 2080 } | 2180 } | 
| 2081 | 2181 | 
|  | 2182 ### __FUNC__ | 
| 2082 sub GenerateFunction | 2183 sub GenerateFunction | 
| 2083 { | 2184 { | 
|  | 2185     print " [GenerateFunction]\n"; | 
| 2084     my $function = shift; | 2186     my $function = shift; | 
| 2085     my $interface = shift; | 2187     my $interface = shift; | 
| 2086     my $forMainWorldSuffix = shift; | 2188     my $forMainWorldSuffix = shift; | 
| 2087 | 2189 | 
| 2088     my $interfaceName = $interface->name; | 2190     my $interfaceName = $interface->name; | 
| 2089     my $implClassName = GetImplName($interface); | 2191     my $implClassName = GetImplName($interface); | 
| 2090     my $v8ClassName = GetV8ClassName($interface); | 2192     my $v8ClassName = GetV8ClassName($interface); | 
| 2091     my $name = $function->name; | 2193     my $name = $function->name; | 
| 2092     my $implName = GetImplName($function); | 2194     my $implName = GetImplName($function); | 
| 2093     my $funcExt = $function->extendedAttributes; | 2195     my $funcExt = $function->extendedAttributes; | 
| 2094 | 2196 | 
| 2095     if (HasCustomMethod($funcExt) || $name eq "") { | 2197     if (HasCustomMethod($funcExt) || $name eq "") { | 
| 2096         return; | 2198         return; | 
| 2097     } | 2199     } | 
| 2098 | 2200 | 
| 2099     if (@{$function->{overloads}} > 1) { | 2201     if (@{$function->{overloads}} > 1) { | 
| 2100         # Append a number to an overloaded method's name to make it unique: | 2202         # Append a number to an overloaded method's name to make it unique: | 
| 2101         $name = $name . $function->{overloadIndex}; | 2203         $name = $name . $function->{overloadIndex}; | 
| 2102     } | 2204     } | 
| 2103 | 2205 | 
| 2104     my $conditionalString = GenerateConditionalString($function); | 2206     my $conditionalString = GenerateConditionalString($function); | 
| 2105     my $code = ""; | 2207     my $code = ""; | 
| 2106     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 2208     $code .= "#if ${conditionalString}\n\n" if $conditionalString; | 
| 2107     $code .= "static void ${name}Method${forMainWorldSuffix}(const v8::FunctionC
      allbackInfo<v8::Value>& args)\n"; | 2209     $code .= "static void ${name}Method${forMainWorldSuffix}(const v8::FunctionC
      allbackInfo<v8::Value>& args)\n"; | 
| 2108     $code .= "{\n"; | 2210     $code .= "{\n"; | 
| 2109 | 2211 | 
| 2110     if ($name eq "addEventListener" || $name eq "removeEventListener") { | 2212     if ($name eq "addEventListener" || $name eq "removeEventListener") { | 
|  | 2213         ### TODO | 
| 2111         my $lookupType = ($name eq "addEventListener") ? "OrCreate" : "Only"; | 2214         my $lookupType = ($name eq "addEventListener") ? "OrCreate" : "Only"; | 
| 2112         my $passRefPtrHandling = ($name eq "addEventListener") ? "" : ".get()"; | 2215         my $passRefPtrHandling = ($name eq "addEventListener") ? "" : ".get()"; | 
| 2113         my $hiddenDependencyAction = ($name eq "addEventListener") ? "create" : 
      "remove"; | 2216         my $hiddenDependencyAction = ($name eq "addEventListener") ? "create" : 
      "remove"; | 
| 2114 | 2217 | 
| 2115         AddToImplIncludes("bindings/v8/BindingSecurity.h"); | 2218         AddToImplIncludes("bindings/v8/BindingSecurity.h"); | 
| 2116         AddToImplIncludes("bindings/v8/V8EventListenerList.h"); | 2219         AddToImplIncludes("bindings/v8/V8EventListenerList.h"); | 
| 2117         AddToImplIncludes("core/page/DOMWindow.h"); | 2220         AddToImplIncludes("core/page/DOMWindow.h"); | 
| 2118         $code .= <<END; | 2221         $code .= <<END; | 
| 2119     EventTarget* impl = ${v8ClassName}::toNative(args.Holder()); | 2222     EventTarget* impl = ${v8ClassName}::toNative(args.Holder()); | 
| 2120     if (DOMWindow* window = impl->toDOMWindow()) { | 2223     if (DOMWindow* window = impl->toDOMWindow()) { | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 2133             ${hiddenDependencyAction}HiddenDependency(args.Holder(), args[1], ${
      v8ClassName}::eventListenerCacheIndex, args.GetIsolate()); | 2236             ${hiddenDependencyAction}HiddenDependency(args.Holder(), args[1], ${
      v8ClassName}::eventListenerCacheIndex, args.GetIsolate()); | 
| 2134     } | 2237     } | 
| 2135 } | 2238 } | 
| 2136 | 2239 | 
| 2137 END | 2240 END | 
| 2138         $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 2241         $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 2139         $implementation{nameSpaceInternal}->add($code); | 2242         $implementation{nameSpaceInternal}->add($code); | 
| 2140         return; | 2243         return; | 
| 2141     } | 2244     } | 
| 2142 | 2245 | 
|  | 2246     ### DONE | 
| 2143     $code .= GenerateArgumentsCountCheck($function, $interface); | 2247     $code .= GenerateArgumentsCountCheck($function, $interface); | 
| 2144 | 2248 | 
| 2145     if ($name eq "set" and IsConstructorTemplate($interface, "TypedArray")) { | 2249     if ($name eq "set" and IsConstructorTemplate($interface, "TypedArray")) { | 
|  | 2250         ### TODO | 
| 2146         AddToImplIncludes("bindings/v8/custom/V8ArrayBufferViewCustom.h"); | 2251         AddToImplIncludes("bindings/v8/custom/V8ArrayBufferViewCustom.h"); | 
| 2147         $code .= <<END; | 2252         $code .= <<END; | 
| 2148     setWebGLArrayHelper<$implClassName, ${v8ClassName}>(args); | 2253     setWebGLArrayHelper<$implClassName, ${v8ClassName}>(args); | 
| 2149 } | 2254 } | 
| 2150 | 2255 | 
| 2151 END | 2256 END | 
| 2152         $implementation{nameSpaceInternal}->add($code); | 2257         $implementation{nameSpaceInternal}->add($code); | 
| 2153         return; | 2258         return; | 
| 2154     } | 2259     } | 
| 2155 | 2260 | 
|  | 2261     ### TODO | 
| 2156     my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGProperty
      Types($interfaceName); | 2262     my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGProperty
      Types($interfaceName); | 
| 2157 | 2263 | 
|  | 2264     ### TODO | 
| 2158     if ($svgNativeType) { | 2265     if ($svgNativeType) { | 
| 2159         my $nativeClassName = GetNativeType($interfaceName); | 2266         my $nativeClassName = GetNativeType($interfaceName); | 
| 2160         if ($interfaceName =~ /List$/) { | 2267         if ($interfaceName =~ /List$/) { | 
| 2161             $code .= "    $nativeClassName imp = ${v8ClassName}::toNative(args.H
      older());\n"; | 2268             $code .= "    $nativeClassName imp = ${v8ClassName}::toNative(args.H
      older());\n"; | 
| 2162         } else { | 2269         } else { | 
| 2163             AddToImplIncludes("bindings/v8/ExceptionState.h"); | 2270             AddToImplIncludes("bindings/v8/ExceptionState.h"); | 
| 2164             AddToImplIncludes("core/dom/ExceptionCode.h"); | 2271             AddToImplIncludes("core/dom/ExceptionCode.h"); | 
| 2165             $code .= "    $nativeClassName wrapper = ${v8ClassName}::toNative(ar
      gs.Holder());\n"; | 2272             $code .= "    $nativeClassName wrapper = ${v8ClassName}::toNative(ar
      gs.Holder());\n"; | 
| 2166             $code .= "    if (wrapper->isReadOnly()) {\n"; | 2273             $code .= "    if (wrapper->isReadOnly()) {\n"; | 
| 2167             $code .= "        setDOMException(NoModificationAllowedError, args.G
      etIsolate());\n"; | 2274             $code .= "        setDOMException(NoModificationAllowedError, args.G
      etIsolate());\n"; | 
| 2168             $code .= "        return;\n"; | 2275             $code .= "        return;\n"; | 
| 2169             $code .= "    }\n"; | 2276             $code .= "    }\n"; | 
| 2170             my $svgWrappedNativeType = GetSVGWrappedTypeNeedingTearOff($interfac
      eName); | 2277             my $svgWrappedNativeType = GetSVGWrappedTypeNeedingTearOff($interfac
      eName); | 
| 2171             $code .= "    $svgWrappedNativeType& impInstance = wrapper->property
      Reference();\n"; | 2278             $code .= "    $svgWrappedNativeType& impInstance = wrapper->property
      Reference();\n"; | 
| 2172             $code .= "    $svgWrappedNativeType* imp = &impInstance;\n"; | 2279             $code .= "    $svgWrappedNativeType* imp = &impInstance;\n"; | 
| 2173         } | 2280         } | 
| 2174     } elsif (!$function->isStatic) { | 2281     } elsif (!$function->isStatic) { | 
|  | 2282         ### main | 
| 2175         $code .= <<END; | 2283         $code .= <<END; | 
| 2176     ${implClassName}* imp = ${v8ClassName}::toNative(args.Holder()); | 2284     ${implClassName}* imp = ${v8ClassName}::toNative(args.Holder()); | 
| 2177 END | 2285 END | 
| 2178     } | 2286     } | 
| 2179 | 2287 | 
|  | 2288     ### TODO | 
| 2180     $code .= GenerateCustomElementInvocationScopeIfNeeded($funcExt); | 2289     $code .= GenerateCustomElementInvocationScopeIfNeeded($funcExt); | 
| 2181 | 2290 | 
| 2182     # Check domain security if needed | 2291     # Check domain security if needed | 
|  | 2292     ### TODO | 
| 2183     if ($interface->extendedAttributes->{"CheckSecurity"} && !$function->extende
      dAttributes->{"DoNotCheckSecurity"}) { | 2293     if ($interface->extendedAttributes->{"CheckSecurity"} && !$function->extende
      dAttributes->{"DoNotCheckSecurity"}) { | 
| 2184         # We have not find real use cases yet. | 2294         # We have not find real use cases yet. | 
| 2185         AddToImplIncludes("core/page/Frame.h"); | 2295         AddToImplIncludes("core/page/Frame.h"); | 
| 2186         AddToImplIncludes("bindings/v8/BindingSecurity.h"); | 2296         AddToImplIncludes("bindings/v8/BindingSecurity.h"); | 
| 2187         $code .= <<END; | 2297         $code .= <<END; | 
| 2188     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame())) | 2298     if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame())) | 
| 2189         return; | 2299         return; | 
| 2190 END | 2300 END | 
| 2191     } | 2301     } | 
| 2192 | 2302 | 
|  | 2303     ### DONE | 
| 2193     my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; | 2304     my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; | 
| 2194     if (!$raisesExceptions) { | 2305     if (!$raisesExceptions) { | 
| 2195         foreach my $parameter (@{$function->parameters}) { | 2306         foreach my $parameter (@{$function->parameters}) { | 
| 2196             if ($parameter->extendedAttributes->{"IsIndex"}) { | 2307             if ($parameter->extendedAttributes->{"IsIndex"}) { | 
| 2197                 $raisesExceptions = 1; | 2308                 $raisesExceptions = 1; | 
| 2198             } | 2309             } | 
| 2199         } | 2310         } | 
| 2200     } | 2311     } | 
| 2201 | 2312 | 
|  | 2313     ### DONE | 
| 2202     if ($raisesExceptions) { | 2314     if ($raisesExceptions) { | 
| 2203         AddToImplIncludes("bindings/v8/ExceptionState.h"); | 2315         AddToImplIncludes("bindings/v8/ExceptionState.h"); | 
| 2204         $code .= "    ExceptionState es(args.GetIsolate());\n"; | 2316         $code .= "    ExceptionState es(args.GetIsolate());\n"; | 
| 2205     } | 2317     } | 
| 2206 | 2318 | 
|  | 2319     ### TODO | 
| 2207     if ($function->extendedAttributes->{"CheckSecurityForNode"}) { | 2320     if ($function->extendedAttributes->{"CheckSecurityForNode"}) { | 
| 2208         AddToImplIncludes("bindings/v8/BindingSecurity.h"); | 2321         AddToImplIncludes("bindings/v8/BindingSecurity.h"); | 
| 2209         $code .= "    if (!BindingSecurity::shouldAllowAccessToNode(imp->" . Get
      ImplName($function) . "(es))) {\n"; | 2322         $code .= "    if (!BindingSecurity::shouldAllowAccessToNode(imp->" . Get
      ImplName($function) . "(es))) {\n"; | 
| 2210         $code .= "        v8SetReturnValueNull(args);\n"; | 2323         $code .= "        v8SetReturnValueNull(args);\n"; | 
| 2211         $code .= "        return;\n"; | 2324         $code .= "        return;\n"; | 
| 2212         $code .= "    }\n"; | 2325         $code .= "    }\n"; | 
| 2213 END | 2326 END | 
| 2214     } | 2327     } | 
| 2215 | 2328 | 
|  | 2329     ### main DONE | 
|  | 2330     print " [GenerateParametersCheck]\n"; | 
| 2216     my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersC
      heck($function, $interface, $forMainWorldSuffix); | 2331     my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersC
      heck($function, $interface, $forMainWorldSuffix); | 
| 2217     $code .= $parameterCheckString; | 2332     $code .= $parameterCheckString; | 
| 2218 | 2333 | 
| 2219     # Build the function call string. | 2334     # Build the function call string. | 
|  | 2335     ### TODO | 
|  | 2336     ### main | 
|  | 2337     if($paramIndex != @{$function->parameters}) { | 
|  | 2338         ## Never | 
|  | 2339     } | 
| 2220     $code .= GenerateFunctionCallString($function, $paramIndex, "    ", $interfa
      ce, $forMainWorldSuffix, %replacements); | 2340     $code .= GenerateFunctionCallString($function, $paramIndex, "    ", $interfa
      ce, $forMainWorldSuffix, %replacements); | 
| 2221     $code .= "}\n\n"; | 2341     $code .= "}\n\n"; | 
| 2222     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 2342     $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 
| 2223     $implementation{nameSpaceInternal}->add($code); | 2343     $implementation{nameSpaceInternal}->add($code); | 
| 2224 } | 2344 } | 
| 2225 | 2345 | 
|  | 2346 ### get_call_with_parameter and call_with_statements macro in python | 
|  | 2347 ### DONE | 
| 2226 sub GenerateCallWith | 2348 sub GenerateCallWith | 
| 2227 { | 2349 { | 
| 2228     my $callWith = shift; | 2350     my $callWith = shift; | 
| 2229     return ([], "") unless $callWith; | 2351     return ([], "") unless $callWith; | 
| 2230     my $indent = shift; | 2352     my $indent = shift; | 
| 2231     my $returnVoid = shift; | 2353     my $returnVoid = shift; | 
| 2232     my $function = shift; | 2354     my $function = shift; | 
| 2233     my $code = ""; | 2355     my $code = ""; | 
| 2234 | 2356 | 
| 2235     my @callWithArgs; | 2357     my @callWithArgs; | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 2252     } | 2374     } | 
| 2253     if (ExtendedAttributeContains($callWith, "ActiveWindow")) { | 2375     if (ExtendedAttributeContains($callWith, "ActiveWindow")) { | 
| 2254         push(@callWithArgs, "activeDOMWindow()"); | 2376         push(@callWithArgs, "activeDOMWindow()"); | 
| 2255     } | 2377     } | 
| 2256     if (ExtendedAttributeContains($callWith, "FirstWindow")) { | 2378     if (ExtendedAttributeContains($callWith, "FirstWindow")) { | 
| 2257         push(@callWithArgs, "firstDOMWindow()"); | 2379         push(@callWithArgs, "firstDOMWindow()"); | 
| 2258     } | 2380     } | 
| 2259     return ([@callWithArgs], $code); | 2381     return ([@callWithArgs], $code); | 
| 2260 } | 2382 } | 
| 2261 | 2383 | 
|  | 2384 ### no corresponds function in python generator. write in template. | 
| 2262 sub GenerateArgumentsCountCheck | 2385 sub GenerateArgumentsCountCheck | 
| 2263 { | 2386 { | 
| 2264     my $function = shift; | 2387     my $function = shift; | 
| 2265     my $interface = shift; | 2388     my $interface = shift; | 
| 2266 | 2389 | 
| 2267     my $numMandatoryParams = 0; | 2390     my $numMandatoryParams = 0; | 
| 2268     my $allowNonOptional = 1; | 2391     my $allowNonOptional = 1; | 
| 2269     foreach my $param (@{$function->parameters}) { | 2392     foreach my $param (@{$function->parameters}) { | 
| 2270         if ($param->isOptional or $param->isVariadic) { | 2393         if ($param->isOptional or $param->isVariadic) { | 
| 2271             $allowNonOptional = 0; | 2394             $allowNonOptional = 0; | 
| 2272         } else { | 2395         } else { | 
| 2273             die "An argument must not be declared to be optional unless all subs
      equent arguments to the operation are also optional." if !$allowNonOptional; | 2396             die "An argument must not be declared to be optional unless all subs
      equent arguments to the operation are also optional." if !$allowNonOptional; | 
| 2274             $numMandatoryParams++; | 2397             $numMandatoryParams++; | 
| 2275         } | 2398         } | 
| 2276     } | 2399     } | 
| 2277 | 2400 | 
| 2278     my $argumentsCountCheckString = ""; | 2401     my $argumentsCountCheckString = ""; | 
| 2279     if ($numMandatoryParams >= 1) { | 2402     if ($numMandatoryParams >= 1) { | 
| 2280         $argumentsCountCheckString .= "    if (args.Length() < $numMandatoryPara
      ms) {\n"; | 2403         $argumentsCountCheckString .= "    if (args.Length() < $numMandatoryPara
      ms) {\n"; | 
| 2281         $argumentsCountCheckString .= "        throwNotEnoughArgumentsError(args
      .GetIsolate());\n"; | 2404         $argumentsCountCheckString .= "        throwNotEnoughArgumentsError(args
      .GetIsolate());\n"; | 
| 2282         $argumentsCountCheckString .= "        return;\n"; | 2405         $argumentsCountCheckString .= "        return;\n"; | 
| 2283         $argumentsCountCheckString .= "    }\n"; | 2406         $argumentsCountCheckString .= "    }\n"; | 
| 2284     } | 2407     } | 
| 2285     return $argumentsCountCheckString; | 2408     return $argumentsCountCheckString; | 
| 2286 } | 2409 } | 
| 2287 | 2410 | 
|  | 2411 ### see macro.template | 
| 2288 sub GenerateParametersCheck | 2412 sub GenerateParametersCheck | 
| 2289 { | 2413 { | 
| 2290     my $function = shift; | 2414     my $function = shift; | 
| 2291     my $interface = shift; | 2415     my $interface = shift; | 
| 2292     my $forMainWorldSuffix = shift; | 2416     my $forMainWorldSuffix = shift; | 
| 2293     my $style = shift || "new"; | 2417     my $style = shift || "new"; | 
| 2294 | 2418 | 
| 2295     my $parameterCheckString = ""; | 2419     my $parameterCheckString = ""; | 
| 2296     my $paramIndex = 0; | 2420     my $paramIndex = 0; | 
| 2297     my %replacements = (); | 2421     my %replacements = (); | 
| 2298 | 2422 | 
| 2299     foreach my $parameter (@{$function->parameters}) { | 2423     foreach my $parameter (@{$function->parameters}) { | 
| 2300         my $nativeType = GetNativeType($parameter->type, $parameter->extendedAtt
      ributes, "parameter"); | 2424         my $nativeType = GetNativeType($parameter->type, $parameter->extendedAtt
      ributes, "parameter"); | 
| 2301 | 2425 | 
| 2302         # Optional arguments without [Default=...] should generate an early call
       with fewer arguments. | 2426         # Optional arguments without [Default=...] should generate an early call
       with fewer arguments. | 
| 2303         # Optional arguments with [Optional=...] should not generate the early c
      all. | 2427         # Optional arguments with [Optional=...] should not generate the early c
      all. | 
| 2304         # Optional Dictionary arguments always considered to have default of emp
      ty dictionary. | 2428         # Optional Dictionary arguments always considered to have default of emp
      ty dictionary. | 
|  | 2429         ### DONE  early_call in python | 
| 2305         if ($parameter->isOptional && !$parameter->extendedAttributes->{"Default
      "} && $nativeType ne "Dictionary" && !IsCallbackInterface($parameter->type)) { | 2430         if ($parameter->isOptional && !$parameter->extendedAttributes->{"Default
      "} && $nativeType ne "Dictionary" && !IsCallbackInterface($parameter->type)) { | 
| 2306             $parameterCheckString .= "    if (args.Length() <= $paramIndex)"; | 2431             $parameterCheckString .= "    if (args.Length() <= $paramIndex)"; | 
| 2307             my $functionCall = GenerateFunctionCallString($function, $paramIndex
      , "    " x 2, $interface, $forMainWorldSuffix, %replacements); | 2432             my $functionCall = GenerateFunctionCallString($function, $paramIndex
      , "    " x 2, $interface, $forMainWorldSuffix, %replacements); | 
| 2308             my $multiLine = ($functionCall =~ tr/\n//) > 1; | 2433             my $multiLine = ($functionCall =~ tr/\n//) > 1; # always true | 
| 2309             $parameterCheckString .= $multiLine ? " {\n" : "\n"; | 2434             $parameterCheckString .= $multiLine ? " {\n" : "\n"; | 
| 2310             $parameterCheckString .= $functionCall; | 2435             $parameterCheckString .= $functionCall; | 
| 2311             $parameterCheckString .= $multiLine ? "    }\n" : "\n"; | 2436             $parameterCheckString .= $multiLine ? "    }\n" : "\n"; | 
| 2312         } | 2437         } | 
| 2313 | 2438 | 
| 2314         my $parameterName = $parameter->name; | 2439         my $parameterName = $parameter->name; | 
| 2315         AddToImplIncludes("bindings/v8/ExceptionState.h"); | 2440         AddToImplIncludes("bindings/v8/ExceptionState.h"); | 
| 2316         if (IsCallbackInterface($parameter->type)) { | 2441         if (IsCallbackInterface($parameter->type)) { | 
| 2317             my $v8ClassName = "V8" . $parameter->type; | 2442             my $v8ClassName = "V8" . $parameter->type; | 
| 2318             AddToImplIncludes("$v8ClassName.h"); | 2443             AddToImplIncludes("$v8ClassName.h"); | 
| 2319             if ($parameter->isOptional) { | 2444             if ($parameter->isOptional) { | 
|  | 2445                 ### DONE | 
| 2320                 $parameterCheckString .= "    RefPtr<" . $parameter->type . "> $
      parameterName;\n"; | 2446                 $parameterCheckString .= "    RefPtr<" . $parameter->type . "> $
      parameterName;\n"; | 
| 2321                 $parameterCheckString .= "    if (args.Length() > $paramIndex &&
       !args[$paramIndex]->IsNull() && !args[$paramIndex]->IsUndefined()) {\n"; | 2447                 $parameterCheckString .= "    if (args.Length() > $paramIndex &&
       !args[$paramIndex]->IsNull() && !args[$paramIndex]->IsUndefined()) {\n"; | 
| 2322                 $parameterCheckString .= "        if (!args[$paramIndex]->IsFunc
      tion()) {\n"; | 2448                 $parameterCheckString .= "        if (!args[$paramIndex]->IsFunc
      tion()) {\n"; | 
| 2323                 $parameterCheckString .= "            throwTypeError(args.GetIso
      late());\n"; | 2449                 $parameterCheckString .= "            throwTypeError(args.GetIso
      late());\n"; | 
| 2324                 $parameterCheckString .= "            return;\n"; | 2450                 $parameterCheckString .= "            return;\n"; | 
| 2325                 $parameterCheckString .= "        }\n"; | 2451                 $parameterCheckString .= "        }\n"; | 
| 2326                 $parameterCheckString .= "        $parameterName = ${v8ClassName
      }::create(args[$paramIndex], getScriptExecutionContext());\n"; | 2452                 $parameterCheckString .= "        $parameterName = ${v8ClassName
      }::create(args[$paramIndex], getScriptExecutionContext());\n"; | 
| 2327                 $parameterCheckString .= "    }\n"; | 2453                 $parameterCheckString .= "    }\n"; | 
| 2328             } else { | 2454             } else { | 
|  | 2455                 ### was DONE ? | 
| 2329                 $parameterCheckString .= "    if (args.Length() <= $paramIndex |
      | "; | 2456                 $parameterCheckString .= "    if (args.Length() <= $paramIndex |
      | "; | 
| 2330                 if ($parameter->isNullable) { | 2457                 if ($parameter->isNullable) { | 
| 2331                     $parameterCheckString .= "!(args[$paramIndex]->IsFunction() 
      || args[$paramIndex]->IsNull())"; | 2458                     $parameterCheckString .= "!(args[$paramIndex]->IsFunction() 
      || args[$paramIndex]->IsNull())"; | 
| 2332                 } else { | 2459                 } else { | 
| 2333                     $parameterCheckString .= "!args[$paramIndex]->IsFunction()"; | 2460                     $parameterCheckString .= "!args[$paramIndex]->IsFunction()"; | 
| 2334                 } | 2461                 } | 
| 2335                 $parameterCheckString .= ") {\n"; | 2462                 $parameterCheckString .= ") {\n"; | 
| 2336                 $parameterCheckString .= "        throwTypeError(args.GetIsolate
      ());\n"; | 2463                 $parameterCheckString .= "        throwTypeError(args.GetIsolate
      ());\n"; | 
| 2337                 $parameterCheckString .= "        return;\n"; | 2464                 $parameterCheckString .= "        return;\n"; | 
| 2338                 $parameterCheckString .= "    }\n"; | 2465                 $parameterCheckString .= "    }\n"; | 
| 2339                 $parameterCheckString .= "    RefPtr<" . $parameter->type . "> $
      parameterName = "; | 2466                 $parameterCheckString .= "    RefPtr<" . $parameter->type . "> $
      parameterName = "; | 
| 2340                 $parameterCheckString .= "args[$paramIndex]->IsNull() ? 0 : " if
       $parameter->isNullable; | 2467                 $parameterCheckString .= "args[$paramIndex]->IsNull() ? 0 : " if
       $parameter->isNullable; | 
| 2341                 $parameterCheckString .= "${v8ClassName}::create(args[$paramInde
      x], getScriptExecutionContext());\n"; | 2468                 $parameterCheckString .= "${v8ClassName}::create(args[$paramInde
      x], getScriptExecutionContext());\n"; | 
| 2342             } | 2469             } | 
| 2343         } elsif ($parameter->extendedAttributes->{"Clamp"}) { | 2470         } elsif ($parameter->extendedAttributes->{"Clamp"}) { | 
|  | 2471                 ### DONE | 
| 2344                 my $nativeValue = "${parameterName}NativeValue"; | 2472                 my $nativeValue = "${parameterName}NativeValue"; | 
| 2345                 my $paramType = $parameter->type; | 2473                 my $paramType = $parameter->type; | 
| 2346                 $parameterCheckString .= "    $paramType $parameterName = 0;\n"; | 2474                 $parameterCheckString .= "    $paramType $parameterName = 0;\n"; | 
| 2347                 $parameterCheckString .= "    V8TRYCATCH_VOID(double, $nativeVal
      ue, args[$paramIndex]->NumberValue());\n"; | 2475                 $parameterCheckString .= "    V8TRYCATCH_VOID(double, $nativeVal
      ue, args[$paramIndex]->NumberValue());\n"; | 
| 2348                 $parameterCheckString .= "    if (!std::isnan($nativeValue))\n"; | 2476                 $parameterCheckString .= "    if (!std::isnan($nativeValue))\n"; | 
| 2349                 $parameterCheckString .= "        $parameterName = clampTo<$para
      mType>($nativeValue);\n"; | 2477                 $parameterCheckString .= "        $parameterName = clampTo<$para
      mType>($nativeValue);\n"; | 
| 2350         } elsif ($parameter->type eq "SerializedScriptValue") { | 2478         } elsif ($parameter->type eq "SerializedScriptValue") { | 
|  | 2479             ### DONE | 
| 2351             AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); | 2480             AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); | 
| 2352             $parameterCheckString .= "    bool ${parameterName}DidThrow = false;
      \n"; | 2481             $parameterCheckString .= "    bool ${parameterName}DidThrow = false;
      \n"; | 
| 2353             $parameterCheckString .= "    $nativeType $parameterName = Serialize
      dScriptValue::create(args[$paramIndex], 0, 0, ${parameterName}DidThrow, args.Get
      Isolate());\n"; | 2482             $parameterCheckString .= "    $nativeType $parameterName = Serialize
      dScriptValue::create(args[$paramIndex], 0, 0, ${parameterName}DidThrow, args.Get
      Isolate());\n"; | 
| 2354             $parameterCheckString .= "    if (${parameterName}DidThrow)\n"; | 2483             $parameterCheckString .= "    if (${parameterName}DidThrow)\n"; | 
| 2355             $parameterCheckString .= "        return;\n"; | 2484             $parameterCheckString .= "        return;\n"; | 
| 2356         } elsif ($parameter->isVariadic) { | 2485         } elsif ($parameter->isVariadic) { | 
|  | 2486             ### DONE | 
| 2357             my $nativeElementType = GetNativeType($parameter->type); | 2487             my $nativeElementType = GetNativeType($parameter->type); | 
| 2358             if ($nativeElementType =~ />$/) { | 2488             if ($nativeElementType =~ />$/) { | 
| 2359                 $nativeElementType .= " "; | 2489                 $nativeElementType .= " "; # TODO | 
| 2360             } | 2490             } | 
| 2361 | 2491 | 
| 2362             my $argType = $parameter->type; | 2492             my $argType = $parameter->type; | 
| 2363             if (IsWrapperType($argType)) { | 2493             if (IsWrapperType($argType)) { | 
| 2364                 $parameterCheckString .= "    Vector<$nativeElementType> $parame
      terName;\n"; | 2494                 $parameterCheckString .= "    Vector<$nativeElementType> $parame
      terName;\n"; | 
| 2365                 $parameterCheckString .= "    for (int i = $paramIndex; i < args
      .Length(); ++i) {\n"; | 2495                 $parameterCheckString .= "    for (int i = $paramIndex; i < args
      .Length(); ++i) {\n"; | 
| 2366                 $parameterCheckString .= "        if (!V8${argType}::HasInstance
      (args[i], args.GetIsolate(), worldType(args.GetIsolate()))) {\n"; | 2496                 $parameterCheckString .= "        if (!V8${argType}::HasInstance
      (args[i], args.GetIsolate(), worldType(args.GetIsolate()))) {\n"; | 
| 2367                 $parameterCheckString .= "            throwTypeError(args.GetIso
      late());\n"; | 2497                 $parameterCheckString .= "            throwTypeError(args.GetIso
      late());\n"; | 
| 2368                 $parameterCheckString .= "            return;\n"; | 2498                 $parameterCheckString .= "            return;\n"; | 
| 2369                 $parameterCheckString .= "        }\n"; | 2499                 $parameterCheckString .= "        }\n"; | 
| 2370                 $parameterCheckString .= "        $parameterName.append(V8${argT
      ype}::toNative(v8::Handle<v8::Object>::Cast(args[i])));\n"; | 2500                 $parameterCheckString .= "        $parameterName.append(V8${argT
      ype}::toNative(v8::Handle<v8::Object>::Cast(args[i])));\n"; | 
| 2371                 $parameterCheckString .= "    }\n"; | 2501                 $parameterCheckString .= "    }\n"; | 
| 2372             } else { | 2502             } else { | 
| 2373                 $parameterCheckString .= "    V8TRYCATCH_VOID(Vector<$nativeElem
      entType>, $parameterName, toNativeArguments<$nativeElementType>(args, $paramInde
      x));\n"; | 2503                 $parameterCheckString .= "    V8TRYCATCH_VOID(Vector<$nativeElem
      entType>, $parameterName, toNativeArguments<$nativeElementType>(args, $paramInde
      x));\n"; | 
| 2374             } | 2504             } | 
| 2375         } elsif ($nativeType =~ /^V8StringResource/) { | 2505         } elsif ($nativeType =~ /^V8StringResource/) { | 
|  | 2506             ### DONE | 
| 2376             my $default = defined $parameter->extendedAttributes->{"Default"} ? 
      $parameter->extendedAttributes->{"Default"} : ""; | 2507             my $default = defined $parameter->extendedAttributes->{"Default"} ? 
      $parameter->extendedAttributes->{"Default"} : ""; | 
| 2377             my $jsValue = $parameter->isOptional && $default eq "NullString" ? "
      argumentOrNull(args, $paramIndex)" : "args[$paramIndex]"; | 2508             my $jsValue = $parameter->isOptional && $default eq "NullString" ? "
      argumentOrNull(args, $paramIndex)" : "args[$paramIndex]"; | 
| 2378             $parameterCheckString .= JSValueToNativeStatement($parameter->type, 
      $parameter->extendedAttributes, $jsValue, $parameterName, "    ", "args.GetIsola
      te()"); | 2509             $parameterCheckString .= JSValueToNativeStatement($parameter->type, 
      $parameter->extendedAttributes, $jsValue, $parameterName, "    ", "args.GetIsola
      te()"); | 
| 2379             if (IsEnumType($parameter->type)) { | 2510             if (IsEnumType($parameter->type)) { | 
| 2380                 my @enumValues = ValidEnumValues($parameter->type); | 2511                 my @enumValues = ValidEnumValues($parameter->type); | 
| 2381                 my @validEqualities = (); | 2512                 my @validEqualities = (); | 
| 2382                 foreach my $enumValue (@enumValues) { | 2513                 foreach my $enumValue (@enumValues) { | 
| 2383                     push(@validEqualities, "string == \"$enumValue\""); | 2514                     push(@validEqualities, "string == \"$enumValue\""); | 
| 2384                 } | 2515                 } | 
| 2385                 my $enumValidationExpression = join(" || ", @validEqualities); | 2516                 my $enumValidationExpression = join(" || ", @validEqualities); | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 2410             my $jsValue = $parameter->isOptional && $default eq "NullString" ? "
      argumentOrNull(args, $paramIndex)" : "args[$paramIndex]"; | 2541             my $jsValue = $parameter->isOptional && $default eq "NullString" ? "
      argumentOrNull(args, $paramIndex)" : "args[$paramIndex]"; | 
| 2411             $parameterCheckString .= JSValueToNativeStatement($parameter->type, 
      $parameter->extendedAttributes, $jsValue, $parameterName, "    ", "args.GetIsola
      te()"); | 2542             $parameterCheckString .= JSValueToNativeStatement($parameter->type, 
      $parameter->extendedAttributes, $jsValue, $parameterName, "    ", "args.GetIsola
      te()"); | 
| 2412             if ($nativeType eq 'Dictionary') { | 2543             if ($nativeType eq 'Dictionary') { | 
| 2413                 $parameterCheckString .= "    if (!$parameterName.isUndefinedOrN
      ull() && !$parameterName.isObject()) {\n"; | 2544                 $parameterCheckString .= "    if (!$parameterName.isUndefinedOrN
      ull() && !$parameterName.isObject()) {\n"; | 
| 2414                 $parameterCheckString .= "        throwTypeError(\"Not an object
      .\", args.GetIsolate());\n"; | 2545                 $parameterCheckString .= "        throwTypeError(\"Not an object
      .\", args.GetIsolate());\n"; | 
| 2415                 $parameterCheckString .= "        return;\n"; | 2546                 $parameterCheckString .= "        return;\n"; | 
| 2416                 $parameterCheckString .= "    }\n"; | 2547                 $parameterCheckString .= "    }\n"; | 
| 2417             } | 2548             } | 
| 2418         } | 2549         } | 
| 2419 | 2550 | 
|  | 2551         ### DONE | 
| 2420         if ($parameter->extendedAttributes->{"IsIndex"}) { | 2552         if ($parameter->extendedAttributes->{"IsIndex"}) { | 
| 2421             AddToImplIncludes("core/dom/ExceptionCode.h"); | 2553             AddToImplIncludes("core/dom/ExceptionCode.h"); | 
| 2422             $parameterCheckString .= "    if (UNLIKELY($parameterName < 0)) {\n"
      ; | 2554             $parameterCheckString .= "    if (UNLIKELY($parameterName < 0)) {\n"
      ; | 
| 2423             $parameterCheckString .= "        setDOMException(IndexSizeError, ar
      gs.GetIsolate());\n"; | 2555             $parameterCheckString .= "        setDOMException(IndexSizeError, ar
      gs.GetIsolate());\n"; | 
| 2424             $parameterCheckString .= "        return;\n"; | 2556             $parameterCheckString .= "        return;\n"; | 
| 2425             $parameterCheckString .= "    }\n"; | 2557             $parameterCheckString .= "    }\n"; | 
| 2426         } | 2558         } | 
| 2427 | 2559 | 
| 2428         $paramIndex++; | 2560         $paramIndex++; | 
| 2429     } | 2561     } | 
|  | 2562     print "PARAM STRING\n", $parameterCheckString, "\n" if $interface->name eq "
      CanvasGradient"; | 
|  | 2563     # $paramIndex == len(parameters) | 
| 2430     return ($parameterCheckString, $paramIndex, %replacements); | 2564     return ($parameterCheckString, $paramIndex, %replacements); | 
| 2431 } | 2565 } | 
| 2432 | 2566 | 
| 2433 sub GenerateOverloadedConstructorCallback | 2567 sub GenerateOverloadedConstructorCallback | 
| 2434 { | 2568 { | 
| 2435     my $interface = shift; | 2569     my $interface = shift; | 
| 2436     my $implClassName = GetImplName($interface); | 2570     my $implClassName = GetImplName($interface); | 
| 2437 | 2571 | 
| 2438     my $code = ""; | 2572     my $code = ""; | 
| 2439     $code .= <<END; | 2573     $code .= <<END; | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 2457         $code .= "    }\n"; | 2591         $code .= "    }\n"; | 
| 2458     } | 2592     } | 
| 2459     $code .= <<END; | 2593     $code .= <<END; | 
| 2460     throwTypeError(args.GetIsolate()); | 2594     throwTypeError(args.GetIsolate()); | 
| 2461     return; | 2595     return; | 
| 2462 END | 2596 END | 
| 2463     $code .= "}\n\n"; | 2597     $code .= "}\n\n"; | 
| 2464     $implementation{nameSpaceInternal}->add($code); | 2598     $implementation{nameSpaceInternal}->add($code); | 
| 2465 } | 2599 } | 
| 2466 | 2600 | 
|  | 2601 ### get_single_constructor_callback_parameter in python code generator | 
|  | 2602 ### DONE | 
| 2467 sub GenerateSingleConstructorCallback | 2603 sub GenerateSingleConstructorCallback | 
| 2468 { | 2604 { | 
| 2469     my $interface = shift; | 2605     my $interface = shift; | 
| 2470     my $function = shift; | 2606     my $function = shift; | 
| 2471 | 2607 | 
| 2472     my $implClassName = GetImplName($interface); | 2608     my $implClassName = GetImplName($interface); | 
| 2473     my $v8ClassName = GetV8ClassName($interface); | 2609     my $v8ClassName = GetV8ClassName($interface); | 
| 2474     my $overloadedIndexString = ""; | 2610     my $overloadedIndexString = ""; | 
| 2475     if ($function->overloadedIndex > 0) { | 2611     if ($function->overloadedIndex > 0) { | 
| 2476         $overloadedIndexString .= $function->overloadedIndex; | 2612         $overloadedIndexString .= $function->overloadedIndex; | 
| 2477     } | 2613     } | 
| 2478 | 2614 | 
| 2479     my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; | 2615     my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; #
      ## never be true! | 
| 2480     if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 2616     if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 
| 2481         $raisesExceptions = 1; | 2617         $raisesExceptions = 1; ### exist | 
| 2482     } | 2618     } | 
| 2483     if (!$raisesExceptions) { | 2619     if (!$raisesExceptions) { | 
| 2484         foreach my $parameter (@{$function->parameters}) { | 2620         foreach my $parameter (@{$function->parameters}) { | 
| 2485             if ($parameter->extendedAttributes->{"IsIndex"}) { | 2621             if ($parameter->extendedAttributes->{"IsIndex"}) { | 
| 2486                 $raisesExceptions = 1; | 2622                 $raisesExceptions = 1; | 
|  | 2623                 # Never executed! | 
| 2487             } | 2624             } | 
| 2488         } | 2625         } | 
| 2489     } | 2626     } | 
| 2490 | 2627 | 
| 2491     my @beforeArgumentList; | 2628     my @beforeArgumentList; | 
| 2492     my @afterArgumentList; | 2629     my @afterArgumentList; | 
| 2493     my $code = ""; | 2630     my $code = ""; | 
| 2494     $code .= <<END; | 2631     $code .= <<END; | 
| 2495 static void constructor${overloadedIndexString}(const v8::FunctionCallbackInfo<v
      8::Value>& args) | 2632 static void constructor${overloadedIndexString}(const v8::FunctionCallbackInfo<v
      8::Value>& args) | 
| 2496 { | 2633 { | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2574         $leastConstructorLength = 255; | 2711         $leastConstructorLength = 255; | 
| 2575         foreach my $constructor (@constructors, @customConstructors) { | 2712         foreach my $constructor (@constructors, @customConstructors) { | 
| 2576             my $constructorLength = GetFunctionLength($constructor); | 2713             my $constructorLength = GetFunctionLength($constructor); | 
| 2577             $leastConstructorLength = $constructorLength if ($constructorLength 
      < $leastConstructorLength); | 2714             $leastConstructorLength = $constructorLength if ($constructorLength 
      < $leastConstructorLength); | 
| 2578         } | 2715         } | 
| 2579     } | 2716     } | 
| 2580 | 2717 | 
| 2581     return $leastConstructorLength; | 2718     return $leastConstructorLength; | 
| 2582 } | 2719 } | 
| 2583 | 2720 | 
|  | 2721 ### DONE | 
| 2584 sub GenerateConstructorCallback | 2722 sub GenerateConstructorCallback | 
| 2585 { | 2723 { | 
| 2586     my $interface = shift; | 2724     my $interface = shift; | 
| 2587 | 2725 | 
| 2588     my $implClassName = GetImplName($interface); | 2726     my $implClassName = GetImplName($interface); | 
| 2589     my $v8ClassName = GetV8ClassName($interface); | 2727     my $v8ClassName = GetV8ClassName($interface); | 
| 2590     my $code = ""; | 2728     my $code = ""; | 
| 2591     $code .= "void ${v8ClassName}::constructorCallback(const v8::FunctionCallbac
      kInfo<v8::Value>& args)\n"; | 2729     $code .= "void ${v8ClassName}::constructorCallback(const v8::FunctionCallbac
      kInfo<v8::Value>& args)\n"; | 
| 2592     $code .= "{\n"; | 2730     $code .= "{\n"; | 
| 2593     $code .= "    TRACE_EVENT_SCOPED_SAMPLING_STATE(\"Blink\", \"DOMConstructor\
      ");\n"; | 2731     $code .= "    TRACE_EVENT_SCOPED_SAMPLING_STATE(\"Blink\", \"DOMConstructor\
      ");\n"; | 
|  | 2732     ### DONE | 
| 2594     $code .= GenerateFeatureObservation($interface->extendedAttributes->{"Measur
      eAs"}); | 2733     $code .= GenerateFeatureObservation($interface->extendedAttributes->{"Measur
      eAs"}); | 
|  | 2734     ### DONE | 
| 2595     $code .= GenerateDeprecationNotification($interface->extendedAttributes->{"D
      eprecateAs"}); | 2735     $code .= GenerateDeprecationNotification($interface->extendedAttributes->{"D
      eprecateAs"}); | 
|  | 2736     ### DONE | 
| 2596     $code .= GenerateConstructorHeader(); | 2737     $code .= GenerateConstructorHeader(); | 
| 2597     if (HasCustomConstructor($interface)) { | 2738     if (HasCustomConstructor($interface)) { | 
| 2598         $code .= "    ${v8ClassName}::constructorCustom(args);\n"; | 2739         $code .= "    ${v8ClassName}::constructorCustom(args);\n"; | 
| 2599     } else { | 2740     } else { | 
| 2600         $code .= "    ${implClassName}V8Internal::constructor(args);\n"; | 2741         $code .= "    ${implClassName}V8Internal::constructor(args);\n"; | 
| 2601     } | 2742     } | 
| 2602     $code .= "}\n\n"; | 2743     $code .= "}\n\n"; | 
| 2603     $implementation{nameSpaceWebCore}->add($code); | 2744     $implementation{nameSpaceWebCore}->add($code); | 
| 2604 } | 2745 } | 
| 2605 | 2746 | 
| 2606 sub GenerateConstructor | 2747 sub GenerateConstructor | 
| 2607 { | 2748 { | 
| 2608     my $interface = shift; | 2749     my $interface = shift; | 
| 2609 | 2750 | 
| 2610     if (@{$interface->constructors} == 1) { | 2751     if (@{$interface->constructors} == 1) { | 
|  | 2752         ### DONE | 
| 2611         GenerateSingleConstructorCallback($interface, @{$interface->constructors
      }[0]); | 2753         GenerateSingleConstructorCallback($interface, @{$interface->constructors
      }[0]); | 
| 2612     } else { | 2754     } else { | 
|  | 2755         ### TODO | 
| 2613         foreach my $constructor (@{$interface->constructors}) { | 2756         foreach my $constructor (@{$interface->constructors}) { | 
| 2614             GenerateSingleConstructorCallback($interface, $constructor); | 2757             GenerateSingleConstructorCallback($interface, $constructor); | 
| 2615         } | 2758         } | 
| 2616         GenerateOverloadedConstructorCallback($interface); | 2759         GenerateOverloadedConstructorCallback($interface); | 
| 2617     } | 2760     } | 
| 2618 } | 2761 } | 
| 2619 | 2762 | 
| 2620 sub GenerateEventConstructor | 2763 sub GenerateEventConstructor | 
| 2621 { | 2764 { | 
| 2622     my $interface = shift; | 2765     my $interface = shift; | 
| 2623     my $implClassName = GetImplName($interface); | 2766     my $implClassName = GetImplName($interface); | 
| 2624     my $v8ClassName = GetV8ClassName($interface); | 2767     my $v8ClassName = GetV8ClassName($interface); | 
| 2625 | 2768 | 
|  | 2769     ### TODO MERGE | 
| 2626     my @anyAttributeNames; | 2770     my @anyAttributeNames; | 
| 2627     my @serializableAnyAttributeNames; | 2771     my @serializableAnyAttributeNames; | 
| 2628     foreach my $attribute (@{$interface->attributes}) { | 2772     foreach my $attribute (@{$interface->attributes}) { | 
| 2629         if ($attribute->type eq "any") { | 2773         if ($attribute->type eq "any") { | 
| 2630             push(@anyAttributeNames, $attribute->name); | 2774             push(@anyAttributeNames, $attribute->name); | 
| 2631             if (!$attribute->extendedAttributes->{"Unserializable"}) { | 2775             if (!$attribute->extendedAttributes->{"Unserializable"}) { | 
| 2632                 push(@serializableAnyAttributeNames, $attribute->name); | 2776                 push(@serializableAnyAttributeNames, $attribute->name); | 
| 2633             } | 2777             } | 
| 2634         } | 2778         } | 
| 2635     } | 2779     } | 
| 2636 | 2780 | 
| 2637     AddToImplIncludes("bindings/v8/Dictionary.h"); | 2781     AddToImplIncludes("bindings/v8/Dictionary.h"); | 
|  | 2782     ### DONE | 
| 2638     $implementation{nameSpaceInternal}->add(<<END); | 2783     $implementation{nameSpaceInternal}->add(<<END); | 
| 2639 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args) | 2784 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args) | 
| 2640 { | 2785 { | 
| 2641     if (args.Length() < 1) { | 2786     if (args.Length() < 1) { | 
| 2642         throwNotEnoughArgumentsError(args.GetIsolate()); | 2787         throwNotEnoughArgumentsError(args.GetIsolate()); | 
| 2643         return; | 2788         return; | 
| 2644     } | 2789     } | 
| 2645 | 2790 | 
| 2646     V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, type, args[0]); | 2791     V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, type, args[0]); | 
| 2647 END | 2792 END | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2688         $implementation{nameSpaceInternal}->add("    }\n\n"); | 2833         $implementation{nameSpaceInternal}->add("    }\n\n"); | 
| 2689     } | 2834     } | 
| 2690 | 2835 | 
| 2691     $implementation{nameSpaceInternal}->add(<<END); | 2836     $implementation{nameSpaceInternal}->add(<<END); | 
| 2692     v8::Handle<v8::Object> wrapper = args.Holder(); | 2837     v8::Handle<v8::Object> wrapper = args.Holder(); | 
| 2693     V8DOMWrapper::associateObjectWithWrapper<${v8ClassName}>(event.release(), &$
      {v8ClassName}::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent
      ); | 2838     V8DOMWrapper::associateObjectWithWrapper<${v8ClassName}>(event.release(), &$
      {v8ClassName}::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent
      ); | 
| 2694     v8SetReturnValue(args, wrapper); | 2839     v8SetReturnValue(args, wrapper); | 
| 2695 } | 2840 } | 
| 2696 END | 2841 END | 
| 2697 | 2842 | 
|  | 2843     ### DONE | 
| 2698     my $code = ""; | 2844     my $code = ""; | 
| 2699     $code .= <<END; | 2845     $code .= <<END; | 
| 2700 bool fill${implClassName}Init(${implClassName}Init& eventInit, const Dictionary&
       options) | 2846 bool fill${implClassName}Init(${implClassName}Init& eventInit, const Dictionary&
       options) | 
| 2701 { | 2847 { | 
| 2702 END | 2848 END | 
| 2703 | 2849 | 
| 2704     if ($interface->parent) { | 2850     if ($interface->parent) { | 
| 2705         my $interfaceBase = $interface->parent; | 2851         my $interfaceBase = $interface->parent; | 
| 2706         $code .= <<END; | 2852         $code .= <<END; | 
| 2707     if (!fill${interfaceBase}Init(eventInit, options)) | 2853     if (!fill${interfaceBase}Init(eventInit, options)) | 
| 2708         return false; | 2854         return false; | 
| 2709 | 2855 | 
| 2710 END | 2856 END | 
| 2711     } | 2857     } | 
| 2712 | 2858 | 
|  | 2859     ### TODO | 
| 2713     foreach my $attribute (@{$interface->attributes}) { | 2860     foreach my $attribute (@{$interface->attributes}) { | 
| 2714         if ($attribute->extendedAttributes->{"InitializedByEventConstructor"}) { | 2861         if ($attribute->extendedAttributes->{"InitializedByEventConstructor"}) { | 
| 2715             if ($attribute->type ne "any") { | 2862             if ($attribute->type ne "any") { | 
| 2716                 my $attributeName = $attribute->name; | 2863                 my $attributeName = $attribute->name; | 
| 2717                 my $attributeImplName = GetImplName($attribute); | 2864                 my $attributeImplName = GetImplName($attribute); | 
| 2718                 my $deprecation = $attribute->extendedAttributes->{"DeprecateAs"
      }; | 2865                 my $deprecation = $attribute->extendedAttributes->{"DeprecateAs"
      }; | 
| 2719                 my $dictionaryGetter = "options.get(\"$attributeName\", eventIni
      t.$attributeImplName)"; | 2866                 my $dictionaryGetter = "options.get(\"$attributeName\", eventIni
      t.$attributeImplName)"; | 
| 2720                 if ($attribute->extendedAttributes->{"DeprecateAs"}) { | 2867                 if ($attribute->extendedAttributes->{"DeprecateAs"}) { | 
| 2721                     $code .= "    if ($dictionaryGetter)\n"; | 2868                     $code .= "    if ($dictionaryGetter)\n"; | 
| 2722                     $code .= "    " . GenerateDeprecationNotification($attribute
      ->extendedAttributes->{"DeprecateAs"}); | 2869                     $code .= "    " . GenerateDeprecationNotification($attribute
      ->extendedAttributes->{"DeprecateAs"}); | 
| 2723                 } else { | 2870                 } else { | 
| 2724                     $code .= "    $dictionaryGetter;\n"; | 2871                     $code .= "    $dictionaryGetter;\n"; | 
| 2725                 } | 2872                 } | 
| 2726             } | 2873             } | 
| 2727         } | 2874         } | 
| 2728     } | 2875     } | 
| 2729 | 2876 | 
| 2730     $code .= <<END; | 2877     $code .= <<END; | 
| 2731     return true; | 2878     return true; | 
| 2732 } | 2879 } | 
| 2733 | 2880 | 
| 2734 END | 2881 END | 
| 2735     $implementation{nameSpaceWebCore}->add($code); | 2882     $implementation{nameSpaceWebCore}->add($code); | 
| 2736 } | 2883 } | 
| 2737 | 2884 | 
|  | 2885 ### DONE | 
| 2738 sub GenerateNamedConstructor | 2886 sub GenerateNamedConstructor | 
| 2739 { | 2887 { | 
| 2740     my $function = shift; | 2888     my $function = shift; | 
| 2741     my $interface = shift; | 2889     my $interface = shift; | 
| 2742 | 2890 | 
| 2743     my $implClassName = GetImplName($interface); | 2891     my $implClassName = GetImplName($interface); | 
| 2744     my $v8ClassName = GetV8ClassName($interface); | 2892     my $v8ClassName = GetV8ClassName($interface); | 
|  | 2893     # thif is always false here | 
| 2745     my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; | 2894     my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; | 
|  | 2895 #    print "NEVER\n" if $raisesExceptions; | 
| 2746     if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 2896     if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 
| 2747         $raisesExceptions = 1; | 2897         $raisesExceptions = 1; | 
| 2748     } | 2898     } | 
| 2749     if (!$raisesExceptions) { | 2899     if (!$raisesExceptions) { | 
| 2750         foreach my $parameter (@{$function->parameters}) { | 2900         foreach my $parameter (@{$function->parameters}) { | 
| 2751             if ($parameter->extendedAttributes->{"IsIndex"}) { | 2901             if ($parameter->extendedAttributes->{"IsIndex"}) { | 
|  | 2902                 # NEVER! | 
|  | 2903 #                print "NEVER\n"; | 
| 2752                 $raisesExceptions = 1; | 2904                 $raisesExceptions = 1; | 
| 2753             } | 2905             } | 
| 2754         } | 2906         } | 
| 2755     } | 2907     } | 
| 2756 | 2908 | 
| 2757     my $maybeObserveFeature = GenerateFeatureObservation($function->extendedAttr
      ibutes->{"MeasureAs"}); | 2909     my $maybeObserveFeature = GenerateFeatureObservation($function->extendedAttr
      ibutes->{"MeasureAs"}); | 
| 2758     my $maybeDeprecateFeature = GenerateDeprecationNotification($function->exten
      dedAttributes->{"DeprecateAs"}); | 2910     my $maybeDeprecateFeature = GenerateDeprecationNotification($function->exten
      dedAttributes->{"DeprecateAs"}); | 
| 2759 | 2911 | 
| 2760     my @beforeArgumentList; | 2912     my @beforeArgumentList; | 
| 2761     my @afterArgumentList; | 2913     my @afterArgumentList; | 
| 2762 | 2914 | 
| 2763     my $toActiveDOMObject = "0"; | 2915     my $toActiveDOMObject = "0"; | 
| 2764     if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) { | 2916     if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) { | 
| 2765         $toActiveDOMObject = "${v8ClassName}::toActiveDOMObject"; | 2917         $toActiveDOMObject = "${v8ClassName}::toActiveDOMObject"; | 
| 2766     } | 2918     } | 
| 2767 | 2919 | 
| 2768     my $toEventTarget = "0"; | 2920     my $toEventTarget = "0"; | 
| 2769     if (InheritsInterface($interface, "EventTarget")) { | 2921     if (InheritsInterface($interface, "EventTarget")) { | 
| 2770         $toEventTarget = "${v8ClassName}::toEventTarget"; | 2922         $toEventTarget = "${v8ClassName}::toEventTarget"; | 
| 2771     } | 2923     } | 
|  | 2924 #    print "GEHEHE", $interface->name, "\n"; | 
| 2772 | 2925 | 
| 2773     AddToImplIncludes("core/page/Frame.h"); | 2926     AddToImplIncludes("core/page/Frame.h"); | 
| 2774     $implementation{nameSpaceWebCore}->add(<<END); | 2927     $implementation{nameSpaceWebCore}->add(<<END); | 
| 2775 WrapperTypeInfo ${v8ClassName}Constructor::info = { ${v8ClassName}Constructor::G
      etTemplate, ${v8ClassName}::derefObject, $toActiveDOMObject, $toEventTarget, 0, 
      ${v8ClassName}::installPerContextPrototypeProperties, 0, WrapperTypeObjectProtot
      ype }; | 2928 WrapperTypeInfo ${v8ClassName}Constructor::info = { ${v8ClassName}Constructor::G
      etTemplate, ${v8ClassName}::derefObject, $toActiveDOMObject, $toEventTarget, 0, 
      ${v8ClassName}::installPerContextPrototypeProperties, 0, WrapperTypeObjectProtot
      ype }; | 
| 2776 | 2929 | 
| 2777 END | 2930 END | 
| 2778 | 2931 | 
| 2779     my $code = ""; | 2932     my $code = ""; | 
| 2780     $code .= <<END; | 2933     $code .= <<END; | 
| 2781 static void ${v8ClassName}ConstructorCallback(const v8::FunctionCallbackInfo<v8:
      :Value>& args) | 2934 static void ${v8ClassName}ConstructorCallback(const v8::FunctionCallbackInfo<v8:
      :Value>& args) | 
| 2782 { | 2935 { | 
| 2783 END | 2936 END | 
|  | 2937     ### DONE | 
| 2784     $code .= $maybeObserveFeature if $maybeObserveFeature; | 2938     $code .= $maybeObserveFeature if $maybeObserveFeature; | 
|  | 2939     ### DONE | 
| 2785     $code .= $maybeDeprecateFeature if $maybeDeprecateFeature; | 2940     $code .= $maybeDeprecateFeature if $maybeDeprecateFeature; | 
|  | 2941     ### DONE | 
| 2786     $code .= GenerateConstructorHeader(); | 2942     $code .= GenerateConstructorHeader(); | 
| 2787     AddToImplIncludes("V8Document.h"); | 2943     AddToImplIncludes("V8Document.h"); | 
|  | 2944     ### DONE | 
| 2788     $code .= <<END; | 2945     $code .= <<END; | 
| 2789     Document* document = currentDocument(); | 2946     Document* document = currentDocument(); | 
| 2790 | 2947 | 
| 2791     // Make sure the document is added to the DOM Node map. Otherwise, the ${imp
      lClassName} instance | 2948     // Make sure the document is added to the DOM Node map. Otherwise, the ${imp
      lClassName} instance | 
| 2792     // may end up being the only node in the map and get garbage-collected prema
      turely. | 2949     // may end up being the only node in the map and get garbage-collected prema
      turely. | 
| 2793     toV8(document, args.Holder(), args.GetIsolate()); | 2950     toV8(document, args.Holder(), args.GetIsolate()); | 
| 2794 | 2951 | 
| 2795 END | 2952 END | 
| 2796 | 2953 | 
|  | 2954     ### DONE | 
| 2797     $code .= GenerateArgumentsCountCheck($function, $interface); | 2955     $code .= GenerateArgumentsCountCheck($function, $interface); | 
| 2798 | 2956 | 
|  | 2957     ### DONE | 
| 2799     if ($raisesExceptions) { | 2958     if ($raisesExceptions) { | 
| 2800         AddToImplIncludes("bindings/v8/ExceptionState.h"); | 2959         AddToImplIncludes("bindings/v8/ExceptionState.h"); | 
| 2801         $code .= "    ExceptionState es(args.GetIsolate());\n"; | 2960         $code .= "    ExceptionState es(args.GetIsolate());\n"; | 
| 2802     } | 2961     } | 
| 2803 | 2962 | 
|  | 2963     ### DONE | 
| 2804     my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersC
      heck($function, $interface); | 2964     my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersC
      heck($function, $interface); | 
| 2805     $code .= $parameterCheckString; | 2965     $code .= $parameterCheckString; | 
| 2806 | 2966 | 
|  | 2967     ### DONE | 
| 2807     push(@beforeArgumentList, "document"); | 2968     push(@beforeArgumentList, "document"); | 
| 2808 | 2969 | 
|  | 2970     ### DONE | 
| 2809     if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 2971     if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 
| 2810         push(@afterArgumentList, "es"); | 2972         push(@afterArgumentList, "es"); | 
| 2811     } | 2973     } | 
| 2812 | 2974 | 
|  | 2975     ### DONE | 
| 2813     my @argumentList; | 2976     my @argumentList; | 
| 2814     my $index = 0; | 2977     my $index = 0; | 
| 2815     foreach my $parameter (@{$function->parameters}) { | 2978     foreach my $parameter (@{$function->parameters}) { | 
| 2816         last if $index eq $paramIndex; | 2979         last if $index eq $paramIndex; | 
| 2817         if ($replacements{$parameter->name}) { | 2980         if ($replacements{$parameter->name}) { | 
| 2818             push(@argumentList, $replacements{$parameter->name}); | 2981             push(@argumentList, $replacements{$parameter->name}); | 
| 2819         } else { | 2982         } else { | 
| 2820             push(@argumentList, $parameter->name); | 2983             push(@argumentList, $parameter->name); | 
| 2821         } | 2984         } | 
| 2822         $index++; | 2985         $index++; | 
| 2823     } | 2986     } | 
| 2824 | 2987 | 
|  | 2988     ### DONE | 
| 2825     my $argumentString = join(", ", @beforeArgumentList, @argumentList, @afterAr
      gumentList); | 2989     my $argumentString = join(", ", @beforeArgumentList, @argumentList, @afterAr
      gumentList); | 
|  | 2990     ### DONE | 
| 2826     $code .= "\n"; | 2991     $code .= "\n"; | 
| 2827     $code .= "    RefPtr<${implClassName}> impl = ${implClassName}::createForJSC
      onstructor(${argumentString});\n"; | 2992     $code .= "    RefPtr<${implClassName}> impl = ${implClassName}::createForJSC
      onstructor(${argumentString});\n"; | 
| 2828     $code .= "    v8::Handle<v8::Object> wrapper = args.Holder();\n"; | 2993     $code .= "    v8::Handle<v8::Object> wrapper = args.Holder();\n"; | 
| 2829 | 2994 | 
|  | 2995     ### DONE | 
| 2830     if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 2996     if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 
| 2831         $code .= "    if (es.throwIfNeeded())\n"; | 2997         $code .= "    if (es.throwIfNeeded())\n"; | 
| 2832         $code .= "        return;\n"; | 2998         $code .= "        return;\n"; | 
| 2833     } | 2999     } | 
| 2834 | 3000 | 
|  | 3001     ### DONE | 
| 2835     $code .= <<END; | 3002     $code .= <<END; | 
| 2836 | 3003 | 
| 2837     V8DOMWrapper::associateObjectWithWrapper<${v8ClassName}>(impl.release(), &${
      v8ClassName}Constructor::info, wrapper, args.GetIsolate(), WrapperConfiguration:
      :Dependent); | 3004     V8DOMWrapper::associateObjectWithWrapper<${v8ClassName}>(impl.release(), &${
      v8ClassName}Constructor::info, wrapper, args.GetIsolate(), WrapperConfiguration:
      :Dependent); | 
| 2838     args.GetReturnValue().Set(wrapper); | 3005     args.GetReturnValue().Set(wrapper); | 
| 2839 } | 3006 } | 
| 2840 | 3007 | 
| 2841 END | 3008 END | 
| 2842     $implementation{nameSpaceWebCore}->add($code); | 3009     $implementation{nameSpaceWebCore}->add($code); | 
| 2843 | 3010 | 
|  | 3011     ### DONE | 
| 2844     $code = <<END; | 3012     $code = <<END; | 
| 2845 v8::Handle<v8::FunctionTemplate> ${v8ClassName}Constructor::GetTemplate(v8::Isol
      ate* isolate, WrapperWorldType currentWorldType) | 3013 v8::Handle<v8::FunctionTemplate> ${v8ClassName}Constructor::GetTemplate(v8::Isol
      ate* isolate, WrapperWorldType currentWorldType) | 
| 2846 { | 3014 { | 
| 2847     // This is only for getting a unique pointer which we can pass to privateTem
      plate. | 3015     // This is only for getting a unique pointer which we can pass to privateTem
      plate. | 
| 2848     static const char* privateTemplateUniqueKey = "${v8ClassName}Constructor::Ge
      tTemplatePrivateTemplate"; | 3016     static const char* privateTemplateUniqueKey = "${v8ClassName}Constructor::Ge
      tTemplatePrivateTemplate"; | 
| 2849     V8PerIsolateData* data = V8PerIsolateData::from(isolate); | 3017     V8PerIsolateData* data = V8PerIsolateData::from(isolate); | 
| 2850     v8::Handle<v8::FunctionTemplate> result = data->privateTemplateIfExists(curr
      entWorldType, &privateTemplateUniqueKey); | 3018     v8::Handle<v8::FunctionTemplate> result = data->privateTemplateIfExists(curr
      entWorldType, &privateTemplateUniqueKey); | 
| 2851     if (!result.IsEmpty()) | 3019     if (!result.IsEmpty()) | 
| 2852         return result; | 3020         return result; | 
| 2853 | 3021 | 
| 2854     TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink\", \"BuildDOMTemplate"); | 3022     TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink\", \"BuildDOMTemplate"); | 
| 2855     v8::HandleScope scope(isolate); | 3023     v8::HandleScope scope(isolate); | 
| 2856     result = v8::FunctionTemplate::New(${v8ClassName}ConstructorCallback); | 3024     result = v8::FunctionTemplate::New(${v8ClassName}ConstructorCallback); | 
| 2857 | 3025 | 
| 2858     v8::Local<v8::ObjectTemplate> instance = result->InstanceTemplate(); | 3026     v8::Local<v8::ObjectTemplate> instance = result->InstanceTemplate(); | 
| 2859     instance->SetInternalFieldCount(${v8ClassName}::internalFieldCount); | 3027     instance->SetInternalFieldCount(${v8ClassName}::internalFieldCount); | 
| 2860     result->SetClassName(v8::String::NewSymbol("${implClassName}")); | 3028     result->SetClassName(v8::String::NewSymbol("${implClassName}")); | 
| 2861     result->Inherit(${v8ClassName}::GetTemplate(isolate, currentWorldType)); | 3029     result->Inherit(${v8ClassName}::GetTemplate(isolate, currentWorldType)); | 
| 2862     data->setPrivateTemplate(currentWorldType, &privateTemplateUniqueKey, result
      ); | 3030     data->setPrivateTemplate(currentWorldType, &privateTemplateUniqueKey, result
      ); | 
| 2863 | 3031 | 
| 2864     return scope.Close(result); | 3032     return scope.Close(result); | 
| 2865 } | 3033 } | 
| 2866 | 3034 | 
| 2867 END | 3035 END | 
| 2868     $implementation{nameSpaceWebCore}->add($code); | 3036     $implementation{nameSpaceWebCore}->add($code); | 
| 2869 } | 3037 } | 
| 2870 | 3038 | 
|  | 3039 ### DONE | 
| 2871 sub GenerateConstructorHeader | 3040 sub GenerateConstructorHeader | 
| 2872 { | 3041 { | 
| 2873     AddToImplIncludes("bindings/v8/V8ObjectConstructor.h"); | 3042     AddToImplIncludes("bindings/v8/V8ObjectConstructor.h"); | 
| 2874     my $content = <<END; | 3043     my $content = <<END; | 
| 2875     if (!args.IsConstructCall()) { | 3044     if (!args.IsConstructCall()) { | 
| 2876         throwTypeError("DOM object constructor cannot be called as a function.",
       args.GetIsolate()); | 3045         throwTypeError("DOM object constructor cannot be called as a function.",
       args.GetIsolate()); | 
| 2877         return; | 3046         return; | 
| 2878     } | 3047     } | 
| 2879 | 3048 | 
| 2880     if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) { | 3049     if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) { | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 2896         my $conditionalString = GenerateConditionalString($attribute); | 3065         my $conditionalString = GenerateConditionalString($attribute); | 
| 2897         my $subCode = ""; | 3066         my $subCode = ""; | 
| 2898         $subCode .= "#if ${conditionalString}\n" if $conditionalString; | 3067         $subCode .= "#if ${conditionalString}\n" if $conditionalString; | 
| 2899         $subCode .= GenerateSingleBatchedAttribute($interface, $attribute, ",", 
      ""); | 3068         $subCode .= GenerateSingleBatchedAttribute($interface, $attribute, ",", 
      ""); | 
| 2900         $subCode .= "#endif // ${conditionalString}\n" if $conditionalString; | 3069         $subCode .= "#endif // ${conditionalString}\n" if $conditionalString; | 
| 2901         $code .= $subCode; | 3070         $code .= $subCode; | 
| 2902     } | 3071     } | 
| 2903     return $code; | 3072     return $code; | 
| 2904 } | 3073 } | 
| 2905 | 3074 | 
|  | 3075 ### get_single_batched_attribute in python | 
| 2906 sub GenerateSingleBatchedAttribute | 3076 sub GenerateSingleBatchedAttribute | 
| 2907 { | 3077 { | 
| 2908     my $interface = shift; | 3078     my $interface = shift; | 
| 2909     my $attribute = shift; | 3079     my $attribute = shift; | 
| 2910     my $delimiter = shift; | 3080     my $delimiter = shift; | 
| 2911     my $indent = shift; | 3081     my $indent = shift; | 
| 2912     my $code = ""; | 3082     my $code = ""; | 
| 2913     my $attrName = $attribute->name; | 3083     my $attrName = $attribute->name; | 
| 2914     my $attrExt = $attribute->extendedAttributes; | 3084     my $attrExt = $attribute->extendedAttributes; | 
| 2915     my $implClassName = GetImplName($interface); | 3085     my $implClassName = GetImplName($interface); | 
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3111         $code .= "    } else {\n"; | 3281         $code .= "    } else {\n"; | 
| 3112         $code .= "        ${conditional}$template->Set(v8::String::NewSymbol(\"$
      name\"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCall
      back, v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; | 3282         $code .= "        ${conditional}$template->Set(v8::String::NewSymbol(\"$
      name\"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCall
      back, v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; | 
| 3113         $code .= "    }\n"; | 3283         $code .= "    }\n"; | 
| 3114     } else { | 3284     } else { | 
| 3115         $code .= "    ${conditional}$template->Set(v8::String::NewSymbol(\"$name
      \"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCallback
      , v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; | 3285         $code .= "    ${conditional}$template->Set(v8::String::NewSymbol(\"$name
      \"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCallback
      , v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; | 
| 3116     } | 3286     } | 
| 3117     $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 3287     $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 
| 3118     return $code; | 3288     return $code; | 
| 3119 } | 3289 } | 
| 3120 | 3290 | 
|  | 3291 ### DONE | 
|  | 3292 # get_is_null_expression in python | 
| 3121 sub GenerateIsNullExpression | 3293 sub GenerateIsNullExpression | 
| 3122 { | 3294 { | 
| 3123     my $type = shift; | 3295     my $type = shift; | 
| 3124     my $variableName = shift; | 3296     my $variableName = shift; | 
|  | 3297     ### DONE | 
| 3125     if (IsUnionType($type)) { | 3298     if (IsUnionType($type)) { | 
| 3126         my $types = $type->unionMemberTypes; | 3299         my $types = $type->unionMemberTypes; | 
| 3127         my @expression = (); | 3300         my @expression = (); | 
| 3128         for my $i (0 .. scalar(@$types)-1) { | 3301         for my $i (0 .. scalar(@$types)-1) { | 
| 3129             my $unionMemberType = $types->[$i]; | 3302             my $unionMemberType = $types->[$i]; | 
| 3130             my $unionMemberVariable = $variableName . $i; | 3303             my $unionMemberVariable = $variableName . $i; | 
| 3131             my $isNull = GenerateIsNullExpression($unionMemberType, $unionMember
      Variable); | 3304             my $isNull = GenerateIsNullExpression($unionMemberType, $unionMember
      Variable); | 
| 3132             push @expression, $isNull; | 3305             push @expression, $isNull; | 
| 3133         } | 3306         } | 
| 3134         return join " && ", @expression; | 3307         return join " && ", @expression; | 
| 3135     } | 3308     } | 
|  | 3309     ### DONE | 
| 3136     if (IsRefPtrType($type)) { | 3310     if (IsRefPtrType($type)) { | 
| 3137         return "!${variableName}"; | 3311         return "!${variableName}"; | 
| 3138     } elsif ($type eq "DOMString") { | 3312     } elsif ($type eq "DOMString") { | 
| 3139         return "${variableName}.isNull()"; | 3313         return "${variableName}.isNull()"; | 
| 3140     } else { | 3314     } else { | 
| 3141         return ""; | 3315         return ""; | 
| 3142     } | 3316     } | 
| 3143 } | 3317 } | 
| 3144 | 3318 | 
| 3145 sub GenerateIfElseStatement | 3319 sub GenerateIfElseStatement | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 3171 { | 3345 { | 
| 3172     my $interface = shift; | 3346     my $interface = shift; | 
| 3173     my $interfaceName = $interface->name; | 3347     my $interfaceName = $interface->name; | 
| 3174     my $implClassName = GetImplName($interface); | 3348     my $implClassName = GetImplName($interface); | 
| 3175     my $v8ClassName = GetV8ClassName($interface); | 3349     my $v8ClassName = GetV8ClassName($interface); | 
| 3176 | 3350 | 
| 3177     my $indexedGetterFunction = GetIndexedGetterFunction($interface); | 3351     my $indexedGetterFunction = GetIndexedGetterFunction($interface); | 
| 3178     if ($indexedGetterFunction) { | 3352     if ($indexedGetterFunction) { | 
| 3179         my $hasCustomIndexedGetter = $indexedGetterFunction->extendedAttributes-
      >{"Custom"}; | 3353         my $hasCustomIndexedGetter = $indexedGetterFunction->extendedAttributes-
      >{"Custom"}; | 
| 3180         if (!$hasCustomIndexedGetter) { | 3354         if (!$hasCustomIndexedGetter) { | 
|  | 3355             ### working | 
| 3181             GenerateImplementationIndexedPropertyGetter($interface, $indexedGett
      erFunction); | 3356             GenerateImplementationIndexedPropertyGetter($interface, $indexedGett
      erFunction); | 
| 3182         } | 3357         } | 
|  | 3358         ### working | 
| 3183         GenerateImplementationIndexedPropertyGetterCallback($interface, $hasCust
      omIndexedGetter); | 3359         GenerateImplementationIndexedPropertyGetterCallback($interface, $hasCust
      omIndexedGetter); | 
| 3184     } | 3360     } | 
| 3185 | 3361 | 
|  | 3362     ### TODO | 
| 3186     my $indexedSetterFunction = GetIndexedSetterFunction($interface); | 3363     my $indexedSetterFunction = GetIndexedSetterFunction($interface); | 
| 3187     if ($indexedSetterFunction) { | 3364     if ($indexedSetterFunction) { | 
| 3188         my $hasCustomIndexedSetter = $indexedSetterFunction->extendedAttributes-
      >{"Custom"}; | 3365         my $hasCustomIndexedSetter = $indexedSetterFunction->extendedAttributes-
      >{"Custom"}; | 
| 3189         if (!$hasCustomIndexedSetter) { | 3366         if (!$hasCustomIndexedSetter) { | 
| 3190             GenerateImplementationIndexedPropertySetter($interface, $indexedSett
      erFunction); | 3367             GenerateImplementationIndexedPropertySetter($interface, $indexedSett
      erFunction); | 
| 3191         } | 3368         } | 
| 3192         GenerateImplementationIndexedPropertySetterCallback($interface, $hasCust
      omIndexedSetter); | 3369         GenerateImplementationIndexedPropertySetterCallback($interface, $hasCust
      omIndexedSetter); | 
| 3193     } | 3370     } | 
| 3194 | 3371 | 
|  | 3372     ### TODO | 
| 3195     my $indexedDeleterFunction = GetIndexedDeleterFunction($interface); | 3373     my $indexedDeleterFunction = GetIndexedDeleterFunction($interface); | 
| 3196     if ($indexedDeleterFunction) { | 3374     if ($indexedDeleterFunction) { | 
| 3197         my $hasCustomIndexedDeleter = $indexedDeleterFunction->extendedAttribute
      s->{"Custom"}; | 3375         my $hasCustomIndexedDeleter = $indexedDeleterFunction->extendedAttribute
      s->{"Custom"}; | 
| 3198         if (!$hasCustomIndexedDeleter) { | 3376         if (!$hasCustomIndexedDeleter) { | 
| 3199             GenerateImplementationIndexedPropertyDeleter($interface, $indexedDel
      eterFunction); | 3377             GenerateImplementationIndexedPropertyDeleter($interface, $indexedDel
      eterFunction); | 
| 3200         } | 3378         } | 
| 3201         GenerateImplementationIndexedPropertyDeleterCallback($interface, $hasCus
      tomIndexedDeleter); | 3379         GenerateImplementationIndexedPropertyDeleterCallback($interface, $hasCus
      tomIndexedDeleter); | 
| 3202     } | 3380     } | 
| 3203 | 3381 | 
|  | 3382     ### DONE | 
| 3204     my $indexedEnumeratorFunction = $indexedGetterFunction; | 3383     my $indexedEnumeratorFunction = $indexedGetterFunction; | 
| 3205     $indexedEnumeratorFunction = 0 if $indexedGetterFunction && $indexedGetterFu
      nction->extendedAttributes->{"NotEnumerable"}; | 3384     $indexedEnumeratorFunction = 0 if $indexedGetterFunction && $indexedGetterFu
      nction->extendedAttributes->{"NotEnumerable"}; | 
| 3206 | 3385 | 
|  | 3386     ### DONE | 
| 3207     my $indexedQueryFunction = 0; | 3387     my $indexedQueryFunction = 0; | 
| 3208     # If there is an enumerator, there MUST be a query method to properly commun
      icate property attributes. | 3388     # If there is an enumerator, there MUST be a query method to properly commun
      icate property attributes. | 
| 3209     my $hasQuery = $indexedQueryFunction || $indexedEnumeratorFunction; | 3389     my $hasQuery = $indexedQueryFunction || $indexedEnumeratorFunction; | 
| 3210 | 3390 | 
|  | 3391     ### DONE | 
| 3211     my $setOn = "Instance"; | 3392     my $setOn = "Instance"; | 
| 3212 | 3393 | 
| 3213     # V8 has access-check callback API (see ObjectTemplate::SetAccessCheckCallba
      cks) and it's used on Window | 3394     # V8 has access-check callback API (see ObjectTemplate::SetAccessCheckCallba
      cks) and it's used on Window | 
| 3214     # instead of deleters or enumerators. In addition, the getter should be set 
      on prototype template, to | 3395     # instead of deleters or enumerators. In addition, the getter should be set 
      on prototype template, to | 
| 3215     # get implementation straight out of the Window prototype regardless of what
       prototype is actually set | 3396     # get implementation straight out of the Window prototype regardless of what
       prototype is actually set | 
| 3216     # on the object. | 3397     # on the object. | 
| 3217     if ($interfaceName eq "Window") { | 3398     if ($interfaceName eq "Window") { | 
| 3218         $setOn = "Prototype"; | 3399         $setOn = "Prototype"; | 
| 3219     } | 3400     } | 
| 3220 | 3401 | 
|  | 3402     ### DONE | 
| 3221     my $code = ""; | 3403     my $code = ""; | 
| 3222     if ($indexedGetterFunction || $indexedSetterFunction || $indexedDeleterFunct
      ion || $indexedEnumeratorFunction || $hasQuery) { | 3404     if ($indexedGetterFunction || $indexedSetterFunction || $indexedDeleterFunct
      ion || $indexedEnumeratorFunction || $hasQuery) { | 
| 3223         $code .= "    desc->${setOn}Template()->SetIndexedPropertyHandler(${impl
      ClassName}V8Internal::indexedPropertyGetterCallback"; | 3405         $code .= "    desc->${setOn}Template()->SetIndexedPropertyHandler(${impl
      ClassName}V8Internal::indexedPropertyGetterCallback"; | 
| 3224         $code .= $indexedSetterFunction ? ", ${implClassName}V8Internal::indexed
      PropertySetterCallback" : ", 0"; | 3406         $code .= $indexedSetterFunction ? ", ${implClassName}V8Internal::indexed
      PropertySetterCallback" : ", 0"; | 
| 3225         $code .= ", 0"; # IndexedPropertyQuery -- not being used at the moment. | 3407         $code .= ", 0"; # IndexedPropertyQuery -- not being used at the moment. | 
| 3226         $code .= $indexedDeleterFunction ? ", ${implClassName}V8Internal::indexe
      dPropertyDeleterCallback" : ", 0"; | 3408         $code .= $indexedDeleterFunction ? ", ${implClassName}V8Internal::indexe
      dPropertyDeleterCallback" : ", 0"; | 
| 3227         $code .= $indexedEnumeratorFunction ? ", indexedPropertyEnumerator<${imp
      lClassName}>" : ", 0"; | 3409         $code .= $indexedEnumeratorFunction ? ", indexedPropertyEnumerator<${imp
      lClassName}>" : ", 0"; | 
| 3228         $code .= ");\n"; | 3410         $code .= ");\n"; | 
| 3229     } | 3411     } | 
| 3230 | 3412 | 
| 3231     return $code; | 3413     return $code; | 
| 3232 } | 3414 } | 
| 3233 | 3415 | 
| 3234 sub GenerateImplementationIndexedPropertyGetter | 3416 sub GenerateImplementationIndexedPropertyGetter | 
| 3235 { | 3417 { | 
| 3236     my $interface = shift; | 3418     my $interface = shift; | 
| 3237     my $indexedGetterFunction = shift; | 3419     my $indexedGetterFunction = shift; | 
| 3238     my $implClassName = GetImplName($interface); | 3420     my $implClassName = GetImplName($interface); | 
| 3239     my $v8ClassName = GetV8ClassName($interface); | 3421     my $v8ClassName = GetV8ClassName($interface); | 
| 3240     my $methodName = GetImplName($indexedGetterFunction); | 3422     my $methodName = GetImplName($indexedGetterFunction); | 
| 3241 | 3423 | 
| 3242     my $returnType = $indexedGetterFunction->type; | 3424     my $returnType = $indexedGetterFunction->type; | 
| 3243     my $nativeType = GetNativeType($returnType); | 3425     my $nativeType = GetNativeType($returnType); | 
| 3244     my $nativeValue = "element"; | 3426     my $nativeValue = "element"; | 
| 3245     $nativeValue .= ".release()" if (IsRefPtrType($returnType)); | 3427     $nativeValue .= ".release()" if (IsRefPtrType($returnType)); | 
|  | 3428     ### DONE | 
| 3246     my $isNull = GenerateIsNullExpression($returnType, "element"); | 3429     my $isNull = GenerateIsNullExpression($returnType, "element"); | 
|  | 3430     ### DONE | 
| 3247     my $returnJSValueCode = NativeToJSValue($indexedGetterFunction->type, $index
      edGetterFunction->extendedAttributes, $nativeValue, "    ", "", "info.Holder()",
       "info.GetIsolate()", "info", "collection", "", "return"); | 3431     my $returnJSValueCode = NativeToJSValue($indexedGetterFunction->type, $index
      edGetterFunction->extendedAttributes, $nativeValue, "    ", "", "info.Holder()",
       "info.GetIsolate()", "info", "collection", "", "return"); | 
| 3248     my $raisesExceptions = $indexedGetterFunction->extendedAttributes->{"RaisesE
      xception"}; | 3432     my $raisesExceptions = $indexedGetterFunction->extendedAttributes->{"RaisesE
      xception"}; | 
|  | 3433     ### DONE | 
| 3249     my $methodCallCode = GenerateMethodCall($returnType, "element", "collection-
      >${methodName}", "index", $raisesExceptions); | 3434     my $methodCallCode = GenerateMethodCall($returnType, "element", "collection-
      >${methodName}", "index", $raisesExceptions); | 
|  | 3435     ### DONE | 
| 3250     my $getterCode = "static void indexedPropertyGetter(uint32_t index, const v8
      ::PropertyCallbackInfo<v8::Value>& info)\n"; | 3436     my $getterCode = "static void indexedPropertyGetter(uint32_t index, const v8
      ::PropertyCallbackInfo<v8::Value>& info)\n"; | 
| 3251     $getterCode .= "{\n"; | 3437     $getterCode .= "{\n"; | 
| 3252     $getterCode .= "    ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));\n"
      ; | 3438     $getterCode .= "    ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));\n"
      ; | 
| 3253     $getterCode .= "    ${implClassName}* collection = ${v8ClassName}::toNative(
      info.Holder());\n"; | 3439     $getterCode .= "    ${implClassName}* collection = ${v8ClassName}::toNative(
      info.Holder());\n"; | 
|  | 3440     ### DONE | 
| 3254     if ($raisesExceptions) { | 3441     if ($raisesExceptions) { | 
| 3255         $getterCode .= "    ExceptionState es(info.GetIsolate());\n"; | 3442         $getterCode .= "    ExceptionState es(info.GetIsolate());\n"; | 
| 3256     } | 3443     } | 
|  | 3444     ### DONE but use function_call later | 
| 3257     $getterCode .= $methodCallCode . "\n"; | 3445     $getterCode .= $methodCallCode . "\n"; | 
|  | 3446     ### DONE | 
| 3258     if ($raisesExceptions) { | 3447     if ($raisesExceptions) { | 
| 3259         $getterCode .= "    if (es.throwIfNeeded())\n"; | 3448         $getterCode .= "    if (es.throwIfNeeded())\n"; | 
| 3260         $getterCode .= "        return;\n"; | 3449         $getterCode .= "        return;\n"; | 
| 3261     } | 3450     } | 
| 3262     if (IsUnionType($returnType)) { | 3451     if (IsUnionType($returnType)) { | 
|  | 3452         ### TDOO | 
| 3263         $getterCode .= "${returnJSValueCode}\n"; | 3453         $getterCode .= "${returnJSValueCode}\n"; | 
| 3264         $getterCode .= "    return;\n"; | 3454         $getterCode .= "    return;\n"; | 
| 3265     } else { | 3455     } else { | 
|  | 3456         ### DONE | 
| 3266         $getterCode .= "    if (${isNull})\n"; | 3457         $getterCode .= "    if (${isNull})\n"; | 
| 3267         $getterCode .= "        return;\n"; | 3458         $getterCode .= "        return;\n"; | 
| 3268         $getterCode .= $returnJSValueCode . "\n"; | 3459         $getterCode .= $returnJSValueCode . "\n"; | 
| 3269     } | 3460     } | 
| 3270     $getterCode .= "}\n\n"; | 3461     $getterCode .= "}\n\n"; | 
| 3271     $implementation{nameSpaceInternal}->add($getterCode); | 3462     $implementation{nameSpaceInternal}->add($getterCode); | 
| 3272 } | 3463 } | 
| 3273 | 3464 | 
| 3274 sub GenerateImplementationIndexedPropertyGetterCallback | 3465 sub GenerateImplementationIndexedPropertyGetterCallback | 
| 3275 { | 3466 { | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3358     if ($treatNullAs && $treatNullAs ne "NullString") { | 3549     if ($treatNullAs && $treatNullAs ne "NullString") { | 
| 3359         push @conditions, "value->IsNull()"; | 3550         push @conditions, "value->IsNull()"; | 
| 3360         push @statements, "collection->${treatNullAs}(index$extraArguments);"; | 3551         push @statements, "collection->${treatNullAs}(index$extraArguments);"; | 
| 3361     } | 3552     } | 
| 3362     if ($treatUndefinedAs && $treatUndefinedAs ne "NullString") { | 3553     if ($treatUndefinedAs && $treatUndefinedAs ne "NullString") { | 
| 3363         push @conditions, "value->IsUndefined()"; | 3554         push @conditions, "value->IsUndefined()"; | 
| 3364         push @statements, "collection->${treatUndefinedAs}(index$extraArguments)
      ;"; | 3555         push @statements, "collection->${treatUndefinedAs}(index$extraArguments)
      ;"; | 
| 3365     } | 3556     } | 
| 3366     push @conditions, ""; | 3557     push @conditions, ""; | 
| 3367     push @statements, "collection->${methodName}(index, propertyValue$extraArgum
      ents);"; | 3558     push @statements, "collection->${methodName}(index, propertyValue$extraArgum
      ents);"; | 
|  | 3559     # TODO | 
| 3368     $code .= GenerateIfElseStatement("bool", "result", \@conditions, \@statement
      s); | 3560     $code .= GenerateIfElseStatement("bool", "result", \@conditions, \@statement
      s); | 
| 3369 | 3561 | 
| 3370     $code .= "    if (!result)\n"; | 3562     $code .= "    if (!result)\n"; | 
| 3371     $code .= "        return;\n"; | 3563     $code .= "        return;\n"; | 
| 3372     if ($raisesExceptions) { | 3564     if ($raisesExceptions) { | 
| 3373         $code .= "    if (es.throwIfNeeded())\n"; | 3565         $code .= "    if (es.throwIfNeeded())\n"; | 
| 3374         $code .= "        return;\n"; | 3566         $code .= "        return;\n"; | 
| 3375     } | 3567     } | 
| 3376     $code .= "    v8SetReturnValue(info, value);\n"; | 3568     $code .= "    v8SetReturnValue(info, value);\n"; | 
| 3377     $code .= "}\n\n"; | 3569     $code .= "}\n\n"; | 
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3541     if ($hasCustom) { | 3733     if ($hasCustom) { | 
| 3542         $code .= "    ${v8ClassName}::namedPropertyQueryCustom(name, info);\n"; | 3734         $code .= "    ${v8ClassName}::namedPropertyQueryCustom(name, info);\n"; | 
| 3543     } else { | 3735     } else { | 
| 3544         $code .= "    ${implClassName}V8Internal::namedPropertyQuery(name, info)
      ;\n"; | 3736         $code .= "    ${implClassName}V8Internal::namedPropertyQuery(name, info)
      ;\n"; | 
| 3545     } | 3737     } | 
| 3546     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"V8\", \"Execution\");\n"; | 3738     $code .= "    TRACE_EVENT_SET_SAMPLING_STATE(\"V8\", \"Execution\");\n"; | 
| 3547     $code .= "}\n\n"; | 3739     $code .= "}\n\n"; | 
| 3548     $implementation{nameSpaceInternal}->add($code); | 3740     $implementation{nameSpaceInternal}->add($code); | 
| 3549 } | 3741 } | 
| 3550 | 3742 | 
|  | 3743 ### TODO: use js_value_to_native | 
|  | 3744 ### get_function_call_statements in python | 
| 3551 sub GenerateMethodCall | 3745 sub GenerateMethodCall | 
| 3552 { | 3746 { | 
| 3553     my $returnType = shift; # string or UnionType | 3747     my $returnType = shift; # string or UnionType | 
| 3554     my $returnName = shift; | 3748     my $returnName = shift; | 
| 3555     my $functionExpression = shift; | 3749     my $functionExpression = shift; | 
| 3556     my $firstArgument = shift; | 3750     my $firstArgument = shift; | 
| 3557     my $raisesExceptions = shift; | 3751     my $raisesExceptions = shift; | 
| 3558 | 3752 | 
| 3559     my @arguments = (); | 3753     my @arguments = (); | 
| 3560     push @arguments, $firstArgument; | 3754     push @arguments, $firstArgument; | 
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3787     if (es.throwIfNeeded()) | 3981     if (es.throwIfNeeded()) | 
| 3788         return; | 3982         return; | 
| 3789     if (!result) | 3983     if (!result) | 
| 3790         return; | 3984         return; | 
| 3791     v8SetReturnValueInt(info, v8::None); | 3985     v8SetReturnValueInt(info, v8::None); | 
| 3792 } | 3986 } | 
| 3793 | 3987 | 
| 3794 END | 3988 END | 
| 3795 } | 3989 } | 
| 3796 | 3990 | 
|  | 3991 ### TODO 7/16 | 
| 3797 sub GenerateImplementationLegacyCall | 3992 sub GenerateImplementationLegacyCall | 
| 3798 { | 3993 { | 
| 3799     my $interface = shift; | 3994     my $interface = shift; | 
| 3800     my $code = ""; | 3995     my $code = ""; | 
| 3801 | 3996 | 
| 3802     my $v8ClassName = GetV8ClassName($interface); | 3997     my $v8ClassName = GetV8ClassName($interface); | 
| 3803 | 3998 | 
| 3804     if ($interface->extendedAttributes->{"CustomLegacyCall"}) { | 3999     if ($interface->extendedAttributes->{"CustomLegacyCall"}) { | 
| 3805         $code .= "    desc->InstanceTemplate()->SetCallAsFunctionHandler(${v8Cla
      ssName}::legacyCallCustom);\n"; | 4000         $code .= "    desc->InstanceTemplate()->SetCallAsFunctionHandler(${v8Cla
      ssName}::legacyCallCustom);\n"; | 
| 3806     } | 4001     } | 
| 3807     return $code; | 4002     return $code; | 
| 3808 } | 4003 } | 
| 3809 | 4004 | 
| 3810 sub GenerateImplementationMasqueradesAsUndefined | 4005 sub GenerateImplementationMasqueradesAsUndefined | 
| 3811 { | 4006 { | 
| 3812     my $interface = shift; | 4007     my $interface = shift; | 
| 3813     my $code = ""; | 4008     my $code = ""; | 
| 3814 | 4009 | 
| 3815     if ($interface->extendedAttributes->{"MasqueradesAsUndefined"}) | 4010     if ($interface->extendedAttributes->{"MasqueradesAsUndefined"}) | 
| 3816     { | 4011     { | 
| 3817         $code .= "    desc->InstanceTemplate()->MarkAsUndetectable();\n"; | 4012         $code .= "    desc->InstanceTemplate()->MarkAsUndetectable();\n"; | 
| 3818     } | 4013     } | 
| 3819     return $code; | 4014     return $code; | 
| 3820 } | 4015 } | 
| 3821 | 4016 | 
|  | 4017 # __IMPL__ | 
| 3822 sub GenerateImplementation | 4018 sub GenerateImplementation | 
| 3823 { | 4019 { | 
| 3824     my $object = shift; | 4020     my $object = shift; | 
| 3825     my $interface = shift; | 4021     my $interface = shift; | 
| 3826     my $interfaceName = $interface->name; | 4022     my $interfaceName = $interface->name; | 
| 3827     my $implClassName = GetImplName($interface); | 4023     my $implClassName = GetImplName($interface); | 
| 3828     my $v8ClassName = GetV8ClassName($interface); | 4024     my $v8ClassName = GetV8ClassName($interface); | 
| 3829     my $nativeType = GetNativeTypeForConversions($interface); | 4025     my $nativeType = GetNativeTypeForConversions($interface); | 
| 3830 | 4026 | 
| 3831     AddToImplIncludes("bindings/v8/V8Binding.h"); | 4027     AddToImplIncludes("bindings/v8/V8Binding.h"); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 3845     my $parentClass = ""; | 4041     my $parentClass = ""; | 
| 3846     my $parentClassTemplate = ""; | 4042     my $parentClassTemplate = ""; | 
| 3847     if ($interface->parent) { | 4043     if ($interface->parent) { | 
| 3848         my $parent = $interface->parent; | 4044         my $parent = $interface->parent; | 
| 3849         AddToImplIncludes("V8${parent}.h"); | 4045         AddToImplIncludes("V8${parent}.h"); | 
| 3850         $parentClass = "V8" . $parent; | 4046         $parentClass = "V8" . $parent; | 
| 3851         $parentClassTemplate = $parentClass . "::GetTemplate(isolate, currentWor
      ldType)"; | 4047         $parentClassTemplate = $parentClass . "::GetTemplate(isolate, currentWor
      ldType)"; | 
| 3852     } | 4048     } | 
| 3853 | 4049 | 
| 3854     my $parentClassInfo = $parentClass ? "&${parentClass}::info" : "0"; | 4050     my $parentClassInfo = $parentClass ? "&${parentClass}::info" : "0"; | 
|  | 4051     ### only DOMException isException==True | 
| 3855     my $WrapperTypePrototype = $interface->isException ? "WrapperTypeErrorProtot
      ype" : "WrapperTypeObjectPrototype"; | 4052     my $WrapperTypePrototype = $interface->isException ? "WrapperTypeErrorProtot
      ype" : "WrapperTypeObjectPrototype"; | 
| 3856 | 4053 | 
| 3857     if (!IsSVGTypeNeedingTearOff($interfaceName)) { | 4054     if (!IsSVGTypeNeedingTearOff($interfaceName)) { | 
| 3858         my $code = <<END; | 4055         my $code = <<END; | 
| 3859 static void initializeScriptWrappableForInterface(${implClassName}* object) | 4056 static void initializeScriptWrappableForInterface(${implClassName}* object) | 
| 3860 { | 4057 { | 
| 3861     if (ScriptWrappable::wrapperCanBeStoredInObject(object)) | 4058     if (ScriptWrappable::wrapperCanBeStoredInObject(object)) | 
| 3862         ScriptWrappable::setTypeInfoInObject(object, &${v8ClassName}::info); | 4059         ScriptWrappable::setTypeInfoInObject(object, &${v8ClassName}::info); | 
| 3863     else | 4060     else | 
| 3864         ASSERT_NOT_REACHED(); | 4061         ASSERT_NOT_REACHED(); | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3912         } | 4109         } | 
| 3913 | 4110 | 
| 3914         if ($attrType eq "EventHandler" && $interfaceName eq "Window") { | 4111         if ($attrType eq "EventHandler" && $interfaceName eq "Window") { | 
| 3915             $attrExt->{"OnProto"} = 1; | 4112             $attrExt->{"OnProto"} = 1; | 
| 3916         } | 4113         } | 
| 3917 | 4114 | 
| 3918         if ($attrType eq "SerializedScriptValue") { | 4115         if ($attrType eq "SerializedScriptValue") { | 
| 3919             AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); | 4116             AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); | 
| 3920         } | 4117         } | 
| 3921 | 4118 | 
|  | 4119         ### DONE | 
| 3922         GenerateNormalAttrGetter($attribute, $interface, ""); | 4120         GenerateNormalAttrGetter($attribute, $interface, ""); | 
|  | 4121         ### DONE | 
| 3923         GenerateNormalAttrGetterCallback($attribute, $interface, ""); | 4122         GenerateNormalAttrGetterCallback($attribute, $interface, ""); | 
| 3924         if ($attrExt->{"PerWorldBindings"}) { | 4123         if ($attrExt->{"PerWorldBindings"}) { | 
|  | 4124             ### DONE | 
| 3925             GenerateNormalAttrGetter($attribute, $interface, "ForMainWorld"); | 4125             GenerateNormalAttrGetter($attribute, $interface, "ForMainWorld"); | 
|  | 4126             ### DONE | 
| 3926             GenerateNormalAttrGetterCallback($attribute, $interface, "ForMainWor
      ld"); | 4127             GenerateNormalAttrGetterCallback($attribute, $interface, "ForMainWor
      ld"); | 
| 3927         } | 4128         } | 
| 3928         if (!HasCustomSetter($attrExt) && $attrExt->{"Replaceable"}) { | 4129         if (!HasCustomSetter($attrExt) && $attrExt->{"Replaceable"}) { | 
|  | 4130             ### TODO | 
| 3929             $hasReplaceable = 1; | 4131             $hasReplaceable = 1; | 
| 3930         } elsif (!IsReadonly($attribute)) { | 4132         } elsif (!IsReadonly($attribute)) { | 
|  | 4133             ### DONE(basic) | 
| 3931             GenerateNormalAttrSetter($attribute, $interface, ""); | 4134             GenerateNormalAttrSetter($attribute, $interface, ""); | 
|  | 4135             ### DONE | 
| 3932             GenerateNormalAttrSetterCallback($attribute, $interface, ""); | 4136             GenerateNormalAttrSetterCallback($attribute, $interface, ""); | 
| 3933             if ($attrExt->{"PerWorldBindings"}) { | 4137             if ($attrExt->{"PerWorldBindings"}) { | 
|  | 4138               ### DONE(basic) | 
| 3934               GenerateNormalAttrSetter($attribute, $interface, "ForMainWorld"); | 4139               GenerateNormalAttrSetter($attribute, $interface, "ForMainWorld"); | 
|  | 4140               ### DONE | 
| 3935               GenerateNormalAttrSetterCallback($attribute, $interface, "ForMainW
      orld"); | 4141               GenerateNormalAttrSetterCallback($attribute, $interface, "ForMainW
      orld"); | 
| 3936             } | 4142             } | 
| 3937         } | 4143         } | 
| 3938     } | 4144     } | 
| 3939 | 4145 | 
| 3940     if ($hasConstructors) { | 4146     if ($hasConstructors) { | 
|  | 4147         ### TODO | 
| 3941         GenerateConstructorGetter($interface); | 4148         GenerateConstructorGetter($interface); | 
| 3942     } | 4149     } | 
| 3943 | 4150 | 
| 3944     if ($hasConstructors || $hasReplaceable) { | 4151     if ($hasConstructors || $hasReplaceable) { | 
|  | 4152         ### TODO | 
| 3945         GenerateReplaceableAttrSetter($interface); | 4153         GenerateReplaceableAttrSetter($interface); | 
|  | 4154         ### TODO | 
| 3946         GenerateReplaceableAttrSetterCallback($interface); | 4155         GenerateReplaceableAttrSetterCallback($interface); | 
| 3947     } | 4156     } | 
| 3948 | 4157 | 
| 3949     if (NeedsOpaqueRootForGC($interface)) { | 4158     if (NeedsOpaqueRootForGC($interface)) { | 
|  | 4159         ### DONE | 
| 3950         GenerateOpaqueRootForGC($interface); | 4160         GenerateOpaqueRootForGC($interface); | 
| 3951     } | 4161     } | 
| 3952 | 4162 | 
| 3953     if ($interface->extendedAttributes->{"CheckSecurity"} && $interface->name ne
       "Window") { | 4163     if ($interface->extendedAttributes->{"CheckSecurity"} && $interface->name ne
       "Window") { | 
|  | 4164         ### TODO | 
| 3954         GenerateSecurityCheckFunctions($interface); | 4165         GenerateSecurityCheckFunctions($interface); | 
| 3955     } | 4166     } | 
| 3956 | 4167 | 
|  | 4168     ### TODO | 
| 3957     if (IsConstructorTemplate($interface, "TypedArray")) { | 4169     if (IsConstructorTemplate($interface, "TypedArray")) { | 
| 3958         my ($nativeType, $arrayType) = GetNativeTypeOfTypedArray($interface); | 4170         my ($nativeType, $arrayType) = GetNativeTypeOfTypedArray($interface); | 
| 3959         $implementation{nameSpaceWebCore}->add(<<END); | 4171         $implementation{nameSpaceWebCore}->add(<<END); | 
| 3960 v8::Handle<v8::Object> wrap($implClassName* impl, v8::Handle<v8::Object> creatio
      nContext, v8::Isolate* isolate) | 4172 v8::Handle<v8::Object> wrap($implClassName* impl, v8::Handle<v8::Object> creatio
      nContext, v8::Isolate* isolate) | 
| 3961 { | 4173 { | 
| 3962     ASSERT(impl); | 4174     ASSERT(impl); | 
| 3963     v8::Handle<v8::Object> wrapper = ${v8ClassName}::createWrapper(impl, creatio
      nContext, isolate); | 4175     v8::Handle<v8::Object> wrapper = ${v8ClassName}::createWrapper(impl, creatio
      nContext, isolate); | 
| 3964     if (!wrapper.IsEmpty()) | 4176     if (!wrapper.IsEmpty()) | 
| 3965         wrapper->SetIndexedPropertiesToExternalArrayData(impl->baseAddress(), $a
      rrayType, impl->length()); | 4177         wrapper->SetIndexedPropertiesToExternalArrayData(impl->baseAddress(), $a
      rrayType, impl->length()); | 
| 3966     return wrapper; | 4178     return wrapper; | 
| 3967 } | 4179 } | 
| 3968 | 4180 | 
| 3969 END | 4181 END | 
| 3970     } | 4182     } | 
| 3971 | 4183 | 
| 3972     my @enabledPerContextFunctions; | 4184     my @enabledPerContextFunctions; | 
| 3973     my @normalFunctions; | 4185     my @normalFunctions; | 
| 3974     my $needsDomainSafeFunctionSetter = 0; | 4186     my $needsDomainSafeFunctionSetter = 0; | 
| 3975     # Generate methods for functions. | 4187     # Generate methods for functions. | 
| 3976     foreach my $function (@{$interface->functions}) { | 4188     foreach my $function (@{$interface->functions}) { | 
| 3977         next if $function->name eq ""; | 4189         next if $function->name eq ""; | 
|  | 4190         ### DONE (basic) | 
| 3978         GenerateFunction($function, $interface, ""); | 4191         GenerateFunction($function, $interface, ""); | 
| 3979         if ($function->extendedAttributes->{"PerWorldBindings"}) { | 4192         if ($function->extendedAttributes->{"PerWorldBindings"}) { | 
|  | 4193             ### TODO | 
| 3980             GenerateFunction($function, $interface, "ForMainWorld"); | 4194             GenerateFunction($function, $interface, "ForMainWorld"); | 
| 3981         } | 4195         } | 
| 3982         if ($function->{overloadIndex} == @{$function->{overloads}}) { | 4196         if ($function->{overloadIndex} == @{$function->{overloads}}) { | 
|  | 4197             ### TODO | 
| 3983             if ($function->{overloadIndex} > 1) { | 4198             if ($function->{overloadIndex} > 1) { | 
| 3984                 GenerateOverloadedFunction($function, $interface, ""); | 4199                 GenerateOverloadedFunction($function, $interface, ""); | 
| 3985                 if ($function->extendedAttributes->{"PerWorldBindings"}) { | 4200                 if ($function->extendedAttributes->{"PerWorldBindings"}) { | 
| 3986                     GenerateOverloadedFunction($function, $interface, "ForMainWo
      rld"); | 4201                     GenerateOverloadedFunction($function, $interface, "ForMainWo
      rld"); | 
| 3987                 } | 4202                 } | 
| 3988             } | 4203             } | 
|  | 4204             ### DONE | 
| 3989             GenerateFunctionCallback($function, $interface, ""); | 4205             GenerateFunctionCallback($function, $interface, ""); | 
| 3990             if ($function->extendedAttributes->{"PerWorldBindings"}) { | 4206             if ($function->extendedAttributes->{"PerWorldBindings"}) { | 
|  | 4207                 ### TODO | 
| 3991                 GenerateFunctionCallback($function, $interface, "ForMainWorld"); | 4208                 GenerateFunctionCallback($function, $interface, "ForMainWorld"); | 
| 3992             } | 4209             } | 
| 3993         } | 4210         } | 
| 3994 | 4211 | 
| 3995         # If the function does not need domain security check, we need to | 4212         # If the function does not need domain security check, we need to | 
| 3996         # generate an access getter that returns different function objects | 4213         # generate an access getter that returns different function objects | 
| 3997         # for different calling context. | 4214         # for different calling context. | 
|  | 4215         ### TODO | 
| 3998         if ($interface->extendedAttributes->{"CheckSecurity"} && $function->exte
      ndedAttributes->{"DoNotCheckSecurity"}) { | 4216         if ($interface->extendedAttributes->{"CheckSecurity"} && $function->exte
      ndedAttributes->{"DoNotCheckSecurity"}) { | 
| 3999             if (!HasCustomMethod($function->extendedAttributes) || $function->{o
      verloadIndex} == 1) { | 4217             if (!HasCustomMethod($function->extendedAttributes) || $function->{o
      verloadIndex} == 1) { | 
| 4000                 GenerateDomainSafeFunctionGetter($function, $interface); | 4218                 GenerateDomainSafeFunctionGetter($function, $interface); | 
| 4001                 if (!$function->extendedAttributes->{"ReadOnly"}) { | 4219                 if (!$function->extendedAttributes->{"ReadOnly"}) { | 
| 4002                     $needsDomainSafeFunctionSetter = 1; | 4220                     $needsDomainSafeFunctionSetter = 1; | 
| 4003                 } | 4221                 } | 
| 4004             } | 4222             } | 
| 4005         } | 4223         } | 
| 4006 | 4224 | 
|  | 4225         ### TODO | 
| 4007         # Separate out functions that are enabled per context so we can process 
      them specially. | 4226         # Separate out functions that are enabled per context so we can process 
      them specially. | 
| 4008         if ($function->extendedAttributes->{"EnabledPerContext"}) { | 4227         if ($function->extendedAttributes->{"EnabledPerContext"}) { | 
| 4009             push(@enabledPerContextFunctions, $function); | 4228             push(@enabledPerContextFunctions, $function); | 
| 4010         } else { | 4229         } else { | 
| 4011             push(@normalFunctions, $function); | 4230             push(@normalFunctions, $function); | 
| 4012         } | 4231         } | 
| 4013     } | 4232     } | 
| 4014 | 4233 | 
| 4015     if ($needsDomainSafeFunctionSetter) { | 4234     if ($needsDomainSafeFunctionSetter) { | 
|  | 4235         ### TODO | 
| 4016         GenerateDomainSafeFunctionSetter($interface); | 4236         GenerateDomainSafeFunctionSetter($interface); | 
| 4017     } | 4237     } | 
| 4018 | 4238 | 
| 4019     # Attributes | 4239     # Attributes | 
| 4020     my $attributes = $interface->attributes; | 4240     my $attributes = $interface->attributes; | 
| 4021 | 4241 | 
| 4022     # For the Window interface we partition the attributes into the | 4242     # For the Window interface we partition the attributes into the | 
| 4023     # ones that disallows shadowing and the rest. | 4243     # ones that disallows shadowing and the rest. | 
| 4024     my @disallowsShadowing; | 4244     my @disallowsShadowing; | 
| 4025     # Also separate out attributes that are enabled at runtime so we can process
       them specially. | 4245     # Also separate out attributes that are enabled at runtime so we can process
       them specially. | 
| 4026     my @enabledAtRuntimeAttributes; | 4246     my @enabledAtRuntimeAttributes; | 
| 4027     my @enabledPerContextAttributes; | 4247     my @enabledPerContextAttributes; | 
| 4028     my @normalAttributes; | 4248     my @normalAttributes; | 
| 4029     foreach my $attribute (@$attributes) { | 4249     foreach my $attribute (@$attributes) { | 
| 4030 | 4250 | 
|  | 4251         ### TODO | 
| 4031         if ($interfaceName eq "Window" && $attribute->extendedAttributes->{"Unfo
      rgeable"}) { | 4252         if ($interfaceName eq "Window" && $attribute->extendedAttributes->{"Unfo
      rgeable"}) { | 
| 4032             push(@disallowsShadowing, $attribute); | 4253             push(@disallowsShadowing, $attribute); | 
| 4033         } elsif ($attribute->extendedAttributes->{"EnabledAtRuntime"} || $attrib
      ute->extendedAttributes->{"EnabledPerContext"}) { | 4254         } elsif ($attribute->extendedAttributes->{"EnabledAtRuntime"} || $attrib
      ute->extendedAttributes->{"EnabledPerContext"}) { | 
| 4034             if ($attribute->extendedAttributes->{"EnabledPerContext"}) { | 4255             if ($attribute->extendedAttributes->{"EnabledPerContext"}) { | 
| 4035                 push(@enabledPerContextAttributes, $attribute); | 4256                 push(@enabledPerContextAttributes, $attribute); | 
| 4036             } | 4257             } | 
| 4037             if ($attribute->extendedAttributes->{"EnabledAtRuntime"}) { | 4258             if ($attribute->extendedAttributes->{"EnabledAtRuntime"}) { | 
| 4038                 push(@enabledAtRuntimeAttributes, $attribute); | 4259                 push(@enabledAtRuntimeAttributes, $attribute); | 
| 4039             } | 4260             } | 
| 4040         } else { | 4261         } else { | 
| 4041             push(@normalAttributes, $attribute); | 4262             push(@normalAttributes, $attribute); | 
| 4042         } | 4263         } | 
| 4043     } | 4264     } | 
| 4044     AddToImplIncludes("bindings/v8/V8DOMConfiguration.h"); | 4265     AddToImplIncludes("bindings/v8/V8DOMConfiguration.h"); | 
| 4045     $attributes = \@normalAttributes; | 4266     $attributes = \@normalAttributes; | 
| 4046     # Put the attributes that disallow shadowing on the shadow object. | 4267     # Put the attributes that disallow shadowing on the shadow object. | 
|  | 4268     ### DONE | 
| 4047     if (@disallowsShadowing) { | 4269     if (@disallowsShadowing) { | 
| 4048         my $code = ""; | 4270         my $code = ""; | 
| 4049         $code .= "static const V8DOMConfiguration::BatchedAttribute shadowAttrs[
      ] = {\n"; | 4271         $code .= "static const V8DOMConfiguration::BatchedAttribute shadowAttrs[
      ] = {\n"; | 
| 4050         $code .= GenerateBatchedAttributeData($interface, \@disallowsShadowing); | 4272         $code .= GenerateBatchedAttributeData($interface, \@disallowsShadowing); | 
| 4051         $code .= "};\n\n"; | 4273         $code .= "};\n\n"; | 
| 4052         $implementation{nameSpaceWebCore}->add($code); | 4274         $implementation{nameSpaceWebCore}->add($code); | 
| 4053     } | 4275     } | 
| 4054 | 4276 | 
|  | 4277 #    use Data::Dumper; | 
|  | 4278 #    print "GEHEHE", Dumper($attributes), "\n" if $interface->name eq "File"; | 
| 4055     my $has_attributes = 0; | 4279     my $has_attributes = 0; | 
| 4056     if (@$attributes) { | 4280     if (@$attributes) { | 
| 4057         $has_attributes = 1; | 4281         $has_attributes = 1; | 
| 4058         my $code = ""; | 4282         my $code = ""; | 
| 4059         $code .= "static const V8DOMConfiguration::BatchedAttribute ${v8ClassNam
      e}Attrs[] = {\n"; | 4283         $code .= "static const V8DOMConfiguration::BatchedAttribute ${v8ClassNam
      e}Attrs[] = {\n"; | 
| 4060         $code .= GenerateBatchedAttributeData($interface, $attributes); | 4284         $code .= GenerateBatchedAttributeData($interface, $attributes); | 
| 4061         $code .= "};\n\n"; | 4285         $code .= "};\n\n"; | 
| 4062         $implementation{nameSpaceWebCore}->add($code); | 4286         $implementation{nameSpaceWebCore}->add($code); | 
| 4063     } | 4287     } | 
| 4064 | 4288 | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4099     $code = ""; | 4323     $code = ""; | 
| 4100     if (@{$interface->constants}) { | 4324     if (@{$interface->constants}) { | 
| 4101         $has_constants = 1; | 4325         $has_constants = 1; | 
| 4102         $code .= "static const V8DOMConfiguration::BatchedConstant ${v8ClassName
      }Consts[] = {\n"; | 4326         $code .= "static const V8DOMConfiguration::BatchedConstant ${v8ClassName
      }Consts[] = {\n"; | 
| 4103     } | 4327     } | 
| 4104     foreach my $constant (@{$interface->constants}) { | 4328     foreach my $constant (@{$interface->constants}) { | 
| 4105         my $name = $constant->name; | 4329         my $name = $constant->name; | 
| 4106         my $value = $constant->value; | 4330         my $value = $constant->value; | 
| 4107         my $attrExt = $constant->extendedAttributes; | 4331         my $attrExt = $constant->extendedAttributes; | 
| 4108         my $implementedBy = $attrExt->{"ImplementedBy"}; | 4332         my $implementedBy = $attrExt->{"ImplementedBy"}; | 
|  | 4333         ### DONE | 
| 4109         if ($implementedBy) { | 4334         if ($implementedBy) { | 
| 4110             my $implementedByImplName = GetImplNameFromImplementedBy($implemente
      dBy); | 4335             my $implementedByImplName = GetImplNameFromImplementedBy($implemente
      dBy); | 
| 4111             AddToImplIncludes(HeaderFilesForInterface($implementedBy, $implement
      edByImplName)); | 4336             AddToImplIncludes(HeaderFilesForInterface($implementedBy, $implement
      edByImplName)); | 
| 4112         } | 4337         } | 
| 4113         if ($attrExt->{"EnabledAtRuntime"}) { | 4338         if ($attrExt->{"EnabledAtRuntime"}) { | 
|  | 4339             ### TODO | 
| 4114             push(@constantsEnabledAtRuntime, $constant); | 4340             push(@constantsEnabledAtRuntime, $constant); | 
| 4115         } else { | 4341         } else { | 
|  | 4342             ### DONE | 
| 4116             my $conditionalString = GenerateConditionalString($constant); | 4343             my $conditionalString = GenerateConditionalString($constant); | 
| 4117             $code .= "#if ${conditionalString}\n" if $conditionalString; | 4344             $code .= "#if ${conditionalString}\n" if $conditionalString; | 
| 4118             # If the value we're dealing with is a hex number, preprocess it int
      o a signed integer | 4345             # If the value we're dealing with is a hex number, preprocess it int
      o a signed integer | 
| 4119             # here, rather than running static_cast<signed int> in the generated
       code. | 4346             # here, rather than running static_cast<signed int> in the generated
       code. | 
| 4120             if (substr($value, 0, 2) eq "0x") { | 4347             if (substr($value, 0, 2) eq "0x") { | 
| 4121               $value = unpack('i', pack('I', hex($value))); | 4348               $value = unpack('i', pack('I', hex($value))); | 
| 4122             } | 4349             } | 
| 4123             $code .= <<END; | 4350             $code .= <<END; | 
| 4124     {"${name}", $value}, | 4351     {"${name}", $value}, | 
| 4125 END | 4352 END | 
| 4126             $code .= "#endif\n" if $conditionalString; | 4353             $code .= "#endif\n" if $conditionalString; | 
| 4127         } | 4354         } | 
| 4128     } | 4355     } | 
| 4129     if ($has_constants) { | 4356     if ($has_constants) { | 
| 4130         $code .= "};\n\n"; | 4357         $code .= "};\n\n"; | 
| 4131         $code .= join "", GenerateCompileTimeCheckForEnumsIfNeeded($interface); | 4358         $code .= join "", GenerateCompileTimeCheckForEnumsIfNeeded($interface); | 
| 4132         $implementation{nameSpaceWebCore}->add($code); | 4359         $implementation{nameSpaceWebCore}->add($code); | 
| 4133     } | 4360     } | 
| 4134 | 4361 | 
|  | 4362     ### working | 
| 4135     if (!HasCustomConstructor($interface)) { | 4363     if (!HasCustomConstructor($interface)) { | 
| 4136         if ($interface->extendedAttributes->{"NamedConstructor"}) { | 4364         if ($interface->extendedAttributes->{"NamedConstructor"}) { | 
|  | 4365             ### DONE | 
| 4137             GenerateNamedConstructor(@{$interface->constructors}[0], $interface)
      ; | 4366             GenerateNamedConstructor(@{$interface->constructors}[0], $interface)
      ; | 
| 4138         } elsif ($interface->extendedAttributes->{"Constructor"}) { | 4367         } elsif ($interface->extendedAttributes->{"Constructor"}) { | 
|  | 4368             ### DONE | 
| 4139             GenerateConstructor($interface); | 4369             GenerateConstructor($interface); | 
| 4140         } elsif (IsConstructorTemplate($interface, "Event")) { | 4370         } elsif (IsConstructorTemplate($interface, "Event")) { | 
|  | 4371             ### TODO | 
| 4141             GenerateEventConstructor($interface); | 4372             GenerateEventConstructor($interface); | 
| 4142         } | 4373         } | 
| 4143     } | 4374     } | 
| 4144     if (IsConstructable($interface)) { | 4375     if (IsConstructable($interface)) { | 
|  | 4376         ### DONE | 
| 4145         GenerateConstructorCallback($interface); | 4377         GenerateConstructorCallback($interface); | 
| 4146     } | 4378     } | 
| 4147 | 4379 | 
|  | 4380     ### DONE | 
| 4148     my $access_check = ""; | 4381     my $access_check = ""; | 
| 4149     if ($interface->extendedAttributes->{"CheckSecurity"} && $interfaceName ne "
      Window") { | 4382     if ($interface->extendedAttributes->{"CheckSecurity"} && $interfaceName ne "
      Window") { | 
| 4150         $access_check = "instance->SetAccessCheckCallbacks(${implClassName}V8Int
      ernal::namedSecurityCheck, ${implClassName}V8Internal::indexedSecurityCheck, v8:
      :External::New(&${v8ClassName}::info));"; | 4383         $access_check = "instance->SetAccessCheckCallbacks(${implClassName}V8Int
      ernal::namedSecurityCheck, ${implClassName}V8Internal::indexedSecurityCheck, v8:
      :External::New(&${v8ClassName}::info));"; | 
| 4151     } | 4384     } | 
| 4152 | 4385 | 
|  | 4386     ### TODO | 
| 4153     # For the Window interface, generate the shadow object template | 4387     # For the Window interface, generate the shadow object template | 
| 4154     # configuration method. | 4388     # configuration method. | 
| 4155     if ($interfaceName eq "Window") { | 4389     if ($interfaceName eq "Window") { | 
| 4156         $implementation{nameSpaceWebCore}->add(<<END); | 4390         $implementation{nameSpaceWebCore}->add(<<END); | 
| 4157 static void ConfigureShadowObjectTemplate(v8::Handle<v8::ObjectTemplate> templ, 
      v8::Isolate* isolate, WrapperWorldType currentWorldType) | 4391 static void ConfigureShadowObjectTemplate(v8::Handle<v8::ObjectTemplate> templ, 
      v8::Isolate* isolate, WrapperWorldType currentWorldType) | 
| 4158 { | 4392 { | 
| 4159     V8DOMConfiguration::batchConfigureAttributes(templ, v8::Handle<v8::ObjectTem
      plate>(), shadowAttrs, WTF_ARRAY_LENGTH(shadowAttrs), isolate, currentWorldType)
      ; | 4393     V8DOMConfiguration::batchConfigureAttributes(templ, v8::Handle<v8::ObjectTem
      plate>(), shadowAttrs, WTF_ARRAY_LENGTH(shadowAttrs), isolate, currentWorldType)
      ; | 
| 4160 | 4394 | 
| 4161     // Install a security handler with V8. | 4395     // Install a security handler with V8. | 
| 4162     templ->SetAccessCheckCallbacks(V8Window::namedSecurityCheckCustom, V8Window:
      :indexedSecurityCheckCustom, v8::External::New(&V8Window::info)); | 4396     templ->SetAccessCheckCallbacks(V8Window::namedSecurityCheckCustom, V8Window:
      :indexedSecurityCheckCustom, v8::External::New(&V8Window::info)); | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4207         $code .= <<END; | 4441         $code .= <<END; | 
| 4208         0, 0, isolate, currentWorldType); | 4442         0, 0, isolate, currentWorldType); | 
| 4209 END | 4443 END | 
| 4210     } | 4444     } | 
| 4211 | 4445 | 
| 4212     AddToImplIncludes("wtf/UnusedParam.h"); | 4446     AddToImplIncludes("wtf/UnusedParam.h"); | 
| 4213     $code .= <<END; | 4447     $code .= <<END; | 
| 4214     UNUSED_PARAM(defaultSignature); // In some cases, it will not be used. | 4448     UNUSED_PARAM(defaultSignature); // In some cases, it will not be used. | 
| 4215 END | 4449 END | 
| 4216 | 4450 | 
|  | 4451     ### TODO | 
| 4217     if (IsConstructable($interface)) { | 4452     if (IsConstructable($interface)) { | 
| 4218         $code .= "    desc->SetCallHandler(${v8ClassName}::constructorCallback);
      \n"; | 4453         $code .= "    desc->SetCallHandler(${v8ClassName}::constructorCallback);
      \n"; | 
| 4219         my $interfaceLength = GetInterfaceLength($interface); | 4454         my $interfaceLength = GetInterfaceLength($interface); | 
| 4220         $code .= "    desc->SetLength(${interfaceLength});\n"; | 4455         $code .= "    desc->SetLength(${interfaceLength});\n"; | 
| 4221     } | 4456     } | 
| 4222 | 4457 | 
|  | 4458     ### DONE | 
| 4223     if ($access_check or @enabledAtRuntimeAttributes or @normalFunctions or $has
      _constants) { | 4459     if ($access_check or @enabledAtRuntimeAttributes or @normalFunctions or $has
      _constants) { | 
| 4224         $code .=  <<END; | 4460         $code .=  <<END; | 
| 4225     v8::Local<v8::ObjectTemplate> instance = desc->InstanceTemplate(); | 4461     v8::Local<v8::ObjectTemplate> instance = desc->InstanceTemplate(); | 
| 4226     v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate(); | 4462     v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate(); | 
| 4227     UNUSED_PARAM(instance); // In some cases, it will not be used. | 4463     UNUSED_PARAM(instance); // In some cases, it will not be used. | 
| 4228     UNUSED_PARAM(proto); // In some cases, it will not be used. | 4464     UNUSED_PARAM(proto); // In some cases, it will not be used. | 
| 4229 END | 4465 END | 
| 4230     } | 4466     } | 
| 4231 | 4467 | 
|  | 4468     ### DONE | 
| 4232     if ($access_check) { | 4469     if ($access_check) { | 
| 4233         $code .=  "    $access_check\n"; | 4470         $code .=  "    $access_check\n"; | 
| 4234     } | 4471     } | 
| 4235 | 4472 | 
|  | 4473     ### DONE | 
| 4236     # Setup the enable-at-runtime attrs if we have them | 4474     # Setup the enable-at-runtime attrs if we have them | 
| 4237     foreach my $runtime_attr (@enabledAtRuntimeAttributes) { | 4475     foreach my $runtime_attr (@enabledAtRuntimeAttributes) { | 
| 4238         next if grep { $_ eq $runtime_attr } @enabledPerContextAttributes; | 4476         next if grep { $_ eq $runtime_attr } @enabledPerContextAttributes; | 
| 4239         my $enable_function = GetRuntimeEnableFunctionName($runtime_attr); | 4477         my $enable_function = GetRuntimeEnableFunctionName($runtime_attr); | 
| 4240         my $conditionalString = GenerateConditionalString($runtime_attr); | 4478         my $conditionalString = GenerateConditionalString($runtime_attr); | 
| 4241         $code .= "\n#if ${conditionalString}\n" if $conditionalString; | 4479         $code .= "\n#if ${conditionalString}\n" if $conditionalString; | 
| 4242         $code .= "    if (${enable_function}()) {\n"; | 4480         $code .= "    if (${enable_function}()) {\n"; | 
| 4243         $code .= "        static const V8DOMConfiguration::BatchedAttribute attr
      Data =\\\n"; | 4481         $code .= "        static const V8DOMConfiguration::BatchedAttribute attr
      Data =\\\n"; | 
| 4244         $code .= GenerateSingleBatchedAttribute($interface, $runtime_attr, ";", 
      "    "); | 4482         $code .= GenerateSingleBatchedAttribute($interface, $runtime_attr, ";", 
      "    "); | 
| 4245         $code .= <<END; | 4483         $code .= <<END; | 
| 4246         V8DOMConfiguration::configureAttribute(instance, proto, attrData, isolat
      e, currentWorldType); | 4484         V8DOMConfiguration::configureAttribute(instance, proto, attrData, isolat
      e, currentWorldType); | 
| 4247     } | 4485     } | 
| 4248 END | 4486 END | 
| 4249         $code .= "\n#endif // ${conditionalString}\n" if $conditionalString; | 4487         $code .= "\n#endif // ${conditionalString}\n" if $conditionalString; | 
| 4250     } | 4488     } | 
| 4251 | 4489 | 
|  | 4490     ### DONE | 
| 4252     # Setup the enable-at-runtime constants if we have them | 4491     # Setup the enable-at-runtime constants if we have them | 
| 4253     foreach my $runtime_const (@constantsEnabledAtRuntime) { | 4492     foreach my $runtime_const (@constantsEnabledAtRuntime) { | 
| 4254         my $enable_function = GetRuntimeEnableFunctionName($runtime_const); | 4493         my $enable_function = GetRuntimeEnableFunctionName($runtime_const); | 
| 4255         my $conditionalString = GenerateConditionalString($runtime_const); | 4494         my $conditionalString = GenerateConditionalString($runtime_const); | 
| 4256         my $name = $runtime_const->name; | 4495         my $name = $runtime_const->name; | 
| 4257         my $value = $runtime_const->value; | 4496         my $value = $runtime_const->value; | 
| 4258         $code .= "\n#if ${conditionalString}\n" if $conditionalString; | 4497         $code .= "\n#if ${conditionalString}\n" if $conditionalString; | 
| 4259         $code .= "    if (${enable_function}()) {\n"; | 4498         $code .= "    if (${enable_function}()) {\n"; | 
| 4260         $code .= <<END; | 4499         $code .= <<END; | 
| 4261         static const V8DOMConfiguration::BatchedConstant constData = {"${name}",
       static_cast<signed int>(${value})}; | 4500         static const V8DOMConfiguration::BatchedConstant constData = {"${name}",
       static_cast<signed int>(${value})}; | 
| 4262         V8DOMConfiguration::batchConfigureConstants(desc, proto, &constData, 1, 
      isolate); | 4501         V8DOMConfiguration::batchConfigureConstants(desc, proto, &constData, 1, 
      isolate); | 
| 4263 END | 4502 END | 
| 4264         $code .= "    }\n"; | 4503         $code .= "    }\n"; | 
| 4265         $code .= "\n#endif // ${conditionalString}\n" if $conditionalString; | 4504         $code .= "\n#endif // ${conditionalString}\n" if $conditionalString; | 
| 4266     } | 4505     } | 
| 4267 | 4506 | 
|  | 4507     ### TODO | 
| 4268     $code .= GenerateImplementationIndexedPropertyAccessors($interface); | 4508     $code .= GenerateImplementationIndexedPropertyAccessors($interface); | 
|  | 4509     ### TODO | 
| 4269     $code .= GenerateImplementationNamedPropertyAccessors($interface); | 4510     $code .= GenerateImplementationNamedPropertyAccessors($interface); | 
|  | 4511     ### TODO | 
| 4270     $code .= GenerateImplementationLegacyCall($interface); | 4512     $code .= GenerateImplementationLegacyCall($interface); | 
|  | 4513     ### TODO | 
| 4271     $code .= GenerateImplementationMasqueradesAsUndefined($interface); | 4514     $code .= GenerateImplementationMasqueradesAsUndefined($interface); | 
| 4272 | 4515 | 
| 4273     # Define our functions with Set() or SetAccessor() | 4516     # Define our functions with Set() or SetAccessor() | 
| 4274     my $total_functions = 0; | 4517     my $total_functions = 0; | 
| 4275     foreach my $function (@normalFunctions) { | 4518     foreach my $function (@normalFunctions) { | 
| 4276         # Only one accessor is needed for overloaded methods: | 4519         # Only one accessor is needed for overloaded methods: | 
| 4277         next if $function->{overloadIndex} > 1; | 4520         next if $function->{overloadIndex} > 1; | 
| 4278         next if $function->name eq ""; | 4521         next if $function->name eq ""; | 
| 4279 | 4522 | 
| 4280         $total_functions++; | 4523         $total_functions++; | 
| 4281         next if IsStandardFunction($interface, $function); | 4524         next if IsStandardFunction($interface, $function); | 
|  | 4525         ### DONE | 
| 4282         $code .= GenerateNonStandardFunction($interface, $function); | 4526         $code .= GenerateNonStandardFunction($interface, $function); | 
| 4283         $num_callbacks++; | 4527         $num_callbacks++; | 
| 4284     } | 4528     } | 
| 4285 | 4529 | 
| 4286     die "Wrong number of callbacks generated for $interfaceName ($num_callbacks,
       should be $total_functions)" if $num_callbacks != $total_functions; | 4530     die "Wrong number of callbacks generated for $interfaceName ($num_callbacks,
       should be $total_functions)" if $num_callbacks != $total_functions; | 
| 4287 | 4531 | 
|  | 4532     ### DONE | 
| 4288     if ($has_constants) { | 4533     if ($has_constants) { | 
| 4289         $code .= <<END; | 4534         $code .= <<END; | 
| 4290     V8DOMConfiguration::batchConfigureConstants(desc, proto, ${v8ClassName}Const
      s, WTF_ARRAY_LENGTH(${v8ClassName}Consts), isolate); | 4535     V8DOMConfiguration::batchConfigureConstants(desc, proto, ${v8ClassName}Const
      s, WTF_ARRAY_LENGTH(${v8ClassName}Consts), isolate); | 
| 4291 END | 4536 END | 
| 4292     } | 4537     } | 
| 4293 | 4538 | 
| 4294     # Special cases | 4539     # Special cases | 
|  | 4540     ### TODO | 
| 4295     if ($interfaceName eq "Window") { | 4541     if ($interfaceName eq "Window") { | 
| 4296         $code .= <<END; | 4542         $code .= <<END; | 
| 4297 | 4543 | 
| 4298     proto->SetInternalFieldCount(V8Window::internalFieldCount); | 4544     proto->SetInternalFieldCount(V8Window::internalFieldCount); | 
| 4299     desc->SetHiddenPrototype(true); | 4545     desc->SetHiddenPrototype(true); | 
| 4300     instance->SetInternalFieldCount(V8Window::internalFieldCount); | 4546     instance->SetInternalFieldCount(V8Window::internalFieldCount); | 
| 4301     // Set access check callbacks, but turned off initially. | 4547     // Set access check callbacks, but turned off initially. | 
| 4302     // When a context is detached from a frame, turn on the access check. | 4548     // When a context is detached from a frame, turn on the access check. | 
| 4303     // Turning on checks also invalidates inline caches of the object. | 4549     // Turning on checks also invalidates inline caches of the object. | 
| 4304     instance->SetAccessCheckCallbacks(V8Window::namedSecurityCheckCustom, V8Wind
      ow::indexedSecurityCheckCustom, v8::External::New(&V8Window::info), false); | 4550     instance->SetAccessCheckCallbacks(V8Window::namedSecurityCheckCustom, V8Wind
      ow::indexedSecurityCheckCustom, v8::External::New(&V8Window::info), false); | 
| 4305 END | 4551 END | 
| 4306     } | 4552     } | 
|  | 4553     ### TODO | 
| 4307     if ($interfaceName eq "HTMLDocument" or $interfaceName eq "DedicatedWorkerGl
      obalScope" or $interfaceName eq "SharedWorkerGlobalScope") { | 4554     if ($interfaceName eq "HTMLDocument" or $interfaceName eq "DedicatedWorkerGl
      obalScope" or $interfaceName eq "SharedWorkerGlobalScope") { | 
| 4308         $code .= <<END; | 4555         $code .= <<END; | 
| 4309     desc->SetHiddenPrototype(true); | 4556     desc->SetHiddenPrototype(true); | 
| 4310 END | 4557 END | 
| 4311     } | 4558     } | 
| 4312 | 4559 | 
|  | 4560     ### DONE | 
| 4313     $code .= <<END; | 4561     $code .= <<END; | 
| 4314 | 4562 | 
| 4315     // Custom toString template | 4563     // Custom toString template | 
| 4316     desc->Set(v8::String::NewSymbol("toString"), V8PerIsolateData::current()->to
      StringTemplate()); | 4564     desc->Set(v8::String::NewSymbol("toString"), V8PerIsolateData::current()->to
      StringTemplate()); | 
| 4317     return desc; | 4565     return desc; | 
| 4318 } | 4566 } | 
| 4319 | 4567 | 
| 4320 END | 4568 END | 
| 4321     $implementation{nameSpaceWebCore}->add($code); | 4569     $implementation{nameSpaceWebCore}->add($code); | 
| 4322 | 4570 | 
| 4323     $implementation{nameSpaceWebCore}->add(<<END); | 4571     $implementation{nameSpaceWebCore}->add(<<END); | 
| 4324 v8::Handle<v8::FunctionTemplate> ${v8ClassName}::GetTemplate(v8::Isolate* isolat
      e, WrapperWorldType currentWorldType) | 4572 v8::Handle<v8::FunctionTemplate> ${v8ClassName}::GetTemplate(v8::Isolate* isolat
      e, WrapperWorldType currentWorldType) | 
| 4325 { | 4573 { | 
| 4326     V8PerIsolateData* data = V8PerIsolateData::from(isolate); | 4574     V8PerIsolateData* data = V8PerIsolateData::from(isolate); | 
| 4327     V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWo
      rldType).find(&info); | 4575     V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWo
      rldType).find(&info); | 
| 4328     if (result != data->templateMap(currentWorldType).end()) | 4576     if (result != data->templateMap(currentWorldType).end()) | 
| 4329         return result->value.newLocal(isolate); | 4577         return result->value.newLocal(isolate); | 
| 4330 | 4578 | 
| 4331     TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); | 4579     TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); | 
| 4332     v8::HandleScope handleScope(isolate); | 4580     v8::HandleScope handleScope(isolate); | 
| 4333     v8::Handle<v8::FunctionTemplate> templ = | 4581     v8::Handle<v8::FunctionTemplate> templ = | 
| 4334         Configure${v8ClassName}Template(data->rawTemplate(&info, currentWorldTyp
      e), isolate, currentWorldType); | 4582         Configure${v8ClassName}Template(data->rawTemplate(&info, currentWorldTyp
      e), isolate, currentWorldType); | 
| 4335     data->templateMap(currentWorldType).add(&info, UnsafePersistent<v8::Function
      Template>(isolate, templ)); | 4583     data->templateMap(currentWorldType).add(&info, UnsafePersistent<v8::Function
      Template>(isolate, templ)); | 
| 4336     return handleScope.Close(templ); | 4584     return handleScope.Close(templ); | 
| 4337 } | 4585 } | 
| 4338 | 4586 | 
| 4339 END | 4587 END | 
|  | 4588     ### DONE | 
| 4340     $implementation{nameSpaceWebCore}->add(<<END); | 4589     $implementation{nameSpaceWebCore}->add(<<END); | 
| 4341 bool ${v8ClassName}::HasInstance(v8::Handle<v8::Value> value, v8::Isolate* isola
      te, WrapperWorldType currentWorldType) | 4590 bool ${v8ClassName}::HasInstance(v8::Handle<v8::Value> value, v8::Isolate* isola
      te, WrapperWorldType currentWorldType) | 
| 4342 { | 4591 { | 
| 4343     return V8PerIsolateData::from(isolate)->hasInstance(&info, value, currentWor
      ldType); | 4592     return V8PerIsolateData::from(isolate)->hasInstance(&info, value, currentWor
      ldType); | 
| 4344 } | 4593 } | 
| 4345 | 4594 | 
| 4346 END | 4595 END | 
|  | 4596     ### DONE | 
| 4347     $implementation{nameSpaceWebCore}->add(<<END); | 4597     $implementation{nameSpaceWebCore}->add(<<END); | 
| 4348 bool ${v8ClassName}::HasInstanceInAnyWorld(v8::Handle<v8::Value> value, v8::Isol
      ate* isolate) | 4598 bool ${v8ClassName}::HasInstanceInAnyWorld(v8::Handle<v8::Value> value, v8::Isol
      ate* isolate) | 
| 4349 { | 4599 { | 
| 4350     return V8PerIsolateData::from(isolate)->hasInstance(&info, value, MainWorld) | 4600     return V8PerIsolateData::from(isolate)->hasInstance(&info, value, MainWorld) | 
| 4351         || V8PerIsolateData::from(isolate)->hasInstance(&info, value, IsolatedWo
      rld) | 4601         || V8PerIsolateData::from(isolate)->hasInstance(&info, value, IsolatedWo
      rld) | 
| 4352         || V8PerIsolateData::from(isolate)->hasInstance(&info, value, WorkerWorl
      d); | 4602         || V8PerIsolateData::from(isolate)->hasInstance(&info, value, WorkerWorl
      d); | 
| 4353 } | 4603 } | 
| 4354 | 4604 | 
| 4355 END | 4605 END | 
| 4356 | 4606 | 
|  | 4607     ### TODO | 
| 4357     if (@enabledPerContextAttributes) { | 4608     if (@enabledPerContextAttributes) { | 
| 4358         my $code = ""; | 4609         my $code = ""; | 
| 4359         $code .= <<END; | 4610         $code .= <<END; | 
| 4360 void ${v8ClassName}::installPerContextProperties(v8::Handle<v8::Object> instance
      , ${nativeType}* impl, v8::Isolate* isolate) | 4611 void ${v8ClassName}::installPerContextProperties(v8::Handle<v8::Object> instance
      , ${nativeType}* impl, v8::Isolate* isolate) | 
| 4361 { | 4612 { | 
| 4362     v8::Local<v8::Object> proto = v8::Local<v8::Object>::Cast(instance->GetProto
      type()); | 4613     v8::Local<v8::Object> proto = v8::Local<v8::Object>::Cast(instance->GetProto
      type()); | 
| 4363 END | 4614 END | 
| 4364 | 4615 | 
| 4365         # Setup the enable-by-settings attrs if we have them | 4616         # Setup the enable-by-settings attrs if we have them | 
| 4366         foreach my $runtimeAttr (@enabledPerContextAttributes) { | 4617         foreach my $runtimeAttr (@enabledPerContextAttributes) { | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 4382             $code .= "    }\n"; | 4633             $code .= "    }\n"; | 
| 4383             $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 4634             $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 
| 4384         } | 4635         } | 
| 4385         $code .= <<END; | 4636         $code .= <<END; | 
| 4386 } | 4637 } | 
| 4387 | 4638 | 
| 4388 END | 4639 END | 
| 4389         $implementation{nameSpaceWebCore}->add($code); | 4640         $implementation{nameSpaceWebCore}->add($code); | 
| 4390     } | 4641     } | 
| 4391 | 4642 | 
|  | 4643     ### TODO | 
| 4392     if (@enabledPerContextFunctions) { | 4644     if (@enabledPerContextFunctions) { | 
| 4393         my $code = ""; | 4645         my $code = ""; | 
| 4394         $code .= <<END; | 4646         $code .= <<END; | 
| 4395 void ${v8ClassName}::installPerContextPrototypeProperties(v8::Handle<v8::Object>
       proto, v8::Isolate* isolate) | 4647 void ${v8ClassName}::installPerContextPrototypeProperties(v8::Handle<v8::Object>
       proto, v8::Isolate* isolate) | 
| 4396 { | 4648 { | 
| 4397     UNUSED_PARAM(proto); | 4649     UNUSED_PARAM(proto); | 
| 4398 END | 4650 END | 
| 4399         # Setup the enable-by-settings functions if we have them | 4651         # Setup the enable-by-settings functions if we have them | 
| 4400         $code .=  <<END; | 4652         $code .=  <<END; | 
| 4401     v8::Local<v8::Signature> defaultSignature = v8::Signature::New(GetTemplate(i
      solate, worldType(isolate))); | 4653     v8::Local<v8::Signature> defaultSignature = v8::Signature::New(GetTemplate(i
      solate, worldType(isolate))); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 4417             $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 4669             $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 
| 4418         } | 4670         } | 
| 4419 | 4671 | 
| 4420         $code .= <<END; | 4672         $code .= <<END; | 
| 4421 } | 4673 } | 
| 4422 | 4674 | 
| 4423 END | 4675 END | 
| 4424         $implementation{nameSpaceWebCore}->add($code); | 4676         $implementation{nameSpaceWebCore}->add($code); | 
| 4425     } | 4677     } | 
| 4426 | 4678 | 
|  | 4679     ### DONE | 
| 4427     if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) { | 4680     if (InheritsExtendedAttribute($interface, "ActiveDOMObject")) { | 
| 4428         # MessagePort is handled like an active dom object even though it doesn'
      t inherit | 4681         # MessagePort is handled like an active dom object even though it doesn'
      t inherit | 
| 4429         # from ActiveDOMObject, so don't try to cast it to ActiveDOMObject. | 4682         # from ActiveDOMObject, so don't try to cast it to ActiveDOMObject. | 
| 4430         my $returnValue = $interfaceName eq "MessagePort" ? "0" : "toNative(obje
      ct)"; | 4683         my $returnValue = $interfaceName eq "MessagePort" ? "0" : "toNative(obje
      ct)"; | 
| 4431         $implementation{nameSpaceWebCore}->add(<<END); | 4684         $implementation{nameSpaceWebCore}->add(<<END); | 
| 4432 ActiveDOMObject* ${v8ClassName}::toActiveDOMObject(v8::Handle<v8::Object> object
      ) | 4685 ActiveDOMObject* ${v8ClassName}::toActiveDOMObject(v8::Handle<v8::Object> object
      ) | 
| 4433 { | 4686 { | 
| 4434     return $returnValue; | 4687     return $returnValue; | 
| 4435 } | 4688 } | 
| 4436 | 4689 | 
| 4437 END | 4690 END | 
| 4438     } | 4691     } | 
| 4439 | 4692 | 
|  | 4693     ### DONE | 
| 4440     if (InheritsInterface($interface, "EventTarget")) { | 4694     if (InheritsInterface($interface, "EventTarget")) { | 
| 4441         $implementation{nameSpaceWebCore}->add(<<END); | 4695         $implementation{nameSpaceWebCore}->add(<<END); | 
| 4442 EventTarget* ${v8ClassName}::toEventTarget(v8::Handle<v8::Object> object) | 4696 EventTarget* ${v8ClassName}::toEventTarget(v8::Handle<v8::Object> object) | 
| 4443 { | 4697 { | 
| 4444     return toNative(object); | 4698     return toNative(object); | 
| 4445 } | 4699 } | 
| 4446 | 4700 | 
| 4447 END | 4701 END | 
| 4448     } | 4702     } | 
| 4449 | 4703 | 
|  | 4704     ### TODO | 
| 4450     if ($interfaceName eq "Window") { | 4705     if ($interfaceName eq "Window") { | 
| 4451         $implementation{nameSpaceWebCore}->add(<<END); | 4706         $implementation{nameSpaceWebCore}->add(<<END); | 
| 4452 v8::Handle<v8::ObjectTemplate> V8Window::GetShadowObjectTemplate(v8::Isolate* is
      olate, WrapperWorldType currentWorldType) | 4707 v8::Handle<v8::ObjectTemplate> V8Window::GetShadowObjectTemplate(v8::Isolate* is
      olate, WrapperWorldType currentWorldType) | 
| 4453 { | 4708 { | 
| 4454     if (currentWorldType == MainWorld) { | 4709     if (currentWorldType == MainWorld) { | 
| 4455         DEFINE_STATIC_LOCAL(v8::Persistent<v8::ObjectTemplate>, V8WindowShadowOb
      jectCacheForMainWorld, ()); | 4710         DEFINE_STATIC_LOCAL(v8::Persistent<v8::ObjectTemplate>, V8WindowShadowOb
      jectCacheForMainWorld, ()); | 
| 4456         if (V8WindowShadowObjectCacheForMainWorld.IsEmpty()) { | 4711         if (V8WindowShadowObjectCacheForMainWorld.IsEmpty()) { | 
| 4457             TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); | 4712             TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); | 
| 4458             v8::Handle<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(); | 4713             v8::Handle<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(); | 
| 4459             ConfigureShadowObjectTemplate(templ, isolate, currentWorldType); | 4714             ConfigureShadowObjectTemplate(templ, isolate, currentWorldType); | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4530     { | 4785     { | 
| 4531         ASSERT(value->IsObject()); | 4786         ASSERT(value->IsObject()); | 
| 4532         ASSERT(context); | 4787         ASSERT(context); | 
| 4533         return adoptRef(new ${v8ClassName}(v8::Handle<v8::Object>::Cast(value), 
      context)); | 4788         return adoptRef(new ${v8ClassName}(v8::Handle<v8::Object>::Cast(value), 
      context)); | 
| 4534     } | 4789     } | 
| 4535 | 4790 | 
| 4536     virtual ~${v8ClassName}(); | 4791     virtual ~${v8ClassName}(); | 
| 4537 | 4792 | 
| 4538 END | 4793 END | 
| 4539 | 4794 | 
|  | 4795 #print "[CallbackHeader]", $interface->name, "\n"; | 
|  | 4796 | 
| 4540     # Functions | 4797     # Functions | 
| 4541     my $numFunctions = @{$interface->functions}; | 4798     my $numFunctions = @{$interface->functions}; | 
| 4542     if ($numFunctions > 0) { | 4799     if ($numFunctions > 0) { | 
| 4543         $header{classPublic}->add("    // Functions\n"); | 4800         $header{classPublic}->add("    // Functions\n"); | 
| 4544         foreach my $function (@{$interface->functions}) { | 4801         foreach my $function (@{$interface->functions}) { | 
| 4545             my $code = "    virtual " . GetNativeTypeForCallbacks($function->typ
      e) . " " . $function->name . "("; | 4802             my $code = "    virtual " . GetNativeTypeForCallbacks($function->typ
      e) . " " . $function->name . "("; | 
| 4546 | 4803 | 
| 4547             my @args = (); | 4804             my @args = (); | 
| 4548             if (ExtendedAttributeContains($function->extendedAttributes->{"CallW
      ith"}, "ThisValue")) { | 4805             if (ExtendedAttributeContains($function->extendedAttributes->{"CallW
      ith"}, "ThisValue")) { | 
| 4549                 push(@args, GetNativeType("any") . " thisValue"); | 4806                 push(@args, GetNativeType("any") . " thisValue"); | 
| 4550             } | 4807             } | 
| 4551             my @params = @{$function->parameters}; | 4808             my @params = @{$function->parameters}; | 
| 4552             foreach my $param (@params) { | 4809             foreach my $param (@params) { | 
|  | 4810                 print "[gch]", $param->name, "\n" if $interface->name eq "MIDISu
      ccessCallback"; | 
| 4553                 push(@args, GetNativeTypeForCallbacks($param->type) . " " . $par
      am->name); | 4811                 push(@args, GetNativeTypeForCallbacks($param->type) . " " . $par
      am->name); | 
| 4554             } | 4812             } | 
| 4555             $code .= join(", ", @args); | 4813             $code .= join(", ", @args); | 
| 4556             $code .= ");\n"; | 4814             $code .= ");\n"; | 
| 4557             $header{classPublic}->add($code); | 4815             $header{classPublic}->add($code); | 
| 4558         } | 4816         } | 
| 4559     } | 4817     } | 
| 4560 | 4818 | 
| 4561     $header{classPublic}->add(<<END); | 4819     $header{classPublic}->add(<<END); | 
| 4562 | 4820 | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 4592 | 4850 | 
| 4593 END | 4851 END | 
| 4594 | 4852 | 
| 4595     $implementation{nameSpaceWebCore}->add(<<END); | 4853     $implementation{nameSpaceWebCore}->add(<<END); | 
| 4596 ${v8ClassName}::~${v8ClassName}() | 4854 ${v8ClassName}::~${v8ClassName}() | 
| 4597 { | 4855 { | 
| 4598 } | 4856 } | 
| 4599 | 4857 | 
| 4600 END | 4858 END | 
| 4601 | 4859 | 
|  | 4860 #print "[CallbackImp]", $interface->name, "\n"; | 
|  | 4861 | 
| 4602     # Functions | 4862     # Functions | 
| 4603     my $numFunctions = @{$interface->functions}; | 4863     my $numFunctions = @{$interface->functions}; | 
| 4604     if ($numFunctions > 0) { | 4864     if ($numFunctions > 0) { | 
| 4605         $implementation{nameSpaceWebCore}->add("// Functions\n"); | 4865         $implementation{nameSpaceWebCore}->add("// Functions\n"); | 
| 4606         foreach my $function (@{$interface->functions}) { | 4866         foreach my $function (@{$interface->functions}) { | 
| 4607             my $code = ""; | 4867             my $code = ""; | 
| 4608             my @params = @{$function->parameters}; | 4868             my @params = @{$function->parameters}; | 
| 4609             next if $function->extendedAttributes->{"Custom"}; | 4869             next if $function->extendedAttributes->{"Custom"}; | 
| 4610 | 4870 | 
| 4611             AddIncludesForType($function->type); | 4871             AddIncludesForType($function->type); | 
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4812     return $implClassName; | 5072     return $implClassName; | 
| 4813 } | 5073 } | 
| 4814 | 5074 | 
| 4815 sub GetNamespaceForInterface | 5075 sub GetNamespaceForInterface | 
| 4816 { | 5076 { | 
| 4817     my $interface = shift; | 5077     my $interface = shift; | 
| 4818     return "WTF" if IsTypedArrayType($interface->name); | 5078     return "WTF" if IsTypedArrayType($interface->name); | 
| 4819     return "WebCore"; | 5079     return "WebCore"; | 
| 4820 } | 5080 } | 
| 4821 | 5081 | 
|  | 5082 # get_function_call_parameter and macro function_call in python | 
| 4822 sub GenerateFunctionCallString | 5083 sub GenerateFunctionCallString | 
| 4823 { | 5084 { | 
| 4824     my $function = shift; | 5085     my $function = shift; | 
| 4825     my $numberOfParameters = shift; | 5086     my $numberOfParameters = shift; | 
|  | 5087     if ($numberOfParameters != @{$function->parameters}) { | 
|  | 5088 #        print "NEVER\n"; | 
|  | 5089     } | 
| 4826     my $indent = shift; | 5090     my $indent = shift; | 
| 4827     my $interface = shift; | 5091     my $interface = shift; | 
| 4828     my $forMainWorldSuffix = shift; | 5092     my $forMainWorldSuffix = shift; | 
| 4829     my %replacements = @_; | 5093     my %replacements = @_; | 
| 4830 | 5094 | 
| 4831     my $interfaceName = $interface->name; | 5095     my $interfaceName = $interface->name; | 
| 4832     my $implClassName = GetImplName($interface); | 5096     my $implClassName = GetImplName($interface); | 
| 4833     my $name = GetImplName($function); | 5097     my $name = GetImplName($function); | 
| 4834     my $returnType = $function->type; | 5098     my $returnType = $function->type; | 
| 4835     my $nativeReturnType = GetNativeType($returnType, {}, ""); | 5099     my $nativeReturnType = GetNativeType($returnType, {}, ""); | 
| 4836     my $code = ""; | 5100     my $code = ""; | 
| 4837 | 5101 | 
| 4838     my $isSVGTearOffType = (IsSVGTypeNeedingTearOff($returnType) and not $interf
      aceName =~ /List$/); | 5102     my $isSVGTearOffType = (IsSVGTypeNeedingTearOff($returnType) and not $interf
      aceName =~ /List$/); | 
| 4839     $nativeReturnType = GetSVGWrappedTypeNeedingTearOff($returnType) if $isSVGTe
      arOffType; | 5103     $nativeReturnType = GetSVGWrappedTypeNeedingTearOff($returnType) if $isSVGTe
      arOffType; | 
| 4840 | 5104 | 
| 4841     my $index = 0; | 5105     my $index = 0; | 
| 4842 | 5106 | 
| 4843     my @arguments; | 5107     my @arguments; | 
| 4844     my $functionName; | 5108     my $functionName; | 
| 4845     my $implementedBy = $function->extendedAttributes->{"ImplementedBy"}; | 5109     my $implementedBy = $function->extendedAttributes->{"ImplementedBy"}; | 
| 4846     if ($implementedBy) { | 5110     if ($implementedBy) { | 
|  | 5111         ### DONE | 
| 4847         my $implementedByImplName = GetImplNameFromImplementedBy($implementedBy)
      ; | 5112         my $implementedByImplName = GetImplNameFromImplementedBy($implementedBy)
      ; | 
| 4848         AddToImplIncludes(HeaderFilesForInterface($implementedBy, $implementedBy
      ImplName)); | 5113         AddToImplIncludes(HeaderFilesForInterface($implementedBy, $implementedBy
      ImplName)); | 
| 4849         unshift(@arguments, "imp") if !$function->isStatic; | 5114         unshift(@arguments, "imp") if !$function->isStatic; | 
| 4850         $functionName = "${implementedByImplName}::${name}"; | 5115         $functionName = "${implementedByImplName}::${name}"; | 
| 4851     } elsif ($function->isStatic) { | 5116     } elsif ($function->isStatic) { | 
|  | 5117         ### DONE | 
| 4852         $functionName = "${implClassName}::${name}"; | 5118         $functionName = "${implClassName}::${name}"; | 
| 4853     } else { | 5119     } else { | 
|  | 5120         ### DONE | 
| 4854         $functionName = "imp->${name}"; | 5121         $functionName = "imp->${name}"; | 
| 4855     } | 5122     } | 
| 4856 | 5123 | 
|  | 5124     ### DONE | 
| 4857     my $callWith = $function->extendedAttributes->{"CallWith"}; | 5125     my $callWith = $function->extendedAttributes->{"CallWith"}; | 
| 4858     my ($callWithArgs, $subCode) = GenerateCallWith($callWith, $indent, 1, $func
      tion); | 5126     my ($callWithArgs, $subCode) = GenerateCallWith($callWith, $indent, 1, $func
      tion); | 
| 4859     $code .= $subCode; | 5127     $code .= $subCode; | 
| 4860     unshift(@arguments, @$callWithArgs); | 5128     unshift(@arguments, @$callWithArgs); | 
| 4861     $index += @$callWithArgs; | 5129 #    $index += @$callWithArgs; | 
| 4862     $numberOfParameters += @$callWithArgs; | 5130 #    $numberOfParameters += @$callWithArgs; | 
| 4863 | 5131 | 
| 4864     foreach my $parameter (@{$function->parameters}) { | 5132     foreach my $parameter (@{$function->parameters}) { | 
|  | 5133         ### DONE | 
| 4865         if ($index eq $numberOfParameters) { | 5134         if ($index eq $numberOfParameters) { | 
| 4866             last; | 5135             last; | 
| 4867         } | 5136         } | 
| 4868         my $paramName = $parameter->name; | 5137         my $paramName = $parameter->name; | 
| 4869         my $paramType = $parameter->type; | 5138         my $paramType = $parameter->type; | 
| 4870 | 5139 | 
| 4871         if ($replacements{$paramName}) { | 5140         if ($replacements{$paramName}) { | 
|  | 5141             ### DONE | 
| 4872             push @arguments, $replacements{$paramName}; | 5142             push @arguments, $replacements{$paramName}; | 
| 4873         } elsif ($parameter->type eq "NodeFilter" || $parameter->type eq "XPathN
      SResolver") { | 5143         } elsif ($parameter->type eq "NodeFilter" || $parameter->type eq "XPathN
      SResolver") { | 
|  | 5144             ### DONE | 
| 4874             push @arguments, "$paramName.get()"; | 5145             push @arguments, "$paramName.get()"; | 
| 4875         } elsif (IsSVGTypeNeedingTearOff($parameter->type) and not $interfaceNam
      e =~ /List$/) { | 5146         } elsif (IsSVGTypeNeedingTearOff($parameter->type) and not $interfaceNam
      e =~ /List$/) { | 
|  | 5147             ### DONE | 
| 4876             AddToImplIncludes("core/dom/ExceptionCode.h"); | 5148             AddToImplIncludes("core/dom/ExceptionCode.h"); | 
| 4877             push @arguments, "$paramName->propertyReference()"; | 5149             push @arguments, "$paramName->propertyReference()"; | 
| 4878             $code .= $indent . "if (!$paramName) {\n"; | 5150             $code .= $indent . "if (!$paramName) {\n"; | 
| 4879             $code .= $indent . "    setDOMException(WebCore::TypeMismatchError, 
      args.GetIsolate());\n"; | 5151             $code .= $indent . "    setDOMException(WebCore::TypeMismatchError, 
      args.GetIsolate());\n"; | 
| 4880             $code .= $indent . "    return;\n"; | 5152             $code .= $indent . "    return;\n"; | 
| 4881             $code .= $indent . "}\n"; | 5153             $code .= $indent . "}\n"; | 
| 4882         } elsif ($parameter->type eq "SVGMatrix" and $interfaceName eq "SVGTrans
      formList") { | 5154         } elsif ($parameter->type eq "SVGMatrix" and $interfaceName eq "SVGTrans
      formList") { | 
|  | 5155             ### DONE | 
| 4883             push @arguments, "$paramName.get()"; | 5156             push @arguments, "$paramName.get()"; | 
| 4884         } else { | 5157         } else { | 
|  | 5158             ### main | 
| 4885             push @arguments, $paramName; | 5159             push @arguments, $paramName; | 
| 4886         } | 5160         } | 
| 4887         $index++; | 5161         $index++; | 
| 4888     } | 5162     } | 
| 4889 | 5163 | 
|  | 5164     ### DONE | 
| 4890     if ($function->extendedAttributes->{"RaisesException"}) { | 5165     if ($function->extendedAttributes->{"RaisesException"}) { | 
| 4891         push @arguments, "es"; | 5166         push @arguments, "es"; | 
| 4892     } | 5167     } | 
| 4893 | 5168 | 
|  | 5169     ### DONE | 
|  | 5170     ### function_call_expression in python | 
| 4894     my $functionString = "$functionName(" . join(", ", @arguments) . ")"; | 5171     my $functionString = "$functionName(" . join(", ", @arguments) . ")"; | 
| 4895 | 5172 | 
|  | 5173     ### DONE  native_value_expression in python | 
| 4896     my $return = "result"; | 5174     my $return = "result"; | 
| 4897     my $returnIsRef = IsRefPtrType($returnType); | 5175     my $returnIsRef = IsRefPtrType($returnType); | 
| 4898 | 5176 | 
| 4899     if ($returnType eq "void") { | 5177     if ($returnType eq "void") { | 
|  | 5178         ### DONE | 
|  | 5179         ### function_call_statement in python generator | 
| 4900         $code .= $indent . "$functionString;\n"; | 5180         $code .= $indent . "$functionString;\n"; | 
| 4901     } elsif (ExtendedAttributeContains($callWith, "ScriptState") or $function->e
      xtendedAttributes->{"RaisesException"}) { | 5181     } elsif (ExtendedAttributeContains($callWith, "ScriptState") or $function->e
      xtendedAttributes->{"RaisesException"}) { | 
|  | 5182         ### DONE | 
|  | 5183         ### function_call_statement in python generator | 
| 4902         $code .= $indent . $nativeReturnType . " result = $functionString;\n"; | 5184         $code .= $indent . $nativeReturnType . " result = $functionString;\n"; | 
| 4903     } else { | 5185     } else { | 
|  | 5186         ### DONE | 
| 4904         # Can inline the function call into the return statement to avoid overhe
      ad of using a Ref<> temporary | 5187         # Can inline the function call into the return statement to avoid overhe
      ad of using a Ref<> temporary | 
| 4905         $return = $functionString; | 5188         $return = $functionString; | 
| 4906         $returnIsRef = 0; | 5189         $returnIsRef = 0; | 
| 4907 | 5190 | 
|  | 5191         ### TODO | 
| 4908         if ($interfaceName eq "SVGTransformList" and IsRefPtrType($returnType)) 
      { | 5192         if ($interfaceName eq "SVGTransformList" and IsRefPtrType($returnType)) 
      { | 
| 4909             $return = "WTF::getPtr(" . $return . ")"; | 5193             $return = "WTF::getPtr(" . $return . ")"; | 
| 4910         } | 5194         } | 
| 4911     } | 5195     } | 
| 4912 | 5196 | 
|  | 5197     ### DONE | 
| 4913     if ($function->extendedAttributes->{"RaisesException"}) { | 5198     if ($function->extendedAttributes->{"RaisesException"}) { | 
| 4914         $code .= $indent . "if (es.throwIfNeeded())\n"; | 5199         $code .= $indent . "if (es.throwIfNeeded())\n"; | 
| 4915         $code .= $indent . "    return;\n"; | 5200         $code .= $indent . "    return;\n"; | 
| 4916     } | 5201     } | 
| 4917 | 5202 | 
|  | 5203     ### DONE | 
| 4918     if (ExtendedAttributeContains($callWith, "ScriptState")) { | 5204     if (ExtendedAttributeContains($callWith, "ScriptState")) { | 
| 4919         $code .= $indent . "if (state.hadException()) {\n"; | 5205         $code .= $indent . "if (state.hadException()) {\n"; | 
| 4920         $code .= $indent . "    v8::Local<v8::Value> exception = state.exception
      ();\n"; | 5206         $code .= $indent . "    v8::Local<v8::Value> exception = state.exception
      ();\n"; | 
| 4921         $code .= $indent . "    state.clearException();\n"; | 5207         $code .= $indent . "    state.clearException();\n"; | 
| 4922         $code .= $indent . "    throwError(exception);\n"; | 5208         $code .= $indent . "    throwError(exception);\n"; | 
| 4923         $code .= $indent . "    return;\n"; | 5209         $code .= $indent . "    return;\n"; | 
| 4924         $code .= $indent . "}\n"; | 5210         $code .= $indent . "}\n"; | 
| 4925     } | 5211     } | 
| 4926 | 5212 | 
|  | 5213     ### TODO | 
| 4927     if ($isSVGTearOffType) { | 5214     if ($isSVGTearOffType) { | 
| 4928         AddToImplIncludes("V8$returnType.h"); | 5215         AddToImplIncludes("V8$returnType.h"); | 
| 4929         AddToImplIncludes("core/svg/properties/SVGPropertyTearOff.h"); | 5216         AddToImplIncludes("core/svg/properties/SVGPropertyTearOff.h"); | 
| 4930         my $svgNativeType = GetSVGTypeNeedingTearOff($returnType); | 5217         my $svgNativeType = GetSVGTypeNeedingTearOff($returnType); | 
| 4931         # FIXME: Update for all ScriptWrappables. | 5218         # FIXME: Update for all ScriptWrappables. | 
| 4932         if (IsDOMNodeType($interfaceName)) { | 5219         if (IsDOMNodeType($interfaceName)) { | 
| 4933             if ($forMainWorldSuffix eq "ForMainWorld") { | 5220             if ($forMainWorldSuffix eq "ForMainWorld") { | 
| 4934                 $code .= $indent . "v8SetReturnValue(args, toV8ForMainWorld(WTF:
      :getPtr(${svgNativeType}::create($return)), args.Holder(), args.GetIsolate()));\
      n"; | 5221                 $code .= $indent . "v8SetReturnValue(args, toV8ForMainWorld(WTF:
      :getPtr(${svgNativeType}::create($return)), args.Holder(), args.GetIsolate()));\
      n"; | 
| 4935             } else { | 5222             } else { | 
| 4936                 $code .= $indent . "v8SetReturnValue(args, toV8Fast(WTF::getPtr(
      ${svgNativeType}::create($return)), args, imp));\n"; | 5223                 $code .= $indent . "v8SetReturnValue(args, toV8Fast(WTF::getPtr(
      ${svgNativeType}::create($return)), args, imp));\n"; | 
| 4937             } | 5224             } | 
| 4938         } else { | 5225         } else { | 
| 4939             $code .= $indent . "v8SetReturnValue(args, toV8${forMainWorldSuffix}
      (WTF::getPtr(${svgNativeType}::create($return)), args.Holder(), args.GetIsolate(
      )));\n"; | 5226             $code .= $indent . "v8SetReturnValue(args, toV8${forMainWorldSuffix}
      (WTF::getPtr(${svgNativeType}::create($return)), args.Holder(), args.GetIsolate(
      )));\n"; | 
| 4940         } | 5227         } | 
| 4941         $code .= $indent . "return;\n"; | 5228         $code .= $indent . "return;\n"; | 
| 4942         return $code; | 5229         return $code; | 
| 4943     } | 5230     } | 
| 4944 | 5231 | 
|  | 5232     ### TODO | 
| 4945     # If the implementing class is a POD type, commit changes | 5233     # If the implementing class is a POD type, commit changes | 
| 4946     if (IsSVGTypeNeedingTearOff($interfaceName) and not $interfaceName =~ /List$
      /) { | 5234     if (IsSVGTypeNeedingTearOff($interfaceName) and not $interfaceName =~ /List$
      /) { | 
| 4947         $code .= $indent . "wrapper->commitChange();\n"; | 5235         $code .= $indent . "wrapper->commitChange();\n"; | 
| 4948     } | 5236     } | 
| 4949 | 5237 | 
|  | 5238     ### DONE | 
| 4950     $return .= ".release()" if ($returnIsRef); | 5239     $return .= ".release()" if ($returnIsRef); | 
| 4951 | 5240 | 
| 4952     my $nativeValue; | 5241     my $nativeValue; | 
| 4953     # FIXME: Update for all ScriptWrappables. | 5242     # FIXME: Update for all ScriptWrappables. | 
| 4954     if (IsDOMNodeType($interfaceName)) { | 5243     if (IsDOMNodeType($interfaceName)) { | 
|  | 5244         ### DONE | 
| 4955         $nativeValue = NativeToJSValue($function->type, $function->extendedAttri
      butes, $return, $indent, "", "args.Holder()", "args.GetIsolate()", "args", "imp"
      , $forMainWorldSuffix, "return"); | 5245         $nativeValue = NativeToJSValue($function->type, $function->extendedAttri
      butes, $return, $indent, "", "args.Holder()", "args.GetIsolate()", "args", "imp"
      , $forMainWorldSuffix, "return"); | 
| 4956     } else { | 5246     } else { | 
|  | 5247         ### DONE | 
| 4957         $nativeValue = NativeToJSValue($function->type, $function->extendedAttri
      butes, $return, $indent, "", "args.Holder()", "args.GetIsolate()", "args", 0, $f
      orMainWorldSuffix, "return"); | 5248         $nativeValue = NativeToJSValue($function->type, $function->extendedAttri
      butes, $return, $indent, "", "args.Holder()", "args.GetIsolate()", "args", 0, $f
      orMainWorldSuffix, "return"); | 
| 4958     } | 5249     } | 
| 4959 | 5250 | 
|  | 5251     ### DONE | 
| 4960     $code .= $nativeValue . "\n"; | 5252     $code .= $nativeValue . "\n"; | 
| 4961     $code .= $indent . "return;\n"; | 5253     $code .= $indent . "return;\n"; | 
| 4962 | 5254 | 
| 4963     return $code; | 5255     return $code; | 
| 4964 } | 5256 } | 
| 4965 | 5257 | 
| 4966 sub GetNativeType | 5258 sub GetNativeType | 
| 4967 { | 5259 { | 
| 4968     my $type = shift; | 5260     my $type = shift; | 
| 4969     my $extendedAttributes = shift; | 5261     my $extendedAttributes = shift; | 
| 4970     my $isParameter = shift; | 5262     my $isParameter = shift; | 
|  | 5263     my $isw = IsWrapperType($type) ? "WT":""; | 
|  | 5264 print "[GetNativeType] $type, $isParameter $isw\n"; | 
| 4971 | 5265 | 
| 4972     my $svgNativeType = GetSVGTypeNeedingTearOff($type); | 5266     my $svgNativeType = GetSVGTypeNeedingTearOff($type); | 
| 4973     if ($svgNativeType) { | 5267     if ($svgNativeType) { | 
| 4974         if ($svgNativeType =~ /List$/) { | 5268         if ($svgNativeType =~ /List$/) { | 
| 4975             return "${svgNativeType}*"; | 5269             return "${svgNativeType}*"; | 
| 4976         } else { | 5270         } else { | 
| 4977             return "RefPtr<${svgNativeType} >"; | 5271             return "RefPtr<${svgNativeType} >"; | 
| 4978         } | 5272         } | 
| 4979     } | 5273     } | 
| 4980 | 5274 | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 5000             $mode = "WithUndefinedOrNullCheck"; | 5294             $mode = "WithUndefinedOrNullCheck"; | 
| 5001         } elsif (($extendedAttributes->{"TreatNullAs"} and $extendedAttributes->
      {"TreatNullAs"} eq "NullString") or $extendedAttributes->{"Reflect"}) { | 5295         } elsif (($extendedAttributes->{"TreatNullAs"} and $extendedAttributes->
      {"TreatNullAs"} eq "NullString") or $extendedAttributes->{"Reflect"}) { | 
| 5002             $mode = "WithNullCheck"; | 5296             $mode = "WithNullCheck"; | 
| 5003         } | 5297         } | 
| 5004         # FIXME: Add the case for 'elsif ($attributeOrParameter->extendedAttribu
      tes->{"TreatUndefinedAs"} and $attributeOrParameter->extendedAttributes->{"Treat
      UndefinedAs"} eq "NullString"))'. | 5298         # FIXME: Add the case for 'elsif ($attributeOrParameter->extendedAttribu
      tes->{"TreatUndefinedAs"} and $attributeOrParameter->extendedAttributes->{"Treat
      UndefinedAs"} eq "NullString"))'. | 
| 5005         return "V8StringResource<$mode>"; | 5299         return "V8StringResource<$mode>"; | 
| 5006     } | 5300     } | 
| 5007 | 5301 | 
| 5008     return "String" if $type eq "DOMString" or IsEnumType($type); | 5302     return "String" if $type eq "DOMString" or IsEnumType($type); | 
| 5009 | 5303 | 
|  | 5304     ### DONE | 
| 5010     return "Range::CompareHow" if $type eq "CompareHow"; | 5305     return "Range::CompareHow" if $type eq "CompareHow"; | 
| 5011     return "DOMTimeStamp" if $type eq "DOMTimeStamp"; | 5306     return "DOMTimeStamp" if $type eq "DOMTimeStamp"; | 
| 5012     return "double" if $type eq "Date"; | 5307     return "double" if $type eq "Date"; | 
| 5013     return "ScriptValue" if $type eq "any" or IsCallbackFunctionType($type); | 5308     return "ScriptValue" if $type eq "any" or IsCallbackFunctionType($type); | 
| 5014     return "Dictionary" if $type eq "Dictionary"; | 5309     return "Dictionary" if $type eq "Dictionary"; | 
| 5015 | 5310 | 
| 5016     return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; | 5311     return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; | 
| 5017     return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener"
      ; | 5312     return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener"
      ; | 
| 5018     return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; | 5313     return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; | 
| 5019     return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; | 5314     return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; | 
| 5020     return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; | 5315     return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; | 
| 5021 | 5316 | 
| 5022     die "UnionType is not supported" if IsUnionType($type); | 5317     die "UnionType is not supported" if IsUnionType($type); | 
| 5023 | 5318 | 
| 5024     if (IsTypedArrayType($type)) { | 5319     if (IsTypedArrayType($type)) { | 
| 5025         return $isParameter ? "${type}*" : "RefPtr<${type}>"; | 5320         return $isParameter ? "${type}*" : "RefPtr<${type}>"; | 
| 5026     } | 5321     } | 
| 5027 | 5322 | 
| 5028     # We need to check [ImplementedAs] extended attribute for wrapper types. | 5323     # We need to check [ImplementedAs] extended attribute for wrapper types. | 
| 5029     if (IsWrapperType($type)) { | 5324     if (IsWrapperType($type)) { | 
|  | 5325 #        print "GEHEHE ", $type, "\n"; | 
|  | 5326 #        use Carp qw(cluck); | 
|  | 5327 #        cluck "HEY"; | 
| 5030         my $interface = ParseInterface($type); | 5328         my $interface = ParseInterface($type); | 
| 5031         my $implClassName = GetImplName($interface); | 5329         my $implClassName = GetImplName($interface); | 
| 5032         return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; | 5330         return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; | 
| 5033     } | 5331     } | 
| 5034     return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; | 5332     return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; | 
| 5035 | 5333 | 
| 5036     my $arrayOrSequenceType = GetArrayOrSequenceType($type); | 5334     my $arrayOrSequenceType = GetArrayOrSequenceType($type); | 
| 5037 | 5335 | 
| 5038     if ($arrayOrSequenceType) { | 5336     if ($arrayOrSequenceType) { | 
| 5039         my $nativeType = GetNativeType($arrayOrSequenceType); | 5337         my $nativeType = GetNativeType($arrayOrSequenceType); | 
| 5040         $nativeType .= " " if ($nativeType =~ />$/); | 5338         $nativeType .= " " if ($nativeType =~ />$/); | 
| 5041         return "Vector<${nativeType}>"; | 5339         return "Vector<${nativeType}>"; | 
| 5042     } | 5340     } | 
| 5043 | 5341 | 
| 5044     # Default, assume native type is a pointer with same type name as idl type | 5342     # Default, assume native type is a pointer with same type name as idl type | 
| 5045     return "${type}*"; | 5343     return "${type}*"; | 
| 5046 } | 5344 } | 
| 5047 | 5345 | 
| 5048 sub GetNativeTypeForCallbacks | 5346 sub GetNativeTypeForCallbacks | 
| 5049 { | 5347 { | 
| 5050     my $type = shift; | 5348     my $type = shift; | 
|  | 5349     print "#####\n[GetNativeTypeForCallbacks] $type\n" if $type eq "DOMException
      "; | 
|  | 5350 #    print "#####\n[Callback] DOMString\n" if $type eq "DOMString"; | 
|  | 5351 #    print "#####\n[Callback] SerializedScriptValue\n" if $type eq "SerializedSc
      riptValue"; | 
|  | 5352 | 
| 5051     return "const String&" if $type eq "DOMString"; | 5353     return "const String&" if $type eq "DOMString"; | 
| 5052     return "PassRefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValu
      e"; | 5354     return "PassRefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValu
      e"; | 
| 5053 | 5355 | 
| 5054     # Callbacks use raw pointers, so pass isParameter = 1 | 5356     # Callbacks use raw pointers, so pass isParameter = 1 | 
| 5055     return GetNativeType($type, {}, "parameter"); | 5357     return GetNativeType($type, {}, "parameter"); | 
| 5056 } | 5358 } | 
| 5057 | 5359 | 
| 5058 sub JSValueToNativeStatement | 5360 sub JSValueToNativeStatement | 
| 5059 { | 5361 { | 
| 5060     my $type = shift; | 5362     my $type = shift; | 
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5168         } | 5470         } | 
| 5169         return "toNativeArray<" . GetNativeType($arrayOrSequenceType) . ">($valu
      e, $getIsolate)"; | 5471         return "toNativeArray<" . GetNativeType($arrayOrSequenceType) . ">($valu
      e, $getIsolate)"; | 
| 5170     } | 5472     } | 
| 5171 | 5473 | 
| 5172     AddIncludesForType($type); | 5474     AddIncludesForType($type); | 
| 5173 | 5475 | 
| 5174     AddToImplIncludes("V8${type}.h"); | 5476     AddToImplIncludes("V8${type}.h"); | 
| 5175     return "V8${type}::HasInstance($value, $getIsolate, worldType($getIsolate)) 
      ? V8${type}::toNative(v8::Handle<v8::Object>::Cast($value)) : 0"; | 5477     return "V8${type}::HasInstance($value, $getIsolate, worldType($getIsolate)) 
      ? V8${type}::toNative(v8::Handle<v8::Object>::Cast($value)) : 0"; | 
| 5176 } | 5478 } | 
| 5177 | 5479 | 
|  | 5480 ### DONE | 
| 5178 sub CreateCustomSignature | 5481 sub CreateCustomSignature | 
| 5179 { | 5482 { | 
| 5180     my $function = shift; | 5483     my $function = shift; | 
| 5181     my $count = @{$function->parameters}; | 5484     my $count = @{$function->parameters}; | 
| 5182     my $name = $function->name; | 5485     my $name = $function->name; | 
| 5183     my $code = "    const int ${name}Argc = ${count};\n" . | 5486     my $code = "    const int ${name}Argc = ${count};\n" . | 
| 5184       "    v8::Handle<v8::FunctionTemplate> ${name}Argv[${name}Argc] = { "; | 5487       "    v8::Handle<v8::FunctionTemplate> ${name}Argv[${name}Argc] = { "; | 
| 5185     my $first = 1; | 5488     my $first = 1; | 
| 5186     foreach my $parameter (@{$function->parameters}) { | 5489     foreach my $parameter (@{$function->parameters}) { | 
| 5187         if ($first) { $first = 0; } | 5490         if ($first) { $first = 0; } | 
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5337     my $getIsolate = shift; | 5640     my $getIsolate = shift; | 
| 5338     die "An Isolate is mandatory for native value => JS value conversion." unles
      s $getIsolate; | 5641     die "An Isolate is mandatory for native value => JS value conversion." unles
      s $getIsolate; | 
| 5339     my $getCallbackInfo = shift || ""; | 5642     my $getCallbackInfo = shift || ""; | 
| 5340     my $getCallbackInfoArg = $getCallbackInfo ? ", $getCallbackInfo" : ""; | 5643     my $getCallbackInfoArg = $getCallbackInfo ? ", $getCallbackInfo" : ""; | 
| 5341     my $getScriptWrappable = shift || ""; | 5644     my $getScriptWrappable = shift || ""; | 
| 5342     my $getScriptWrappableArg = $getScriptWrappable ? ", $getScriptWrappable" : 
      ""; | 5645     my $getScriptWrappableArg = $getScriptWrappable ? ", $getScriptWrappable" : 
      ""; | 
| 5343     my $forMainWorldSuffix = shift || ""; | 5646     my $forMainWorldSuffix = shift || ""; | 
| 5344     my $returnValueArg = shift || 0; | 5647     my $returnValueArg = shift || 0; | 
| 5345     my $isReturnValue = $returnValueArg eq "return"; | 5648     my $isReturnValue = $returnValueArg eq "return"; | 
| 5346 | 5649 | 
|  | 5650     print "  [NativeToJSValue]", $type, " ", $nativeValue, "\n"; | 
|  | 5651 #     if $type eq "AudioBuffer"; | 
|  | 5652 | 
| 5347     if (IsUnionType($type)) { | 5653     if (IsUnionType($type)) { | 
| 5348         my $types = $type->unionMemberTypes; | 5654         my $types = $type->unionMemberTypes; | 
| 5349         my @codes = (); | 5655         my @codes = (); | 
| 5350         for my $i (0 .. scalar(@$types)-1) { | 5656         for my $i (0 .. scalar(@$types)-1) { | 
| 5351             my $unionMemberType = $types->[$i]; | 5657             my $unionMemberType = $types->[$i]; | 
| 5352             my $unionMemberNumber = $i + 1; | 5658             my $unionMemberNumber = $i + 1; | 
| 5353             my $unionMemberVariable = $nativeValue . $i; | 5659             my $unionMemberVariable = $nativeValue . $i; | 
| 5354             my $unionMemberEnabledVariable = $nativeValue . $i . "Enabled"; | 5660             my $unionMemberEnabledVariable = $nativeValue . $i . "Enabled"; | 
| 5355             my $unionMemberNativeValue = $unionMemberVariable; | 5661             my $unionMemberNativeValue = $unionMemberVariable; | 
| 5356             $unionMemberNativeValue .= ".release()" if (IsRefPtrType($unionMembe
      rType)); | 5662             $unionMemberNativeValue .= ".release()" if (IsRefPtrType($unionMembe
      rType)); | 
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5458     if ($arrayOrSequenceType) { | 5764     if ($arrayOrSequenceType) { | 
| 5459         if (IsRefPtrType($arrayOrSequenceType)) { | 5765         if (IsRefPtrType($arrayOrSequenceType)) { | 
| 5460             AddIncludesForType($arrayOrSequenceType); | 5766             AddIncludesForType($arrayOrSequenceType); | 
| 5461         } | 5767         } | 
| 5462         return "${indent}v8SetReturnValue(${getCallbackInfo}, v8Array($nativeVal
      ue, $getIsolate));" if $isReturnValue; | 5768         return "${indent}v8SetReturnValue(${getCallbackInfo}, v8Array($nativeVal
      ue, $getIsolate));" if $isReturnValue; | 
| 5463         return "$indent$receiver v8Array($nativeValue, $getIsolate);"; | 5769         return "$indent$receiver v8Array($nativeValue, $getIsolate);"; | 
| 5464     } | 5770     } | 
| 5465 | 5771 | 
| 5466     AddIncludesForType($type); | 5772     AddIncludesForType($type); | 
| 5467 | 5773 | 
|  | 5774     ### DONE | 
| 5468     if ($type eq "SerializedScriptValue") { | 5775     if ($type eq "SerializedScriptValue") { | 
| 5469         my $returnValue = "$nativeValue ? $nativeValue->deserialize() : v8::Hand
      le<v8::Value>(v8::Null($getIsolate))"; | 5776         my $returnValue = "$nativeValue ? $nativeValue->deserialize() : v8::Hand
      le<v8::Value>(v8::Null($getIsolate))"; | 
| 5470         return "${indent}v8SetReturnValue(${getCallbackInfo}, $returnValue);" if
       $isReturnValue; | 5777         return "${indent}v8SetReturnValue(${getCallbackInfo}, $returnValue);" if
       $isReturnValue; | 
| 5471         return "$indent$receiver $returnValue;"; | 5778         return "$indent$receiver $returnValue;"; | 
| 5472     } | 5779     } | 
| 5473 | 5780 | 
| 5474     AddToImplIncludes("wtf/RefPtr.h"); | 5781     AddToImplIncludes("wtf/RefPtr.h"); | 
| 5475     AddToImplIncludes("wtf/GetPtr.h"); | 5782     AddToImplIncludes("wtf/GetPtr.h"); | 
| 5476 | 5783 | 
| 5477     if ($getScriptWrappable) { | 5784     if ($getScriptWrappable) { | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5582     } | 5889     } | 
| 5583     open FH, ">", $fileName or die "Couldn't open $fileName: $!\n"; | 5890     open FH, ">", $fileName or die "Couldn't open $fileName: $!\n"; | 
| 5584     print FH $contents; | 5891     print FH $contents; | 
| 5585     close FH; | 5892     close FH; | 
| 5586 } | 5893 } | 
| 5587 | 5894 | 
| 5588 sub ForAllParents | 5895 sub ForAllParents | 
| 5589 { | 5896 { | 
| 5590     my $interface = shift; | 5897     my $interface = shift; | 
| 5591     my $beforeRecursion = shift; | 5898     my $beforeRecursion = shift; | 
| 5592     my $afterRecursion = shift; | 5899     my $afterRecursion = shift;  # nbarth: ? | 
| 5593 | 5900 | 
| 5594     my $recurse; | 5901     my $recurse; | 
| 5595     $recurse = sub { | 5902     $recurse = sub { | 
| 5596         my $currentInterface = shift; | 5903         my $currentInterface = shift; | 
| 5597 | 5904 | 
| 5598         if ($currentInterface->parent) { | 5905         if ($currentInterface->parent) { | 
| 5599             my $parentInterface = ParseInterface($currentInterface->parent); | 5906             my $parentInterface = ParseInterface($currentInterface->parent); | 
| 5600             if ($beforeRecursion) { | 5907             if ($beforeRecursion) { | 
| 5601                 &$beforeRecursion($parentInterface) eq 'prune' and return; | 5908                 &$beforeRecursion($parentInterface) eq 'prune' and return; | 
| 5602             } | 5909             } | 
| 5603             &$recurse($parentInterface); | 5910             &$recurse($parentInterface); | 
| 5604             &$afterRecursion($parentInterface) if $afterRecursion; | 5911             &$afterRecursion($parentInterface) if $afterRecursion;  # nbarth: ? | 
| 5605         } | 5912         } | 
| 5606     }; | 5913     }; | 
| 5607 | 5914 | 
| 5608     &$recurse($interface); | 5915     &$recurse($interface); | 
| 5609 } | 5916 } | 
| 5610 | 5917 | 
| 5611 sub FindSuperMethod | 5918 sub FindSuperMethod | 
| 5612 { | 5919 { | 
| 5613     my ($interface, $functionName) = @_; | 5920     my ($interface, $functionName) = @_; | 
| 5614     my $indexer; | 5921     my $indexer; | 
| 5615     ForAllParents($interface, undef, sub { | 5922     ForAllParents($interface, undef, sub {  # nbarth: (undef) ? | 
| 5616         my $currentInterface = shift; | 5923         my $currentInterface = shift; | 
| 5617         foreach my $function (@{$currentInterface->functions}) { | 5924         foreach my $function (@{$currentInterface->functions}) { | 
| 5618             if ($function->name eq $functionName) { | 5925             if ($function->name eq $functionName) { | 
| 5619                 $indexer = $function; | 5926                 $indexer = $function; | 
| 5620                 return 'prune'; | 5927                 return 'prune'; | 
| 5621             } | 5928             } | 
| 5622         } | 5929         } | 
| 5623     }); | 5930     }); | 
| 5624     return $indexer; | 5931     return $indexer; | 
| 5625 } | 5932 } | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 5656     return 0; | 5963     return 0; | 
| 5657 } | 5964 } | 
| 5658 | 5965 | 
| 5659 sub ValidEnumValues | 5966 sub ValidEnumValues | 
| 5660 { | 5967 { | 
| 5661     my $type = shift; | 5968     my $type = shift; | 
| 5662 | 5969 | 
| 5663     return @{$enumTypeHash{$type}}; | 5970     return @{$enumTypeHash{$type}}; | 
| 5664 } | 5971 } | 
| 5665 | 5972 | 
|  | 5973 | 
|  | 5974 # merged with GetSVGTypeNeedingTearOff | 
| 5666 sub IsSVGTypeNeedingTearOff | 5975 sub IsSVGTypeNeedingTearOff | 
| 5667 { | 5976 { | 
| 5668     my $type = shift; | 5977     my $type = shift; | 
| 5669 | 5978 | 
| 5670     return 1 if $svgTypeNeedingTearOff{$type}; | 5979     return 1 if $svgTypeNeedingTearOff{$type}; | 
| 5671     return 0; | 5980     return 0; | 
| 5672 } | 5981 } | 
| 5673 | 5982 | 
|  | 5983 ### DONE | 
| 5674 sub IsSVGTypeWithWritablePropertiesNeedingTearOff | 5984 sub IsSVGTypeWithWritablePropertiesNeedingTearOff | 
| 5675 { | 5985 { | 
| 5676     my $type = shift; | 5986     my $type = shift; | 
| 5677 | 5987 | 
| 5678     return 1 if $svgTypeWithWritablePropertiesNeedingTearOff{$type}; | 5988     return 1 if $svgTypeWithWritablePropertiesNeedingTearOff{$type}; | 
| 5679     return 0; | 5989     return 0; | 
| 5680 } | 5990 } | 
| 5681 | 5991 | 
| 5682 sub IsTypedArrayType | 5992 sub IsTypedArrayType | 
| 5683 { | 5993 { | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 5695     return 0 if GetArrayType($type); | 6005     return 0 if GetArrayType($type); | 
| 5696     return 0 if GetSequenceType($type); | 6006     return 0 if GetSequenceType($type); | 
| 5697     return 0 if $type eq "DOMString"; | 6007     return 0 if $type eq "DOMString"; | 
| 5698     return 0 if IsCallbackFunctionType($type); | 6008     return 0 if IsCallbackFunctionType($type); | 
| 5699     return 0 if IsEnumType($type); | 6009     return 0 if IsEnumType($type); | 
| 5700     return 0 if IsUnionType($type); | 6010     return 0 if IsUnionType($type); | 
| 5701 | 6011 | 
| 5702     return 1; | 6012     return 1; | 
| 5703 } | 6013 } | 
| 5704 | 6014 | 
|  | 6015 ### DONE | 
| 5705 sub GetSVGTypeNeedingTearOff | 6016 sub GetSVGTypeNeedingTearOff | 
| 5706 { | 6017 { | 
| 5707     my $type = shift; | 6018     my $type = shift; | 
| 5708 | 6019 | 
| 5709     return $svgTypeNeedingTearOff{$type} if exists $svgTypeNeedingTearOff{$type}
      ; | 6020     return $svgTypeNeedingTearOff{$type} if exists $svgTypeNeedingTearOff{$type}
      ; | 
| 5710     return undef; | 6021     return undef; | 
| 5711 } | 6022 } | 
| 5712 | 6023 | 
|  | 6024 ### DONE | 
| 5713 sub GetSVGWrappedTypeNeedingTearOff | 6025 sub GetSVGWrappedTypeNeedingTearOff | 
| 5714 { | 6026 { | 
| 5715     my $type = shift; | 6027     my $type = shift; | 
| 5716 | 6028 | 
| 5717     my $svgTypeNeedingTearOff = GetSVGTypeNeedingTearOff($type); | 6029     my $svgTypeNeedingTearOff = GetSVGTypeNeedingTearOff($type); | 
| 5718     return $svgTypeNeedingTearOff if not $svgTypeNeedingTearOff; | 6030     return $svgTypeNeedingTearOff if not $svgTypeNeedingTearOff; | 
| 5719 | 6031 | 
| 5720     if ($svgTypeNeedingTearOff =~ /SVGPropertyTearOff/) { | 6032     if ($svgTypeNeedingTearOff =~ /SVGPropertyTearOff/) { | 
| 5721         $svgTypeNeedingTearOff =~ s/SVGPropertyTearOff<//; | 6033         $svgTypeNeedingTearOff =~ s/SVGPropertyTearOff<//; | 
| 5722     } elsif ($svgTypeNeedingTearOff =~ /SVGListPropertyTearOff/) { | 6034     } elsif ($svgTypeNeedingTearOff =~ /SVGListPropertyTearOff/) { | 
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5772     my $param = shift; | 6084     my $param = shift; | 
| 5773     my $ret = ucfirst($param); | 6085     my $ret = ucfirst($param); | 
| 5774     # xmlEncoding becomes XMLEncoding, but xmlllang becomes Xmllang. | 6086     # xmlEncoding becomes XMLEncoding, but xmlllang becomes Xmllang. | 
| 5775     $ret =~ s/Xml/XML/ if $ret =~ /^Xml[^a-z]/; | 6087     $ret =~ s/Xml/XML/ if $ret =~ /^Xml[^a-z]/; | 
| 5776     $ret =~ s/Css/CSS/ if $ret =~ /^Css[^T]/;  # css -> setCSS, except setCssTex
      t. | 6088     $ret =~ s/Css/CSS/ if $ret =~ /^Css[^T]/;  # css -> setCSS, except setCssTex
      t. | 
| 5777     $ret =~ s/Ime/IME/ if $ret =~ /^Ime/;  # ime -> setIME | 6089     $ret =~ s/Ime/IME/ if $ret =~ /^Ime/;  # ime -> setIME | 
| 5778     $ret =~ s/Svg/SVG/ if $ret =~ /^Svg/;  # svg -> setSVG | 6090     $ret =~ s/Svg/SVG/ if $ret =~ /^Svg/;  # svg -> setSVG | 
| 5779     return $ret; | 6091     return $ret; | 
| 5780 } | 6092 } | 
| 5781 | 6093 | 
|  | 6094 ### DONE | 
| 5782 # URL becomes url, but SetURL becomes setURL. | 6095 # URL becomes url, but SetURL becomes setURL. | 
| 5783 sub ToMethodName | 6096 sub ToMethodName | 
| 5784 { | 6097 { | 
| 5785     my $param = shift; | 6098     my $param = shift; | 
| 5786     my $ret = lcfirst($param); | 6099     my $ret = lcfirst($param); | 
| 5787     $ret =~ s/hTML/html/ if $ret =~ /^hTML/; | 6100     $ret =~ s/hTML/html/ if $ret =~ /^hTML/; | 
| 5788     $ret =~ s/uRL/url/ if $ret =~ /^uRL/; | 6101     $ret =~ s/uRL/url/ if $ret =~ /^uRL/; | 
| 5789     $ret =~ s/jS/js/ if $ret =~ /^jS/; | 6102     $ret =~ s/jS/js/ if $ret =~ /^jS/; | 
| 5790     $ret =~ s/xML/xml/ if $ret =~ /^xML/; | 6103     $ret =~ s/xML/xml/ if $ret =~ /^xML/; | 
| 5791     $ret =~ s/xSLT/xslt/ if $ret =~ /^xSLT/; | 6104     $ret =~ s/xSLT/xslt/ if $ret =~ /^xSLT/; | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 5815     my %nameToFunctionsMap = (); | 6128     my %nameToFunctionsMap = (); | 
| 5816     foreach my $function (@{$interface->functions}) { | 6129     foreach my $function (@{$interface->functions}) { | 
| 5817         my $name = $function->name; | 6130         my $name = $function->name; | 
| 5818         $nameToFunctionsMap{$name} = [] if !exists $nameToFunctionsMap{$name} or
       !$name;  # Nameless functions cannot be overloaded | 6131         $nameToFunctionsMap{$name} = [] if !exists $nameToFunctionsMap{$name} or
       !$name;  # Nameless functions cannot be overloaded | 
| 5819         push(@{$nameToFunctionsMap{$name}}, $function); | 6132         push(@{$nameToFunctionsMap{$name}}, $function); | 
| 5820         $function->{overloads} = $nameToFunctionsMap{$name}; | 6133         $function->{overloads} = $nameToFunctionsMap{$name}; | 
| 5821         $function->{overloadIndex} = @{$nameToFunctionsMap{$name}}; | 6134         $function->{overloadIndex} = @{$nameToFunctionsMap{$name}}; | 
| 5822     } | 6135     } | 
| 5823 } | 6136 } | 
| 5824 | 6137 | 
|  | 6138 ### DONE | 
| 5825 sub AttributeNameForGetterAndSetter | 6139 sub AttributeNameForGetterAndSetter | 
| 5826 { | 6140 { | 
| 5827     my $attribute = shift; | 6141     my $attribute = shift; | 
| 5828 | 6142 | 
| 5829     my $attributeName = GetImplName($attribute); | 6143     my $attributeName = GetImplName($attribute); | 
| 5830     if ($attribute->extendedAttributes->{"ImplementedAs"}) { | 6144     if ($attribute->extendedAttributes->{"ImplementedAs"}) { | 
| 5831         $attributeName = $attribute->extendedAttributes->{"ImplementedAs"}; | 6145         $attributeName = $attribute->extendedAttributes->{"ImplementedAs"}; | 
| 5832     } | 6146     } | 
| 5833     my $attributeType = $attribute->type; | 6147     my $attributeType = $attribute->type; | 
| 5834 | 6148 | 
| 5835     return $attributeName; | 6149     return $attributeName; | 
| 5836 } | 6150 } | 
| 5837 | 6151 | 
| 5838 sub ContentAttributeName | 6152 sub ContentAttributeName | 
| 5839 { | 6153 { | 
| 5840     my ($interfaceName, $attribute) = @_; | 6154     my ($interfaceName, $attribute) = @_; | 
| 5841 | 6155 | 
| 5842     my $contentAttributeName = $attribute->extendedAttributes->{"Reflect"}; | 6156     my $contentAttributeName = $attribute->extendedAttributes->{"Reflect"}; | 
| 5843     return undef if !$contentAttributeName; | 6157     return undef if !$contentAttributeName; | 
| 5844 | 6158 | 
| 5845     $contentAttributeName = lc AttributeNameForGetterAndSetter($attribute) if $c
      ontentAttributeName eq "VALUE_IS_MISSING"; | 6159     $contentAttributeName = lc AttributeNameForGetterAndSetter($attribute) if $c
      ontentAttributeName eq "VALUE_IS_MISSING"; | 
| 5846 | 6160 | 
| 5847     my $namespace = NamespaceForAttributeName($interfaceName, $contentAttributeN
      ame); | 6161     my $namespace = NamespaceForAttributeName($interfaceName, $contentAttributeN
      ame); | 
| 5848 | 6162 | 
| 5849     AddToImplIncludes("${namespace}.h"); | 6163     AddToImplIncludes("${namespace}.h"); | 
| 5850     return "WebCore::${namespace}::${contentAttributeName}Attr"; | 6164     return "WebCore::${namespace}::${contentAttributeName}Attr"; | 
| 5851 } | 6165 } | 
| 5852 | 6166 | 
|  | 6167 ### get_attribute_getter_info in python | 
|  | 6168 ### DONE | 
| 5853 sub GetterExpression | 6169 sub GetterExpression | 
| 5854 { | 6170 { | 
| 5855     my ($interfaceName, $attribute) = @_; | 6171     my ($interfaceName, $attribute) = @_; | 
| 5856 | 6172 | 
| 5857     my $contentAttributeName = ContentAttributeName($interfaceName, $attribute); | 6173     my $contentAttributeName = ContentAttributeName($interfaceName, $attribute); | 
| 5858 | 6174 | 
| 5859     if (!$contentAttributeName) { | 6175     if (!$contentAttributeName) { | 
| 5860         return (ToMethodName(AttributeNameForGetterAndSetter($attribute))); | 6176         return (ToMethodName(AttributeNameForGetterAndSetter($attribute))); | 
| 5861     } | 6177     } | 
| 5862 | 6178 | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5961                 push(@checks, "COMPILE_ASSERT($value == ${implClassName}::$name,
       ${implClassName}Enum${name}IsWrongUseDoNotCheckConstants);\n"); | 6277                 push(@checks, "COMPILE_ASSERT($value == ${implClassName}::$name,
       ${implClassName}Enum${name}IsWrongUseDoNotCheckConstants);\n"); | 
| 5962             } | 6278             } | 
| 5963 | 6279 | 
| 5964             push(@checks, "#endif\n") if $conditionalString; | 6280             push(@checks, "#endif\n") if $conditionalString; | 
| 5965         } | 6281         } | 
| 5966         push(@checks, "\n"); | 6282         push(@checks, "\n"); | 
| 5967     } | 6283     } | 
| 5968     return @checks; | 6284     return @checks; | 
| 5969 } | 6285 } | 
| 5970 | 6286 | 
|  | 6287 ### call_with_contains in python | 
| 5971 sub ExtendedAttributeContains | 6288 sub ExtendedAttributeContains | 
| 5972 { | 6289 { | 
| 5973     my $callWith = shift; | 6290     my $callWith = shift; | 
| 5974     return 0 unless $callWith; | 6291     return 0 unless $callWith; | 
| 5975     my $keyword = shift; | 6292     my $keyword = shift; | 
| 5976 | 6293 | 
| 5977     my @callWithKeywords = split /\s*\&\s*/, $callWith; | 6294     my @callWithKeywords = split /\s*\&\s*/, $callWith; | 
| 5978     return grep { $_ eq $keyword } @callWithKeywords; | 6295     return grep { $_ eq $keyword } @callWithKeywords; | 
| 5979 } | 6296 } | 
| 5980 | 6297 | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 6008         if ($currentInterface->extendedAttributes->{$extendedAttribute}) { | 6325         if ($currentInterface->extendedAttributes->{$extendedAttribute}) { | 
| 6009             $found = 1; | 6326             $found = 1; | 
| 6010         } | 6327         } | 
| 6011         return 1 if $found; | 6328         return 1 if $found; | 
| 6012     }, 0); | 6329     }, 0); | 
| 6013 | 6330 | 
| 6014     return $found; | 6331     return $found; | 
| 6015 } | 6332 } | 
| 6016 | 6333 | 
| 6017 1; | 6334 1; | 
| OLD | NEW | 
|---|