aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/defines-table.zig1470
-rw-r--r--src/defines.zig191
-rw-r--r--src/js_lexer.zig2
-rw-r--r--src/string_immutable.zig1
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