| Index: Source/bindings/scripts/CodeGeneratorV8.pm
 | 
| diff --git a/Source/bindings/scripts/CodeGeneratorV8.pm b/Source/bindings/scripts/CodeGeneratorV8.pm
 | 
| index 39924de35f13b9c1a2fb606a286d1c822d392371..d2ce39aff5cd7d8a6806a55d3de22e1e134ed5a7 100644
 | 
| --- a/Source/bindings/scripts/CodeGeneratorV8.pm
 | 
| +++ b/Source/bindings/scripts/CodeGeneratorV8.pm
 | 
| @@ -275,6 +275,21 @@ sub GetSVGPropertyTypes
 | 
|      return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
 | 
|  }
 | 
|  
 | 
| +sub GetNamedGetterFunction
 | 
| +{
 | 
| +    my $interface = shift;
 | 
| +
 | 
| +    foreach my $function (@{$interface->functions}) {
 | 
| +        my $specials = $function->signature->specials;
 | 
| +        my $getterExists = grep { $_ eq "getter" } @$specials;
 | 
| +        my $parameters = $function->parameters;
 | 
| +        if ($getterExists and scalar(@$parameters) == 1 and $parameters->[0]->type eq "DOMString" ) {
 | 
| +            return $function;
 | 
| +        }
 | 
| +    }
 | 
| +    return 0;
 | 
| +}
 | 
| +
 | 
|  sub GenerateHeader
 | 
|  {
 | 
|      my $object = shift;
 | 
| @@ -719,7 +734,7 @@ sub GenerateHeaderNamedAndIndexedPropertyAccessors
 | 
|      my $interfaceName = $interface->name;
 | 
|      my $hasIndexedGetter = $interface->extendedAttributes->{"IndexedGetter"} || $interface->extendedAttributes->{"CustomIndexedGetter"};
 | 
|      my $hasCustomIndexedSetter = $interface->extendedAttributes->{"CustomIndexedSetter"};
 | 
| -    my $hasCustomNamedGetter = $interface->extendedAttributes->{"NamedGetter"} || $interface->extendedAttributes->{"CustomNamedGetter"} || $interface->extendedAttributes->{"CustomGetOwnPropertySlot"};
 | 
| +    my $hasCustomNamedGetter = GetNamedGetterFunction($interface) || $interface->extendedAttributes->{"CustomNamedGetter"} || $interface->extendedAttributes->{"CustomGetOwnPropertySlot"};
 | 
|      my $hasCustomNamedSetter = $interface->extendedAttributes->{"CustomNamedSetter"};
 | 
|      my $hasCustomDeleters = $interface->extendedAttributes->{"CustomDeleteProperty"};
 | 
|      my $hasCustomEnumerator = $interface->extendedAttributes->{"CustomEnumerateProperty"};
 | 
| @@ -2916,20 +2931,17 @@ END
 | 
|  sub GenerateImplementationNamedPropertyGetter
 | 
|  {
 | 
|      my $interface = shift;
 | 
| -    my $namedPropertyGetter = shift;
 | 
| -    my $subCode = "";
 | 
|  
 | 
| +    my $subCode = "";
 | 
|      my $interfaceName = $interface->name;
 | 
|      my $v8InterfaceName = "V8$interfaceName";
 | 
|  
 | 
| -    if (!$namedPropertyGetter) {
 | 
| -        $namedPropertyGetter = $codeGenerator->FindSuperMethod($interface, "namedItem");
 | 
| -    }
 | 
| -
 | 
| -    if ($interface->extendedAttributes->{"NamedGetter"}) {
 | 
| -        die "$interfaceName: [NamedGetter] but no namedItem() method." if (!$namedPropertyGetter);
 | 
| +    my $function = GetNamedGetterFunction($interface);
 | 
| +    if ($function) {
 | 
| +        my $returnType = $function->signature->type;
 | 
| +        my $methodName = $function->signature->name;
 | 
|          AddToImplIncludes("V8Collection.h");
 | 
| -        my $type = $namedPropertyGetter->type;
 | 
| +        AddToImplIncludes("V8$returnType.h");
 | 
|          $subCode .= <<END;
 | 
|      desc->InstanceTemplate()->SetNamedPropertyHandler(${v8InterfaceName}::namedPropertyGetter, 0, 0, 0, 0);
 | 
|  END
 | 
| @@ -2943,20 +2955,17 @@ v8::Handle<v8::Value> ${v8InterfaceName}::namedPropertyGetter(v8::Local<v8::Stri
 | 
|          return v8Undefined();
 | 
|  
 | 
|      v8::Local<v8::Object> object = info.Holder();
 | 
| -    v8::Handle<v8::Object> creationContext = info.Holder();
 | 
| -    v8::Isolate* isolate = info.GetIsolate();
 | 
| -
 | 
|      ASSERT(V8DOMWrapper::maybeDOMWrapper(object));
 | 
|      ASSERT(toWrapperTypeInfo(object) != &V8Node::info);
 | 
|      $interfaceName* collection = toNative(object);
 | 
|  
 | 
|      AtomicString propertyName = toWebCoreAtomicStringWithNullCheck(name);
 | 
| -    RefPtr<$type> element = collection->namedItem(propertyName);
 | 
| +    RefPtr<$returnType> element = collection->$methodName(propertyName);
 | 
|  
 | 
|      if (!element)
 | 
|          return v8Undefined();
 | 
|  
 | 
| -    return toV8(element.release(), creationContext, isolate);
 | 
| +    return toV8Fast(element.release(), info, collection);
 | 
|  }
 | 
|  
 | 
|  END
 | 
| @@ -3213,7 +3222,6 @@ END
 | 
|      }
 | 
|  
 | 
|      my $indexer;
 | 
| -    my $namedPropertyGetter;
 | 
|      my @enabledPerContextFunctions;
 | 
|      my @normalFunctions;
 | 
|      my $needsDomainSafeFunctionSetter = 0;
 | 
| @@ -3238,8 +3246,6 @@ END
 | 
|  
 | 
|          if ($function->signature->name eq "item") {
 | 
|              $indexer = $function->signature;
 | 
| -        } elsif ($function->signature->name eq "namedItem") {
 | 
| -            $namedPropertyGetter = $function->signature;
 | 
|          }
 | 
|  
 | 
|          # If the function does not need domain security check, we need to
 | 
| @@ -3516,7 +3522,7 @@ END
 | 
|      }
 | 
|  
 | 
|      $code .= GenerateImplementationIndexedProperty($interface, $indexer);
 | 
| -    $code .= GenerateImplementationNamedPropertyGetter($interface, $namedPropertyGetter);
 | 
| +    $code .= GenerateImplementationNamedPropertyGetter($interface);
 | 
|      $code .= GenerateImplementationCustomCall($interface);
 | 
|      $code .= GenerateImplementationMasqueradesAsUndefined($interface);
 | 
|  
 | 
| 
 |