diff options
-rw-r--r-- | src/defines-table.zig | 1470 | ||||
-rw-r--r-- | src/defines.zig | 191 | ||||
-rw-r--r-- | src/js_lexer.zig | 2 | ||||
-rw-r--r-- | src/string_immutable.zig | 1 |
4 files changed, 901 insertions, 763 deletions
diff --git a/src/defines-table.zig b/src/defines-table.zig index 3e3a720a3..3816f74c3 100644 --- a/src/defines-table.zig +++ b/src/defines-table.zig @@ -14,307 +14,307 @@ usingnamespace @import("strings.zig"); // Note that membership in this list says nothing about whether calling any of // these functions has any side effects. It only says something about // referencing these function without calling them. -pub const GlobalDefinesKey = [][]string{ +pub const GlobalDefinesKey = [_][]const string{ // These global identifiers should exist in all JavaScript environments. This // deliberately omits "NaN", "Infinity", and "undefined" because these are // treated as automatically-inlined constants instead of identifiers. - []string{"Array"}, - []string{"Boolean"}, - []string{"Function"}, - []string{"Math"}, - []string{"Number"}, - []string{"Object"}, - []string{"RegExp"}, - []string{"String"}, + &[_]string{"Array"}, + &[_]string{"Boolean"}, + &[_]string{"Function"}, + &[_]string{"Math"}, + &[_]string{"Number"}, + &[_]string{"Object"}, + &[_]string{"RegExp"}, + &[_]string{"String"}, // Object: Static methods // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#Static_methods - []string{ "Object", "assign" }, - []string{ "Object", "create" }, - []string{ "Object", "defineProperties" }, - []string{ "Object", "defineProperty" }, - []string{ "Object", "entries" }, - []string{ "Object", "freeze" }, - []string{ "Object", "fromEntries" }, - []string{ "Object", "getOwnPropertyDescriptor" }, - []string{ "Object", "getOwnPropertyDescriptors" }, - []string{ "Object", "getOwnPropertyNames" }, - []string{ "Object", "getOwnPropertySymbols" }, - []string{ "Object", "getPrototypeOf" }, - []string{ "Object", "is" }, - []string{ "Object", "isExtensible" }, - []string{ "Object", "isFrozen" }, - []string{ "Object", "isSealed" }, - []string{ "Object", "keys" }, - []string{ "Object", "preventExtensions" }, - []string{ "Object", "seal" }, - []string{ "Object", "setPrototypeOf" }, - []string{ "Object", "values" }, + &[_]string{ "Object", "assign" }, + &[_]string{ "Object", "create" }, + &[_]string{ "Object", "defineProperties" }, + &[_]string{ "Object", "defineProperty" }, + &[_]string{ "Object", "entries" }, + &[_]string{ "Object", "freeze" }, + &[_]string{ "Object", "fromEntries" }, + &[_]string{ "Object", "getOwnPropertyDescriptor" }, + &[_]string{ "Object", "getOwnPropertyDescriptors" }, + &[_]string{ "Object", "getOwnPropertyNames" }, + &[_]string{ "Object", "getOwnPropertySymbols" }, + &[_]string{ "Object", "getPrototypeOf" }, + &[_]string{ "Object", "is" }, + &[_]string{ "Object", "isExtensible" }, + &[_]string{ "Object", "isFrozen" }, + &[_]string{ "Object", "isSealed" }, + &[_]string{ "Object", "keys" }, + &[_]string{ "Object", "preventExtensions" }, + &[_]string{ "Object", "seal" }, + &[_]string{ "Object", "setPrototypeOf" }, + &[_]string{ "Object", "values" }, // Object: Instance methods // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#Instance_methods - []string{ "Object", "prototype", "__defineGetter__" }, - []string{ "Object", "prototype", "__defineSetter__" }, - []string{ "Object", "prototype", "__lookupGetter__" }, - []string{ "Object", "prototype", "__lookupSetter__" }, - []string{ "Object", "prototype", "hasOwnProperty" }, - []string{ "Object", "prototype", "isPrototypeOf" }, - []string{ "Object", "prototype", "propertyIsEnumerable" }, - []string{ "Object", "prototype", "toLocaleString" }, - []string{ "Object", "prototype", "toString" }, - []string{ "Object", "prototype", "unwatch" }, - []string{ "Object", "prototype", "valueOf" }, - []string{ "Object", "prototype", "watch" }, + &[_]string{ "Object", "prototype", "__defineGetter__" }, + &[_]string{ "Object", "prototype", "__defineSetter__" }, + &[_]string{ "Object", "prototype", "__lookupGetter__" }, + &[_]string{ "Object", "prototype", "__lookupSetter__" }, + &[_]string{ "Object", "prototype", "hasOwnProperty" }, + &[_]string{ "Object", "prototype", "isPrototypeOf" }, + &[_]string{ "Object", "prototype", "propertyIsEnumerable" }, + &[_]string{ "Object", "prototype", "toLocaleString" }, + &[_]string{ "Object", "prototype", "toString" }, + &[_]string{ "Object", "prototype", "unwatch" }, + &[_]string{ "Object", "prototype", "valueOf" }, + &[_]string{ "Object", "prototype", "watch" }, // Math: Static properties // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math#Static_properties - []string{ "Math", "E" }, - []string{ "Math", "LN10" }, - []string{ "Math", "LN2" }, - []string{ "Math", "LOG10E" }, - []string{ "Math", "LOG2E" }, - []string{ "Math", "PI" }, - []string{ "Math", "SQRT1_2" }, - []string{ "Math", "SQRT2" }, + &[_]string{ "Math", "E" }, + &[_]string{ "Math", "LN10" }, + &[_]string{ "Math", "LN2" }, + &[_]string{ "Math", "LOG10E" }, + &[_]string{ "Math", "LOG2E" }, + &[_]string{ "Math", "PI" }, + &[_]string{ "Math", "SQRT1_2" }, + &[_]string{ "Math", "SQRT2" }, // Math: Static methods // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math#Static_methods - []string{ "Math", "abs" }, - []string{ "Math", "acos" }, - []string{ "Math", "acosh" }, - []string{ "Math", "asin" }, - []string{ "Math", "asinh" }, - []string{ "Math", "atan" }, - []string{ "Math", "atan2" }, - []string{ "Math", "atanh" }, - []string{ "Math", "cbrt" }, - []string{ "Math", "ceil" }, - []string{ "Math", "clz32" }, - []string{ "Math", "cos" }, - []string{ "Math", "cosh" }, - []string{ "Math", "exp" }, - []string{ "Math", "expm1" }, - []string{ "Math", "floor" }, - []string{ "Math", "fround" }, - []string{ "Math", "hypot" }, - []string{ "Math", "imul" }, - []string{ "Math", "log" }, - []string{ "Math", "log10" }, - []string{ "Math", "log1p" }, - []string{ "Math", "log2" }, - []string{ "Math", "max" }, - []string{ "Math", "min" }, - []string{ "Math", "pow" }, - []string{ "Math", "random" }, - []string{ "Math", "round" }, - []string{ "Math", "sign" }, - []string{ "Math", "sin" }, - []string{ "Math", "sinh" }, - []string{ "Math", "sqrt" }, - []string{ "Math", "tan" }, - []string{ "Math", "tanh" }, - []string{ "Math", "trunc" }, + &[_]string{ "Math", "abs" }, + &[_]string{ "Math", "acos" }, + &[_]string{ "Math", "acosh" }, + &[_]string{ "Math", "asin" }, + &[_]string{ "Math", "asinh" }, + &[_]string{ "Math", "atan" }, + &[_]string{ "Math", "atan2" }, + &[_]string{ "Math", "atanh" }, + &[_]string{ "Math", "cbrt" }, + &[_]string{ "Math", "ceil" }, + &[_]string{ "Math", "clz32" }, + &[_]string{ "Math", "cos" }, + &[_]string{ "Math", "cosh" }, + &[_]string{ "Math", "exp" }, + &[_]string{ "Math", "expm1" }, + &[_]string{ "Math", "floor" }, + &[_]string{ "Math", "fround" }, + &[_]string{ "Math", "hypot" }, + &[_]string{ "Math", "imul" }, + &[_]string{ "Math", "log" }, + &[_]string{ "Math", "log10" }, + &[_]string{ "Math", "log1p" }, + &[_]string{ "Math", "log2" }, + &[_]string{ "Math", "max" }, + &[_]string{ "Math", "min" }, + &[_]string{ "Math", "pow" }, + &[_]string{ "Math", "random" }, + &[_]string{ "Math", "round" }, + &[_]string{ "Math", "sign" }, + &[_]string{ "Math", "sin" }, + &[_]string{ "Math", "sinh" }, + &[_]string{ "Math", "sqrt" }, + &[_]string{ "Math", "tan" }, + &[_]string{ "Math", "tanh" }, + &[_]string{ "Math", "trunc" }, // Other globals present in both the browser and node (except "eval" because // it has special behavior) - []string{"AbortController"}, - []string{"AbortSignal"}, - []string{"AggregateError"}, - []string{"ArrayBuffer"}, - []string{"BigInt"}, - []string{"DataView"}, - []string{"Date"}, - []string{"Error"}, - []string{"EvalError"}, - []string{"Event"}, - []string{"EventTarget"}, - []string{"Float32Array"}, - []string{"Float64Array"}, - []string{"Int16Array"}, - []string{"Int32Array"}, - []string{"Int8Array"}, - []string{"Intl"}, - []string{"JSON"}, - []string{"Map"}, - []string{"MessageChannel"}, - []string{"MessageEvent"}, - []string{"MessagePort"}, - []string{"Promise"}, - []string{"Proxy"}, - []string{"RangeError"}, - []string{"ReferenceError"}, - []string{"Reflect"}, - []string{"Set"}, - []string{"Symbol"}, - []string{"SyntaxError"}, - []string{"TextDecoder"}, - []string{"TextEncoder"}, - []string{"TypeError"}, - []string{"URIError"}, - []string{"URL"}, - []string{"URLSearchParams"}, - []string{"Uint16Array"}, - []string{"Uint32Array"}, - []string{"Uint8Array"}, - []string{"Uint8ClampedArray"}, - []string{"WeakMap"}, - []string{"WeakSet"}, - []string{"WebAssembly"}, - []string{"clearInterval"}, - []string{"clearTimeout"}, - []string{"console"}, - []string{"decodeURI"}, - []string{"decodeURIComponent"}, - []string{"encodeURI"}, - []string{"encodeURIComponent"}, - []string{"escape"}, - []string{"globalThis"}, - []string{"isFinite"}, - []string{"isNaN"}, - []string{"parseFloat"}, - []string{"parseInt"}, - []string{"queueMicrotask"}, - []string{"setInterval"}, - []string{"setTimeout"}, - []string{"unescape"}, + &[_]string{"AbortController"}, + &[_]string{"AbortSignal"}, + &[_]string{"AggregateError"}, + &[_]string{"ArrayBuffer"}, + &[_]string{"BigInt"}, + &[_]string{"DataView"}, + &[_]string{"Date"}, + &[_]string{"Error"}, + &[_]string{"EvalError"}, + &[_]string{"Event"}, + &[_]string{"EventTarget"}, + &[_]string{"Float32Array"}, + &[_]string{"Float64Array"}, + &[_]string{"Int16Array"}, + &[_]string{"Int32Array"}, + &[_]string{"Int8Array"}, + &[_]string{"Intl"}, + &[_]string{"JSON"}, + &[_]string{"Map"}, + &[_]string{"MessageChannel"}, + &[_]string{"MessageEvent"}, + &[_]string{"MessagePort"}, + &[_]string{"Promise"}, + &[_]string{"Proxy"}, + &[_]string{"RangeError"}, + &[_]string{"ReferenceError"}, + &[_]string{"Reflect"}, + &[_]string{"Set"}, + &[_]string{"Symbol"}, + &[_]string{"SyntaxError"}, + &[_]string{"TextDecoder"}, + &[_]string{"TextEncoder"}, + &[_]string{"TypeError"}, + &[_]string{"URIError"}, + &[_]string{"URL"}, + &[_]string{"URLSearchParams"}, + &[_]string{"Uint16Array"}, + &[_]string{"Uint32Array"}, + &[_]string{"Uint8Array"}, + &[_]string{"Uint8ClampedArray"}, + &[_]string{"WeakMap"}, + &[_]string{"WeakSet"}, + &[_]string{"WebAssembly"}, + &[_]string{"clearInterval"}, + &[_]string{"clearTimeout"}, + &[_]string{"console"}, + &[_]string{"decodeURI"}, + &[_]string{"decodeURIComponent"}, + &[_]string{"encodeURI"}, + &[_]string{"encodeURIComponent"}, + &[_]string{"escape"}, + &[_]string{"globalThis"}, + &[_]string{"isFinite"}, + &[_]string{"isNaN"}, + &[_]string{"parseFloat"}, + &[_]string{"parseInt"}, + &[_]string{"queueMicrotask"}, + &[_]string{"setInterval"}, + &[_]string{"setTimeout"}, + &[_]string{"unescape"}, // Console method references are assumed to have no side effects // https://developer.mozilla.org/en-US/docs/Web/API/console - []string{ "console", "assert" }, - []string{ "console", "clear" }, - []string{ "console", "count" }, - []string{ "console", "countReset" }, - []string{ "console", "debug" }, - []string{ "console", "dir" }, - []string{ "console", "dirxml" }, - []string{ "console", "error" }, - []string{ "console", "group" }, - []string{ "console", "groupCollapsed" }, - []string{ "console", "groupEnd" }, - []string{ "console", "info" }, - []string{ "console", "log" }, - []string{ "console", "table" }, - []string{ "console", "time" }, - []string{ "console", "timeEnd" }, - []string{ "console", "timeLog" }, - []string{ "console", "trace" }, - []string{ "console", "warn" }, + &[_]string{ "console", "assert" }, + &[_]string{ "console", "clear" }, + &[_]string{ "console", "count" }, + &[_]string{ "console", "countReset" }, + &[_]string{ "console", "debug" }, + &[_]string{ "console", "dir" }, + &[_]string{ "console", "dirxml" }, + &[_]string{ "console", "error" }, + &[_]string{ "console", "group" }, + &[_]string{ "console", "groupCollapsed" }, + &[_]string{ "console", "groupEnd" }, + &[_]string{ "console", "info" }, + &[_]string{ "console", "log" }, + &[_]string{ "console", "table" }, + &[_]string{ "console", "time" }, + &[_]string{ "console", "timeEnd" }, + &[_]string{ "console", "timeLog" }, + &[_]string{ "console", "trace" }, + &[_]string{ "console", "warn" }, // CSSOM APIs - []string{"CSSAnimation"}, - []string{"CSSFontFaceRule"}, - []string{"CSSImportRule"}, - []string{"CSSKeyframeRule"}, - []string{"CSSKeyframesRule"}, - []string{"CSSMediaRule"}, - []string{"CSSNamespaceRule"}, - []string{"CSSPageRule"}, - []string{"CSSRule"}, - []string{"CSSRuleList"}, - []string{"CSSStyleDeclaration"}, - []string{"CSSStyleRule"}, - []string{"CSSStyleSheet"}, - []string{"CSSSupportsRule"}, - []string{"CSSTransition"}, + &[_]string{"CSSAnimation"}, + &[_]string{"CSSFontFaceRule"}, + &[_]string{"CSSImportRule"}, + &[_]string{"CSSKeyframeRule"}, + &[_]string{"CSSKeyframesRule"}, + &[_]string{"CSSMediaRule"}, + &[_]string{"CSSNamespaceRule"}, + &[_]string{"CSSPageRule"}, + &[_]string{"CSSRule"}, + &[_]string{"CSSRuleList"}, + &[_]string{"CSSStyleDeclaration"}, + &[_]string{"CSSStyleRule"}, + &[_]string{"CSSStyleSheet"}, + &[_]string{"CSSSupportsRule"}, + &[_]string{"CSSTransition"}, // SVG DOM - []string{"SVGAElement"}, - []string{"SVGAngle"}, - []string{"SVGAnimateElement"}, - []string{"SVGAnimateMotionElement"}, - []string{"SVGAnimateTransformElement"}, - []string{"SVGAnimatedAngle"}, - []string{"SVGAnimatedBoolean"}, - []string{"SVGAnimatedEnumeration"}, - []string{"SVGAnimatedInteger"}, - []string{"SVGAnimatedLength"}, - []string{"SVGAnimatedLengthList"}, - []string{"SVGAnimatedNumber"}, - []string{"SVGAnimatedNumberList"}, - []string{"SVGAnimatedPreserveAspectRatio"}, - []string{"SVGAnimatedRect"}, - []string{"SVGAnimatedString"}, - []string{"SVGAnimatedTransformList"}, - []string{"SVGAnimationElement"}, - []string{"SVGCircleElement"}, - []string{"SVGClipPathElement"}, - []string{"SVGComponentTransferFunctionElement"}, - []string{"SVGDefsElement"}, - []string{"SVGDescElement"}, - []string{"SVGElement"}, - []string{"SVGEllipseElement"}, - []string{"SVGFEBlendElement"}, - []string{"SVGFEColorMatrixElement"}, - []string{"SVGFEComponentTransferElement"}, - []string{"SVGFECompositeElement"}, - []string{"SVGFEConvolveMatrixElement"}, - []string{"SVGFEDiffuseLightingElement"}, - []string{"SVGFEDisplacementMapElement"}, - []string{"SVGFEDistantLightElement"}, - []string{"SVGFEDropShadowElement"}, - []string{"SVGFEFloodElement"}, - []string{"SVGFEFuncAElement"}, - []string{"SVGFEFuncBElement"}, - []string{"SVGFEFuncGElement"}, - []string{"SVGFEFuncRElement"}, - []string{"SVGFEGaussianBlurElement"}, - []string{"SVGFEImageElement"}, - []string{"SVGFEMergeElement"}, - []string{"SVGFEMergeNodeElement"}, - []string{"SVGFEMorphologyElement"}, - []string{"SVGFEOffsetElement"}, - []string{"SVGFEPointLightElement"}, - []string{"SVGFESpecularLightingElement"}, - []string{"SVGFESpotLightElement"}, - []string{"SVGFETileElement"}, - []string{"SVGFETurbulenceElement"}, - []string{"SVGFilterElement"}, - []string{"SVGForeignObjectElement"}, - []string{"SVGGElement"}, - []string{"SVGGeometryElement"}, - []string{"SVGGradientElement"}, - []string{"SVGGraphicsElement"}, - []string{"SVGImageElement"}, - []string{"SVGLength"}, - []string{"SVGLengthList"}, - []string{"SVGLineElement"}, - []string{"SVGLinearGradientElement"}, - []string{"SVGMPathElement"}, - []string{"SVGMarkerElement"}, - []string{"SVGMaskElement"}, - []string{"SVGMatrix"}, - []string{"SVGMetadataElement"}, - []string{"SVGNumber"}, - []string{"SVGNumberList"}, - []string{"SVGPathElement"}, - []string{"SVGPatternElement"}, - []string{"SVGPoint"}, - []string{"SVGPointList"}, - []string{"SVGPolygonElement"}, - []string{"SVGPolylineElement"}, - []string{"SVGPreserveAspectRatio"}, - []string{"SVGRadialGradientElement"}, - []string{"SVGRect"}, - []string{"SVGRectElement"}, - []string{"SVGSVGElement"}, - []string{"SVGScriptElement"}, - []string{"SVGSetElement"}, - []string{"SVGStopElement"}, - []string{"SVGStringList"}, - []string{"SVGStyleElement"}, - []string{"SVGSwitchElement"}, - []string{"SVGSymbolElement"}, - []string{"SVGTSpanElement"}, - []string{"SVGTextContentElement"}, - []string{"SVGTextElement"}, - []string{"SVGTextPathElement"}, - []string{"SVGTextPositioningElement"}, - []string{"SVGTitleElement"}, - []string{"SVGTransform"}, - []string{"SVGTransformList"}, - []string{"SVGUnitTypes"}, - []string{"SVGUseElement"}, - []string{"SVGViewElement"}, + &[_]string{"SVGAElement"}, + &[_]string{"SVGAngle"}, + &[_]string{"SVGAnimateElement"}, + &[_]string{"SVGAnimateMotionElement"}, + &[_]string{"SVGAnimateTransformElement"}, + &[_]string{"SVGAnimatedAngle"}, + &[_]string{"SVGAnimatedBoolean"}, + &[_]string{"SVGAnimatedEnumeration"}, + &[_]string{"SVGAnimatedInteger"}, + &[_]string{"SVGAnimatedLength"}, + &[_]string{"SVGAnimatedLengthList"}, + &[_]string{"SVGAnimatedNumber"}, + &[_]string{"SVGAnimatedNumberList"}, + &[_]string{"SVGAnimatedPreserveAspectRatio"}, + &[_]string{"SVGAnimatedRect"}, + &[_]string{"SVGAnimatedString"}, + &[_]string{"SVGAnimatedTransformList"}, + &[_]string{"SVGAnimationElement"}, + &[_]string{"SVGCircleElement"}, + &[_]string{"SVGClipPathElement"}, + &[_]string{"SVGComponentTransferFunctionElement"}, + &[_]string{"SVGDefsElement"}, + &[_]string{"SVGDescElement"}, + &[_]string{"SVGElement"}, + &[_]string{"SVGEllipseElement"}, + &[_]string{"SVGFEBlendElement"}, + &[_]string{"SVGFEColorMatrixElement"}, + &[_]string{"SVGFEComponentTransferElement"}, + &[_]string{"SVGFECompositeElement"}, + &[_]string{"SVGFEConvolveMatrixElement"}, + &[_]string{"SVGFEDiffuseLightingElement"}, + &[_]string{"SVGFEDisplacementMapElement"}, + &[_]string{"SVGFEDistantLightElement"}, + &[_]string{"SVGFEDropShadowElement"}, + &[_]string{"SVGFEFloodElement"}, + &[_]string{"SVGFEFuncAElement"}, + &[_]string{"SVGFEFuncBElement"}, + &[_]string{"SVGFEFuncGElement"}, + &[_]string{"SVGFEFuncRElement"}, + &[_]string{"SVGFEGaussianBlurElement"}, + &[_]string{"SVGFEImageElement"}, + &[_]string{"SVGFEMergeElement"}, + &[_]string{"SVGFEMergeNodeElement"}, + &[_]string{"SVGFEMorphologyElement"}, + &[_]string{"SVGFEOffsetElement"}, + &[_]string{"SVGFEPointLightElement"}, + &[_]string{"SVGFESpecularLightingElement"}, + &[_]string{"SVGFESpotLightElement"}, + &[_]string{"SVGFETileElement"}, + &[_]string{"SVGFETurbulenceElement"}, + &[_]string{"SVGFilterElement"}, + &[_]string{"SVGForeignObjectElement"}, + &[_]string{"SVGGElement"}, + &[_]string{"SVGGeometryElement"}, + &[_]string{"SVGGradientElement"}, + &[_]string{"SVGGraphicsElement"}, + &[_]string{"SVGImageElement"}, + &[_]string{"SVGLength"}, + &[_]string{"SVGLengthList"}, + &[_]string{"SVGLineElement"}, + &[_]string{"SVGLinearGradientElement"}, + &[_]string{"SVGMPathElement"}, + &[_]string{"SVGMarkerElement"}, + &[_]string{"SVGMaskElement"}, + &[_]string{"SVGMatrix"}, + &[_]string{"SVGMetadataElement"}, + &[_]string{"SVGNumber"}, + &[_]string{"SVGNumberList"}, + &[_]string{"SVGPathElement"}, + &[_]string{"SVGPatternElement"}, + &[_]string{"SVGPoint"}, + &[_]string{"SVGPointList"}, + &[_]string{"SVGPolygonElement"}, + &[_]string{"SVGPolylineElement"}, + &[_]string{"SVGPreserveAspectRatio"}, + &[_]string{"SVGRadialGradientElement"}, + &[_]string{"SVGRect"}, + &[_]string{"SVGRectElement"}, + &[_]string{"SVGSVGElement"}, + &[_]string{"SVGScriptElement"}, + &[_]string{"SVGSetElement"}, + &[_]string{"SVGStopElement"}, + &[_]string{"SVGStringList"}, + &[_]string{"SVGStyleElement"}, + &[_]string{"SVGSwitchElement"}, + &[_]string{"SVGSymbolElement"}, + &[_]string{"SVGTSpanElement"}, + &[_]string{"SVGTextContentElement"}, + &[_]string{"SVGTextElement"}, + &[_]string{"SVGTextPathElement"}, + &[_]string{"SVGTextPositioningElement"}, + &[_]string{"SVGTitleElement"}, + &[_]string{"SVGTransform"}, + &[_]string{"SVGTransformList"}, + &[_]string{"SVGUnitTypes"}, + &[_]string{"SVGUseElement"}, + &[_]string{"SVGViewElement"}, // Other browser APIs // @@ -336,463 +336,463 @@ pub const GlobalDefinesKey = [][]string{ // - localStorage // - sessionStorage // - []string{"AnalyserNode"}, - []string{"Animation"}, - []string{"AnimationEffect"}, - []string{"AnimationEvent"}, - []string{"AnimationPlaybackEvent"}, - []string{"AnimationTimeline"}, - []string{"Attr"}, - []string{"Audio"}, - []string{"AudioBuffer"}, - []string{"AudioBufferSourceNode"}, - []string{"AudioDestinationNode"}, - []string{"AudioListener"}, - []string{"AudioNode"}, - []string{"AudioParam"}, - []string{"AudioProcessingEvent"}, - []string{"AudioScheduledSourceNode"}, - []string{"BarProp"}, - []string{"BeforeUnloadEvent"}, - []string{"BiquadFilterNode"}, - []string{"Blob"}, - []string{"BlobEvent"}, - []string{"ByteLengthQueuingStrategy"}, - []string{"CDATASection"}, - []string{"CSS"}, - []string{"CanvasGradient"}, - []string{"CanvasPattern"}, - []string{"CanvasRenderingContext2D"}, - []string{"ChannelMergerNode"}, - []string{"ChannelSplitterNode"}, - []string{"CharacterData"}, - []string{"ClipboardEvent"}, - []string{"CloseEvent"}, - []string{"Comment"}, - []string{"CompositionEvent"}, - []string{"ConvolverNode"}, - []string{"CountQueuingStrategy"}, - []string{"Crypto"}, - []string{"CustomElementRegistry"}, - []string{"CustomEvent"}, - []string{"DOMException"}, - []string{"DOMImplementation"}, - []string{"DOMMatrix"}, - []string{"DOMMatrixReadOnly"}, - []string{"DOMParser"}, - []string{"DOMPoint"}, - []string{"DOMPointReadOnly"}, - []string{"DOMQuad"}, - []string{"DOMRect"}, - []string{"DOMRectList"}, - []string{"DOMRectReadOnly"}, - []string{"DOMStringList"}, - []string{"DOMStringMap"}, - []string{"DOMTokenList"}, - []string{"DataTransfer"}, - []string{"DataTransferItem"}, - []string{"DataTransferItemList"}, - []string{"DelayNode"}, - []string{"Document"}, - []string{"DocumentFragment"}, - []string{"DocumentTimeline"}, - []string{"DocumentType"}, - []string{"DragEvent"}, - []string{"DynamicsCompressorNode"}, - []string{"Element"}, - []string{"ErrorEvent"}, - []string{"EventSource"}, - []string{"File"}, - []string{"FileList"}, - []string{"FileReader"}, - []string{"FocusEvent"}, - []string{"FontFace"}, - []string{"FormData"}, - []string{"GainNode"}, - []string{"Gamepad"}, - []string{"GamepadButton"}, - []string{"GamepadEvent"}, - []string{"Geolocation"}, - []string{"GeolocationPositionError"}, - []string{"HTMLAllCollection"}, - []string{"HTMLAnchorElement"}, - []string{"HTMLAreaElement"}, - []string{"HTMLAudioElement"}, - []string{"HTMLBRElement"}, - []string{"HTMLBaseElement"}, - []string{"HTMLBodyElement"}, - []string{"HTMLButtonElement"}, - []string{"HTMLCanvasElement"}, - []string{"HTMLCollection"}, - []string{"HTMLDListElement"}, - []string{"HTMLDataElement"}, - []string{"HTMLDataListElement"}, - []string{"HTMLDetailsElement"}, - []string{"HTMLDirectoryElement"}, - []string{"HTMLDivElement"}, - []string{"HTMLDocument"}, - []string{"HTMLElement"}, - []string{"HTMLEmbedElement"}, - []string{"HTMLFieldSetElement"}, - []string{"HTMLFontElement"}, - []string{"HTMLFormControlsCollection"}, - []string{"HTMLFormElement"}, - []string{"HTMLFrameElement"}, - []string{"HTMLFrameSetElement"}, - []string{"HTMLHRElement"}, - []string{"HTMLHeadElement"}, - []string{"HTMLHeadingElement"}, - []string{"HTMLHtmlElement"}, - []string{"HTMLIFrameElement"}, - []string{"HTMLImageElement"}, - []string{"HTMLInputElement"}, - []string{"HTMLLIElement"}, - []string{"HTMLLabelElement"}, - []string{"HTMLLegendElement"}, - []string{"HTMLLinkElement"}, - []string{"HTMLMapElement"}, - []string{"HTMLMarqueeElement"}, - []string{"HTMLMediaElement"}, - []string{"HTMLMenuElement"}, - []string{"HTMLMetaElement"}, - []string{"HTMLMeterElement"}, - []string{"HTMLModElement"}, - []string{"HTMLOListElement"}, - []string{"HTMLObjectElement"}, - []string{"HTMLOptGroupElement"}, - []string{"HTMLOptionElement"}, - []string{"HTMLOptionsCollection"}, - []string{"HTMLOutputElement"}, - []string{"HTMLParagraphElement"}, - []string{"HTMLParamElement"}, - []string{"HTMLPictureElement"}, - []string{"HTMLPreElement"}, - []string{"HTMLProgressElement"}, - []string{"HTMLQuoteElement"}, - []string{"HTMLScriptElement"}, - []string{"HTMLSelectElement"}, - []string{"HTMLSlotElement"}, - []string{"HTMLSourceElement"}, - []string{"HTMLSpanElement"}, - []string{"HTMLStyleElement"}, - []string{"HTMLTableCaptionElement"}, - []string{"HTMLTableCellElement"}, - []string{"HTMLTableColElement"}, - []string{"HTMLTableElement"}, - []string{"HTMLTableRowElement"}, - []string{"HTMLTableSectionElement"}, - []string{"HTMLTemplateElement"}, - []string{"HTMLTextAreaElement"}, - []string{"HTMLTimeElement"}, - []string{"HTMLTitleElement"}, - []string{"HTMLTrackElement"}, - []string{"HTMLUListElement"}, - []string{"HTMLUnknownElement"}, - []string{"HTMLVideoElement"}, - []string{"HashChangeEvent"}, - []string{"Headers"}, - []string{"History"}, - []string{"IDBCursor"}, - []string{"IDBCursorWithValue"}, - []string{"IDBDatabase"}, - []string{"IDBFactory"}, - []string{"IDBIndex"}, - []string{"IDBKeyRange"}, - []string{"IDBObjectStore"}, - []string{"IDBOpenDBRequest"}, - []string{"IDBRequest"}, - []string{"IDBTransaction"}, - []string{"IDBVersionChangeEvent"}, - []string{"Image"}, - []string{"ImageData"}, - []string{"InputEvent"}, - []string{"IntersectionObserver"}, - []string{"IntersectionObserverEntry"}, - []string{"KeyboardEvent"}, - []string{"KeyframeEffect"}, - []string{"Location"}, - []string{"MediaCapabilities"}, - []string{"MediaElementAudioSourceNode"}, - []string{"MediaEncryptedEvent"}, - []string{"MediaError"}, - []string{"MediaList"}, - []string{"MediaQueryList"}, - []string{"MediaQueryListEvent"}, - []string{"MediaRecorder"}, - []string{"MediaSource"}, - []string{"MediaStream"}, - []string{"MediaStreamAudioDestinationNode"}, - []string{"MediaStreamAudioSourceNode"}, - []string{"MediaStreamTrack"}, - []string{"MediaStreamTrackEvent"}, - []string{"MimeType"}, - []string{"MimeTypeArray"}, - []string{"MouseEvent"}, - []string{"MutationEvent"}, - []string{"MutationObserver"}, - []string{"MutationRecord"}, - []string{"NamedNodeMap"}, - []string{"Navigator"}, - []string{"Node"}, - []string{"NodeFilter"}, - []string{"NodeIterator"}, - []string{"NodeList"}, - []string{"Notification"}, - []string{"OfflineAudioCompletionEvent"}, - []string{"Option"}, - []string{"OscillatorNode"}, - []string{"PageTransitionEvent"}, - []string{"Path2D"}, - []string{"Performance"}, - []string{"PerformanceEntry"}, - []string{"PerformanceMark"}, - []string{"PerformanceMeasure"}, - []string{"PerformanceNavigation"}, - []string{"PerformanceObserver"}, - []string{"PerformanceObserverEntryList"}, - []string{"PerformanceResourceTiming"}, - []string{"PerformanceTiming"}, - []string{"PeriodicWave"}, - []string{"Plugin"}, - []string{"PluginArray"}, - []string{"PointerEvent"}, - []string{"PopStateEvent"}, - []string{"ProcessingInstruction"}, - []string{"ProgressEvent"}, - []string{"PromiseRejectionEvent"}, - []string{"RTCCertificate"}, - []string{"RTCDTMFSender"}, - []string{"RTCDTMFToneChangeEvent"}, - []string{"RTCDataChannel"}, - []string{"RTCDataChannelEvent"}, - []string{"RTCIceCandidate"}, - []string{"RTCPeerConnection"}, - []string{"RTCPeerConnectionIceEvent"}, - []string{"RTCRtpReceiver"}, - []string{"RTCRtpSender"}, - []string{"RTCRtpTransceiver"}, - []string{"RTCSessionDescription"}, - []string{"RTCStatsReport"}, - []string{"RTCTrackEvent"}, - []string{"RadioNodeList"}, - []string{"Range"}, - []string{"ReadableStream"}, - []string{"Request"}, - []string{"ResizeObserver"}, - []string{"ResizeObserverEntry"}, - []string{"Response"}, - []string{"Screen"}, - []string{"ScriptProcessorNode"}, - []string{"SecurityPolicyViolationEvent"}, - []string{"Selection"}, - []string{"ShadowRoot"}, - []string{"SourceBuffer"}, - []string{"SourceBufferList"}, - []string{"SpeechSynthesisEvent"}, - []string{"SpeechSynthesisUtterance"}, - []string{"StaticRange"}, - []string{"Storage"}, - []string{"StorageEvent"}, - []string{"StyleSheet"}, - []string{"StyleSheetList"}, - []string{"Text"}, - []string{"TextMetrics"}, - []string{"TextTrack"}, - []string{"TextTrackCue"}, - []string{"TextTrackCueList"}, - []string{"TextTrackList"}, - []string{"TimeRanges"}, - []string{"TrackEvent"}, - []string{"TransitionEvent"}, - []string{"TreeWalker"}, - []string{"UIEvent"}, - []string{"VTTCue"}, - []string{"ValidityState"}, - []string{"VisualViewport"}, - []string{"WaveShaperNode"}, - []string{"WebGLActiveInfo"}, - []string{"WebGLBuffer"}, - []string{"WebGLContextEvent"}, - []string{"WebGLFramebuffer"}, - []string{"WebGLProgram"}, - []string{"WebGLQuery"}, - []string{"WebGLRenderbuffer"}, - []string{"WebGLRenderingContext"}, - []string{"WebGLSampler"}, - []string{"WebGLShader"}, - []string{"WebGLShaderPrecisionFormat"}, - []string{"WebGLSync"}, - []string{"WebGLTexture"}, - []string{"WebGLUniformLocation"}, - []string{"WebKitCSSMatrix"}, - []string{"WebSocket"}, - []string{"WheelEvent"}, - []string{"Window"}, - []string{"Worker"}, - []string{"XMLDocument"}, - []string{"XMLHttpRequest"}, - []string{"XMLHttpRequestEventTarget"}, - []string{"XMLHttpRequestUpload"}, - []string{"XMLSerializer"}, - []string{"XPathEvaluator"}, - []string{"XPathExpression"}, - []string{"XPathResult"}, - []string{"XSLTProcessor"}, - []string{"alert"}, - []string{"atob"}, - []string{"blur"}, - []string{"btoa"}, - []string{"cancelAnimationFrame"}, - []string{"captureEvents"}, - []string{"close"}, - []string{"closed"}, - []string{"confirm"}, - []string{"customElements"}, - []string{"devicePixelRatio"}, - []string{"document"}, - []string{"event"}, - []string{"fetch"}, - []string{"find"}, - []string{"focus"}, - []string{"frameElement"}, - []string{"frames"}, - []string{"getComputedStyle"}, - []string{"getSelection"}, - []string{"history"}, - []string{"indexedDB"}, - []string{"isSecureContext"}, - []string{"length"}, - []string{"location"}, - []string{"locationbar"}, - []string{"matchMedia"}, - []string{"menubar"}, - []string{"moveBy"}, - []string{"moveTo"}, - []string{"name"}, - []string{"navigator"}, - []string{"onabort"}, - []string{"onafterprint"}, - []string{"onanimationend"}, - []string{"onanimationiteration"}, - []string{"onanimationstart"}, - []string{"onbeforeprint"}, - []string{"onbeforeunload"}, - []string{"onblur"}, - []string{"oncanplay"}, - []string{"oncanplaythrough"}, - []string{"onchange"}, - []string{"onclick"}, - []string{"oncontextmenu"}, - []string{"oncuechange"}, - []string{"ondblclick"}, - []string{"ondrag"}, - []string{"ondragend"}, - []string{"ondragenter"}, - []string{"ondragleave"}, - []string{"ondragover"}, - []string{"ondragstart"}, - []string{"ondrop"}, - []string{"ondurationchange"}, - []string{"onemptied"}, - []string{"onended"}, - []string{"onerror"}, - []string{"onfocus"}, - []string{"ongotpointercapture"}, - []string{"onhashchange"}, - []string{"oninput"}, - []string{"oninvalid"}, - []string{"onkeydown"}, - []string{"onkeypress"}, - []string{"onkeyup"}, - []string{"onlanguagechange"}, - []string{"onload"}, - []string{"onloadeddata"}, - []string{"onloadedmetadata"}, - []string{"onloadstart"}, - []string{"onlostpointercapture"}, - []string{"onmessage"}, - []string{"onmousedown"}, - []string{"onmouseenter"}, - []string{"onmouseleave"}, - []string{"onmousemove"}, - []string{"onmouseout"}, - []string{"onmouseover"}, - []string{"onmouseup"}, - []string{"onoffline"}, - []string{"ononline"}, - []string{"onpagehide"}, - []string{"onpageshow"}, - []string{"onpause"}, - []string{"onplay"}, - []string{"onplaying"}, - []string{"onpointercancel"}, - []string{"onpointerdown"}, - []string{"onpointerenter"}, - []string{"onpointerleave"}, - []string{"onpointermove"}, - []string{"onpointerout"}, - []string{"onpointerover"}, - []string{"onpointerup"}, - []string{"onpopstate"}, - []string{"onprogress"}, - []string{"onratechange"}, - []string{"onrejectionhandled"}, - []string{"onreset"}, - []string{"onresize"}, - []string{"onscroll"}, - []string{"onseeked"}, - []string{"onseeking"}, - []string{"onselect"}, - []string{"onstalled"}, - []string{"onstorage"}, - []string{"onsubmit"}, - []string{"onsuspend"}, - []string{"ontimeupdate"}, - []string{"ontoggle"}, - []string{"ontransitioncancel"}, - []string{"ontransitionend"}, - []string{"ontransitionrun"}, - []string{"ontransitionstart"}, - []string{"onunhandledrejection"}, - []string{"onunload"}, - []string{"onvolumechange"}, - []string{"onwaiting"}, - []string{"onwebkitanimationend"}, - []string{"onwebkitanimationiteration"}, - []string{"onwebkitanimationstart"}, - []string{"onwebkittransitionend"}, - []string{"onwheel"}, - []string{"open"}, - []string{"opener"}, - []string{"origin"}, - []string{"outerHeight"}, - []string{"outerWidth"}, - []string{"parent"}, - []string{"performance"}, - []string{"personalbar"}, - []string{"postMessage"}, - []string{"print"}, - []string{"prompt"}, - []string{"releaseEvents"}, - []string{"requestAnimationFrame"}, - []string{"resizeBy"}, - []string{"resizeTo"}, - []string{"screen"}, - []string{"screenLeft"}, - []string{"screenTop"}, - []string{"screenX"}, - []string{"screenY"}, - []string{"scroll"}, - []string{"scrollBy"}, - []string{"scrollTo"}, - []string{"scrollbars"}, - []string{"self"}, - []string{"speechSynthesis"}, - []string{"status"}, - []string{"statusbar"}, - []string{"stop"}, - []string{"toolbar"}, - []string{"top"}, - []string{"webkitURL"}, - []string{"window"}, + &[_]string{"AnalyserNode"}, + &[_]string{"Animation"}, + &[_]string{"AnimationEffect"}, + &[_]string{"AnimationEvent"}, + &[_]string{"AnimationPlaybackEvent"}, + &[_]string{"AnimationTimeline"}, + &[_]string{"Attr"}, + &[_]string{"Audio"}, + &[_]string{"AudioBuffer"}, + &[_]string{"AudioBufferSourceNode"}, + &[_]string{"AudioDestinationNode"}, + &[_]string{"AudioListener"}, + &[_]string{"AudioNode"}, + &[_]string{"AudioParam"}, + &[_]string{"AudioProcessingEvent"}, + &[_]string{"AudioScheduledSourceNode"}, + &[_]string{"BarProp"}, + &[_]string{"BeforeUnloadEvent"}, + &[_]string{"BiquadFilterNode"}, + &[_]string{"Blob"}, + &[_]string{"BlobEvent"}, + &[_]string{"ByteLengthQueuingStrategy"}, + &[_]string{"CDATASection"}, + &[_]string{"CSS"}, + &[_]string{"CanvasGradient"}, + &[_]string{"CanvasPattern"}, + &[_]string{"CanvasRenderingContext2D"}, + &[_]string{"ChannelMergerNode"}, + &[_]string{"ChannelSplitterNode"}, + &[_]string{"CharacterData"}, + &[_]string{"ClipboardEvent"}, + &[_]string{"CloseEvent"}, + &[_]string{"Comment"}, + &[_]string{"CompositionEvent"}, + &[_]string{"ConvolverNode"}, + &[_]string{"CountQueuingStrategy"}, + &[_]string{"Crypto"}, + &[_]string{"CustomElementRegistry"}, + &[_]string{"CustomEvent"}, + &[_]string{"DOMException"}, + &[_]string{"DOMImplementation"}, + &[_]string{"DOMMatrix"}, + &[_]string{"DOMMatrixReadOnly"}, + &[_]string{"DOMParser"}, + &[_]string{"DOMPoint"}, + &[_]string{"DOMPointReadOnly"}, + &[_]string{"DOMQuad"}, + &[_]string{"DOMRect"}, + &[_]string{"DOMRectList"}, + &[_]string{"DOMRectReadOnly"}, + &[_]string{"DOMStringList"}, + &[_]string{"DOMStringMap"}, + &[_]string{"DOMTokenList"}, + &[_]string{"DataTransfer"}, + &[_]string{"DataTransferItem"}, + &[_]string{"DataTransferItemList"}, + &[_]string{"DelayNode"}, + &[_]string{"Document"}, + &[_]string{"DocumentFragment"}, + &[_]string{"DocumentTimeline"}, + &[_]string{"DocumentType"}, + &[_]string{"DragEvent"}, + &[_]string{"DynamicsCompressorNode"}, + &[_]string{"Element"}, + &[_]string{"ErrorEvent"}, + &[_]string{"EventSource"}, + &[_]string{"File"}, + &[_]string{"FileList"}, + &[_]string{"FileReader"}, + &[_]string{"FocusEvent"}, + &[_]string{"FontFace"}, + &[_]string{"FormData"}, + &[_]string{"GainNode"}, + &[_]string{"Gamepad"}, + &[_]string{"GamepadButton"}, + &[_]string{"GamepadEvent"}, + &[_]string{"Geolocation"}, + &[_]string{"GeolocationPositionError"}, + &[_]string{"HTMLAllCollection"}, + &[_]string{"HTMLAnchorElement"}, + &[_]string{"HTMLAreaElement"}, + &[_]string{"HTMLAudioElement"}, + &[_]string{"HTMLBRElement"}, + &[_]string{"HTMLBaseElement"}, + &[_]string{"HTMLBodyElement"}, + &[_]string{"HTMLButtonElement"}, + &[_]string{"HTMLCanvasElement"}, + &[_]string{"HTMLCollection"}, + &[_]string{"HTMLDListElement"}, + &[_]string{"HTMLDataElement"}, + &[_]string{"HTMLDataListElement"}, + &[_]string{"HTMLDetailsElement"}, + &[_]string{"HTMLDirectoryElement"}, + &[_]string{"HTMLDivElement"}, + &[_]string{"HTMLDocument"}, + &[_]string{"HTMLElement"}, + &[_]string{"HTMLEmbedElement"}, + &[_]string{"HTMLFieldSetElement"}, + &[_]string{"HTMLFontElement"}, + &[_]string{"HTMLFormControlsCollection"}, + &[_]string{"HTMLFormElement"}, + &[_]string{"HTMLFrameElement"}, + &[_]string{"HTMLFrameSetElement"}, + &[_]string{"HTMLHRElement"}, + &[_]string{"HTMLHeadElement"}, + &[_]string{"HTMLHeadingElement"}, + &[_]string{"HTMLHtmlElement"}, + &[_]string{"HTMLIFrameElement"}, + &[_]string{"HTMLImageElement"}, + &[_]string{"HTMLInputElement"}, + &[_]string{"HTMLLIElement"}, + &[_]string{"HTMLLabelElement"}, + &[_]string{"HTMLLegendElement"}, + &[_]string{"HTMLLinkElement"}, + &[_]string{"HTMLMapElement"}, + &[_]string{"HTMLMarqueeElement"}, + &[_]string{"HTMLMediaElement"}, + &[_]string{"HTMLMenuElement"}, + &[_]string{"HTMLMetaElement"}, + &[_]string{"HTMLMeterElement"}, + &[_]string{"HTMLModElement"}, + &[_]string{"HTMLOListElement"}, + &[_]string{"HTMLObjectElement"}, + &[_]string{"HTMLOptGroupElement"}, + &[_]string{"HTMLOptionElement"}, + &[_]string{"HTMLOptionsCollection"}, + &[_]string{"HTMLOutputElement"}, + &[_]string{"HTMLParagraphElement"}, + &[_]string{"HTMLParamElement"}, + &[_]string{"HTMLPictureElement"}, + &[_]string{"HTMLPreElement"}, + &[_]string{"HTMLProgressElement"}, + &[_]string{"HTMLQuoteElement"}, + &[_]string{"HTMLScriptElement"}, + &[_]string{"HTMLSelectElement"}, + &[_]string{"HTMLSlotElement"}, + &[_]string{"HTMLSourceElement"}, + &[_]string{"HTMLSpanElement"}, + &[_]string{"HTMLStyleElement"}, + &[_]string{"HTMLTableCaptionElement"}, + &[_]string{"HTMLTableCellElement"}, + &[_]string{"HTMLTableColElement"}, + &[_]string{"HTMLTableElement"}, + &[_]string{"HTMLTableRowElement"}, + &[_]string{"HTMLTableSectionElement"}, + &[_]string{"HTMLTemplateElement"}, + &[_]string{"HTMLTextAreaElement"}, + &[_]string{"HTMLTimeElement"}, + &[_]string{"HTMLTitleElement"}, + &[_]string{"HTMLTrackElement"}, + &[_]string{"HTMLUListElement"}, + &[_]string{"HTMLUnknownElement"}, + &[_]string{"HTMLVideoElement"}, + &[_]string{"HashChangeEvent"}, + &[_]string{"Headers"}, + &[_]string{"History"}, + &[_]string{"IDBCursor"}, + &[_]string{"IDBCursorWithValue"}, + &[_]string{"IDBDatabase"}, + &[_]string{"IDBFactory"}, + &[_]string{"IDBIndex"}, + &[_]string{"IDBKeyRange"}, + &[_]string{"IDBObjectStore"}, + &[_]string{"IDBOpenDBRequest"}, + &[_]string{"IDBRequest"}, + &[_]string{"IDBTransaction"}, + &[_]string{"IDBVersionChangeEvent"}, + &[_]string{"Image"}, + &[_]string{"ImageData"}, + &[_]string{"InputEvent"}, + &[_]string{"IntersectionObserver"}, + &[_]string{"IntersectionObserverEntry"}, + &[_]string{"KeyboardEvent"}, + &[_]string{"KeyframeEffect"}, + &[_]string{"Location"}, + &[_]string{"MediaCapabilities"}, + &[_]string{"MediaElementAudioSourceNode"}, + &[_]string{"MediaEncryptedEvent"}, + &[_]string{"MediaError"}, + &[_]string{"MediaList"}, + &[_]string{"MediaQueryList"}, + &[_]string{"MediaQueryListEvent"}, + &[_]string{"MediaRecorder"}, + &[_]string{"MediaSource"}, + &[_]string{"MediaStream"}, + &[_]string{"MediaStreamAudioDestinationNode"}, + &[_]string{"MediaStreamAudioSourceNode"}, + &[_]string{"MediaStreamTrack"}, + &[_]string{"MediaStreamTrackEvent"}, + &[_]string{"MimeType"}, + &[_]string{"MimeTypeArray"}, + &[_]string{"MouseEvent"}, + &[_]string{"MutationEvent"}, + &[_]string{"MutationObserver"}, + &[_]string{"MutationRecord"}, + &[_]string{"NamedNodeMap"}, + &[_]string{"Navigator"}, + &[_]string{"Node"}, + &[_]string{"NodeFilter"}, + &[_]string{"NodeIterator"}, + &[_]string{"NodeList"}, + &[_]string{"Notification"}, + &[_]string{"OfflineAudioCompletionEvent"}, + &[_]string{"Option"}, + &[_]string{"OscillatorNode"}, + &[_]string{"PageTransitionEvent"}, + &[_]string{"Path2D"}, + &[_]string{"Performance"}, + &[_]string{"PerformanceEntry"}, + &[_]string{"PerformanceMark"}, + &[_]string{"PerformanceMeasure"}, + &[_]string{"PerformanceNavigation"}, + &[_]string{"PerformanceObserver"}, + &[_]string{"PerformanceObserverEntryList"}, + &[_]string{"PerformanceResourceTiming"}, + &[_]string{"PerformanceTiming"}, + &[_]string{"PeriodicWave"}, + &[_]string{"Plugin"}, + &[_]string{"PluginArray"}, + &[_]string{"PointerEvent"}, + &[_]string{"PopStateEvent"}, + &[_]string{"ProcessingInstruction"}, + &[_]string{"ProgressEvent"}, + &[_]string{"PromiseRejectionEvent"}, + &[_]string{"RTCCertificate"}, + &[_]string{"RTCDTMFSender"}, + &[_]string{"RTCDTMFToneChangeEvent"}, + &[_]string{"RTCDataChannel"}, + &[_]string{"RTCDataChannelEvent"}, + &[_]string{"RTCIceCandidate"}, + &[_]string{"RTCPeerConnection"}, + &[_]string{"RTCPeerConnectionIceEvent"}, + &[_]string{"RTCRtpReceiver"}, + &[_]string{"RTCRtpSender"}, + &[_]string{"RTCRtpTransceiver"}, + &[_]string{"RTCSessionDescription"}, + &[_]string{"RTCStatsReport"}, + &[_]string{"RTCTrackEvent"}, + &[_]string{"RadioNodeList"}, + &[_]string{"Range"}, + &[_]string{"ReadableStream"}, + &[_]string{"Request"}, + &[_]string{"ResizeObserver"}, + &[_]string{"ResizeObserverEntry"}, + &[_]string{"Response"}, + &[_]string{"Screen"}, + &[_]string{"ScriptProcessorNode"}, + &[_]string{"SecurityPolicyViolationEvent"}, + &[_]string{"Selection"}, + &[_]string{"ShadowRoot"}, + &[_]string{"SourceBuffer"}, + &[_]string{"SourceBufferList"}, + &[_]string{"SpeechSynthesisEvent"}, + &[_]string{"SpeechSynthesisUtterance"}, + &[_]string{"StaticRange"}, + &[_]string{"Storage"}, + &[_]string{"StorageEvent"}, + &[_]string{"StyleSheet"}, + &[_]string{"StyleSheetList"}, + &[_]string{"Text"}, + &[_]string{"TextMetrics"}, + &[_]string{"TextTrack"}, + &[_]string{"TextTrackCue"}, + &[_]string{"TextTrackCueList"}, + &[_]string{"TextTrackList"}, + &[_]string{"TimeRanges"}, + &[_]string{"TrackEvent"}, + &[_]string{"TransitionEvent"}, + &[_]string{"TreeWalker"}, + &[_]string{"UIEvent"}, + &[_]string{"VTTCue"}, + &[_]string{"ValidityState"}, + &[_]string{"VisualViewport"}, + &[_]string{"WaveShaperNode"}, + &[_]string{"WebGLActiveInfo"}, + &[_]string{"WebGLBuffer"}, + &[_]string{"WebGLContextEvent"}, + &[_]string{"WebGLFramebuffer"}, + &[_]string{"WebGLProgram"}, + &[_]string{"WebGLQuery"}, + &[_]string{"WebGLRenderbuffer"}, + &[_]string{"WebGLRenderingContext"}, + &[_]string{"WebGLSampler"}, + &[_]string{"WebGLShader"}, + &[_]string{"WebGLShaderPrecisionFormat"}, + &[_]string{"WebGLSync"}, + &[_]string{"WebGLTexture"}, + &[_]string{"WebGLUniformLocation"}, + &[_]string{"WebKitCSSMatrix"}, + &[_]string{"WebSocket"}, + &[_]string{"WheelEvent"}, + &[_]string{"Window"}, + &[_]string{"Worker"}, + &[_]string{"XMLDocument"}, + &[_]string{"XMLHttpRequest"}, + &[_]string{"XMLHttpRequestEventTarget"}, + &[_]string{"XMLHttpRequestUpload"}, + &[_]string{"XMLSerializer"}, + &[_]string{"XPathEvaluator"}, + &[_]string{"XPathExpression"}, + &[_]string{"XPathResult"}, + &[_]string{"XSLTProcessor"}, + &[_]string{"alert"}, + &[_]string{"atob"}, + &[_]string{"blur"}, + &[_]string{"btoa"}, + &[_]string{"cancelAnimationFrame"}, + &[_]string{"captureEvents"}, + &[_]string{"close"}, + &[_]string{"closed"}, + &[_]string{"confirm"}, + &[_]string{"customElements"}, + &[_]string{"devicePixelRatio"}, + &[_]string{"document"}, + &[_]string{"event"}, + &[_]string{"fetch"}, + &[_]string{"find"}, + &[_]string{"focus"}, + &[_]string{"frameElement"}, + &[_]string{"frames"}, + &[_]string{"getComputedStyle"}, + &[_]string{"getSelection"}, + &[_]string{"history"}, + &[_]string{"indexedDB"}, + &[_]string{"isSecureContext"}, + &[_]string{"length"}, + &[_]string{"location"}, + &[_]string{"locationbar"}, + &[_]string{"matchMedia"}, + &[_]string{"menubar"}, + &[_]string{"moveBy"}, + &[_]string{"moveTo"}, + &[_]string{"name"}, + &[_]string{"navigator"}, + &[_]string{"onabort"}, + &[_]string{"onafterprint"}, + &[_]string{"onanimationend"}, + &[_]string{"onanimationiteration"}, + &[_]string{"onanimationstart"}, + &[_]string{"onbeforeprint"}, + &[_]string{"onbeforeunload"}, + &[_]string{"onblur"}, + &[_]string{"oncanplay"}, + &[_]string{"oncanplaythrough"}, + &[_]string{"onchange"}, + &[_]string{"onclick"}, + &[_]string{"oncontextmenu"}, + &[_]string{"oncuechange"}, + &[_]string{"ondblclick"}, + &[_]string{"ondrag"}, + &[_]string{"ondragend"}, + &[_]string{"ondragenter"}, + &[_]string{"ondragleave"}, + &[_]string{"ondragover"}, + &[_]string{"ondragstart"}, + &[_]string{"ondrop"}, + &[_]string{"ondurationchange"}, + &[_]string{"onemptied"}, + &[_]string{"onended"}, + &[_]string{"onerror"}, + &[_]string{"onfocus"}, + &[_]string{"ongotpointercapture"}, + &[_]string{"onhashchange"}, + &[_]string{"oninput"}, + &[_]string{"oninvalid"}, + &[_]string{"onkeydown"}, + &[_]string{"onkeypress"}, + &[_]string{"onkeyup"}, + &[_]string{"onlanguagechange"}, + &[_]string{"onload"}, + &[_]string{"onloadeddata"}, + &[_]string{"onloadedmetadata"}, + &[_]string{"onloadstart"}, + &[_]string{"onlostpointercapture"}, + &[_]string{"onmessage"}, + &[_]string{"onmousedown"}, + &[_]string{"onmouseenter"}, + &[_]string{"onmouseleave"}, + &[_]string{"onmousemove"}, + &[_]string{"onmouseout"}, + &[_]string{"onmouseover"}, + &[_]string{"onmouseup"}, + &[_]string{"onoffline"}, + &[_]string{"ononline"}, + &[_]string{"onpagehide"}, + &[_]string{"onpageshow"}, + &[_]string{"onpause"}, + &[_]string{"onplay"}, + &[_]string{"onplaying"}, + &[_]string{"onpointercancel"}, + &[_]string{"onpointerdown"}, + &[_]string{"onpointerenter"}, + &[_]string{"onpointerleave"}, + &[_]string{"onpointermove"}, + &[_]string{"onpointerout"}, + &[_]string{"onpointerover"}, + &[_]string{"onpointerup"}, + &[_]string{"onpopstate"}, + &[_]string{"onprogress"}, + &[_]string{"onratechange"}, + &[_]string{"onrejectionhandled"}, + &[_]string{"onreset"}, + &[_]string{"onresize"}, + &[_]string{"onscroll"}, + &[_]string{"onseeked"}, + &[_]string{"onseeking"}, + &[_]string{"onselect"}, + &[_]string{"onstalled"}, + &[_]string{"onstorage"}, + &[_]string{"onsubmit"}, + &[_]string{"onsuspend"}, + &[_]string{"ontimeupdate"}, + &[_]string{"ontoggle"}, + &[_]string{"ontransitioncancel"}, + &[_]string{"ontransitionend"}, + &[_]string{"ontransitionrun"}, + &[_]string{"ontransitionstart"}, + &[_]string{"onunhandledrejection"}, + &[_]string{"onunload"}, + &[_]string{"onvolumechange"}, + &[_]string{"onwaiting"}, + &[_]string{"onwebkitanimationend"}, + &[_]string{"onwebkitanimationiteration"}, + &[_]string{"onwebkitanimationstart"}, + &[_]string{"onwebkittransitionend"}, + &[_]string{"onwheel"}, + &[_]string{"open"}, + &[_]string{"opener"}, + &[_]string{"origin"}, + &[_]string{"outerHeight"}, + &[_]string{"outerWidth"}, + &[_]string{"parent"}, + &[_]string{"performance"}, + &[_]string{"personalbar"}, + &[_]string{"postMessage"}, + &[_]string{"print"}, + &[_]string{"prompt"}, + &[_]string{"releaseEvents"}, + &[_]string{"requestAnimationFrame"}, + &[_]string{"resizeBy"}, + &[_]string{"resizeTo"}, + &[_]string{"screen"}, + &[_]string{"screenLeft"}, + &[_]string{"screenTop"}, + &[_]string{"screenX"}, + &[_]string{"screenY"}, + &[_]string{"scroll"}, + &[_]string{"scrollBy"}, + &[_]string{"scrollTo"}, + &[_]string{"scrollbars"}, + &[_]string{"self"}, + &[_]string{"speechSynthesis"}, + &[_]string{"status"}, + &[_]string{"statusbar"}, + &[_]string{"stop"}, + &[_]string{"toolbar"}, + &[_]string{"top"}, + &[_]string{"webkitURL"}, + &[_]string{"window"}, }; diff --git a/src/defines.zig b/src/defines.zig index a27956839..00253a1ad 100644 --- a/src/defines.zig +++ b/src/defines.zig @@ -1,8 +1,12 @@ const std = @import("std"); const js_ast = @import("./js_ast.zig"); const alloc = @import("alloc.zig"); - +const logger = @import("logger.zig"); +const js_lexer = @import("js_lexer.zig"); +const json_parser = @import("json_parser.zig"); +const fs = @import("fs.zig"); usingnamespace @import("strings.zig"); +usingnamespace @import("ast/base.zig"); const GlobalDefinesKey = @import("./defines-table.zig").GlobalDefinesKey; @@ -15,10 +19,17 @@ const Globals = struct { pub const Infinity = js_ast.E.Number{ .value = std.math.inf(f64) }; pub const InfinityPtr = &Globals.Infinity; + pub const UndefinedData = js_ast.Expr.Data{ .e_undefined = Globals.UndefinedPtr }; + pub const NaNData = js_ast.Expr.Data{ .e_number = Globals.NanPtr }; + pub const InfinityData = js_ast.Expr.Data{ .e_number = Globals.InfinityPtr }; }; +pub const RawDefines = std.StringHashMap(string); +pub const UserDefines = std.StringHashMap(DefineData); + pub const DefineData = struct { - value: js_ast.Expr.Data = DefaultValue, + value: js_ast.Expr.Data, + original_name: ?string = null, // True if accessing this value is known to not have any side effects. For // example, a bare reference to "Object.create" can be removed because it @@ -30,8 +41,6 @@ pub const DefineData = struct { // have any observable side effects. call_can_be_unwrapped_if_unused: bool = false, - pub const DefaultValue = js_ast.Expr.Data{ .e_undefined = Globals.UndefinedPtr }; - // All the globals have the same behavior. // So we can create just one struct for it. pub const GlobalDefineData = DefineData{}; @@ -39,13 +48,73 @@ pub const DefineData = struct { pub fn merge(a: DefineData, b: DefineData) DefineData { return DefineData{ .value = b.value, - .can_be_removed_if_unsued = a.can_be_removed_if_unsued, + .can_be_removed_if_unused = a.can_be_removed_if_unused, .call_can_be_unwrapped_if_unused = a.call_can_be_unwrapped_if_unused, }; } + + pub fn from_input(defines: RawDefines, log: *logger.Log, allocator: *std.mem.Allocator) !UserDefines { + var user_defines = UserDefines.init(allocator); + try user_defines.ensureCapacity(defines.count()); + + var iter = defines.iterator(); + while (iter.next()) |entry| { + var splitter = std.mem.split(entry.key, "."); + while (splitter.next()) |part| { + if (!js_lexer.isIdentifier(part)) { + if (strings.eql(part, entry.key)) { + try log.addErrorFmt(null, logger.Loc{}, allocator, "The define key \"{s}\" must be a valid identifier", .{entry.key}); + } else { + try log.addErrorFmt(null, logger.Loc{}, allocator, "The define key \"{s}\" contains invalid identifier \"{s}\"", .{ part, entry.key }); + } + break; + } + } + + if (js_lexer.isIdentifier(entry.value) and !js_lexer.Keywords.has(entry.value)) { + var ident: *js_ast.E.Identifier = try allocator.create(js_ast.E.Identifier); + ident.ref = Ref.None; + ident.can_be_removed_if_unused = true; + user_defines.putAssumeCapacity( + entry.key, + DefineData{ + .value = js_ast.Expr.Data{ .e_identifier = ident }, + .original_name = entry.value, + .can_be_removed_if_unused = true, + }, + ); + // user_defines.putAssumeCapacity( + // entry.key, + // DefineData{ .value = js_ast.Expr.Data{.e_identifier = } }, + // ); + continue; + } + var _log = log; + var source = logger.Source{ .contents = entry.value, .path = fs.Path.init("/internal/defines.json"), .identifier_name = "" }; + var expr = try json_parser.ParseJSON(&source, _log, allocator); + var data: js_ast.Expr.Data = undefined; + switch (expr.data) { + .e_missing => { + continue; + }, + .e_null, .e_boolean, .e_string, .e_number, .e_object, .e_array => { + data = expr.data; + }, + else => { + continue; + }, + } + + user_defines.putAssumeCapacity(entry.key, DefineData{ + .value = data, + }); + } + + return user_defines; + } }; -fn arePartsEqual(a: []string, b: []string) bool { +fn arePartsEqual(a: []const string, b: []const string) bool { if (a.len != b.len) { return false; } @@ -63,44 +132,73 @@ fn arePartsEqual(a: []string, b: []string) bool { pub const IdentifierDefine = DefineData; pub const DotDefine = struct { - parts: []string, + parts: []const string, data: DefineData, }; pub const Define = struct { - identifiers: std.StringHashMapUnmanaged(IdentifierDefine), - dots: std.StringHashMapUnmanaged([]DotDefine), + identifiers: std.StringHashMap(IdentifierDefine), + dots: std.StringHashMap([]DotDefine), allocator: *std.mem.Allocator, - pub fn init(allocator: *std.mem.Allocator, user_defines: std.StringHashMap(DefineData)) !*@This() { + pub fn init(allocator: *std.mem.Allocator, user_defines: UserDefines) !*@This() { var define = try allocator.create(Define); define.allocator = allocator; - try define.identifiers.ensureCapacity(allocator, 641); - try define.dots.ensureCapacity(allocator, 38); + define.identifiers = std.StringHashMap(IdentifierDefine).init(allocator); + define.dots = std.StringHashMap([]DotDefine).init(allocator); + try define.identifiers.ensureCapacity(641); + try define.dots.ensureCapacity(64); + var undefined_val = try allocator.create(js_ast.E.Undefined); + var val = js_ast.Expr.Data{ .e_undefined = undefined_val }; + var ident_define = IdentifierDefine{ + .value = val, + }; + var value_define = DefineData{ .value = val }; // Step 1. Load the globals into the hash tables for (GlobalDefinesKey) |global| { if (global.len == 1) { + // TODO: when https://github.com/ziglang/zig/pull/8596 is merged, switch to putAssumeCapacityNoClobber - define.identifiers.putAssumeCapacity(global[0], IdentifierDefine.GlobalDefineData); + try define.identifiers.put(global[0], value_define); } else { + const key = global[global.len - 1]; + // TODO: move this to comptime // TODO: when https://github.com/ziglang/zig/pull/8596 is merged, switch to putAssumeCapacityNoClobber - define.dots.putAssumeCapacity(global[global.len - 1], DotDefine{ - .parts = global[0 .. global.len - 1], - .data = DefineData.GlobalDefineData, - }); + if (define.dots.getEntry(key)) |entry| { + var list = try std.ArrayList(DotDefine).initCapacity(allocator, entry.value.len + 1); + list.appendSliceAssumeCapacity(entry.value); + list.appendAssumeCapacity(DotDefine{ + .parts = global[0 .. global.len - 1], + .data = value_define, + }); + + define.dots.putAssumeCapacity(key, list.toOwnedSlice()); + } else { + var list = try std.ArrayList(DotDefine).initCapacity(allocator, 1); + list.appendAssumeCapacity(DotDefine{ + .parts = global[0 .. global.len - 1], + .data = value_define, + }); + + define.dots.putAssumeCapacity(key, list.toOwnedSlice()); + } } } + var nan_val = try allocator.create(js_ast.E.Number); + nan_val.value = std.math.nan_f64; + + var inf_val = try allocator.create(js_ast.E.Number); + inf_val.value = std.math.inf_f64; + // Step 2. Swap in certain literal values because those can be constant folded - define.identifiers.putAssumeCapacity("undefined", DefineData{ - .value = js_ast.Expr.Data{ .e_undefined = Globals.UndefinedPtr }, - }); + define.identifiers.putAssumeCapacity("undefined", value_define); define.identifiers.putAssumeCapacity("NaN", DefineData{ - .value = js_ast.Expr.Data{ .e_number = Globals.NanPtr }, + .value = js_ast.Expr.Data{ .e_number = nan_val }, }); define.identifiers.putAssumeCapacity("Infinity", DefineData{ - .value = js_ast.Expr.Data{ .e_number = Globals.InfinityPtr }, + .value = js_ast.Expr.Data{ .e_number = inf_val }, }); // Step 3. Load user data into hash tables @@ -112,12 +210,20 @@ pub const Define = struct { // e.g. process.env.NODE_ENV if (strings.lastIndexOfChar(user_define.key, '.')) |last_dot| { const tail = user_define.key[last_dot + 1 .. user_define.key.len]; - const parts = std.mem.tokenize(user_define.key[0..last_dot], ".").rest(); + const remainder = user_define.key[0..last_dot]; + const count = std.mem.count(u8, remainder, ".") + 1; + var parts = try allocator.alloc(string, count); + var splitter = std.mem.split(remainder, "."); + var i: usize = 0; + while (splitter.next()) |split| : (i += 1) { + parts[i] = split; + } + var didFind = false; - var initial_values = &([_]DotDefine{}); + var initial_values: []DotDefine = &([_]DotDefine{}); // "NODE_ENV" - if (define.dots.getEntry()) |entry| { + if (define.dots.getEntry(tail)) |entry| { for (entry.value) |*part| { // ["process", "env"] == ["process", "env"] if (arePartsEqual(part.parts, parts)) { @@ -141,7 +247,7 @@ pub const Define = struct { // TODO: do we need to allocate this? .parts = parts, }); - try define.dots.put(allocator, tail, list.toOwnedSlice()); + try define.dots.put(tail, list.toOwnedSlice()); } } else { // IS_BROWSER @@ -154,6 +260,35 @@ pub const Define = struct { } }; -test "defines" { - +const expect = std.testing.expect; +test "UserDefines" { + try alloc.setup(std.heap.page_allocator); + var orig = RawDefines.init(alloc.dynamic); + try orig.put("process.env.NODE_ENV", "\"development\""); + var log = logger.Log.init(alloc.dynamic); + var data = try DefineData.from_input(orig, &log, alloc.dynamic); + + expect(data.contains("process.env.NODE_ENV")); + const val = data.get("process.env.NODE_ENV"); + expect(val != null); + expect(strings.utf16EqlString(val.?.value.e_string.value, "development")); +} + +test "Defines" { + try alloc.setup(std.heap.page_allocator); + var orig = RawDefines.init(alloc.dynamic); + try orig.put("process.env.NODE_ENV", "\"development\""); + var log = logger.Log.init(alloc.dynamic); + var data = try DefineData.from_input(orig, &log, alloc.dynamic); + + var defines = try Define.init(alloc.dynamic, data); + const node_env_dots = defines.dots.get("NODE_ENV"); + expect(node_env_dots != null); + expect(node_env_dots.?.len > 0); + const node_env = node_env_dots.?[0]; + std.testing.expectEqual(node_env.parts.len, 2); + std.testing.expectEqualStrings("process", node_env.parts[0]); + std.testing.expectEqualStrings("env", node_env.parts[1]); + expect(node_env.data.original_name == null); + expect(strings.utf16EqlString(node_env.data.value.e_string.value, "development")); } diff --git a/src/js_lexer.zig b/src/js_lexer.zig index a6625b3ff..bf2f6cef2 100644 --- a/src/js_lexer.zig +++ b/src/js_lexer.zig @@ -68,6 +68,8 @@ pub const Lexer = struct { fn nextCodepointSlice(it: *@This()) callconv(.Inline) ?[]const u8 { if (it.current >= it.source.contents.len) { + // without this line, strings cut off one before the last characte + it.end = it.current; return null; } diff --git a/src/string_immutable.zig b/src/string_immutable.zig index d0dffd49e..9f1ebee87 100644 --- a/src/string_immutable.zig +++ b/src/string_immutable.zig @@ -89,6 +89,7 @@ pub fn eqlUtf16(comptime self: string, other: JavascriptString) bool { return std.mem.eql(u16, std.unicode.utf8ToUtf16LeStringLiteral(self), other); } +// Check utf16 string equals utf8 string without allocating extra memory pub fn utf16EqlString(text: []u16, str: string) bool { if (text.len > str.len) { // Strings can't be equal if UTF-16 encoding is longer than UTF-8 encoding |