Changeset 94354 in webkit


Ignore:
Timestamp:
Sep 1, 2011 3:42:20 PM (13 years ago)
Author:
Patrick Gansterer
Message:

Consider Conditional attribute in CodeGenerator for methods
https://bugs.webkit.org/show_bug.cgi?id=67409

Reviewed by Darin Adler.

This change adds appropriate #if ENABLE() lines for the preprocessor around the
generated functions depending on the Conditional attribute in the IDL file.

  • bindings/scripts/CodeGeneratorCPP.pm:

(GenerateImplementation):

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateImplementation):

  • bindings/scripts/CodeGeneratorObjC.pm:

(GenerateImplementation):

  • bindings/scripts/CodeGeneratorV8.pm:

(GenerateImplementation):

  • bindings/scripts/test/CPP/WebDOMTestObj.cpp:
  • bindings/scripts/test/CPP/WebDOMTestObj.h:
  • bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
  • bindings/scripts/test/GObject/WebKitDOMTestObj.h:
  • bindings/scripts/test/JS/JSTestObj.cpp:
  • bindings/scripts/test/JS/JSTestObj.h:
  • bindings/scripts/test/ObjC/DOMTestObj.h:
  • bindings/scripts/test/ObjC/DOMTestObj.mm:
  • bindings/scripts/test/TestObj.idl:
  • bindings/scripts/test/V8/V8TestObj.cpp:
