Commit 97e42c46 authored by bolsinga@apple.com's avatar bolsinga@apple.com

Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid 
        exit-time destructor. Update code that was changed to fix this issue that ran 
        into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference 
        in gcc build 5465). Also typdefs for template types needed to be added in some 
        cases so the type could make it through the macro successfully.

        Basically code of the form:
        static T m;
        becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        Also any code of the form:
        static T& m = *new T;
        also becomes:
        DEFINE_STATIC_LOCAL(T, m, ());



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@38418 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent ddf9b8cc
2008-11-14 Greg Bolsinga <bolsinga@apple.com>
Reviewed by Darin Adler.
https://bugs.webkit.org/show_bug.cgi?id=21810
Remove use of static C++ objects that are destroyed at exit time (destructors)
Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid
exit-time destructor. Update code that was changed to fix this issue that ran
into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference
in gcc build 5465). Also typdefs for template types needed to be added in some
cases so the type could make it through the macro successfully.
Basically code of the form:
static T m;
becomes:
DEFINE_STATIC_LOCAL(T, m, ());
Also any code of the form:
static T& m = *new T;
also becomes:
DEFINE_STATIC_LOCAL(T, m, ());
* ForwardingHeaders/wtf/StdLibExtras.h: Added.
* bindings/js/GCController.cpp:
(WebCore::gcController):
* bindings/js/JSDOMBinding.cpp:
(WebCore::wrapperSet):
* bindings/js/JSInspectedObjectWrapper.cpp:
(WebCore::wrappers):
* bindings/js/JSInspectorCallbackWrapper.cpp:
(WebCore::wrappers):
* bindings/js/JSNavigatorCustom.cpp:
(WebCore::needsYouTubeQuirk):
* bridge/runtime_root.cpp:
(JSC::Bindings::rootObjectSet):
* css/CSSMutableStyleDeclaration.cpp:
(WebCore::initShorthandMap):
(WebCore::CSSMutableStyleDeclaration::removeProperty):
* css/CSSPrimitiveValue.cpp:
(WebCore::CSSPrimitiveValue::cssText):
* css/CSSSelector.cpp:
(WebCore::CSSSelector::extractPseudoType):
* css/CSSStyleSelector.cpp:
(WebCore::screenEval):
(WebCore::printEval):
* dom/DOMImplementation.cpp:
(WebCore::addString):
(WebCore::isSVG10Feature):
(WebCore::isSVG11Feature):
(WebCore::DOMImplementation::isXMLMIMEType):
* dom/Document.cpp:
(WebCore::Document::hasPrefixNamespaceMismatch):
* dom/ScriptElement.cpp:
(WebCore::isSupportedJavaScriptLanguage):
* editing/ApplyStyleCommand.cpp:
(WebCore::styleSpanClassString):
* editing/HTMLInterchange.cpp:
(WebCore::):
* editing/IndentOutdentCommand.cpp:
(WebCore::indentBlockquoteString):
* editing/ReplaceSelectionCommand.cpp:
(WebCore::isInterchangeNewlineNode):
(WebCore::isInterchangeConvertedSpaceSpan):
* editing/htmlediting.cpp:
(WebCore::stringWithRebalancedWhitespace):
(WebCore::nonBreakingSpaceString):
* editing/markup.cpp:
(WebCore::appendAttributeValue):
(WebCore::appendEscapedContent):
(WebCore::shouldAddNamespaceAttr):
(WebCore::appendNamespace):
(WebCore::appendStartMarkup):
(WebCore::createMarkup):
* html/HTMLButtonElement.cpp:
(WebCore::HTMLButtonElement::type):
* html/HTMLElement.cpp:
(WebCore::HTMLElement::isRecognizedTagName):
(WebCore::inlineTagList):
(WebCore::blockTagList):
* html/HTMLFieldSetElement.cpp:
(WebCore::HTMLFieldSetElement::type):
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::type):
* html/HTMLKeygenElement.cpp:
(WebCore::HTMLKeygenElement::type):
* html/HTMLLegendElement.cpp:
(WebCore::HTMLLegendElement::type):
* html/HTMLOptGroupElement.cpp:
(WebCore::HTMLOptGroupElement::type):
* html/HTMLOptionElement.cpp:
(WebCore::HTMLOptionElement::type):
* html/HTMLParser.cpp:
(WebCore::HTMLParser::getNode):
(WebCore::HTMLParser::isHeaderTag):
(WebCore::HTMLParser::isResidualStyleTag):
(WebCore::HTMLParser::isAffectedByResidualStyle):
* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::type):
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::type):
* inspector/InspectorController.cpp:
(WebCore::platform):
* inspector/JavaScriptDebugServer.cpp:
(WebCore::JavaScriptDebugServer::shared):
* inspector/JavaScriptProfile.cpp:
(WebCore::profileCache):
* inspector/JavaScriptProfileNode.cpp:
(WebCore::profileNodeCache):
* loader/FrameLoader.cpp:
(WebCore::localSchemes):
* loader/appcache/ApplicationCacheStorage.cpp:
(WebCore::cacheStorage):
* loader/archive/ArchiveFactory.cpp:
(WebCore::archiveMIMETypes):
(WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
* loader/icon/IconDatabase.cpp:
(WebCore::IconDatabase::defaultDatabaseFilename):
* page/EventHandler.cpp:
(WebCore::EventHandler::dragState):
* page/Frame.cpp:
(WebCore::createRegExpForLabels):
(WebCore::keepAliveSet):
* page/Page.cpp:
(WebCore::Page::groupName):
* page/SecurityOrigin.cpp:
(WebCore::isDefaultPortForProtocol):
(WebCore::SecurityOrigin::databaseIdentifier):
* page/mac/FrameMac.mm:
(WebCore::regExpForLabels):
* platform/KURL.cpp:
(WebCore::blankURL):
* platform/graphics/FontCache.cpp:
(WebCore::alternateFamilyName):
* platform/graphics/mac/FontCacheMac.mm:
(WebCore::FontCache::getSimilarFontPlatformData):
(WebCore::FontCache::getLastResortFallbackFont):
* platform/mac/CursorMac.mm:
(WebCore::leakNamedCursor):
(WebCore::pointerCursor):
(WebCore::crossCursor):
(WebCore::handCursor):
(WebCore::moveCursor):
(WebCore::verticalTextCursor):
(WebCore::cellCursor):
(WebCore::contextMenuCursor):
(WebCore::aliasCursor):
(WebCore::zoomInCursor):
(WebCore::zoomOutCursor):
(WebCore::copyCursor):
(WebCore::noneCursor):
(WebCore::progressCursor):
(WebCore::noDropCursor):
(WebCore::notAllowedCursor):
(WebCore::iBeamCursor):
(WebCore::waitCursor):
(WebCore::helpCursor):
(WebCore::eastResizeCursor):
(WebCore::northResizeCursor):
(WebCore::northEastResizeCursor):
(WebCore::northWestResizeCursor):
(WebCore::southResizeCursor):
(WebCore::southEastResizeCursor):
(WebCore::southWestResizeCursor):
(WebCore::westResizeCursor):
(WebCore::northSouthResizeCursor):
(WebCore::eastWestResizeCursor):
(WebCore::northEastSouthWestResizeCursor):
(WebCore::northWestSouthEastResizeCursor):
(WebCore::columnResizeCursor):
(WebCore::rowResizeCursor):
(WebCore::grabCursor):
(WebCore::grabbingCursor):
* platform/mac/ScrollbarThemeMac.mm:
(WebCore::ScrollbarTheme::nativeTheme):
* platform/mac/ThemeMac.mm:
(WebCore::platformTheme):
* platform/mac/ThreadCheck.mm:
(WebCoreReportThreadViolation):
* platform/network/NetworkStateNotifier.cpp:
(WebCore::networkStateNotifier):
* platform/network/mac/FormDataStreamMac.mm:
(WebCore::getStreamFormDataMap):
(WebCore::getStreamResourceHandleMap):
* platform/network/mac/ResourceResponseMac.mm:
(WebCore::ResourceResponse::platformLazyInit):
* platform/text/TextEncoding.cpp:
(WebCore::TextEncoding::isJapanese):
* plugins/PluginMainThreadScheduler.cpp:
(WebCore::PluginMainThreadScheduler::scheduler):
* rendering/RenderBlock.cpp:
(WebCore::continuationOutlineTable):
(WebCore::RenderBlock::addContinuationWithOutline):
(WebCore::RenderBlock::paintContinuationOutlines):
* rendering/RenderCounter.cpp:
(WebCore::counterMaps):
* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::layoutVerticalBox):
* rendering/RenderListItem.cpp:
(WebCore::RenderListItem::markerText):
* rendering/RenderScrollbarTheme.cpp:
(WebCore::RenderScrollbarTheme::renderScrollbarTheme):
* rendering/RenderThemeMac.mm:
(WebCore::RenderThemeMac::systemFont):
* rendering/bidi.cpp:
(WebCore::RenderBlock::checkLinesForTextOverflow):
* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::initialDashboardRegions):
(WebCore::RenderStyle::noneDashboardRegions):
* storage/Database.cpp:
(WebCore::guidMutex):
(WebCore::guidToVersionMap):
(WebCore::guidToDatabaseMap):
(WebCore::Database::databaseInfoTableName):
(WebCore::databaseVersionKey):
(WebCore::Database::getVersionFromDatabase):
(WebCore::Database::setVersionInDatabase):
(WebCore::guidForOriginAndName):
* storage/DatabaseTracker.cpp:
(WebCore::DatabaseTracker::tracker):
(WebCore::notificationMutex):
(WebCore::notificationQueue):
* storage/LocalStorage.cpp:
(WebCore::localStorageMap):
* svg/SVGAnimateMotionElement.cpp:
(WebCore::SVGAnimateMotionElement::rotateMode):
* svg/SVGAnimationElement.cpp:
(WebCore::SVGAnimationElement::calcMode):
(WebCore::SVGAnimationElement::attributeType):
(WebCore::SVGAnimationElement::isAdditive):
(WebCore::SVGAnimationElement::isAccumulated):
* svg/SVGLangSpace.cpp:
(WebCore::SVGLangSpace::xmlspace):
* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::contentScriptType):
(WebCore::SVGSVGElement::contentStyleType):
* svg/SVGStyleElement.cpp:
(WebCore::SVGStyleElement::type):
(WebCore::SVGStyleElement::media):
* svg/SVGTextContentElement.cpp:
(WebCore::SVGTextContentElement::parseMappedAttribute):
* svg/animation/SVGSMILElement.cpp:
(WebCore::SVGSMILElement::parseClockValue):
(WebCore::SVGSMILElement::restart):
(WebCore::SVGSMILElement::fill):
(WebCore::SVGSMILElement::repeatCount):
(WebCore::SVGSMILElement::notifyDependentsIntervalChanged):
* svg/graphics/SVGResource.cpp:
(WebCore::clientMap):
(WebCore::SVGResource::removeClient):
* svg/graphics/SVGResourceMarker.cpp:
(WebCore::SVGResourceMarker::draw):
* xml/XMLHttpRequest.cpp:
(WebCore::PreflightResultCacheItem::PreflightResultCacheItem):
(WebCore::preflightResultCache):
(WebCore::appendPreflightResultCacheEntry):
(WebCore::isSafeRequestHeader):
(WebCore::isOnAccessControlResponseHeaderWhitelist):
(WebCore::XMLHttpRequest::didReceiveResponsePreflight):
* xml/XPathExpressionNode.cpp:
(WebCore::XPath::Expression::evaluationContext):
* xml/XPathParser.cpp:
(WebCore::XPath::setUpAxisNamesMap):
(WebCore::XPath::isAxisName):
(WebCore::XPath::isNodeTypeName):
* xml/XPathValue.cpp:
(WebCore::XPath::Value::toNodeSet):
2008-11-14 Dan Bernstein <mitz@apple.com>
- attempt to fix the Qt build
#include <JavaScriptCore/StdLibExtras.h>
......@@ -30,6 +30,7 @@
#include <runtime/JSGlobalData.h>
#include <runtime/JSLock.h>
#include <runtime/Collector.h>
#include <wtf/StdLibExtras.h>
#if USE(PTHREADS)
#include <pthread.h>
......@@ -52,7 +53,7 @@ static void* collect(void*)
GCController& gcController()
{
static GCController staticGCController;
DEFINE_STATIC_LOCAL(GCController, staticGCController, ());
return staticGCController;
}
......
......@@ -46,6 +46,7 @@
#include "ScriptController.h"
#include "XMLHttpRequestException.h"
#include <runtime/PrototypeFunction.h>
#include <wtf/StdLibExtras.h>
#if ENABLE(SVG)
#include "JSSVGException.h"
......@@ -97,10 +98,10 @@ static inline void removeWrappers(const JSWrapperCache&)
static HashSet<DOMObject*>& wrapperSet()
{
#if ENABLE(WORKERS)
static ThreadSpecific<HashSet<DOMObject*> > staticWrapperSet;
DEFINE_STATIC_LOCAL(ThreadSpecific<HashSet<DOMObject*> >, staticWrapperSet, ());
return *staticWrapperSet;
#else
static HashSet<DOMObject*> staticWrapperSet;
DEFINE_STATIC_LOCAL(HashSet<DOMObject*>, staticWrapperSet, ());
return staticWrapperSet;
#endif
}
......
......@@ -28,6 +28,7 @@
#include "JSInspectorCallbackWrapper.h"
#include <runtime/JSGlobalObject.h>
#include <wtf/StdLibExtras.h>
using namespace JSC;
......@@ -40,7 +41,7 @@ typedef HashMap<JSGlobalObject*, WrapperMap*> GlobalObjectWrapperMap;
static GlobalObjectWrapperMap& wrappers()
{
static GlobalObjectWrapperMap map;
DEFINE_STATIC_LOCAL(GlobalObjectWrapperMap, map, ());
return map;
}
......
......@@ -27,6 +27,7 @@
#include "JSInspectorCallbackWrapper.h"
#include "JSInspectedObjectWrapper.h"
#include <wtf/StdLibExtras.h>
using namespace JSC;
......@@ -38,7 +39,7 @@ typedef HashMap<JSObject*, JSInspectorCallbackWrapper*> WrapperMap;
static WrapperMap& wrappers()
{
static WrapperMap map;
DEFINE_STATIC_LOCAL(WrapperMap, map, ());
return map;
}
......
......@@ -54,7 +54,7 @@ static bool needsYouTubeQuirk(ExecState* exec, Frame* frame)
JSFunction* function = exec->function();
if (!function)
return false;
static const Identifier& isWindowsFunctionName = *new Identifier(exec, "isWindows");
DEFINE_STATIC_LOCAL(const Identifier, isWindowsFunctionName, (exec, "isWindows"));
if (function->functionName() != isWindowsFunctionName)
return false;
......@@ -70,7 +70,7 @@ static bool needsYouTubeQuirk(ExecState* exec, Frame* frame)
JSObject* thisObject = callingExec->thisValue();
if (!thisObject)
return false;
static const Identifier& isSafariFunctionName = *new Identifier(exec, "isSafari");
DEFINE_STATIC_LOCAL(const Identifier, isSafariFunction, (exec, "isSafari"));
JSValue* isSafariFunction = thisObject->getDirect(isSafariFunctionName);
if (isSafariFunction != callingFunction)
return false;
......
......@@ -30,6 +30,7 @@
#include <runtime/JSGlobalObject.h>
#include <wtf/HashCountedSet.h>
#include <wtf/HashSet.h>
#include <wtf/StdLibExtras.h>
namespace JSC { namespace Bindings {
......@@ -42,7 +43,7 @@ typedef HashSet<RootObject*> RootObjectSet;
static RootObjectSet* rootObjectSet()
{
static RootObjectSet staticRootObjectSet;
DEFINE_STATIC_LOCAL(RootObjectSet, staticRootObjectSet, ());
return &staticRootObjectSet;
}
......
......@@ -30,6 +30,7 @@
#include "Document.h"
#include "ExceptionCode.h"
#include "StyledElement.h"
#include <wtf/StdLibExtras.h>
using namespace std;
......@@ -349,8 +350,10 @@ private:
const int* m_properties;
unsigned m_length;
};
typedef HashMap<int, PropertyLonghand> ShorthandMap;
static void initShorthandMap(HashMap<int, PropertyLonghand>& shorthandMap)
static void initShorthandMap(ShorthandMap& shorthandMap)
{
#define SET_SHORTHAND_MAP_ENTRY(map, propID, array) \
map.set(propID, PropertyLonghand(array, sizeof(array) / sizeof(array[0])))
......@@ -501,7 +504,7 @@ String CSSMutableStyleDeclaration::removeProperty(int propertyID, bool notifyCha
{
ec = 0;
static HashMap<int, PropertyLonghand> shorthandMap;
DEFINE_STATIC_LOCAL(ShorthandMap, shorthandMap, ());
if (shorthandMap.isEmpty())
initShorthandMap(shorthandMap);
......
......@@ -31,6 +31,7 @@
#include "Rect.h"
#include "RenderStyle.h"
#include <wtf/ASCIICType.h>
#include <wtf/StdLibExtras.h>
#if ENABLE(DASHBOARD_SUPPORT)
#include "DashboardRegion.h"
......@@ -686,7 +687,7 @@ String CSSPrimitiveValue::cssText() const
// FIXME: Add list-style and separator
break;
case CSS_RECT: {
static const String rectParen("rect(");
DEFINE_STATIC_LOCAL(const String, rectParen, ("rect("));
Rect* rectVal = getRectValue();
Vector<UChar> result;
......@@ -709,9 +710,9 @@ String CSSPrimitiveValue::cssText() const
}
case CSS_RGBCOLOR:
case CSS_PARSER_HEXCOLOR: {
static const String commaSpace(", ");
static const String rgbParen("rgb(");
static const String rgbaParen("rgba(");
DEFINE_STATIC_LOCAL(const String, commaSpace, (", "));
DEFINE_STATIC_LOCAL(const String, rgbParen, ("rgb("));
DEFINE_STATIC_LOCAL(const String, rgbaParen, ("rgba("));
RGBA32 rgbColor = m_value.rgbcolor;
if (m_type == CSS_PARSER_HEXCOLOR)
......
......@@ -24,6 +24,8 @@
#include "config.h"
#include "CSSSelector.h"
#include <wtf/StdLibExtras.h>
namespace WebCore {
unsigned int CSSSelector::specificity()
......@@ -62,75 +64,75 @@ void CSSSelector::extractPseudoType() const
if (m_match != PseudoClass && m_match != PseudoElement)
return;
static AtomicString active("active");
static AtomicString after("after");
static AtomicString anyLink("-webkit-any-link");
static AtomicString autofill("-webkit-autofill");
static AtomicString before("before");
static AtomicString checked("checked");
static AtomicString fileUploadButton("-webkit-file-upload-button");
static AtomicString disabled("disabled");
static AtomicString readOnly("read-only");
static AtomicString readWrite("read-write");
static AtomicString drag("-webkit-drag");
static AtomicString dragAlias("-khtml-drag"); // was documented with this name in Apple documentation, so keep an alias
static AtomicString empty("empty");
static AtomicString enabled("enabled");
static AtomicString firstChild("first-child");
static AtomicString firstLetter("first-letter");
static AtomicString firstLine("first-line");
static AtomicString firstOfType("first-of-type");
static AtomicString fullPageMedia("-webkit-full-page-media");
static AtomicString nthChild("nth-child(");
static AtomicString nthOfType("nth-of-type(");
static AtomicString nthLastChild("nth-last-child(");
static AtomicString nthLastOfType("nth-last-of-type(");
static AtomicString focus("focus");
static AtomicString hover("hover");
static AtomicString indeterminate("indeterminate");
static AtomicString inputPlaceholder("-webkit-input-placeholder");
static AtomicString lastChild("last-child");
static AtomicString lastOfType("last-of-type");
static AtomicString link("link");
static AtomicString lang("lang(");
static AtomicString mediaControlsPanel("-webkit-media-controls-panel");
static AtomicString mediaControlsMuteButton("-webkit-media-controls-mute-button");
static AtomicString mediaControlsPlayButton("-webkit-media-controls-play-button");
static AtomicString mediaControlsTimeDisplay("-webkit-media-controls-time-display");
static AtomicString mediaControlsTimeline("-webkit-media-controls-timeline");
static AtomicString mediaControlsSeekBackButton("-webkit-media-controls-seek-back-button");
static AtomicString mediaControlsSeekForwardButton("-webkit-media-controls-seek-forward-button");
static AtomicString mediaControlsFullscreenButton("-webkit-media-controls-fullscreen-button");
static AtomicString notStr("not(");
static AtomicString onlyChild("only-child");
static AtomicString onlyOfType("only-of-type");
static AtomicString resizer("-webkit-resizer");
static AtomicString root("root");
static AtomicString scrollbar("-webkit-scrollbar");
static AtomicString scrollbarButton("-webkit-scrollbar-button");
static AtomicString scrollbarCorner("-webkit-scrollbar-corner");
static AtomicString scrollbarThumb("-webkit-scrollbar-thumb");
static AtomicString scrollbarTrack("-webkit-scrollbar-track");
static AtomicString scrollbarTrackPiece("-webkit-scrollbar-track-piece");
static AtomicString searchCancelButton("-webkit-search-cancel-button");
static AtomicString searchDecoration("-webkit-search-decoration");
static AtomicString searchResultsDecoration("-webkit-search-results-decoration");
static AtomicString searchResultsButton("-webkit-search-results-button");
static AtomicString selection("selection");
static AtomicString sliderThumb("-webkit-slider-thumb");
static AtomicString target("target");
static AtomicString visited("visited");
static AtomicString windowInactive("window-inactive");
static AtomicString decrement("decrement");
static AtomicString increment("increment");
static AtomicString start("start");
static AtomicString end("end");
static AtomicString horizontal("horizontal");
static AtomicString vertical("vertical");
static AtomicString doubleButton("double-button");
static AtomicString singleButton("single-button");
static AtomicString noButton("no-button");
static AtomicString cornerPresent("corner-present");
DEFINE_STATIC_LOCAL(AtomicString, active, ("active"));
DEFINE_STATIC_LOCAL(AtomicString, after, ("after"));
DEFINE_STATIC_LOCAL(AtomicString, anyLink, ("-webkit-any-link"));
DEFINE_STATIC_LOCAL(AtomicString, autofill, ("-webkit-autofill"));
DEFINE_STATIC_LOCAL(AtomicString, before, ("before"));
DEFINE_STATIC_LOCAL(AtomicString, checked, ("checked"));
DEFINE_STATIC_LOCAL(AtomicString, fileUploadButton, ("-webkit-file-upload-button"));
DEFINE_STATIC_LOCAL(AtomicString, disabled, ("disabled"));
DEFINE_STATIC_LOCAL(AtomicString, readOnly, ("read-only"));
DEFINE_STATIC_LOCAL(AtomicString, readWrite, ("read-write"));
DEFINE_STATIC_LOCAL(AtomicString, drag, ("-webkit-drag"));
DEFINE_STATIC_LOCAL(AtomicString, dragAlias, ("-khtml-drag")); // was documented with this name in Apple documentation, so keep an alia
DEFINE_STATIC_LOCAL(AtomicString, empty, ("empty"));
DEFINE_STATIC_LOCAL(AtomicString, enabled, ("enabled"));
DEFINE_STATIC_LOCAL(AtomicString, firstChild, ("first-child"));
DEFINE_STATIC_LOCAL(AtomicString, firstLetter, ("first-letter"));
DEFINE_STATIC_LOCAL(AtomicString, firstLine, ("first-line"));
DEFINE_STATIC_LOCAL(AtomicString, firstOfType, ("first-of-type"));
DEFINE_STATIC_LOCAL(AtomicString, fullPageMedia, ("-webkit-full-page-media"));
DEFINE_STATIC_LOCAL(AtomicString, nthChild, ("nth-child("));
DEFINE_STATIC_LOCAL(AtomicString, nthOfType, ("nth-of-type("));
DEFINE_STATIC_LOCAL(AtomicString, nthLastChild, ("nth-last-child("));
DEFINE_STATIC_LOCAL(AtomicString, nthLastOfType, ("nth-last-of-type("));
DEFINE_STATIC_LOCAL(AtomicString, focus, ("focus"));
DEFINE_STATIC_LOCAL(AtomicString, hover, ("hover"));
DEFINE_STATIC_LOCAL(AtomicString, indeterminate, ("indeterminate"));
DEFINE_STATIC_LOCAL(AtomicString, inputPlaceholder, ("-webkit-input-placeholder"));
DEFINE_STATIC_LOCAL(AtomicString, lastChild, ("last-child"));
DEFINE_STATIC_LOCAL(AtomicString, lastOfType, ("last-of-type"));
DEFINE_STATIC_LOCAL(AtomicString, link, ("link"));
DEFINE_STATIC_LOCAL(AtomicString, lang, ("lang("));
DEFINE_STATIC_LOCAL(AtomicString, mediaControlsPanel, ("-webkit-media-controls-panel"));
DEFINE_STATIC_LOCAL(AtomicString, mediaControlsMuteButton, ("-webkit-media-controls-mute-button"));
DEFINE_STATIC_LOCAL(AtomicString, mediaControlsPlayButton, ("-webkit-media-controls-play-button"));
DEFINE_STATIC_LOCAL(AtomicString, mediaControlsTimeDisplay, ("-webkit-media-controls-time-display"));
DEFINE_STATIC_LOCAL(AtomicString, mediaControlsTimeline, ("-webkit-media-controls-timeline"));
DEFINE_STATIC_LOCAL(AtomicString, mediaControlsSeekBackButton, ("-webkit-media-controls-seek-back-button"));
DEFINE_STATIC_LOCAL(AtomicString, mediaControlsSeekForwardButton, ("-webkit-media-controls-seek-forward-button"));
DEFINE_STATIC_LOCAL(AtomicString, mediaControlsFullscreenButton, ("-webkit-media-controls-fullscreen-button"));
DEFINE_STATIC_LOCAL(AtomicString, notStr, ("not("));
DEFINE_STATIC_LOCAL(AtomicString, onlyChild, ("only-child"));
DEFINE_STATIC_LOCAL(AtomicString, onlyOfType, ("only-of-type"));
DEFINE_STATIC_LOCAL(AtomicString, resizer, ("-webkit-resizer"));
DEFINE_STATIC_LOCAL(AtomicString, root, ("root"));
DEFINE_STATIC_LOCAL(AtomicString, scrollbar, ("-webkit-scrollbar"));
DEFINE_STATIC_LOCAL(AtomicString, scrollbarButton, ("-webkit-scrollbar-button"));
DEFINE_STATIC_LOCAL(AtomicString, scrollbarCorner, ("-webkit-scrollbar-corner"));
DEFINE_STATIC_LOCAL(AtomicString, scrollbarThumb, ("-webkit-scrollbar-thumb"));
DEFINE_STATIC_LOCAL(AtomicString, scrollbarTrack, ("-webkit-scrollbar-track"));
DEFINE_STATIC_LOCAL(AtomicString, scrollbarTrackPiece, ("-webkit-scrollbar-track-piece"));
DEFINE_STATIC_LOCAL(AtomicString, searchCancelButton, ("-webkit-search-cancel-button"));
DEFINE_STATIC_LOCAL(AtomicString, searchDecoration, ("-webkit-search-decoration"));
DEFINE_STATIC_LOCAL(AtomicString, searchResultsDecoration, ("-webkit-search-results-decoration"));
DEFINE_STATIC_LOCAL(AtomicString, searchResultsButton, ("-webkit-search-results-button"));
DEFINE_STATIC_LOCAL(AtomicString, selection, ("selection"));
DEFINE_STATIC_LOCAL(AtomicString, sliderThumb, ("-webkit-slider-thumb"));
DEFINE_STATIC_LOCAL(AtomicString, target, ("target"));
DEFINE_STATIC_LOCAL(AtomicString, visited, ("visited"));
DEFINE_STATIC_LOCAL(AtomicString, windowInactive, ("window-inactive"));
DEFINE_STATIC_LOCAL(AtomicString, decrement, ("decrement"));
DEFINE_STATIC_LOCAL(AtomicString, increment, ("increment"));
DEFINE_STATIC_LOCAL(AtomicString, start, ("start"));
DEFINE_STATIC_LOCAL(AtomicString, end, ("end"));
DEFINE_STATIC_LOCAL(AtomicString, horizontal, ("horizontal"));
DEFINE_STATIC_LOCAL(AtomicString, vertical, ("vertical"));
DEFINE_STATIC_LOCAL(AtomicString, doubleButton, ("double-button"));
DEFINE_STATIC_LOCAL(AtomicString, singleButton, ("single-button"));
DEFINE_STATIC_LOCAL(AtomicString, noButton, ("no-button"));
DEFINE_STATIC_LOCAL(AtomicString, cornerPresent, ("corner-present"));