Changeset 94354 in webkit
- Timestamp:
- Sep 1, 2011 3:42:20 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r94353 r94354 1 2011-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 1 30 2011-08-29 Nat Duca <nduca@chromium.org> 2 31 -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm
r77392 r94354 870 870 } 871 871 872 my $conditionalString = GenerateConditionalString($function->signature); 873 push(@implContent, "\n#if ${conditionalString}\n") if $conditionalString; 874 872 875 push(@implContent, "$functionSig\n"); 873 876 push(@implContent, "{\n"); … … 875 878 push(@implContent, @functionContent); 876 879 push(@implContent, "}\n\n"); 880 881 push(@implContent, "#endif\n\n") if $conditionalString; 877 882 878 883 # Clear the hash -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
r94095 r94354 1376 1376 my @hashValue2 = (); 1377 1377 my @hashSpecials = (); 1378 my %conditionals = (); 1378 1379 1379 1380 # FIXME: we should not need a function for every constant. … … 1403 1404 my $special = (@specials > 0) ? join(" | ", @specials) : "0"; 1404 1405 push(@hashSpecials, $special); 1406 1407 my $conditional = $function->signature->extendedAttributes->{"Conditional"}; 1408 if ($conditional) { 1409 $conditionals{$name} = $conditional; 1410 } 1405 1411 } 1406 1412 1407 1413 $object->GenerateHashTable($hashName, $hashSize, 1408 1414 \@hashKeys, \@hashSpecials, 1409 \@hashValue1, \@hashValue2); 1415 \@hashValue1, \@hashValue2, 1416 \%conditionals); 1410 1417 1411 1418 if ($dataNode->extendedAttributes->{"NoStaticTables"}) { … … 1946 1953 my $functionImplementationName = $function->signature->extendedAttributes->{"ImplementationFunction"} || $codeGenerator->WK_lcfirst($function->signature->name); 1947 1954 1955 my $conditional = $function->signature->extendedAttributes->{"Conditional"}; 1956 if ($conditional) { 1957 my $conditionalString = GenerateConditionalStringFromAttributeValue($conditional); 1958 push(@implContent, "#if ${conditionalString}\n"); 1959 } 1960 1948 1961 push(@implContent, "EncodedJSValue JSC_HOST_CALL ${functionName}(ExecState* exec)\n"); 1949 1962 push(@implContent, "{\n"); … … 2182 2195 GenerateOverloadedPrototypeFunction($function, $dataNode, $implClassName); 2183 2196 } 2197 2198 if ($conditional) { 2199 push(@implContent, "#endif\n\n"); 2200 } 2184 2201 } 2185 2202 } -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm
r90680 r94354 1651 1651 } 1652 1652 1653 my $conditionalString = GenerateConditionalString($function->signature); 1654 push(@implContent, "\n#if ${conditionalString}\n") if $conditionalString; 1655 1653 1656 push(@implContent, "$functionSig\n"); 1654 1657 push(@implContent, "{\n"); … … 1656 1659 push(@implContent, @functionContent); 1657 1660 push(@implContent, "}\n\n"); 1661 1662 push(@implContent, "#endif\n\n") if $conditionalString; 1658 1663 1659 1664 # generate the old style method names with un-named parameters, these methods are deprecated -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
r94156 r94354 2055 2055 my $name = $function->signature->name; 2056 2056 my $callback = GetFunctionTemplateCallbackName($function, $interfaceName); 2057 my $conditionalString = GenerateConditionalString($function->signature); 2058 push(@implContent, "#if ${conditionalString}\n") if $conditionalString; 2057 2059 push(@implContent, <<END); 2058 2060 {"$name", $callback}, 2059 2061 END 2062 push(@implContent, "#endif\n") if $conditionalString; 2060 2063 $num_callbacks++; 2061 2064 } -
trunk/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp
r73564 r94354 808 808 } 809 809 810 811 #if ENABLE(Condition1) 812 WebDOMString 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) 824 void WebDOMTestObj::conditionalMethod2() 825 { 826 if (!impl()) 827 return; 828 829 impl()->conditionalMethod2(); 830 } 831 832 #endif 833 834 835 #if ENABLE(Condition1) || ENABLE(Condition2) 836 void WebDOMTestObj::conditionalMethod3() 837 { 838 if (!impl()) 839 return; 840 841 impl()->conditionalMethod3(); 842 } 843 844 #endif 845 810 846 void WebDOMTestObj::classMethod() 811 847 { -
trunk/Source/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h
r73564 r94354 159 159 void methodWithNonOptionalArgAndOptionalArg(int nonOpt, int opt); 160 160 void methodWithNonOptionalArgAndTwoOptionalArgs(int nonOpt, int opt1, int opt2); 161 WebDOMString conditionalMethod1(); 162 void conditionalMethod2(); 163 void conditionalMethod3(); 161 164 void classMethod(); 162 165 int classMethodWithOptional(int arg); -
trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp
r81789 r94354 382 382 WebCore::TestObj * item = WebKit::core(self); 383 383 item->methodWithNonOptionalArgAndTwoOptionalArgs(non_opt, opt1, opt2); 384 } 385 386 gchar* 387 webkit_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 400 void 401 webkit_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 411 void 412 webkit_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) */ 384 420 } 385 421 -
trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h
r90841 r94354 331 331 332 332 /** 333 * webkit_dom_test_obj_conditional_method1: 334 * @self: A #WebKitDOMTestObj 335 * 336 * Returns: 337 * 338 **/ 339 WEBKIT_API gchar* 340 webkit_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 **/ 349 WEBKIT_API void 350 webkit_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 **/ 359 WEBKIT_API void 360 webkit_dom_test_obj_conditional_method3(WebKitDOMTestObj* self); 361 362 /** 333 363 * webkit_dom_test_obj_class_method: 334 364 * @self: A #WebKitDOMTestObj -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
r92706 r94354 237 237 { "methodWithNonCallbackArgAndCallbackArg", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg), (intptr_t)2 THUNK_GENERATOR(0) }, 238 238 { "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 239 248 { "overloadedMethod", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionOverloadedMethod), (intptr_t)2 THUNK_GENERATOR(0) }, 240 249 { "classMethod", DontDelete | Function, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionClassMethod), (intptr_t)0 THUNK_GENERATOR(0) }, … … 244 253 245 254 #undef THUNK_GENERATOR 246 static JSC_CONST_HASHTABLE HashTable JSTestObjPrototypeTable = { 13 6, 127, JSTestObjPrototypeTableValues, 0 };255 static JSC_CONST_HASHTABLE HashTable JSTestObjPrototypeTable = { 137, 127, JSTestObjPrototypeTableValues, 0 }; 247 256 const ClassInfo JSTestObjPrototype::s_info = { "TestObjPrototype", &JSC::JSObjectWithGlobalObject::s_info, &JSTestObjPrototypeTable, 0 }; 248 257 … … 1530 1539 return JSValue::encode(jsUndefined()); 1531 1540 } 1541 1542 #if ENABLE(Condition1) 1543 EncodedJSValue 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) 1560 EncodedJSValue 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) 1576 EncodedJSValue 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 1532 1590 1533 1591 static EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod1(ExecState* exec) -
trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h
r92706 r94354 128 128 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg(JSC::ExecState*); 129 129 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg(JSC::ExecState*); 130 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod1(JSC::ExecState*); 131 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod2(JSC::ExecState*); 132 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod3(JSC::ExecState*); 130 133 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod(JSC::ExecState*); 131 134 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionClassMethod(JSC::ExecState*); -
trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h
r73564 r94354 151 151 - (void)methodWithNonOptionalArgAndOptionalArg:(int)nonOpt opt:(int)opt; 152 152 - (void)methodWithNonOptionalArgAndTwoOptionalArgs:(int)nonOpt opt1:(int)opt1 opt2:(int)opt2; 153 - (NSString *)conditionalMethod1; 154 - (void)conditionalMethod2; 155 - (void)conditionalMethod3; 153 156 - (void)classMethod; 154 157 - (int)classMethodWithOptional:(int)arg; -
trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm
r73564 r94354 679 679 } 680 680 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 681 711 - (void)classMethod 682 712 { -
trunk/Source/WebCore/bindings/scripts/test/TestObj.idl
r94156 r94354 137 137 attribute [Conditional=Condition1|Condition2] long conditionalAttr3; 138 138 139 // 'Conditional' extended method 140 [Conditional=Condition1] DOMString conditionalMethod1(); 141 [Conditional=Condition1&Condition2] void conditionalMethod2(); 142 [Conditional=Condition1|Condition2] void conditionalMethod3(); 143 139 144 #if defined(TESTING_V8) || defined(TESTING_JS) 140 145 // Overloads -
trunk/Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp
r94156 r94354 1042 1042 } 1043 1043 imp->methodWithCallbackAndOptionalArg(callback); 1044 return v8::Handle<v8::Value>(); 1045 } 1046 1047 static 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 1054 static 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 1062 static 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(); 1044 1067 return v8::Handle<v8::Value>(); 1045 1068 } … … 1259 1282 {"methodWithNonCallbackArgAndCallbackArg", TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback}, 1260 1283 {"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 1261 1293 {"overloadedMethod", TestObjInternal::overloadedMethodCallback}, 1262 1294 };
Note: See TracChangeset
for help on using the changeset viewer.