Location:
trunk/Source/WebCore
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r94353 r94354  
     12011-09-01  Patrick Gansterer  <paroga@webkit.org>
     2
     3        Consider Conditional attribute in CodeGenerator for methods
     4        https://bugs.webkit.org/show_bug.cgi?id=67409
     5
     6        Reviewed by Darin Adler.
     7
     8        This change adds appropriate #if ENABLE() lines for the preprocessor around the
     9        generated functions depending on the Conditional attribute in the IDL file.
     10
     11        * bindings/scripts/CodeGeneratorCPP.pm:
     12        (GenerateImplementation):
     13        * bindings/scripts/CodeGeneratorJS.pm:
     14        (GenerateImplementation):
     15        * bindings/scripts/CodeGeneratorObjC.pm:
     16        (GenerateImplementation):
     17        * bindings/scripts/CodeGeneratorV8.pm:
     18        (GenerateImplementation):
     19        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
     20        * bindings/scripts/test/CPP/WebDOMTestObj.h:
     21        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
     22        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
     23        * bindings/scripts/test/JS/JSTestObj.cpp:
     24        * bindings/scripts/test/JS/JSTestObj.h:
     25        * bindings/scripts/test/ObjC/DOMTestObj.h:
     26        * bindings/scripts/test/ObjC/DOMTestObj.mm:
     27        * bindings/scripts/test/TestObj.idl:
     28        * bindings/scripts/test/V8/V8TestObj.cpp:
     29
    1302011-08-29  Nat Duca  <nduca@chromium.org>
    231
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm

    r77392 r94354  
    870870            }
    871871
     872            my $conditionalString = GenerateConditionalString($function->signature);
     873            push(@implContent, "\n#if ${conditionalString}\n") if $conditionalString;
     874
    872875            push(@implContent, "$functionSig\n");
    873876            push(@implContent, "{\n");
     
    875878            push(@implContent, @functionContent);
    876879            push(@implContent, "}\n\n");
     880
     881            push(@implContent, "#endif\n\n") if $conditionalString;
    877882
    878883            # Clear the hash
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r94095 r94354  
    13761376    my @hashValue2 = ();
    13771377    my @hashSpecials = ();
     1378    my %conditionals = ();
    13781379
    13791380    # FIXME: we should not need a function for every constant.
     
    14031404        my $special = (@specials > 0) ? join(" | ", @specials) : "0";
    14041405        push(@hashSpecials, $special);
     1406
     1407        my $conditional = $function->signature->extendedAttributes->{"Conditional"};
     1408        if ($conditional) {
     1409            $conditionals{$name} = $conditional;
     1410        }
    14051411    }
    14061412
    14071413    $object->GenerateHashTable($hashName, $hashSize,
    14081414                               \@hashKeys, \@hashSpecials,
    1409                                \@hashValue1, \@hashValue2);
     1415                               \@hashValue1, \@hashValue2,
     1416                               \%conditionals);
    14101417
    14111418    if ($dataNode->extendedAttributes->{"NoStaticTables"}) {
     
    19461953            my $functionImplementationName = $function->signature->extendedAttributes->{"ImplementationFunction"} || $codeGenerator->WK_lcfirst($function->signature->name);
    19471954
     1955            my $conditional = $function->signature->extendedAttributes->{"Conditional"};
     1956            if ($conditional) {
     1957                my $conditionalString = GenerateConditionalStringFromAttributeValue($conditional);
     1958                push(@implContent, "#if ${conditionalString}\n");
     1959            }
     1960
    19481961            push(@implContent, "EncodedJSValue JSC_HOST_CALL ${functionName}(ExecState* exec)\n");
    19491962            push(@implContent, "{\n");
     
    21822195                GenerateOverloadedPrototypeFunction($function, $dataNode, $implClassName);
    21832196            }
     2197
     2198            if ($conditional) {
     2199                push(@implContent, "#endif\n\n");
     2200            }
    21842201        }
    21852202    }
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm

    r90680 r94354  
    16511651            }
    16521652
     1653            my $conditionalString = GenerateConditionalString($function->signature);
     1654            push(@implContent, "\n#if ${conditionalString}\n") if $conditionalString;
     1655
    16531656            push(@implContent, "$functionSig\n");
    16541657            push(@implContent, "{\n");
     
    16561659            push(@implContent, @functionContent);
    16571660            push(@implContent, "}\n\n");
     1661
     1662            push(@implContent, "#endif\n\n") if $conditionalString;
    16581663
    16591664            # generate the old style method names with un-named parameters, these methods are deprecated
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm

    r94156 r94354  
    20552055        my $name = $function->signature->name;
    20562056        my $callback = GetFunctionTemplateCallbackName($function, $interfaceName);
     2057        my $conditionalString = GenerateConditionalString($function->signature);
     2058        push(@implContent, "#if ${conditionalString}\n") if $conditionalString;
    20572059        push(@implContent, <<END);
    20582060    {"$name", $callback},
    20592061END
     2062        push(@implContent, "#endif\n") if $conditionalString;
    20602063        $num_callbacks++;
    20612064    }
  • trunk/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp

    r73564 r94354  
    808808}
    809809
     810
     811#if ENABLE(Condition1)
     812WebDOMString WebDOMTestObj::conditionalMethod1()
     813{
     814    if (!impl())
     815        return WebDOMString();
     816
     817    return impl()->conditionalMethod1();
     818}
     819
     820#endif
     821
     822
     823#if ENABLE(Condition1) && ENABLE(Condition2)
     824void WebDOMTestObj::conditionalMethod2()
     825{
     826    if (!impl())
     827        return;
     828
     829    impl()->conditionalMethod2();
     830}
     831
     832#endif
     833
     834
     835#if ENABLE(Condition1) || ENABLE(Condition2)
     836void WebDOMTestObj::conditionalMethod3()
     837{
     838    if (!impl())
     839        return;
     840
     841    impl()->conditionalMethod3();
     842}
     843
     844#endif
     845
    810846void WebDOMTestObj::classMethod()
    811847{
  • trunk/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h

    r73564 r94354  
    159159    void methodWithNonOptionalArgAndOptionalArg(int nonOpt, int opt);
    160160    void methodWithNonOptionalArgAndTwoOptionalArgs(int nonOpt, int opt1, int opt2);
     161    WebDOMString conditionalMethod1();
     162    void conditionalMethod2();
     163    void conditionalMethod3();
    161164    void classMethod();
    162165    int classMethodWithOptional(int arg);
  • trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp

    r81789 r94354  
    382382    WebCore::TestObj * item = WebKit::core(self);
    383383    item->methodWithNonOptionalArgAndTwoOptionalArgs(non_opt, opt1, opt2);
     384}
     385
     386gchar*
     387webkit_dom_test_obj_conditional_method1(WebKitDOMTestObj* self)
     388{
     389#if ENABLE(Condition1)
     390    g_return_val_if_fail(self, 0);
     391    WebCore::JSMainThreadNullState state;
     392    WebCore::TestObj * item = WebKit::core(self);
     393    gchar* res = convertToUTF8String(item->conditionalMethod1());
     394    return res;
     395#else
     396    return NULL;
     397#endif /* ENABLE(Condition1) */
     398}
     399
     400void
     401webkit_dom_test_obj_conditional_method2(WebKitDOMTestObj* self)
     402{
     403#if ENABLE(Condition1) && ENABLE(Condition2)
     404    g_return_if_fail(self);
     405    WebCore::JSMainThreadNullState state;
     406    WebCore::TestObj * item = WebKit::core(self);
     407    item->conditionalMethod2();
     408#endif /* ENABLE(Condition1) && ENABLE(Condition2) */
     409}
     410
     411void
     412webkit_dom_test_obj_conditional_method3(WebKitDOMTestObj* self)
     413{
     414#if ENABLE(Condition1) || ENABLE(Condition2)
     415    g_return_if_fail(self);
     416    WebCore::JSMainThreadNullState state;
     417    WebCore::TestObj * item = WebKit::core(self);
     418    item->conditionalMethod3();
     419#endif /* ENABLE(Condition1) || ENABLE(Condition2) */
    384420}
    385421
  • trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h

    r90841 r94354  
    331331
    332332/**
     333 * webkit_dom_test_obj_conditional_method1:
     334 * @self: A #WebKitDOMTestObj
     335 *
     336 * Returns:
     337 *
     338**/
     339WEBKIT_API gchar*
     340webkit_dom_test_obj_conditional_method1(WebKitDOMTestObj* self);
     341
     342/**
     343 * webkit_dom_test_obj_conditional_method2:
     344 * @self: A #WebKitDOMTestObj
     345 *
     346 * Returns:
     347 *
     348**/
     349WEBKIT_API void
     350webkit_dom_test_obj_conditional_method2(WebKitDOMTestObj* self);
     351
     352/**
     353 * webkit_dom_test_obj_conditional_method3:
     354 * @self: A #WebKitDOMTestObj
     355 *
     356 * Returns:
     357 *
     358**/
     359WEBKIT_API void
     360webkit_dom_test_obj_conditional_method3(WebKitDOMTestObj* self);
     361
     362/**
    333363 * webkit_dom_test_obj_class_method:
    334364 * @self: A #WebKitDOMTestObj
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp

    r92706 r94354  
    237237    { "methodWithNonCallbackArgAndCallbackArg", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg), (intptr_t)2 THUNK_GENERATOR(0) },
    238238    { "methodWithCallbackAndOptionalArg", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg), (intptr_t)1 THUNK_GENERATOR(0) },
     239#if ENABLE(Condition1)
     240    { "conditionalMethod1", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConditionalMethod1), (intptr_t)0 THUNK_GENERATOR(0) },
     241#endif
     242#if ENABLE(Condition1) && ENABLE(Condition2)
     243    { "conditionalMethod2", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConditionalMethod2), (intptr_t)0 THUNK_GENERATOR(0) },
     244#endif
     245#if ENABLE(Condition1) || ENABLE(Condition2)
     246    { "conditionalMethod3", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConditionalMethod3), (intptr_t)0 THUNK_GENERATOR(0) },
     247#endif
    239248    { "overloadedMethod", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionOverloadedMethod), (intptr_t)2 THUNK_GENERATOR(0) },
    240249    { "classMethod", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionClassMethod), (intptr_t)0 THUNK_GENERATOR(0) },
     
    244253
    245254#undef THUNK_GENERATOR
    246 static JSC_CONST_HASHTABLE HashTable JSTestObjPrototypeTable = { 136, 127, JSTestObjPrototypeTableValues, 0 };
     255static JSC_CONST_HASHTABLE HashTable JSTestObjPrototypeTable = { 137, 127, JSTestObjPrototypeTableValues, 0 };
    247256const ClassInfo JSTestObjPrototype::s_info = { "TestObjPrototype", &JSC::JSObjectWithGlobalObject::s_info, &JSTestObjPrototypeTable, 0 };
    248257
     
    15301539    return JSValue::encode(jsUndefined());
    15311540}
     1541
     1542#if ENABLE(Condition1)
     1543EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod1(ExecState* exec)
     1544{
     1545    JSValue thisValue = exec->hostThisValue();
     1546    if (!thisValue.inherits(&JSTestObj::s_info))
     1547        return throwVMTypeError(exec);
     1548    JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(thisValue));
     1549    ASSERT_GC_OBJECT_INHERITS(castedThis, &JSTestObj::s_info);
     1550    TestObj* imp = static_cast<TestObj*>(castedThis->impl());
     1551
     1552
     1553    JSC::JSValue result = jsString(exec, imp->conditionalMethod1());
     1554    return JSValue::encode(result);
     1555}
     1556
     1557#endif
     1558
     1559#if ENABLE(Condition1) && ENABLE(Condition2)
     1560EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod2(ExecState* exec)
     1561{
     1562    JSValue thisValue = exec->hostThisValue();
     1563    if (!thisValue.inherits(&JSTestObj::s_info))
     1564        return throwVMTypeError(exec);
     1565    JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(thisValue));
     1566    ASSERT_GC_OBJECT_INHERITS(castedThis, &JSTestObj::s_info);
     1567    TestObj* imp = static_cast<TestObj*>(castedThis->impl());
     1568
     1569    imp->conditionalMethod2();
     1570    return JSValue::encode(jsUndefined());
     1571}
     1572
     1573#endif
     1574
     1575#if ENABLE(Condition1) || ENABLE(Condition2)
     1576EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod3(ExecState* exec)
     1577{
     1578    JSValue thisValue = exec->hostThisValue();
     1579    if (!thisValue.inherits(&JSTestObj::s_info))
     1580        return throwVMTypeError(exec);
     1581    JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(thisValue));
     1582    ASSERT_GC_OBJECT_INHERITS(castedThis, &JSTestObj::s_info);
     1583    TestObj* imp = static_cast<TestObj*>(castedThis->impl());
     1584
     1585    imp->conditionalMethod3();
     1586    return JSValue::encode(jsUndefined());
     1587}
     1588
     1589#endif
    15321590
    15331591static EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod1(ExecState* exec)
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h

    r92706 r94354  
    128128JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg(JSC::ExecState*);
    129129JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg(JSC::ExecState*);
     130JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod1(JSC::ExecState*);
     131JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod2(JSC::ExecState*);
     132JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod3(JSC::ExecState*);
    130133JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod(JSC::ExecState*);
    131134JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionClassMethod(JSC::ExecState*);
  • trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h

    r73564 r94354  
    151151- (void)methodWithNonOptionalArgAndOptionalArg:(int)nonOpt opt:(int)opt;
    152152- (void)methodWithNonOptionalArgAndTwoOptionalArgs:(int)nonOpt opt1:(int)opt1 opt2:(int)opt2;
     153- (NSString *)conditionalMethod1;
     154- (void)conditionalMethod2;
     155- (void)conditionalMethod3;
    153156- (void)classMethod;
    154157- (int)classMethodWithOptional:(int)arg;
  • trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm

    r73564 r94354  
    679679}
    680680
     681
     682#if ENABLE(Condition1)
     683- (NSString *)conditionalMethod1
     684{
     685    WebCore::JSMainThreadNullState state;
     686    return IMPL->conditionalMethod1();
     687}
     688
     689#endif
     690
     691
     692#if ENABLE(Condition1) && ENABLE(Condition2)
     693- (void)conditionalMethod2
     694{
     695    WebCore::JSMainThreadNullState state;
     696    IMPL->conditionalMethod2();
     697}
     698
     699#endif
     700
     701
     702#if ENABLE(Condition1) || ENABLE(Condition2)
     703- (void)conditionalMethod3
     704{
     705    WebCore::JSMainThreadNullState state;
     706    IMPL->conditionalMethod3();
     707}
     708
     709#endif
     710
    681711- (void)classMethod
    682712{
  • trunk/Source/WebCore/bindings/scripts/test/TestObj.idl

    r94156 r94354  
    137137        attribute [Conditional=Condition1|Condition2] long conditionalAttr3;
    138138
     139        // 'Conditional' extended method
     140        [Conditional=Condition1] DOMString conditionalMethod1();
     141        [Conditional=Condition1&Condition2] void conditionalMethod2();
     142        [Conditional=Condition1|Condition2] void conditionalMethod3();
     143
    139144#if defined(TESTING_V8) || defined(TESTING_JS)
    140145        // Overloads
  • trunk/Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp

    r94156 r94354  
    10421042    }
    10431043    imp->methodWithCallbackAndOptionalArg(callback);
     1044    return v8::Handle<v8::Value>();
     1045}
     1046
     1047static v8::Handle<v8::Value> conditionalMethod1Callback(const v8::Arguments& args)
     1048{
     1049    INC_STATS("DOM.TestObj.conditionalMethod1");
     1050    TestObj* imp = V8TestObj::toNative(args.Holder());
     1051    return v8String(imp->conditionalMethod1());
     1052}
     1053
     1054static v8::Handle<v8::Value> conditionalMethod2Callback(const v8::Arguments& args)
     1055{
     1056    INC_STATS("DOM.TestObj.conditionalMethod2");
     1057    TestObj* imp = V8TestObj::toNative(args.Holder());
     1058    imp->conditionalMethod2();
     1059    return v8::Handle<v8::Value>();
     1060}
     1061
     1062static v8::Handle<v8::Value> conditionalMethod3Callback(const v8::Arguments& args)
     1063{
     1064    INC_STATS("DOM.TestObj.conditionalMethod3");
     1065    TestObj* imp = V8TestObj::toNative(args.Holder());
     1066    imp->conditionalMethod3();
    10441067    return v8::Handle<v8::Value>();
    10451068}
     
    12591282    {"methodWithNonCallbackArgAndCallbackArg", TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback},
    12601283    {"methodWithCallbackAndOptionalArg", TestObjInternal::methodWithCallbackAndOptionalArgCallback},
     1284#if ENABLE(Condition1)
     1285    {"conditionalMethod1", TestObjInternal::conditionalMethod1Callback},
     1286#endif
     1287#if ENABLE(Condition1) && ENABLE(Condition2)
     1288    {"conditionalMethod2", TestObjInternal::conditionalMethod2Callback},
     1289#endif
     1290#if ENABLE(Condition1) || ENABLE(Condition2)
     1291    {"conditionalMethod3", TestObjInternal::conditionalMethod3Callback},
     1292#endif
    12611293    {"overloadedMethod", TestObjInternal::overloadedMethodCallback},
    12621294};
Note: See TracChangeset for help on using the changeset viewer.