Guest User

Untitled

a guest
Jun 3rd, 2018
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.98 KB | None | 0 0
  1. diff --git a/ChangeLog b/ChangeLog
  2. index d457bec..ee80d45 100644
  3. --- a/ChangeLog
  4. +++ b/ChangeLog
  5. @@ -1,3 +1,23 @@
  6. +2010-08-09 Andras Becsi <abecsi@webkit.org>
  7. +
  8. + Reviewed by NOBODY (OOPS!).
  9. +
  10. + Undefined reference errors when linking due to gperf and inlining.
  11. + webkit.org/b/29244
  12. +
  13. + EFL CMake changes by Leandro Pereira <leandro@profusion.mobi>
  14. +
  15. + Refactor gperf code generation and usage to fix the debug build with gcc>4.4.
  16. + Hitherto gperf generated C code, these files were included in multiple C++ files across WebCore
  17. + to access the functionality provided. This resulted in debug build failure with newer gcc versions
  18. + because of a behaviour change of gcc, which disables C style inlining in debug mode.
  19. + The make-hash-tools.pl script lets gperf generate C++ code for all gperf files now, which are compiled
  20. + in their own compilation unit.
  21. + The functionality provided by the generated code is wrapped behind HashTools.h, so there is no need
  22. + for multiple inclusions of generated C files to access these functions.
  23. +
  24. + * cmake/WebKitGenerators.cmake:
  25. +
  26. 2010-08-07 Sheriff Bot <webkit.review.bot@gmail.com>
  27.  
  28. Unreviewed, rolling out r64904.
  29. diff --git a/WebCore/CMakeLists.txt b/WebCore/CMakeLists.txt
  30. index 1ddb0c1..0728713 100644
  31. --- a/WebCore/CMakeLists.txt
  32. +++ b/WebCore/CMakeLists.txt
  33. @@ -531,6 +531,10 @@ SET(WebCore_SOURCES
  34. ${DERIVED_SOURCES_DIR}/CSSGrammar.cpp
  35. ${DERIVED_SOURCES_DIR}/HTMLElementFactory.cpp
  36. ${DERIVED_SOURCES_DIR}/HTMLEntityNames.cpp
  37. + ${DERIVED_SOURCES_DIR}/DocTypeStrings.cpp
  38. + ${DERIVED_SOURCES_DIR}/CSSValueKeywords.cpp
  39. + ${DERIVED_SOURCES_DIR}/CSSPropertyNames.cpp
  40. + ${DERIVED_SOURCES_DIR}/ColorData.cpp
  41. ${DERIVED_SOURCES_DIR}/HTMLNames.cpp
  42. ${DERIVED_SOURCES_DIR}/JSHTMLElementWrapperFactory.cpp
  43. ${DERIVED_SOURCES_DIR}/MathMLElementFactory.cpp
  44. @@ -1820,9 +1824,11 @@ GENERATE_INSPECTOR_FROM_IDL(inspector/Inspector.idl)
  45.  
  46. LIST(APPEND WebCore_SOURCES ${JS_IDL_FILES} ${Inspector_IDL_FILES})
  47.  
  48. -GENERATE_GPERF(${WEBCORE_DIR}/html/HTMLEntityNames.gperf)
  49. -GENERATE_GPERF(${WEBCORE_DIR}/platform/ColorData.gperf)
  50. -GENERATE_GPERF(${WEBCORE_DIR}/html/DocTypeStrings.gperf)
  51. +MAKE_HASH_TOOLS(${WEBCORE_DIR}/html/HTMLEntityNames)
  52. +MAKE_HASH_TOOLS(${WEBCORE_DIR}/html/DocTypeStrings)
  53. +MAKE_HASH_TOOLS(${DERIVED_SOURCES_DIR}/CSSValueKeywords)
  54. +MAKE_HASH_TOOLS(${DERIVED_SOURCES_DIR}/CSSPropertyNames)
  55. +MAKE_HASH_TOOLS(${WEBCORE_DIR}/platform/ColorData)
  56.  
  57. GENERATE_TOKENIZER()
  58. GENERATE_USER_AGENT_STYLES()
  59. @@ -1833,6 +1839,7 @@ GENERATE_GRAMMAR(xpathyy ${WEBCORE_DIR}/xml/XPathGrammar.y)
  60. GENERATE_CSS_PROPERTY_NAMES()
  61. GENERATE_CSS_VALUE_KEYWORDS()
  62.  
  63. +ADD_SOURCE_DERIVED_DEPENDENCIES(${DERIVED_SOURCES_DIR}/HashTools.h HTMLEntityNames.cpp DocTypeStrings.cpp CSSValueKeywords.cpp CSSPropertyNames.cpp ColorData.cpp)
  64. ADD_SOURCE_DERIVED_DEPENDENCIES(${DERIVED_SOURCES_DIR}/CSSGrammar.cpp CSSValueKeywords.h)
  65. ADD_SOURCE_DERIVED_DEPENDENCIES(${DERIVED_SOURCES_DIR}/CSSGrammar.cpp CSSPropertyNames.h)
  66. ADD_SOURCE_DERIVED_DEPENDENCIES(${WEBCORE_DIR}/css/CSSPrimitiveValueMappings.h CSSValueKeywords.h)
  67. diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
  68. index 7531c65..cbd8305 100644
  69. --- a/WebCore/ChangeLog
  70. +++ b/WebCore/ChangeLog
  71. @@ -1,3 +1,41 @@
  72. +2010-08-09 Andras Becsi <abecsi@webkit.org>
  73. +
  74. + Reviewed by NOBODY (OOPS!).
  75. +
  76. + Undefined reference errors when linking due to gperf and inlining.
  77. + webkit.org/b/29244
  78. +
  79. + EFL CMake changes by Leandro Pereira <leandro@profusion.mobi>
  80. +
  81. + Refactor gperf code generation and usage to fix the debug build with gcc>4.4.
  82. + Hitherto gperf generated C code, these files were included in multiple C++ files across WebCore
  83. + to access the functionality provided. This resulted in debug build failure with newer gcc versions
  84. + because of a behaviour change of gcc, which disables C style inlining in debug mode.
  85. + The make-hash-tools.pl script lets gperf generate C++ code for all gperf files now, which are compiled
  86. + in their own compilation unit.
  87. + The functionality provided by the generated code is wrapped behind HashTools.h, so there is no need
  88. + for multiple inclusions of generated C files to access these functions.
  89. +
  90. + No new tests needed.
  91. +
  92. + * CMakeLists.txt:
  93. + * WebCore.vcproj/WebCore.vcproj:
  94. + * WebCore.gyp/WebCore.gyp:
  95. + * WebCore.pri:
  96. + * WebCore.xcodeproj/project.pbxproj:
  97. + * css/CSSParser.cpp:
  98. + * css/makeprop.pl:
  99. + * css/makevalues.pl:
  100. + * html/DocTypeStrings.gperf:
  101. + * html/HTMLDocument.cpp:
  102. + * html/HTMLEntityNames.gperf:
  103. + * html/HTMLEntityParser.cpp:
  104. + * html/LegacyHTMLDocumentParser.cpp:
  105. + * html/LegacyPreloadScanner.cpp:
  106. + * make-hash-tools.pl:
  107. + * platform/ColorData.gperf:
  108. + * platform/graphics/Color.cpp:
  109. +
  110. 2010-08-09 François Sausset <sausset@gmail.com>
  111.  
  112. Reviewed by Kenneth Rohde Christiansen.
  113. diff --git a/WebCore/WebCore.gyp/WebCore.gyp b/WebCore/WebCore.gyp/WebCore.gyp
  114. index a28ee5d..55dbb21 100644
  115. --- a/WebCore/WebCore.gyp/WebCore.gyp
  116. +++ b/WebCore/WebCore.gyp/WebCore.gyp
  117. @@ -607,7 +607,6 @@
  118. '<(SHARED_INTERMEDIATE_DIR)/webkit',
  119. '<(RULE_INPUT_PATH)',
  120. ],
  121. - 'process_outputs_as_sources': 0,
  122. },
  123. # Rule to build generated JavaScript (V8) bindings from .idl source.
  124. {
  125. @@ -702,6 +701,13 @@
  126. # in webcore_files.
  127. '<@(derived_sources_aggregate_files)',
  128.  
  129. + # Additional .cpp files for HashTools.h
  130. + '<(SHARED_INTERMEDIATE_DIR)/webkit/HTMLEntityNames.cpp',
  131. + '<(SHARED_INTERMEDIATE_DIR)/webkit/DocTypeStrings.cpp',
  132. + '<(SHARED_INTERMEDIATE_DIR)/webkit/ColorData.cpp',
  133. + '<(SHARED_INTERMEDIATE_DIR)/webkit/CSSPropertyNames.cpp',
  134. + '<(SHARED_INTERMEDIATE_DIR)/webkit/CSSValueKeywords.cpp',
  135. +
  136. # Additional .cpp files from webcore_bindings_sources actions.
  137. '<(SHARED_INTERMEDIATE_DIR)/webkit/HTMLElementFactory.cpp',
  138. '<(SHARED_INTERMEDIATE_DIR)/webkit/HTMLNames.cpp',
  139. diff --git a/WebCore/WebCore.pri b/WebCore/WebCore.pri
  140. index 7dd0681..163aa6a 100644
  141. --- a/WebCore/WebCore.pri
  142. +++ b/WebCore/WebCore.pri
  143. @@ -707,7 +707,7 @@ cssprops.wkScript = $$PWD/css/makeprop.pl
  144. cssprops.output = $${WC_GENERATED_SOURCES_DIR}/CSSPropertyNames.cpp
  145. cssprops.input = WALDOCSSPROPS
  146. cssprops.commands = perl -ne \"print lc\" ${QMAKE_FILE_NAME} $${DASHBOARDSUPPORTCSSPROPERTIES} $${EXTRACSSPROPERTIES} > $${WC_GENERATED_SOURCES_DIR}/${QMAKE_FILE_BASE}.in && cd $$WC_GENERATED_SOURCES_DIR && perl $$cssprops.wkScript && $(DEL_FILE) ${QMAKE_FILE_BASE}.in ${QMAKE_FILE_BASE}.gperf
  147. -cssprops.depends = ${QMAKE_FILE_NAME} $${DASHBOARDSUPPORTCSSPROPERTIES} $${EXTRACSSPROPERTIES}
  148. +cssprops.depends = ${QMAKE_FILE_NAME} $${DASHBOARDSUPPORTCSSPROPERTIES} $${EXTRACSSPROPERTIES} $$cssprops.wkScript
  149. addExtraCompiler(cssprops)
  150.  
  151. # GENERATOR 6-B:
  152. @@ -715,7 +715,7 @@ cssvalues.wkScript = $$PWD/css/makevalues.pl
  153. cssvalues.output = $${WC_GENERATED_SOURCES_DIR}/CSSValueKeywords.cpp
  154. cssvalues.input = WALDOCSSVALUES
  155. cssvalues.commands = perl -ne \"print lc\" ${QMAKE_FILE_NAME} $$EXTRACSSVALUES > $${WC_GENERATED_SOURCES_DIR}/${QMAKE_FILE_BASE}.in && cd $$WC_GENERATED_SOURCES_DIR && perl $$cssvalues.wkScript && $(DEL_FILE) ${QMAKE_FILE_BASE}.in ${QMAKE_FILE_BASE}.gperf
  156. -cssvalues.depends = ${QMAKE_FILE_NAME} $${EXTRACSSVALUES}
  157. +cssvalues.depends = ${QMAKE_FILE_NAME} $${EXTRACSSVALUES} $$cssvalues.wkScript
  158. cssvalues.clean = ${QMAKE_FILE_OUT} ${QMAKE_VAR_WC_GENERATED_SOURCES_DIR}/${QMAKE_FILE_BASE}.h
  159. addExtraCompiler(cssvalues)
  160.  
  161. diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
  162. index f811295..58a2f66 100644
  163. --- a/WebCore/WebCore.vcproj/WebCore.vcproj
  164. +++ b/WebCore/WebCore.vcproj/WebCore.vcproj
  165. @@ -545,6 +545,30 @@
  166. >
  167. </File>
  168. <File
  169. + RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\HashTools.h"
  170. + >
  171. + </File>
  172. + <File
  173. + RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\HTMLEntityNames.cpp"
  174. + >
  175. + </File>
  176. + <File
  177. + RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\DocTypeStrings.cpp"
  178. + >
  179. + </File>
  180. + <File
  181. + RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\CSSValueKeywords.cpp"
  182. + >
  183. + </File>
  184. + <File
  185. + RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\CSSPropertyNames.cpp"
  186. + >
  187. + </File>
  188. + <File
  189. + RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\ColorData.cpp"
  190. + >
  191. + </File>
  192. + <File
  193. RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\InspectorBackendDispatcher.cpp"
  194. >
  195. </File>
  196. diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
  197. index 3791dc9..0551007 100644
  198. --- a/WebCore/WebCore.xcodeproj/project.pbxproj
  199. +++ b/WebCore/WebCore.xcodeproj/project.pbxproj
  200. @@ -488,6 +488,11 @@
  201. 1AB7FC860A8B92EC00D9D37B /* XPathValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB7FC650A8B92EC00D9D37B /* XPathValue.h */; };
  202. 1AB7FC870A8B92EC00D9D37B /* XPathVariableReference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AB7FC660A8B92EC00D9D37B /* XPathVariableReference.cpp */; };
  203. 1AB7FC880A8B92EC00D9D37B /* XPathVariableReference.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB7FC670A8B92EC00D9D37B /* XPathVariableReference.h */; };
  204. + 1ABA76C911D20E47004C201C /* ColorData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E406F3FB1198307D009D59D6 /* ColorData.cpp */; };
  205. + 1ABA76CA11D20E50004C201C /* CSSPropertyNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E41EA038119836DB00710BC5 /* CSSPropertyNames.cpp */; };
  206. + 1ABA76CB11D20E57004C201C /* CSSValueKeywords.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E41EA0391198374900710BC5 /* CSSValueKeywords.cpp */; };
  207. + 1ABA76CC11D20E5B004C201C /* DocTypeStrings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E406F3FA1198304D009D59D6 /* DocTypeStrings.cpp */; };
  208. + 1ABA77FD11D21031004C201C /* HTMLEntityNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E406F4021198329A009D59D6 /* HTMLEntityNames.cpp */; };
  209. 1ABFE7530CD968D000FE4834 /* SQLTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ABFE7520CD968D000FE4834 /* SQLTransaction.cpp */; };
  210. 1AC2260C0DB69F190089B669 /* JSDOMApplicationCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AC2260A0DB69F190089B669 /* JSDOMApplicationCache.cpp */; };
  211. 1AC2260D0DB69F190089B669 /* JSDOMApplicationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC2260B0DB69F190089B669 /* JSDOMApplicationCache.h */; };
  212. @@ -20429,6 +20434,11 @@
  213. isa = PBXSourcesBuildPhase;
  214. buildActionMask = 2147483647;
  215. files = (
  216. + 1ABA76C911D20E47004C201C /* ColorData.cpp in Sources */,
  217. + 1ABA76CA11D20E50004C201C /* CSSPropertyNames.cpp in Sources */,
  218. + 1ABA76CB11D20E57004C201C /* CSSValueKeywords.cpp in Sources */,
  219. + 1ABA76CC11D20E5B004C201C /* DocTypeStrings.cpp in Sources */,
  220. + 1ABA77FD11D21031004C201C /* HTMLEntityNames.cpp in Sources */,
  221. B5B5DC69119BB3D5002A8790 /* AbstractDatabase.cpp in Sources */,
  222. 41E1B1D00FF5986900576B3B /* AbstractWorker.cpp in Sources */,
  223. 29A812280FBB9C1D00510293 /* AccessibilityARIAGrid.cpp in Sources */,
  224. diff --git a/WebCore/css/CSSParser.cpp b/WebCore/css/CSSParser.cpp
  225. index aa6cdd9..c8f1173 100644
  226. --- a/WebCore/css/CSSParser.cpp
  227. +++ b/WebCore/css/CSSParser.cpp
  228. @@ -61,6 +61,7 @@
  229. #include "FloatConversion.h"
  230. #include "FontFamilyValue.h"
  231. #include "FontValue.h"
  232. +#include "HashTools.h"
  233. #include "MediaList.h"
  234. #include "MediaQueryExp.h"
  235. #include "Pair.h"
  236. @@ -88,9 +89,6 @@ extern int cssyyparse(void* parser);
  237. using namespace std;
  238. using namespace WTF;
  239.  
  240. -#include "CSSPropertyNames.cpp"
  241. -#include "CSSValueKeywords.cpp"
  242. -
  243. namespace WebCore {
  244.  
  245. static const unsigned INVALID_NUM_PARSED_PROPERTIES = UINT_MAX;
  246. diff --git a/WebCore/css/makeprop.pl b/WebCore/css/makeprop.pl
  247. index 0fd1f08..0dd8444 100644
  248. --- a/WebCore/css/makeprop.pl
  249. +++ b/WebCore/css/makeprop.pl
  250. @@ -41,15 +41,14 @@ print GPERF << "EOF";
  251. #include \"CSSPropertyNames.h\"
  252. %}
  253. %struct-type
  254. -struct Property {
  255. - const char* name;
  256. - int id;
  257. -};
  258. -%language=ANSI-C
  259. +struct Property;
  260. +%omit-struct-type
  261. +%language=C++
  262. %readonly-tables
  263. %global-table
  264. %compare-strncmp
  265. -%define lookup-function-name findProperty
  266. +%define class-name CSSPropertyNamesHash
  267. +%define lookup-function-name findPropertyImpl
  268. %define hash-function-name propery_hash_function
  269. %define word-array-name property_wordlist
  270. %includes
  271. @@ -72,6 +71,10 @@ print HEADER << "EOF";
  272. #ifndef CSSPropertyNames_h
  273. #define CSSPropertyNames_h
  274.  
  275. +#include <string.h>
  276. +
  277. +namespace WebCore {
  278. +
  279. enum CSSPropertyID {
  280. CSSPropertyInvalid = 0,
  281. EOF
  282. @@ -99,15 +102,17 @@ print HEADER << "EOF";
  283.  
  284. const char* getPropertyName(CSSPropertyID);
  285.  
  286. +} // namespace WebCore
  287. +
  288. #endif // CSSPropertyNames_h
  289.  
  290. EOF
  291.  
  292. close HEADER;
  293.  
  294. -system("gperf --key-positions=\"*\" -D -n -s 2 CSSPropertyNames.gperf > CSSPropertyNames.cpp") == 0 || die "calling gperf failed: $?";
  295. +system("gperf --key-positions=\"*\" -D -n -s 2 CSSPropertyNames.gperf > CSSPropertyNamesHash.h") == 0 || die "calling gperf failed: $?";
  296.  
  297. -open C, ">>CSSPropertyNames.cpp" || die "Could not open CSSPropertyNames.cpp for writing";
  298. +open C, ">>CSSPropertyNamesHash.h" || die "Could not open CSSPropertyNamesHash.h for writing";
  299. print C "static const char * const propertyNameStrings[$num] = {\n";
  300.  
  301. foreach my $name (@names) {
  302. @@ -116,6 +121,29 @@ foreach my $name (@names) {
  303.  
  304. print C << "EOF";
  305. };
  306. +
  307. +EOF
  308. +
  309. +close C;
  310. +
  311. +my $propertyNamesImpl = "CSSPropertyNames.cpp";
  312. +
  313. +open PROPERTYNAMES, ">$propertyNamesImpl" || die "Could not open $propertyNamesImpl for writing";
  314. +print PROPERTYNAMES << "EOF";
  315. +/* This file is automatically generated by make-hash-tools.pl, do not edit */
  316. +
  317. +
  318. +#include "CSSPropertyNames.h"
  319. +#include "HashTools.h"
  320. +
  321. +namespace WebCore {
  322. +#include "CSSPropertyNamesHash.h"
  323. +
  324. +const Property* findProperty (register const char* str, register unsigned int len)
  325. +{
  326. + return CSSPropertyNamesHash::findPropertyImpl(str, len);
  327. +}
  328. +
  329. const char* getPropertyName(CSSPropertyID id)
  330. {
  331. if (id < firstCSSProperty)
  332. @@ -125,7 +153,10 @@ const char* getPropertyName(CSSPropertyID id)
  333. return 0;
  334. return propertyNameStrings[index];
  335. }
  336. +
  337. +} // namespace WebCore
  338. +
  339. EOF
  340.  
  341. -close C;
  342. +close PROPERTYNAMES;
  343.  
  344. diff --git a/WebCore/css/makevalues.pl b/WebCore/css/makevalues.pl
  345. index 421e470..c9f7f70 100644
  346. --- a/WebCore/css/makevalues.pl
  347. +++ b/WebCore/css/makevalues.pl
  348. @@ -42,14 +42,13 @@ print GPERF << "EOF";
  349. #include \"CSSValueKeywords.h\"
  350. %}
  351. %struct-type
  352. -struct Value {
  353. - const char* name;
  354. - int id;
  355. -};
  356. -%language=ANSI-C
  357. +struct Value;
  358. +%omit-struct-type
  359. +%language=C++
  360. %readonly-tables
  361. %compare-strncmp
  362. -%define lookup-function-name findValue
  363. +%define class-name CSSValueKeywordsHash
  364. +%define lookup-function-name findValueImpl
  365. %define hash-function-name value_hash_function
  366. %define word-array-name value_word_list
  367. %includes
  368. @@ -72,6 +71,10 @@ print HEADER << "EOF";
  369. #ifndef CSSValueKeywords_h
  370. #define CSSValueKeywords_h
  371.  
  372. +#include <string.h>
  373. +
  374. +namespace WebCore {
  375. +
  376. const int CSSValueInvalid = 0;
  377. EOF
  378.  
  379. @@ -92,13 +95,16 @@ print HEADER << "EOF";
  380.  
  381. const char* getValueName(unsigned short id);
  382.  
  383. +} // namespace WebCore
  384. +
  385. #endif // CSSValueKeywords_h
  386. +
  387. EOF
  388. close HEADER;
  389.  
  390. -system("gperf --key-positions=\"*\" -D -n -s 2 CSSValueKeywords.gperf > CSSValueKeywords.cpp") == 0 || die "calling gperf failed: $?";
  391. +system("gperf --key-positions=\"*\" -D -n -s 2 CSSValueKeywords.gperf > CSSValueKeywordsHash.h") == 0 || die "calling gperf failed: $?";
  392.  
  393. -open C, ">>CSSValueKeywords.cpp" || die "Could not open CSSValueKeywords.cpp for writing";
  394. +open C, ">>CSSValueKeywordsHash.h" || die "Could not open CSSValueKeywordsHash.h for writing";
  395. print C "static const char * const valueList[] = {\n";
  396. print C "\"\",\n";
  397. foreach my $name (@names) {
  398. @@ -107,12 +113,38 @@ foreach my $name (@names) {
  399. print C << "EOF";
  400. 0
  401. };
  402. +
  403. +EOF
  404. +
  405. +close C;
  406. +
  407. +my $valueKeywordsImpl = "CSSValueKeywords.cpp";
  408. +
  409. +open VALUEKEYWORDS, ">$valueKeywordsImpl" || die "Could not open $valueKeywordsImpl for writing";
  410. +print VALUEKEYWORDS << "EOF";
  411. +/* This file is automatically generated by make-hash-tools.pl, do not edit */
  412. +
  413. +#include "CSSValueKeywords.h"
  414. +#include "HashTools.h"
  415. +
  416. +namespace WebCore {
  417. +#include "CSSValueKeywordsHash.h"
  418. +
  419. +const Value* findValue (register const char* str, register unsigned int len)
  420. +{
  421. + return CSSValueKeywordsHash::findValueImpl(str, len);
  422. +}
  423. +
  424. const char* getValueName(unsigned short id)
  425. {
  426. if (id >= numCSSValueKeywords || id <= 0)
  427. return 0;
  428. return valueList[id];
  429. }
  430. +
  431. +} // namespace WebCore
  432. +
  433. EOF
  434.  
  435. -close C;
  436. +close VALUEKEYWORDS;
  437. +
  438. diff --git a/WebCore/html/DocTypeStrings.gperf b/WebCore/html/DocTypeStrings.gperf
  439. index 5c213b0..6b7da04 100644
  440. --- a/WebCore/html/DocTypeStrings.gperf
  441. +++ b/WebCore/html/DocTypeStrings.gperf
  442. @@ -1,21 +1,13 @@
  443. %struct-type
  444. -struct PubIDInfo {
  445. - enum eMode {
  446. - eQuirks,
  447. - eQuirks3,
  448. - eAlmostStandards
  449. - };
  450. -
  451. - const char* name;
  452. - eMode mode_if_no_sysid;
  453. - eMode mode_if_sysid;
  454. -}
  455. -%language=ANSI-C
  456. +struct PubIDInfo;
  457. +%omit-struct-type
  458. +%language=C++
  459. %readonly-tables
  460. %global-table
  461. %compare-strncmp
  462. +%define class-name DocTypeStringsHash
  463. %define initializer-suffix ,PubIDInfo::eAlmostStandards,PubIDInfo::eAlmostStandards
  464. -%define lookup-function-name findDoctypeEntry
  465. +%define lookup-function-name findDoctypeEntryImpl
  466. %define hash-function-name doctype_hash_function
  467. %includes
  468. %enum
  469. diff --git a/WebCore/html/HTMLDocument.cpp b/WebCore/html/HTMLDocument.cpp
  470. index ff0c2de..5047ca1 100644
  471. --- a/WebCore/html/HTMLDocument.cpp
  472. +++ b/WebCore/html/HTMLDocument.cpp
  473. @@ -64,6 +64,7 @@
  474. #include "FrameLoader.h"
  475. #include "FrameTree.h"
  476. #include "FrameView.h"
  477. +#include "HashTools.h"
  478. #include "HTMLDocumentParser.h"
  479. #include "HTMLBodyElement.h"
  480. #include "HTMLElementFactory.h"
  481. @@ -75,8 +76,6 @@
  482. #include "Settings.h"
  483. #include <wtf/text/CString.h>
  484.  
  485. -#include "DocTypeStrings.cpp"
  486. -
  487. namespace WebCore {
  488.  
  489. using namespace HTMLNames;
  490. diff --git a/WebCore/html/HTMLEntityNames.gperf b/WebCore/html/HTMLEntityNames.gperf
  491. index c665efe..6ec5dca 100644
  492. --- a/WebCore/html/HTMLEntityNames.gperf
  493. +++ b/WebCore/html/HTMLEntityNames.gperf
  494. @@ -25,16 +25,16 @@
  495. */
  496. %}
  497. %struct-type
  498. -struct Entity {
  499. - const char *name;
  500. - int code;
  501. -};
  502. -%language=ANSI-C
  503. +struct Entity;
  504. +%language=C++
  505. +%omit-struct-type
  506. %readonly-tables
  507. %global-table
  508. %compare-strncmp
  509. -%define lookup-function-name findEntity
  510. +%define class-name HTMLEntityHash
  511. +%define lookup-function-name findEntityImpl
  512. %define hash-function-name entity_hash_function
  513. +%define word-array-name entity_wordlist
  514. %includes
  515. %enum
  516. %%
  517. diff --git a/WebCore/html/HTMLEntityParser.cpp b/WebCore/html/HTMLEntityParser.cpp
  518. index 84b2006..4621ef3 100644
  519. --- a/WebCore/html/HTMLEntityParser.cpp
  520. +++ b/WebCore/html/HTMLEntityParser.cpp
  521. @@ -28,21 +28,9 @@
  522. #include "config.h"
  523. #include "HTMLEntityParser.h"
  524.  
  525. +#include "HashTools.h"
  526. #include <wtf/Vector.h>
  527.  
  528. -// Use __GNUC__ instead of PLATFORM(GCC) to stay consistent with the gperf generated c file
  529. -#ifdef __GNUC__
  530. -// The main parser includes this too so we are getting two copies of the data. However, this way the code gets inlined.
  531. -#include "HTMLEntityNames.cpp"
  532. -#else
  533. -// Not inlined for non-GCC compilers
  534. -struct Entity {
  535. - const char* name;
  536. - int code;
  537. -};
  538. -const struct Entity* findEntity(register const char* str, register unsigned int len);
  539. -#endif
  540. -
  541. using namespace WTF;
  542.  
  543. namespace WebCore {
  544. diff --git a/WebCore/html/LegacyHTMLDocumentParser.cpp b/WebCore/html/LegacyHTMLDocumentParser.cpp
  545. index cb5fac8..aa6e240 100644
  546. --- a/WebCore/html/LegacyHTMLDocumentParser.cpp
  547. +++ b/WebCore/html/LegacyHTMLDocumentParser.cpp
  548. @@ -39,6 +39,7 @@
  549. #include "Frame.h"
  550. #include "FrameLoader.h"
  551. #include "FrameView.h"
  552. +#include "HashTools.h"
  553. #include "HTMLElement.h"
  554. #include "HTMLNames.h"
  555. #include "LegacyHTMLTreeBuilder.h"
  556. @@ -54,8 +55,6 @@
  557. #include <wtf/ASCIICType.h>
  558. #include <wtf/CurrentTime.h>
  559.  
  560. -#include "HTMLEntityNames.cpp"
  561. -
  562. #define PRELOAD_SCANNER_ENABLED 1
  563.  
  564. using namespace WTF;
  565. diff --git a/WebCore/html/LegacyPreloadScanner.cpp b/WebCore/html/LegacyPreloadScanner.cpp
  566. index c9fda4f..7a6d016 100644
  567. --- a/WebCore/html/LegacyPreloadScanner.cpp
  568. +++ b/WebCore/html/LegacyPreloadScanner.cpp
  569. @@ -38,25 +38,13 @@
  570. #include "Document.h"
  571. #include "Frame.h"
  572. #include "FrameLoader.h"
  573. +#include "HashTools.h"
  574. #include "HTMLLinkElement.h"
  575. #include "HTMLNames.h"
  576. #include <wtf/text/CString.h>
  577. #include <wtf/CurrentTime.h>
  578. #include <wtf/unicode/Unicode.h>
  579.  
  580. -// Use __GNUC__ instead of PLATFORM(GCC) to stay consistent with the gperf generated c file
  581. -#ifdef __GNUC__
  582. -// The main tokenizer includes this too so we are getting two copies of the data. However, this way the code gets inlined.
  583. -#include "HTMLEntityNames.cpp"
  584. -#else
  585. -// Not inlined for non-GCC compilers
  586. -struct Entity {
  587. - const char* name;
  588. - int code;
  589. -};
  590. -const struct Entity* findEntity(register const char* str, register unsigned int len);
  591. -#endif
  592. -
  593. #define PRELOAD_DEBUG 0
  594.  
  595. using namespace WTF;
  596. diff --git a/WebCore/make-hash-tools.pl b/WebCore/make-hash-tools.pl
  597. index 42cb6fd..432ac40 100644
  598. --- a/WebCore/make-hash-tools.pl
  599. +++ b/WebCore/make-hash-tools.pl
  600. @@ -26,35 +26,181 @@ use File::Basename;
  601. my $outdir = $ARGV[0];
  602. shift;
  603. my $option = basename($ARGV[0],".gperf");
  604. +my $hashToolsHeader = "$outdir/HashTools.h";
  605. +
  606. +sub createHashToolsHeader() {
  607. +
  608. +open HEADER, ">$hashToolsHeader" || die "Could not open $hashToolsHeader for writing";
  609. +print HEADER << "EOF";
  610. +/* This file is automatically generated by make-hash-tools.pl, do not edit */
  611. +
  612. +#ifndef HashTools_h
  613. +#define HashTools_h
  614. +
  615. +#include "wtf/Platform.h"
  616. +
  617. +namespace WebCore {
  618. +
  619. +struct Entity {
  620. + const char* name;
  621. + int code;
  622. +};
  623. +
  624. +struct PubIDInfo {
  625. + enum eMode {
  626. + eQuirks,
  627. + eQuirks3,
  628. + eAlmostStandards
  629. + };
  630. +
  631. + const char* name;
  632. + eMode mode_if_no_sysid;
  633. + eMode mode_if_sysid;
  634. +};
  635. +
  636. +struct NamedColor {
  637. + const char* name;
  638. + int RGBValue;
  639. +};
  640. +
  641. +struct Property {
  642. + const char* name;
  643. + int id;
  644. +};
  645. +
  646. +struct Value {
  647. + const char* name;
  648. + int id;
  649. +};
  650. +
  651. +const Entity* findEntity(register const char* str, register unsigned int len);
  652. +const PubIDInfo* findDoctypeEntry(register const char* str, register unsigned int len);
  653. +const NamedColor* findColor(register const char* str, register unsigned int len);
  654. +const Property* findProperty(register const char* str, register unsigned int len);
  655. +const Value* findValue(register const char* str, register unsigned int len);
  656. +
  657. +#if PLATFORM(CHROMIUM)
  658. +
  659. +const Entity* wordList();
  660. +const int wordListSize();
  661. +
  662. +#endif
  663. +
  664. +}
  665. +
  666. +#endif // HashTools_h
  667. +
  668. +EOF
  669. +close HEADER;
  670. +
  671. +}
  672. +
  673. +
  674.  
  675. switch ($option) {
  676.  
  677. case "HTMLEntityNames" {
  678.  
  679. - my $htmlEntityNamesGenerated = "$outdir/HTMLEntityNames.cpp";
  680. + createHashToolsHeader();
  681. +
  682. + my $htmlEntityNamesImpl = "$outdir/HTMLEntityNames.cpp";
  683. + my $htmlEntityNamesGenerated = "$outdir/HTMLEntityNamesHash.h";
  684. my $htmlEntityNamesGperf = $ARGV[0];
  685. shift;
  686.  
  687. + open ENTITIES, ">$htmlEntityNamesImpl" || die "Could not open $htmlEntityNamesImpl for writing";
  688. + print ENTITIES << "EOF";
  689. +/* This file is automatically generated by make-hash-tools.pl, do not edit */
  690. +
  691. +#include "HashTools.h"
  692. +
  693. +namespace WebCore {
  694. +#include "HTMLEntityNamesHash.h"
  695. +
  696. +const Entity* findEntity(register const char* str, register unsigned int len)
  697. +{
  698. + return HTMLEntityHash::findEntityImpl(str, len);
  699. +}
  700. +
  701. +#if PLATFORM(CHROMIUM)
  702. +
  703. +const Entity* wordList()
  704. +{
  705. + return WebCore::entity_wordlist;
  706. +}
  707. +
  708. +const int wordListSize()
  709. +{
  710. + return sizeof(WebCore::entity_wordlist) / sizeof(Entity);
  711. +}
  712. +
  713. +#endif // PLATFORM(CHROMIUM)
  714. +
  715. +} // namespace WebCore
  716. +
  717. +EOF
  718. + close ENTITIES;
  719. +
  720. system("gperf --key-positions=\"*\" -D -s 2 $htmlEntityNamesGperf > $htmlEntityNamesGenerated") == 0 || die "calling gperf failed: $?";
  721.  
  722. } # case "HTMLEntityNames"
  723.  
  724. case "DocTypeStrings" {
  725.  
  726. - my $docTypeStringsGenerated = "$outdir/DocTypeStrings.cpp";
  727. + my $docTypeStringsImpl = "$outdir/DocTypeStrings.cpp";
  728. + my $docTypeStringsGenerated = "$outdir/DocTypeStringsHash.h";
  729. my $docTypeStringsGperf = $ARGV[0];
  730. shift;
  731.  
  732. + open DOCTYPESTRINGS, ">$docTypeStringsImpl" || die "Could not open $docTypeStringsImpl for writing";
  733. + print DOCTYPESTRINGS << "EOF";
  734. +/* This file is automatically generated by make-hash-tools.pl, do not edit */
  735. +
  736. +#include "HashTools.h"
  737. +
  738. +namespace WebCore {
  739. +#include "DocTypeStringsHash.h"
  740. +
  741. +const PubIDInfo* findDoctypeEntry (register const char* str, register unsigned int len)
  742. +{
  743. + return DocTypeStringsHash::findDoctypeEntryImpl(str, len);
  744. +}
  745. +
  746. +}
  747. +
  748. +EOF
  749. + close DOCTYPESTRINGS;
  750. +
  751. system("gperf --key-positions=\"*\" -s 2 $docTypeStringsGperf > $docTypeStringsGenerated") == 0 || die "calling gperf failed: $?";
  752.  
  753. } # case "DocTypeStrings"
  754.  
  755. case "ColorData" {
  756.  
  757. - my $colorDataGenerated = "$outdir/ColorData.cpp";
  758. - my $colorDataGperf = $ARGV[0];
  759. + my $colorDataImpl = "$outdir/ColorData.cpp";
  760. + my $colorDataGenerated = "$outdir/ColorDataHash.h";
  761. + my $colorDataGperf = $ARGV[0];
  762. shift;
  763.  
  764. + open COLORDATA, ">$colorDataImpl" || die "Could not open $colorDataImpl for writing";
  765. + print COLORDATA << "EOF";
  766. +/* This file is automatically generated by make-hash-tools.pl, do not edit */
  767. +
  768. +#include "HashTools.h"
  769. +
  770. +namespace WebCore {
  771. +#include "ColorDataHash.h"
  772. +
  773. +const struct NamedColor* findColor (register const char* str, register unsigned int len)
  774. +{
  775. + return ColorDataHash::findColorImpl(str, len);
  776. +}
  777. +
  778. +}
  779. +
  780. +EOF
  781. + close COLORDATA;
  782. +
  783. system("gperf --key-positions=\"*\" -D -s 2 $colorDataGperf > $colorDataGenerated") == 0 || die "calling gperf failed: $?";
  784.  
  785. } # case "ColorData"
  786. diff --git a/WebCore/platform/ColorData.gperf b/WebCore/platform/ColorData.gperf
  787. index 11ef798..d684cb9 100644
  788. --- a/WebCore/platform/ColorData.gperf
  789. +++ b/WebCore/platform/ColorData.gperf
  790. @@ -1,13 +1,12 @@
  791. %struct-type
  792. -struct NamedColor {
  793. - const char *name;
  794. - int RGBValue;
  795. -};
  796. -%language=ANSI-C
  797. +struct NamedColor;
  798. +%omit-struct-type
  799. +%language=C++
  800. %readonly-tables
  801. %global-table
  802. %compare-strncmp
  803. -%define lookup-function-name findColor
  804. +%define class-name ColorDataHash
  805. +%define lookup-function-name findColorImpl
  806. %define hash-function-name colordata_hash_function
  807. %includes
  808. %enum
  809. diff --git a/WebCore/platform/graphics/Color.cpp b/WebCore/platform/graphics/Color.cpp
  810. index 80c8286..f28d51c 100644
  811. --- a/WebCore/platform/graphics/Color.cpp
  812. +++ b/WebCore/platform/graphics/Color.cpp
  813. @@ -26,13 +26,12 @@
  814. #include "config.h"
  815. #include "Color.h"
  816.  
  817. +#include "HashTools.h"
  818. #include "PlatformString.h"
  819. #include <math.h>
  820. #include <wtf/Assertions.h>
  821. #include <wtf/MathExtras.h>
  822.  
  823. -#include "ColorData.cpp"
  824. -
  825. using namespace std;
  826. using namespace WTF;
  827.  
  828. diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
  829. index a4c845c..18b167e 100644
  830. --- a/WebKit/chromium/ChangeLog
  831. +++ b/WebKit/chromium/ChangeLog
  832. @@ -1,3 +1,24 @@
  833. +2010-08-09 Andras Becsi <abecsi@webkit.org>
  834. +
  835. + Reviewed by NOBODY (OOPS!).
  836. +
  837. + Undefined reference errors when linking due to gperf and inlining.
  838. + webkit.org/b/29244
  839. +
  840. + EFL CMake changes by Leandro Pereira <leandro@profusion.mobi>
  841. +
  842. + Refactor gperf code generation and usage to fix the debug build with gcc>4.4.
  843. + Hitherto gperf generated C code, these files were included in multiple C++ files across WebCore
  844. + to access the functionality provided. This resulted in debug build failure with newer gcc versions
  845. + because of a behaviour change of gcc, which disables C style inlining in debug mode.
  846. + The make-hash-tools.pl script lets gperf generate C++ code for all gperf files now, which are compiled
  847. + in their own compilation unit.
  848. + The functionality provided by the generated code is wrapped behind HashTools.h, so there is no need
  849. + for multiple inclusions of generated C files to access these functions.
  850. +
  851. + * src/WebEntities.cpp:
  852. + (WebKit::WebEntities::WebEntities):
  853. +
  854. 2010-08-07 Jay Civelli <jcivelli@chromium.org>
  855.  
  856. Reviewed by Eric Seidel.
  857. diff --git a/WebKit/chromium/src/WebEntities.cpp b/WebKit/chromium/src/WebEntities.cpp
  858. index 665d8d9..78c3f5f 100644
  859. --- a/WebKit/chromium/src/WebEntities.cpp
  860. +++ b/WebKit/chromium/src/WebEntities.cpp
  861. @@ -31,9 +31,9 @@
  862. #include "config.h"
  863. #include "WebEntities.h"
  864.  
  865. -#include <string.h>
  866. -
  867. +#include "HashTools.h"
  868. #include "PlatformString.h"
  869. +#include <string.h>
  870. #include "StringBuilder.h"
  871. #include <wtf/HashMap.h>
  872.  
  873. @@ -41,15 +41,6 @@
  874.  
  875. using namespace WebCore;
  876.  
  877. -namespace {
  878. -// Note that this file is also included by LegacyHTMLDocumentParser.cpp so we are getting
  879. -// two copies of the data in memory. We can fix this by changing the script
  880. -// that generated the array to create a static const that is its length, but
  881. -// this is low priority since the data is less than 4K. We use anonymous
  882. -// namespace to prevent name collisions.
  883. -#include "HTMLEntityNames.cpp" // NOLINT
  884. -}
  885. -
  886. namespace WebKit {
  887.  
  888. void populateMap(WTF::HashMap<int, WebCore::String>& map,
  889. @@ -91,8 +82,8 @@ WebEntities::WebEntities(bool xmlEntities)
  890. false);
  891. else
  892. populateMap(m_entitiesMap,
  893. - wordlist,
  894. - sizeof(wordlist) / sizeof(Entity),
  895. + wordList(),
  896. + wordListSize(),
  897. true);
  898. }
  899.  
  900. diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
  901. index 7275642..a89eba9 100644
  902. --- a/WebKit/qt/ChangeLog
  903. +++ b/WebKit/qt/ChangeLog
  904. @@ -1,3 +1,24 @@
  905. +2010-08-09 Andras Becsi <abecsi@webkit.org>
  906. +
  907. + Reviewed by NOBODY (OOPS!).
  908. +
  909. + Undefined reference errors when linking due to gperf and inlining.
  910. + webkit.org/b/29244
  911. +
  912. + EFL CMake changes by Leandro Pereira <leandro@profusion.mobi>
  913. +
  914. + Refactor gperf code generation and usage to fix the debug build with gcc>4.4.
  915. + Hitherto gperf generated C code, these files were included in multiple C++ files across WebCore
  916. + to access the functionality provided. This resulted in debug build failure with newer gcc versions
  917. + because of a behaviour change of gcc, which disables C style inlining in debug mode.
  918. + The make-hash-tools.pl script lets gperf generate C++ code for all gperf files now, which are compiled
  919. + in their own compilation unit.
  920. + The functionality provided by the generated code is wrapped behind HashTools.h, so there is no need
  921. + for multiple inclusions of generated C files to access these functions.
  922. +
  923. + * WebCoreSupport/FrameLoaderClientQt.cpp:
  924. + (WebCore::FrameLoaderClientQt::createPlugin):
  925. +
  926. 2010-08-08 Ariya Hidayat <ariya@sencha.com>
  927.  
  928. Reviewed by Antonio Gomes.
  929. diff --git a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
  930. index 1060023..3d91d55 100644
  931. --- a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
  932. +++ b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
  933. @@ -1407,7 +1407,7 @@ PassRefPtr<Widget> FrameLoaderClientQt::createPlugin(const IntSize& pluginSize,
  934. for (unsigned i = 0; i < numqStyleSheetProperties; ++i) {
  935. CSSPropertyID property = qstyleSheetProperties[i];
  936.  
  937. - styleSheet += QString::fromLatin1(::getPropertyName(property));
  938. + styleSheet += QString::fromLatin1(getPropertyName(property));
  939. styleSheet += QLatin1Char(':');
  940. styleSheet += computedStyle(element)->getPropertyValue(property);
  941. styleSheet += QLatin1Char(';');
  942. diff --git a/cmake/WebKitGenerators.cmake b/cmake/WebKitGenerators.cmake
  943. index 50c9077..5d3b86d 100644
  944. --- a/cmake/WebKitGenerators.cmake
  945. +++ b/cmake/WebKitGenerators.cmake
  946. @@ -2,7 +2,6 @@
  947. # It will check for the programs and define the given executables:
  948. # PERL_EXECUTABLE
  949. # BISON_EXECUTABLE
  950. -# GPERF_EXECUTABLE
  951. # FLEX_EXECUTABLE
  952.  
  953. INCLUDE (WebKitFS)
  954. @@ -69,25 +68,24 @@ MACRO(GENERATE_GRAMMAR _prefix _source)
  955. ENDMACRO ()
  956.  
  957.  
  958. -FIND_PROGRAM(GPERF_EXECUTABLE gperf)
  959. -IF (NOT GPERF_EXECUTABLE)
  960. - MESSAGE(FATAL_ERROR "Missing gperf")
  961. -ENDIF ()
  962. -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GPerf DEFAULT_MSG GPERF_EXECUTABLE)
  963. -SET(PERF_HASH_GENERATOR ${WEBCORE_DIR}/make-hash-tools.pl)
  964. -
  965. # - Create perfect hash tables using gperf
  966. -# GENERATE_GPERF(extension source_file)
  967. -#
  968. -# The generated files lives in ${DERIVED_SOURCES_DIR} and ends in .cpp
  969. -MACRO(GENERATE_GPERF _source)
  970. +MACRO(MAKE_HASH_TOOLS _source)
  971. GET_FILENAME_COMPONENT(_name ${_source} NAME_WE)
  972. +
  973. + IF (${_source} STREQUAL "HTMLEntityNames")
  974. + SET(_hash_tools_h "${DERIVED_SOURCES_DIR}/HashTools.h")
  975. + ELSE ()
  976. + SET(_hash_tools_h "")
  977. + ENDIF ()
  978. +
  979. ADD_CUSTOM_COMMAND(
  980. - OUTPUT ${DERIVED_SOURCES_DIR}/${_name}.cpp
  981. - DEPENDS ${_source}
  982. - COMMAND ${PERL_EXECUTABLE} ${PERF_HASH_GENERATOR} ${DERIVED_SOURCES_DIR} ${_source}
  983. + OUTPUT ${DERIVED_SOURCES_DIR}/${_name}.cpp ${_hash_tools_h}
  984. + COMMAND ${PERL_EXECUTABLE} ${WEBCORE_DIR}/make-hash-tools.pl ${DERIVED_SOURCES_DIR} ${_source}.gperf
  985. VERBATIM)
  986. -ENDMACRO ()
  987. +
  988. + UNSET(_name)
  989. + UNSET(_hash_tools_h)
  990. +ENDMACRO()
  991.  
  992.  
  993. # Modules that the bindings generator scripts may use
Add Comment
Please, Sign In to add comment