Changeset 223607 in webkit
- Timestamp:
- Oct 18, 2017 8:16:35 AM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r223605 r223607 1 2017-10-18 Sam Weinig <sam@webkit.org> 2 3 [Settings] Replace macros in Settings.h/cpp with generated code 4 https://bugs.webkit.org/show_bug.cgi?id=178419 5 6 Reviewed by Antti Koivisto. 7 8 * Scripts/GenerateSettings/GenerateSettingsHeaderFile.py: 9 * Scripts/GenerateSettings/GenerateSettingsImplementationFile.py: 10 11 Rather than use macros in the generated Settings class, generate the code the macros 12 would expand to. 13 1 14 2017-10-18 Zalan Bujtas <zalan@apple.com> 2 15 -
trunk/Source/WebCore/Scripts/GenerateSettings/GenerateSettingsHeaderFile.py
r223574 r223607 30 30 31 31 def generateSettingsHeaderFile(outputDirectory, settings): 32 settingsByConditional = {} 33 unconditionalSettings = {} 34 35 for settingName in sorted(settings.iterkeys()): 36 setting = settings[settingName] 37 if setting.conditional: 38 if setting.conditional not in settingsByConditional: 39 settingsByConditional[setting.conditional] = {} 40 settingsByConditional[setting.conditional][setting.name] = True 41 else: 42 unconditionalSettings[setting.name] = True 43 44 sortedUnconditionalSettingsNames = sorted(unconditionalSettings.iterkeys()) 45 sortedConditionals = sorted(settingsByConditional.iterkeys()) 46 32 47 outputPath = os.path.join(outputDirectory, "Settings.h") 33 48 outputFile = open(outputPath, 'w') … … 37 52 38 53 outputFile.write("#include \"SettingsBase.h\"\n") 39 outputFile.write("#include \"SettingsMacros.h\"\n")40 54 outputFile.write("#include <wtf/RefCounted.h>\n\n") 41 55 … … 50 64 outputFile.write(" ~Settings();\n\n") 51 65 52 outputFile.write(" SETTINGS_GETTERS_AND_SETTERS\n\n")66 printGettersAndSetters(outputFile, sortedUnconditionalSettingsNames, sortedConditionals, settingsByConditional, settings) 53 67 54 68 outputFile.write("private:\n") 55 69 outputFile.write(" explicit Settings(Page*);\n\n") 56 70 57 outputFile.write(" SETTINGS_MEMBER_VARIABLES\n")71 printMemberVariables(outputFile, sortedUnconditionalSettingsNames, sortedConditionals, settingsByConditional, settings) 58 72 59 73 outputFile.write("};\n\n") … … 62 76 63 77 outputFile.close() 78 79 80 def printGetterAndSetter(outputFile, setting): 81 setterFunctionName = makeSetterFunctionName(setting) 82 83 webcoreExport = "WEBCORE_EXPORT " if setting.setNeedsStyleRecalcInAllFrames else "" 84 85 if setting.type[0].islower(): 86 outputFile.write(" " + setting.type + " " + setting.name + "() const { return m_" + setting.name + "; }\n") 87 outputFile.write(" " + webcoreExport + "void " + setterFunctionName + "(" + setting.type + " " + setting.name + ")") 88 else: 89 outputFile.write(" const " + setting.type + "& " + setting.name + "() const { return m_" + setting.name + "; } \n") 90 outputFile.write(" " + webcoreExport + "void " + setterFunctionName + "(const " + setting.type + "& " + setting.name + ")") 91 92 if setting.setNeedsStyleRecalcInAllFrames: 93 outputFile.write("; \n") 94 else: 95 outputFile.write(" { m_" + setting.name + " = " + setting.name + "; } \n") 96 97 98 def printGettersAndSetters(outputFile, sortedUnconditionalSettingsNames, sortedConditionals, settingsByConditional, settings): 99 for unconditionalSettingName in sortedUnconditionalSettingsNames: 100 printGetterAndSetter(outputFile, settings[unconditionalSettingName]) 101 102 outputFile.write("\n") 103 104 for conditional in sortedConditionals: 105 outputFile.write("#if " + makeConditionalString(conditional) + "\n") 106 107 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 108 printGetterAndSetter(outputFile, settings[settingName]) 109 110 outputFile.write("#endif\n\n") 111 112 113 def printMemberVariables(outputFile, sortedUnconditionalSettingsNames, sortedConditionals, settingsByConditional, settings): 114 for unconditionalSettingName in sortedUnconditionalSettingsNames: 115 setting = settings[unconditionalSettingName] 116 if setting.type == "bool": 117 continue 118 outputFile.write(" " + setting.type + " m_" + setting.name + ";\n") 119 120 for conditional in sortedConditionals: 121 hasMemberVariable = False 122 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 123 setting = settings[settingName] 124 if setting.type != "bool": 125 hasMemberVariable = True 126 break 127 128 if hasMemberVariable: 129 outputFile.write("#if " + makeConditionalString(conditional) + "\n") 130 131 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 132 setting = settings[settingName] 133 if setting.type != "bool": 134 outputFile.write(" " + setting.type + " m_" + setting.name + ";\n") 135 136 outputFile.write("#endif\n") 137 138 for unconditionalSettingName in sortedUnconditionalSettingsNames: 139 setting = settings[unconditionalSettingName] 140 if setting.type != "bool": 141 continue 142 outputFile.write(" " + setting.type + " m_" + setting.name + " : 1;\n") 143 144 for conditional in sortedConditionals: 145 hasMemberVariable = False 146 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 147 setting = settings[settingName] 148 if setting.type == "bool": 149 hasMemberVariable = True 150 break 151 152 if hasMemberVariable: 153 outputFile.write("#if " + makeConditionalString(conditional) + "\n") 154 155 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 156 setting = settings[settingName] 157 if setting.type == "bool": 158 outputFile.write(" " + setting.type + " m_" + setting.name + " : 1;\n") 159 160 outputFile.write("#endif\n") -
trunk/Source/WebCore/Scripts/GenerateSettings/GenerateSettingsImplementationFile.py
r223574 r223607 26 26 import os.path 27 27 28 from Settings import license, makeConditionalString, makeSetterFunctionName 28 from Settings import license, makeConditionalString, makeSetterFunctionName, makePreferredConditional 29 29 30 30 31 31 def generateSettingsImplementationFile(outputDirectory, settings): 32 settingsByConditional = {} 33 unconditionalSettings = {} 34 35 for settingName in sorted(settings.iterkeys()): 36 setting = settings[settingName] 37 if setting.conditional: 38 if setting.conditional not in settingsByConditional: 39 settingsByConditional[setting.conditional] = {} 40 settingsByConditional[setting.conditional][setting.name] = True 41 else: 42 unconditionalSettings[setting.name] = True 43 44 sortedUnconditionalSettingsNames = sorted(unconditionalSettings.iterkeys()) 45 sortedConditionals = sorted(settingsByConditional.iterkeys()) 46 32 47 outputPath = os.path.join(outputDirectory, "Settings.cpp") 33 48 outputFile = open(outputPath, 'w') … … 49 64 outputFile.write("Settings::Settings(Page* page)\n") 50 65 outputFile.write(" : SettingsBase(page)\n") 51 outputFile.write(" SETTINGS_INITIALIZER_LIST\n") 66 67 printInitializerList(outputFile, sortedUnconditionalSettingsNames, sortedConditionals, settingsByConditional, settings) 68 52 69 outputFile.write("{\n") 53 70 outputFile.write("}\n\n") … … 57 74 outputFile.write("}\n\n") 58 75 59 outputFile.write("SETTINGS_SETTER_BODIES\n\n")76 printSetterBodies(outputFile, sortedUnconditionalSettingsNames, sortedConditionals, settingsByConditional, settings) 60 77 61 78 outputFile.write("}\n") 62 79 63 80 outputFile.close() 81 82 83 def hasNonBoolInitializer(setting): 84 if setting.type == "bool": 85 return False 86 if not setting.initial: 87 return False 88 return True 89 90 91 def printNonBoolInitializer(outputFile, setting): 92 if not hasNonBoolInitializer(setting): 93 return 94 outputFile.write(" , m_" + setting.name + "(" + setting.initial + ")\n") 95 96 97 def hasBoolInitializer(setting): 98 if setting.type != "bool": 99 return False 100 if not setting.initial: 101 return False 102 return True 103 104 105 def printBoolInitializer(outputFile, setting): 106 if not hasBoolInitializer(setting): 107 return 108 outputFile.write(" , m_" + setting.name + "(" + setting.initial + ")\n") 109 110 111 def printInitializerList(outputFile, sortedUnconditionalSettingsNames, sortedConditionals, settingsByConditional, settings): 112 for unconditionalSettingName in sortedUnconditionalSettingsNames: 113 printNonBoolInitializer(outputFile, settings[unconditionalSettingName]) 114 115 for conditional in sortedConditionals: 116 hasInitializer = False 117 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 118 if hasNonBoolInitializer(settings[settingName]): 119 hasInitializer = True 120 break 121 122 if hasInitializer: 123 outputFile.write("#if " + makeConditionalString(conditional) + "\n") 124 125 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 126 printNonBoolInitializer(outputFile, settings[settingName]) 127 128 outputFile.write("#endif\n") 129 130 for unconditionalSettingName in sortedUnconditionalSettingsNames: 131 printBoolInitializer(outputFile, settings[unconditionalSettingName]) 132 133 for conditional in sortedConditionals: 134 hasInitializer = False 135 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 136 if hasBoolInitializer(settings[settingName]): 137 hasInitializer = True 138 break 139 140 if hasInitializer: 141 outputFile.write("#if " + makeConditionalString(conditional) + "\n") 142 143 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 144 printBoolInitializer(outputFile, settings[settingName]) 145 146 outputFile.write("#endif\n") 147 148 149 def printSetterBody(outputFile, setting): 150 if not setting.setNeedsStyleRecalcInAllFrames: 151 return 152 153 setterFunctionName = makeSetterFunctionName(setting) 154 155 if setting.type[0].islower(): 156 outputFile.write("void Settings::" + setterFunctionName + "(" + setting.type + " " + setting.name + ")\n") 157 else: 158 outputFile.write("void Settings::" + setterFunctionName + "(const " + setting.type + "& " + setting.name + ")\n") 159 160 outputFile.write("{\n") 161 outputFile.write(" if (m_" + setting.name + " == " + setting.name + ")\n") 162 outputFile.write(" return;\n") 163 outputFile.write(" m_" + setting.name + " = " + setting.name + ";\n") 164 outputFile.write(" m_page->setNeedsRecalcStyleInAllFrames();\n") 165 outputFile.write("}\n\n") 166 167 168 def printSetterBodies(outputFile, sortedUnconditionalSettingsNames, sortedConditionals, settingsByConditional, settings): 169 for unconditionalSettingName in sortedUnconditionalSettingsNames: 170 setting = settings[unconditionalSettingName] 171 printSetterBody(outputFile, setting) 172 173 for conditional in sortedConditionals: 174 hasSetterBody = False 175 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 176 setting = settings[settingName] 177 if setting.setNeedsStyleRecalcInAllFrames: 178 hasSetterBody = True 179 break 180 181 if hasSetterBody: 182 outputFile.write("#if " + makeConditionalString(conditional) + "\n\n") 183 184 for settingName in sorted(settingsByConditional[conditional].iterkeys()): 185 printSetterBody(outputFile, settings[settingName]) 186 187 outputFile.write("#endif\n\n")
Note: See TracChangeset
for help on using the changeset viewer.