/*
 * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
 *
 * This file was generated by the dom/make_names.pl script.
 *
 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "config.h"
#include "JSSVGElementWrapperFactory.h"

#include "JSSVGAElement.h"
#include "JSSVGAltGlyphElement.h"
#include "JSSVGAltGlyphDefElement.h"
#include "JSSVGAltGlyphItemElement.h"
#include "JSSVGAnimateElement.h"
#include "JSSVGAnimateColorElement.h"
#include "JSSVGAnimateMotionElement.h"
#include "JSSVGAnimateTransformElement.h"
#include "JSSVGCircleElement.h"
#include "JSSVGClipPathElement.h"
#include "JSSVGCursorElement.h"
#include "JSSVGDefsElement.h"
#include "JSSVGDescElement.h"
#include "JSSVGEllipseElement.h"
#include "JSSVGFEBlendElement.h"
#include "JSSVGFEColorMatrixElement.h"
#include "JSSVGFEComponentTransferElement.h"
#include "JSSVGFECompositeElement.h"
#include "JSSVGFEConvolveMatrixElement.h"
#include "JSSVGFEDiffuseLightingElement.h"
#include "JSSVGFEDisplacementMapElement.h"
#include "JSSVGFEDistantLightElement.h"
#include "JSSVGFEDropShadowElement.h"
#include "JSSVGFEFloodElement.h"
#include "JSSVGFEFuncAElement.h"
#include "JSSVGFEFuncBElement.h"
#include "JSSVGFEFuncGElement.h"
#include "JSSVGFEFuncRElement.h"
#include "JSSVGFEGaussianBlurElement.h"
#include "JSSVGFEImageElement.h"
#include "JSSVGFEMergeElement.h"
#include "JSSVGFEMergeNodeElement.h"
#include "JSSVGFEMorphologyElement.h"
#include "JSSVGFEOffsetElement.h"
#include "JSSVGFEPointLightElement.h"
#include "JSSVGFESpecularLightingElement.h"
#include "JSSVGFESpotLightElement.h"
#include "JSSVGFETileElement.h"
#include "JSSVGFETurbulenceElement.h"
#include "JSSVGFilterElement.h"
#include "JSSVGFontElement.h"
#include "JSSVGFontFaceElement.h"
#include "JSSVGFontFaceFormatElement.h"
#include "JSSVGFontFaceNameElement.h"
#include "JSSVGFontFaceSrcElement.h"
#include "JSSVGFontFaceUriElement.h"
#include "JSSVGForeignObjectElement.h"
#include "JSSVGGElement.h"
#include "JSSVGGlyphElement.h"
#include "JSSVGGlyphRefElement.h"
#include "JSSVGHKernElement.h"
#include "JSSVGImageElement.h"
#include "JSSVGLineElement.h"
#include "JSSVGLinearGradientElement.h"
#include "JSSVGMarkerElement.h"
#include "JSSVGMaskElement.h"
#include "JSSVGMetadataElement.h"
#include "JSSVGMissingGlyphElement.h"
#include "JSSVGMPathElement.h"
#include "JSSVGPathElement.h"
#include "JSSVGPatternElement.h"
#include "JSSVGPolygonElement.h"
#include "JSSVGPolylineElement.h"
#include "JSSVGRadialGradientElement.h"
#include "JSSVGRectElement.h"
#include "JSSVGScriptElement.h"
#include "JSSVGSetElement.h"
#include "JSSVGStopElement.h"
#include "JSSVGStyleElement.h"
#include "JSSVGSVGElement.h"
#include "JSSVGSwitchElement.h"
#include "JSSVGSymbolElement.h"
#include "JSSVGTextElement.h"
#include "JSSVGTextPathElement.h"
#include "JSSVGTitleElement.h"
#include "JSSVGTRefElement.h"
#include "JSSVGTSpanElement.h"
#include "JSSVGUseElement.h"
#include "JSSVGViewElement.h"
#include "JSSVGVKernElement.h"
#include "JSSVGElement.h"
#include "SVGAElement.h"
#include "SVGAltGlyphElement.h"
#include "SVGAltGlyphDefElement.h"
#include "SVGAltGlyphItemElement.h"
#include "SVGAnimateElement.h"
#include "SVGAnimateColorElement.h"
#include "SVGAnimateMotionElement.h"
#include "SVGAnimateTransformElement.h"
#include "SVGCircleElement.h"
#include "SVGClipPathElement.h"
#include "SVGCursorElement.h"
#include "SVGDefsElement.h"
#include "SVGDescElement.h"
#include "SVGEllipseElement.h"
#include "SVGFEBlendElement.h"
#include "SVGFEColorMatrixElement.h"
#include "SVGFEComponentTransferElement.h"
#include "SVGFECompositeElement.h"
#include "SVGFEConvolveMatrixElement.h"
#include "SVGFEDiffuseLightingElement.h"
#include "SVGFEDisplacementMapElement.h"
#include "SVGFEDistantLightElement.h"
#include "SVGFEDropShadowElement.h"
#include "SVGFEFloodElement.h"
#include "SVGFEFuncAElement.h"
#include "SVGFEFuncBElement.h"
#include "SVGFEFuncGElement.h"
#include "SVGFEFuncRElement.h"
#include "SVGFEGaussianBlurElement.h"
#include "SVGFEImageElement.h"
#include "SVGFEMergeElement.h"
#include "SVGFEMergeNodeElement.h"
#include "SVGFEMorphologyElement.h"
#include "SVGFEOffsetElement.h"
#include "SVGFEPointLightElement.h"
#include "SVGFESpecularLightingElement.h"
#include "SVGFESpotLightElement.h"
#include "SVGFETileElement.h"
#include "SVGFETurbulenceElement.h"
#include "SVGFilterElement.h"
#include "SVGFontElement.h"
#include "SVGFontFaceElement.h"
#include "SVGFontFaceFormatElement.h"
#include "SVGFontFaceNameElement.h"
#include "SVGFontFaceSrcElement.h"
#include "SVGFontFaceUriElement.h"
#include "SVGForeignObjectElement.h"
#include "SVGGElement.h"
#include "SVGGlyphElement.h"
#include "SVGGlyphRefElement.h"
#include "SVGHKernElement.h"
#include "SVGImageElement.h"
#include "SVGLineElement.h"
#include "SVGLinearGradientElement.h"
#include "SVGMarkerElement.h"
#include "SVGMaskElement.h"
#include "SVGMetadataElement.h"
#include "SVGMissingGlyphElement.h"
#include "SVGMPathElement.h"
#include "SVGPathElement.h"
#include "SVGPatternElement.h"
#include "SVGPolygonElement.h"
#include "SVGPolylineElement.h"
#include "SVGRadialGradientElement.h"
#include "SVGRectElement.h"
#include "SVGScriptElement.h"
#include "SVGSetElement.h"
#include "SVGStopElement.h"
#include "SVGStyleElement.h"
#include "SVGSVGElement.h"
#include "SVGSwitchElement.h"
#include "SVGSymbolElement.h"
#include "SVGTextElement.h"
#include "SVGTextPathElement.h"
#include "SVGTitleElement.h"
#include "SVGTRefElement.h"
#include "SVGTSpanElement.h"
#include "SVGUseElement.h"
#include "SVGViewElement.h"
#include "SVGVKernElement.h"
#include "SVGUnknownElement.h"

#include "SVGNames.h"

#include "Document.h"
#include "RuntimeEnabledFeatures.h"
#include "Settings.h"
#include <wtf/NeverDestroyed.h>
#include <wtf/StdLibExtras.h>

using namespace JSC;

namespace WebCore {

using namespace SVGNames;

typedef JSDOMObject* (*CreateSVGElementWrapperFunction)(JSDOMGlobalObject*, Ref<SVGElement>&&);

static JSDOMObject* createSVGAElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGAElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGAltGlyphElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGAltGlyphElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGAltGlyphDefElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGAltGlyphDefElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGAltGlyphItemElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGAltGlyphItemElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGAnimateElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGAnimateElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGAnimateColorElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGAnimateColorElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGAnimateMotionElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGAnimateMotionElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGAnimateTransformElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGAnimateTransformElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGCircleElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGCircleElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGClipPathElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGClipPathElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGCursorElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGCursorElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGDefsElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGDefsElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGDescElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGDescElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGEllipseElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGEllipseElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEBlendElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEBlendElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEColorMatrixElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEColorMatrixElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEComponentTransferElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEComponentTransferElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFECompositeElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFECompositeElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEConvolveMatrixElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEConvolveMatrixElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEDiffuseLightingElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEDiffuseLightingElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEDisplacementMapElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEDisplacementMapElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEDistantLightElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEDistantLightElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEDropShadowElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEDropShadowElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEFloodElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEFloodElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEFuncAElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEFuncAElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEFuncBElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEFuncBElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEFuncGElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEFuncGElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEFuncRElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEFuncRElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEGaussianBlurElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEGaussianBlurElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEImageElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEImageElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEMergeElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEMergeElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEMergeNodeElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEMergeNodeElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEMorphologyElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEMorphologyElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEOffsetElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEOffsetElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFEPointLightElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFEPointLightElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFESpecularLightingElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFESpecularLightingElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFESpotLightElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFESpotLightElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFETileElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFETileElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFETurbulenceElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFETurbulenceElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFilterElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFilterElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFontElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFontElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFontFaceElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFontFaceElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFontFaceFormatElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFontFaceFormatElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFontFaceNameElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFontFaceNameElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFontFaceSrcElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFontFaceSrcElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGFontFaceUriElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGFontFaceUriElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGForeignObjectElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGForeignObjectElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGGElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGGElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGGlyphElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGGlyphElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGGlyphRefElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGGlyphRefElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGHKernElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGHKernElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGImageElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGImageElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGLineElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGLineElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGLinearGradientElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGLinearGradientElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGMarkerElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGMarkerElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGMaskElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGMaskElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGMetadataElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGMetadataElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGMissingGlyphElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGMissingGlyphElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGMPathElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGMPathElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGPathElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGPathElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGPatternElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGPatternElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGPolygonElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGPolygonElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGPolylineElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGPolylineElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGRadialGradientElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGRadialGradientElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGRectElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGRectElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGScriptElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGScriptElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGSetElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGSetElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGStopElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGStopElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGStyleElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGStyleElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGSVGElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGSVGElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGSwitchElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGSwitchElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGSymbolElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGSymbolElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGTextElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGTextElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGTextPathElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGTextPathElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGTitleElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGTitleElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGTRefElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGTRefElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGTSpanElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGTSpanElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGUseElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGUseElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGViewElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGViewElement>(globalObject, WTFMove(element));
}

static JSDOMObject* createSVGVKernElementWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    return createWrapper<SVGVKernElement>(globalObject, WTFMove(element));
}


static NEVER_INLINE void populateSVGWrapperMap(HashMap<AtomicStringImpl*, CreateSVGElementWrapperFunction>& map)
{
    struct TableEntry {
        const QualifiedName& name;
        CreateSVGElementWrapperFunction function;
    };

    static const TableEntry table[] = {
        { aTag, createSVGAElementWrapper },
        { altGlyphTag, createSVGAltGlyphElementWrapper },
        { altGlyphDefTag, createSVGAltGlyphDefElementWrapper },
        { altGlyphItemTag, createSVGAltGlyphItemElementWrapper },
        { animateTag, createSVGAnimateElementWrapper },
        { animateColorTag, createSVGAnimateColorElementWrapper },
        { animateMotionTag, createSVGAnimateMotionElementWrapper },
        { animateTransformTag, createSVGAnimateTransformElementWrapper },
        { circleTag, createSVGCircleElementWrapper },
        { clipPathTag, createSVGClipPathElementWrapper },
        { cursorTag, createSVGCursorElementWrapper },
        { defsTag, createSVGDefsElementWrapper },
        { descTag, createSVGDescElementWrapper },
        { ellipseTag, createSVGEllipseElementWrapper },
        { feBlendTag, createSVGFEBlendElementWrapper },
        { feColorMatrixTag, createSVGFEColorMatrixElementWrapper },
        { feComponentTransferTag, createSVGFEComponentTransferElementWrapper },
        { feCompositeTag, createSVGFECompositeElementWrapper },
        { feConvolveMatrixTag, createSVGFEConvolveMatrixElementWrapper },
        { feDiffuseLightingTag, createSVGFEDiffuseLightingElementWrapper },
        { feDisplacementMapTag, createSVGFEDisplacementMapElementWrapper },
        { feDistantLightTag, createSVGFEDistantLightElementWrapper },
        { feDropShadowTag, createSVGFEDropShadowElementWrapper },
        { feFloodTag, createSVGFEFloodElementWrapper },
        { feFuncATag, createSVGFEFuncAElementWrapper },
        { feFuncBTag, createSVGFEFuncBElementWrapper },
        { feFuncGTag, createSVGFEFuncGElementWrapper },
        { feFuncRTag, createSVGFEFuncRElementWrapper },
        { feGaussianBlurTag, createSVGFEGaussianBlurElementWrapper },
        { feImageTag, createSVGFEImageElementWrapper },
        { feMergeTag, createSVGFEMergeElementWrapper },
        { feMergeNodeTag, createSVGFEMergeNodeElementWrapper },
        { feMorphologyTag, createSVGFEMorphologyElementWrapper },
        { feOffsetTag, createSVGFEOffsetElementWrapper },
        { fePointLightTag, createSVGFEPointLightElementWrapper },
        { feSpecularLightingTag, createSVGFESpecularLightingElementWrapper },
        { feSpotLightTag, createSVGFESpotLightElementWrapper },
        { feTileTag, createSVGFETileElementWrapper },
        { feTurbulenceTag, createSVGFETurbulenceElementWrapper },
        { filterTag, createSVGFilterElementWrapper },
        { fontTag, createSVGFontElementWrapper },
        { font_faceTag, createSVGFontFaceElementWrapper },
        { font_face_formatTag, createSVGFontFaceFormatElementWrapper },
        { font_face_nameTag, createSVGFontFaceNameElementWrapper },
        { font_face_srcTag, createSVGFontFaceSrcElementWrapper },
        { font_face_uriTag, createSVGFontFaceUriElementWrapper },
        { foreignObjectTag, createSVGForeignObjectElementWrapper },
        { gTag, createSVGGElementWrapper },
        { glyphTag, createSVGGlyphElementWrapper },
        { glyphRefTag, createSVGGlyphRefElementWrapper },
        { hkernTag, createSVGHKernElementWrapper },
        { imageTag, createSVGImageElementWrapper },
        { lineTag, createSVGLineElementWrapper },
        { linearGradientTag, createSVGLinearGradientElementWrapper },
        { markerTag, createSVGMarkerElementWrapper },
        { maskTag, createSVGMaskElementWrapper },
        { metadataTag, createSVGMetadataElementWrapper },
        { missing_glyphTag, createSVGMissingGlyphElementWrapper },
        { mpathTag, createSVGMPathElementWrapper },
        { pathTag, createSVGPathElementWrapper },
        { patternTag, createSVGPatternElementWrapper },
        { polygonTag, createSVGPolygonElementWrapper },
        { polylineTag, createSVGPolylineElementWrapper },
        { radialGradientTag, createSVGRadialGradientElementWrapper },
        { rectTag, createSVGRectElementWrapper },
        { scriptTag, createSVGScriptElementWrapper },
        { setTag, createSVGSetElementWrapper },
        { stopTag, createSVGStopElementWrapper },
        { styleTag, createSVGStyleElementWrapper },
        { svgTag, createSVGSVGElementWrapper },
        { switchTag, createSVGSwitchElementWrapper },
        { symbolTag, createSVGSymbolElementWrapper },
        { textTag, createSVGTextElementWrapper },
        { textPathTag, createSVGTextPathElementWrapper },
        { titleTag, createSVGTitleElementWrapper },
        { trefTag, createSVGTRefElementWrapper },
        { tspanTag, createSVGTSpanElementWrapper },
        { useTag, createSVGUseElementWrapper },
        { viewTag, createSVGViewElementWrapper },
        { vkernTag, createSVGVKernElementWrapper },
    };

    for (unsigned i = 0; i < WTF_ARRAY_LENGTH(table); ++i)
        map.add(table[i].name.localName().impl(), table[i].function);
}

JSDOMObject* createJSSVGWrapper(JSDOMGlobalObject* globalObject, Ref<SVGElement>&& element)
{
    static NeverDestroyed<HashMap<AtomicStringImpl*, CreateSVGElementWrapperFunction>> functions;
    if (functions.get().isEmpty())
        populateSVGWrapperMap(functions);
    if (auto function = functions.get().get(element->localName().impl()))
        return function(globalObject, WTFMove(element));
    return createWrapper<SVGElement>(globalObject, WTFMove(element));
}

}
