Changeset 142833 in webkit


Ignore:
Timestamp:
Feb 13, 2013 5:35:17 PM (11 years ago)
Author:
haraken@chromium.org
Message:

[V8] Generate wrapper methods for custom getters/setters
https://bugs.webkit.org/show_bug.cgi?id=109666

Reviewed by Adam Barth.

Currently V8 directly calls back custom getters/setters written
in custom binding files. This makes it impossible for code generators
to hook custom getters/setters (e.g. Code generators cannot insert a code
for FeatureObservation into custom getters/setters). To solve the problem,
we should generate wrapper methods for custom getters/setters.

No tests. No change in behavior.

  • bindings/scripts/CodeGeneratorV8.pm:

(GenerateNormalAttrGetter):
(GenerateNormalAttrSetter):
(GenerateSingleBatchedAttribute):
(GenerateImplementation):

  • bindings/scripts/test/V8/V8TestInterface.cpp:

(WebCore::TestInterfaceV8Internal::supplementalStr3AttrGetter):
(TestInterfaceV8Internal):
(WebCore::TestInterfaceV8Internal::supplementalStr3AttrSetter):
(WebCore):

  • bindings/scripts/test/V8/V8TestObj.cpp:

(WebCore::TestObjV8Internal::customAttrAttrGetter):
(TestObjV8Internal):
(WebCore::TestObjV8Internal::customAttrAttrSetter):
(WebCore):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r142831 r142833  
     12013-02-13  Kentaro Hara  <haraken@chromium.org>
     2
     3        [V8] Generate wrapper methods for custom getters/setters
     4        https://bugs.webkit.org/show_bug.cgi?id=109666
     5
     6        Reviewed by Adam Barth.
     7
     8        Currently V8 directly calls back custom getters/setters written
     9        in custom binding files. This makes it impossible for code generators
     10        to hook custom getters/setters (e.g. Code generators cannot insert a code
     11        for FeatureObservation into custom getters/setters). To solve the problem,
     12        we should generate wrapper methods for custom getters/setters.
     13
     14        No tests. No change in behavior.
     15
     16        * bindings/scripts/CodeGeneratorV8.pm:
     17        (GenerateNormalAttrGetter):
     18        (GenerateNormalAttrSetter):
     19        (GenerateSingleBatchedAttribute):
     20        (GenerateImplementation):
     21        * bindings/scripts/test/V8/V8TestInterface.cpp:
     22        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrGetter):
     23        (TestInterfaceV8Internal):
     24        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrSetter):
     25        (WebCore):
     26        * bindings/scripts/test/V8/V8TestObj.cpp:
     27        (WebCore::TestObjV8Internal::customAttrAttrGetter):
     28        (TestObjV8Internal):
     29        (WebCore::TestObjV8Internal::customAttrAttrSetter):
     30        (WebCore):
     31
    1322013-02-13   Vineet Chaudhary  <rgf748@motorola.com>
    233
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm

    r142810 r142833  
    899899    push(@implContentDecls, GenerateFeatureObservation($attrExt->{"V8MeasureAs"}));
    900900
     901    if (HasCustomGetter($attrExt)) {
     902        push(@implContentDecls, <<END);
     903        return ${v8InterfaceName}::${attrName}AccessorGetter(name, info);
     904}
     905
     906END
     907        push(@implContentDecls, "#endif // ${conditionalString}\n\n") if $conditionalString;
     908        return;
     909    }
     910
    901911    if ($svgNativeType) {
    902912        my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($interfaceName);
     
    11741184    push(@implContentDecls, "static void ${attrName}AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)\n{\n");
    11751185    push(@implContentDecls, GenerateFeatureObservation($attribute->signature->extendedAttributes->{"V8MeasureAs"}));
     1186
     1187    if (HasCustomSetter($attrExt)) {
     1188        push(@implContentDecls, <<END);
     1189        ${v8InterfaceName}::${attrName}AccessorSetter(name, value, info);
     1190}
     1191
     1192END
     1193        push(@implContentDecls, "#endif // ${conditionalString}\n\n") if $conditionalString;
     1194        return;
     1195    }
    11761196
    11771197    # If the "StrictTypeChecking" extended attribute is present, and the attribute's type is an
     
    23052325        $setter = "${interfaceName}V8Internal::${attrName}AttrSetter";
    23062326
    2307         if ($attrExt->{"Replaceable"}) {
     2327        if (!HasCustomSetter($attrExt) && $attrExt->{"Replaceable"}) {
    23082328            $setter = "${interfaceName}V8Internal::${interfaceName}ReplaceableAttrSetter";
    2309         }
    2310 
    2311         if (HasCustomSetter($attrExt)) {
    2312             $setter = "V8${customAccessor}AccessorSetter";
    2313         }
    2314 
    2315         if (HasCustomGetter($attrExt)) {
    2316             $getter = "V8${customAccessor}AccessorGetter";
    23172329        }
    23182330    }
     
    27132725        }
    27142726
    2715         if (!HasCustomGetter($attrExt)) {
    2716             GenerateNormalAttrGetter($attribute, $interface);
    2717         }
    2718 
    2719         if ($attrExt->{"Replaceable"}) {
     2727        GenerateNormalAttrGetter($attribute, $interface);
     2728
     2729        if (!HasCustomSetter($attrExt) && $attrExt->{"Replaceable"}) {
    27202730            $hasReplaceable = 1;
    2721         } elsif (!HasCustomSetter($attrExt) && !IsReadonly($attribute)) {
     2731        } elsif (!IsReadonly($attribute)) {
    27222732            GenerateNormalAttrSetter($attribute, $interface);
    27232733        }
  • trunk/Source/WebCore/bindings/scripts/test/V8/V8TestInterface.cpp

    r142737 r142833  
    126126    TestSupplemental::setSupplementalStr2(imp, v);
    127127    return;
     128}
     129
     130#endif // ENABLE(Condition11) || ENABLE(Condition12)
     131
     132#if ENABLE(Condition11) || ENABLE(Condition12)
     133
     134static v8::Handle<v8::Value> supplementalStr3AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
     135{
     136        return V8TestInterface::supplementalStr3AccessorGetter(name, info);
     137}
     138
     139#endif // ENABLE(Condition11) || ENABLE(Condition12)
     140
     141#if ENABLE(Condition11) || ENABLE(Condition12)
     142
     143static void supplementalStr3AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
     144{
     145        V8TestInterface::supplementalStr3AccessorSetter(name, value, info);
    128146}
    129147
     
    217235#if ENABLE(Condition11) || ENABLE(Condition12)
    218236    // Attribute 'supplementalStr3' (Type: 'attribute' ExtAttr: 'CustomSetter CustomGetter Conditional ImplementedBy')
    219     {"supplementalStr3", V8TestInterface::supplementalStr3AccessorGetter, V8TestInterface::supplementalStr3AccessorSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
     237    {"supplementalStr3", TestInterfaceV8Internal::supplementalStr3AttrGetter, TestInterfaceV8Internal::supplementalStr3AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
    220238#endif // ENABLE(Condition11) || ENABLE(Condition12)
    221239#if ENABLE(Condition11) || ENABLE(Condition12)
  • trunk/Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp

    r142810 r142833  
    499499        setDOMException(ec, info.GetIsolate());
    500500    return;
     501}
     502
     503static v8::Handle<v8::Value> customAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
     504{
     505        return V8TestObj::customAttrAccessorGetter(name, info);
     506}
     507
     508static void customAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
     509{
     510        V8TestObj::customAttrAccessorSetter(name, value, info);
    501511}
    502512
     
    19181928    {"stringAttrWithSetterException", TestObjV8Internal::stringAttrWithSetterExceptionAttrGetter, TestObjV8Internal::stringAttrWithSetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
    19191929    // Attribute 'customAttr' (Type: 'attribute' ExtAttr: 'Custom')
    1920     {"customAttr", V8TestObj::customAttrAccessorGetter, V8TestObj::customAttrAccessorSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
     1930    {"customAttr", TestObjV8Internal::customAttrAttrGetter, TestObjV8Internal::customAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
    19211931    // Attribute 'withScriptStateAttribute' (Type: 'attribute' ExtAttr: 'CallWith')
    19221932    {"withScriptStateAttribute", TestObjV8Internal::withScriptStateAttributeAttrGetter, TestObjV8Internal::withScriptStateAttributeAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
Note: See TracChangeset for help on using the changeset viewer.