diff options
| author | Yuchen Pei <hi@ypei.me> | 2022-07-28 15:32:10 +1000 | 
|---|---|---|
| committer | Yuchen Pei <hi@ypei.me> | 2022-07-28 15:32:10 +1000 | 
| commit | 5b10a10743b8459f64fe83e0ff420f69da79c9a4 (patch) | |
| tree | c61904d688247790181d4955a4074b8c94302c03 /utilities/evaluation test | |
| parent | b98cb70b1bcd5b211aaa5d2675f96416911c0647 (diff) | |
Moving scripts and utilities into a new utilities dir
Diffstat (limited to 'utilities/evaluation test')
| -rw-r--r-- | utilities/evaluation test/README | 7 | ||||
| -rw-r--r-- | utilities/evaluation test/index.html | 18 | ||||
| -rw-r--r-- | utilities/evaluation test/test.js | 996 | 
3 files changed, 1021 insertions, 0 deletions
| diff --git a/utilities/evaluation test/README b/utilities/evaluation test/README new file mode 100644 index 0000000..074a524 --- /dev/null +++ b/utilities/evaluation test/README @@ -0,0 +1,7 @@ +The file test.js is set up to run the same code that the background script uses to evaluate Javascript. + +To use, copy the appropriate functions from main_background.js ("full_evaluate" and anything that it references). Then, build the script with browserify by running: + +browserify test.js -o test_bundle.js + +and load the file "index.js" with a web browser. diff --git a/utilities/evaluation test/index.html b/utilities/evaluation test/index.html new file mode 100644 index 0000000..e352507 --- /dev/null +++ b/utilities/evaluation test/index.html @@ -0,0 +1,18 @@ +<!doctype html> + +<head> +</head> +<body> +	<script src="test_bundle.js"></script> + +This page allows us to test Acorn and it isn't slow and terrible like websites that do the same thing  + +<br><br><br> + +<textarea id="input" rows="4" cols="50"></textarea>  +<br> +<input id="parse" type="button" value="Parse"></input> +<br> +<pre id="output"></pre> + +</body> diff --git a/utilities/evaluation test/test.js b/utilities/evaluation test/test.js new file mode 100644 index 0000000..d6dbd4a --- /dev/null +++ b/utilities/evaluation test/test.js @@ -0,0 +1,996 @@ +var acornLoose = require('acorn-loose'); +var acorn = require("acorn"); + +var fname_data = { +  "WebGLShader": true, +  "WebGLShaderPrecisionFormat": true, +  "WebGLQuery": true, +  "WebGLRenderbuffer": true, +  "WebGLSampler": true, +  "WebGLUniformLocation": true, +  "WebGLFramebuffer": true, +  "WebGLProgram": true, +  "WebGLContextEvent": true, +  "WebGL2RenderingContext": true, +  "WebGLTexture": true, +  "WebGLRenderingContext": true, +  "WebGLVertexArrayObject": true, +  "WebGLActiveInfo": true, +  "WebGLTransformFeedback": true, +  "WebGLSync": true, +  "WebGLBuffer": true, +  "cat_svg": true, +  "SVGPoint": true, +  "SVGEllipseElement": true, +  "SVGRadialGradientElement": true, +  "SVGComponentTransferFunctionElement": true, +  "SVGPathSegCurvetoQuadraticAbs": true, +  "SVGAnimatedNumberList": true, +  "SVGPathSegCurvetoQuadraticSmoothRel": true, +  "SVGFEColorMatrixElement": true, +  "SVGPathSegLinetoHorizontalAbs": true, +  "SVGLinearGradientElement": true, +  "SVGStyleElement": true, +  "SVGPathSegMovetoRel": true, +  "SVGStopElement": true, +  "SVGPathSegLinetoRel": true, +  "SVGFEConvolveMatrixElement": true, +  "SVGAnimatedAngle": true, +  "SVGPathSegLinetoAbs": true, +  "SVGPreserveAspectRatio": true, +  "SVGFEOffsetElement": true, +  "SVGFEImageElement": true, +  "SVGFEDiffuseLightingElement": true, +  "SVGAnimatedNumber": true, +  "SVGTextElement": true, +  "SVGFESpotLightElement": true, +  "SVGFEMorphologyElement": true, +  "SVGAngle": true, +  "SVGScriptElement": true, +  "SVGFEDropShadowElement": true, +  "SVGPathSegArcRel": true, +  "SVGNumber": true, +  "SVGPathSegLinetoHorizontalRel": true, +  "SVGFEFuncBElement": true, +  "SVGClipPathElement": true, +  "SVGPathSeg": true, +  "SVGUseElement": true, +  "SVGPathSegArcAbs": true, +  "SVGPathSegCurvetoQuadraticSmoothAbs": true, +  "SVGRect": true, +  "SVGAnimatedPreserveAspectRatio": true, +  "SVGImageElement": true, +  "SVGAnimatedEnumeration": true, +  "SVGAnimatedLengthList": true, +  "SVGFEFloodElement": true, +  "SVGFECompositeElement": true, +  "SVGAElement": true, +  "SVGAnimatedBoolean": true, +  "SVGMaskElement": true, +  "SVGFilterElement": true, +  "SVGPathSegLinetoVerticalRel": true, +  "SVGAnimatedInteger": true, +  "SVGTSpanElement": true, +  "SVGMarkerElement": true, +  "SVGStringList": true, +  "SVGTransform": true, +  "SVGTitleElement": true, +  "SVGFEBlendElement": true, +  "SVGTextPositioningElement": true, +  "SVGFEFuncGElement": true, +  "SVGFEPointLightElement": true, +  "SVGAnimateElement": true, +  "SVGPolylineElement": true, +  "SVGDefsElement": true, +  "SVGPathSegList": true, +  "SVGAnimatedTransformList": true, +  "SVGPathSegClosePath": true, +  "SVGGradientElement": true, +  "SVGSwitchElement": true, +  "SVGViewElement": true, +  "SVGUnitTypes": true, +  "SVGPathSegMovetoAbs": true, +  "SVGSymbolElement": true, +  "SVGFEFuncAElement": true, +  "SVGAnimatedString": true, +  "SVGFEMergeElement": true, +  "SVGPathSegLinetoVerticalAbs": true, +  "SVGAnimationElement": true, +  "SVGPathSegCurvetoCubicAbs": true, +  "SVGLength": true, +  "SVGTextPathElement": true, +  "SVGPolygonElement": true, +  "SVGAnimatedRect": true, +  "SVGPathSegCurvetoCubicRel": true, +  "SVGFEFuncRElement": true, +  "SVGLengthList": true, +  "SVGTextContentElement": true, +  "SVGFETurbulenceElement": true, +  "SVGMatrix": true, +  "SVGZoomAndPan": true, +  "SVGMetadataElement": true, +  "SVGFEDistantLightElement": true, +  "SVGAnimateMotionElement": true, +  "SVGDescElement": true, +  "SVGPathSegCurvetoCubicSmoothRel": true, +  "SVGFESpecularLightingElement": true, +  "SVGFEGaussianBlurElement": true, +  "SVGFEComponentTransferElement": true, +  "SVGNumberList": true, +  "SVGTransformList": true, +  "SVGForeignObjectElement": true, +  "SVGRectElement": true, +  "SVGFEDisplacementMapElement": true, +  "SVGAnimateTransformElement": true, +  "SVGAnimatedLength": true, +  "SVGPointList": true, +  "SVGPatternElement": true, +  "SVGPathSegCurvetoCubicSmoothAbs": true, +  "SVGCircleElement": true, +  "SVGSetElement": true, +  "SVGFETileElement": true, +  "SVGMPathElement": true, +  "SVGFEMergeNodeElement": true, +  "SVGPathSegCurvetoQuadraticRel": true, +  "SVGElement": true, +  "SVGGraphicsElement": true, +  "SVGSVGElement": true, +  "SVGGElement": true, +  "SVGGeometryElement": true, +  "SVGPathElement": true, +  "SVGLineElement": true, +  "cat_html": true, +  "HTMLTimeElement": true, +  "HTMLPictureElement": true, +  "HTMLMenuItemElement": true, +  "HTMLFormElement": true, +  "HTMLOptionElement": true, +  "HTMLCanvasElement": true, +  "HTMLTableSectionElement": true, +  "HTMLSelectElement": true, +  "HTMLUListElement": true, +  "HTMLMetaElement": true, +  "HTMLLinkElement": true, +  "HTMLBaseElement": true, +  "HTMLDataListElement": true, +  "HTMLInputElement": true, +  "HTMLMeterElement": true, +  "HTMLSourceElement": true, +  "HTMLTrackElement": true, +  "HTMLTableColElement": true, +  "HTMLFieldSetElement": true, +  "HTMLDirectoryElement": true, +  "HTMLTableCellElement": true, +  "HTMLStyleElement": true, +  "HTMLAudioElement": true, +  "HTMLLegendElement": true, +  "HTMLOListElement": true, +  "HTMLEmbedElement": true, +  "HTMLQuoteElement": true, +  "HTMLMenuElement": true, +  "HTMLHeadElement": true, +  "HTMLUnknownElement": true, +  "HTMLBRElement": true, +  "HTMLProgressElement": true, +  "HTMLMediaElement": true, +  "HTMLFormControlsCollection": true, +  "HTMLCollection": true, +  "HTMLLIElement": true, +  "HTMLDetailsElement": true, +  "HTMLObjectElement": true, +  "HTMLHeadingElement": true, +  "HTMLTableCaptionElement": true, +  "HTMLPreElement": true, +  "HTMLAllCollection": true, +  "HTMLFrameSetElement": true, +  "HTMLFontElement": true, +  "HTMLFrameElement": true, +  "HTMLAnchorElement": true, +  "HTMLOptGroupElement": true, +  "HTMLVideoElement": true, +  "HTMLModElement": true, +  "HTMLBodyElement": true, +  "HTMLTableElement": true, +  "HTMLButtonElement": true, +  "HTMLTableRowElement": true, +  "HTMLAreaElement": true, +  "HTMLDataElement": true, +  "HTMLParamElement": true, +  "HTMLLabelElement": true, +  "HTMLTemplateElement": true, +  "HTMLOptionsCollection": true, +  "HTMLIFrameElement": true, +  "HTMLTitleElement": true, +  "HTMLMapElement": true, +  "HTMLOutputElement": true, +  "HTMLDListElement": true, +  "HTMLParagraphElement": true, +  "HTMLHRElement": true, +  "HTMLImageElement": true, +  "HTMLDocument": true, +  "HTMLElement": true, +  "HTMLScriptElement": true, +  "HTMLHtmlElement": true, +  "HTMLTextAreaElement": true, +  "HTMLDivElement": true, +  "HTMLSpanElement": true, +  "cat_css": true, +  "CSSStyleRule": true, +  "CSSFontFaceRule": true, +  "CSSPrimitiveValue": true, +  "CSSStyleDeclaration": true, +  "CSSStyleSheet": true, +  "CSSPageRule": true, +  "CSSSupportsRule": true, +  "CSSMozDocumentRule": true, +  "CSSKeyframeRule": true, +  "CSSGroupingRule": true, +  "CSS2Properties": true, +  "CSSFontFeatureValuesRule": true, +  "CSSRuleList": true, +  "CSSPseudoElement": true, +  "CSSMediaRule": true, +  "CSSCounterStyleRule": true, +  "CSSImportRule": true, +  "CSSTransition": true, +  "CSSAnimation": true, +  "CSSValue": true, +  "CSSNamespaceRule": true, +  "CSSRule": true, +  "CSS": true, +  "CSSKeyframesRule": true, +  "CSSConditionRule": true, +  "CSSValueList": true, +  "cat_event": true, +  "ondevicemotion": true, +  "ondeviceorientation": true, +  "onabsolutedeviceorientation": true, +  "ondeviceproximity": true, +  "onuserproximity": true, +  "ondevicelight": true, +  "onvrdisplayconnect": true, +  "onvrdisplaydisconnect": true, +  "onvrdisplayactivate": true, +  "onvrdisplaydeactivate": true, +  "onvrdisplaypresentchange": true, +  "onabort": true, +  "onblur": true, +  "onfocus": true, +  "onauxclick": true, +  "oncanplay": true, +  "oncanplaythrough": true, +  "onchange": true, +  "onclick": true, +  "onclose": true, +  "oncontextmenu": true, +  "ondblclick": true, +  "ondrag": true, +  "ondragend": true, +  "ondragenter": true, +  "ondragexit": true, +  "ondragleave": true, +  "ondragover": true, +  "ondragstart": true, +  "ondrop": true, +  "ondurationchange": true, +  "onemptied": true, +  "onended": true, +  "oninput": true, +  "oninvalid": true, +  "onkeydown": true, +  "onkeypress": true, +  "onkeyup": true, +  "onload": true, +  "onloadeddata": true, +  "onloadedmetadata": true, +  "onloadend": true, +  "onloadstart": true, +  "onmousedown": true, +  "onmouseenter": true, +  "onmouseleave": true, +  "onmousemove": true, +  "onmouseout": true, +  "onmouseover": true, +  "onmouseup": true, +  "onwheel": true, +  "onpause": true, +  "onplay": true, +  "onplaying": true, +  "onprogress": true, +  "onratechange": true, +  "onreset": true, +  "onresize": true, +  "onscroll": true, +  "onseeked": true, +  "onseeking": true, +  "onselect": true, +  "onshow": true, +  "onstalled": true, +  "onsubmit": true, +  "onsuspend": true, +  "ontimeupdate": true, +  "onvolumechange": true, +  "onwaiting": true, +  "onselectstart": true, +  "ontoggle": true, +  "onpointercancel": true, +  "onpointerdown": true, +  "onpointerup": true, +  "onpointermove": true, +  "onpointerout": true, +  "onpointerover": true, +  "onpointerenter": true, +  "onpointerleave": true, +  "ongotpointercapture": true, +  "onlostpointercapture": true, +  "onmozfullscreenchange": true, +  "onmozfullscreenerror": true, +  "onanimationcancel": true, +  "onanimationend": true, +  "onanimationiteration": true, +  "onanimationstart": true, +  "ontransitioncancel": true, +  "ontransitionend": true, +  "ontransitionrun": true, +  "ontransitionstart": true, +  "onwebkitanimationend": true, +  "onwebkitanimationiteration": true, +  "onwebkitanimationstart": true, +  "onwebkittransitionend": true, +  "onerror": true, +  "onafterprint": true, +  "onbeforeprint": true, +  "onbeforeunload": true, +  "onhashchange": true, +  "onlanguagechange": true, +  "onmessage": true, +  "onmessageerror": true, +  "onoffline": true, +  "ononline": true, +  "onpagehide": true, +  "onpageshow": true, +  "onpopstate": true, +  "onstorage": true, +  "onunload": true, +  "cat_rtc": true, +  "RTCDTMFSender": true, +  "RTCStatsReport": true, +  "RTCTrackEvent": true, +  "RTCDataChannelEvent": true, +  "RTCPeerConnectionIceEvent": true, +  "RTCCertificate": true, +  "RTCDTMFToneChangeEvent": true, +  "RTCPeerConnection": true, +  "RTCIceCandidate": true, +  "RTCRtpReceiver": true, +  "RTCRtpSender": true, +  "RTCSessionDescription": true, +  "cat_vr": true, +  "VRStageParameters": true, +  "VRFrameData": true, +  "VRDisplay": true, +  "VRDisplayEvent": true, +  "VRFieldOfView": true, +  "VRDisplayCapabilities": true, +  "VREyeParameters": true, +  "VRPose": true, +  "cat_dom": true, +  "DOMStringMap": true, +  "DOMRectReadOnly": true, +  "DOMException": true, +  "DOMRect": true, +  "DOMMatrix": true, +  "DOMMatrixReadOnly": true, +  "DOMPointReadOnly": true, +  "DOMPoint": true, +  "DOMQuad": true, +  "DOMRequest": true, +  "DOMParser": true, +  "DOMTokenList": true, +  "DOMStringList": true, +  "DOMImplementation": true, +  "DOMError": true, +  "DOMRectList": true, +  "DOMCursor": true, +  "cat_idb": true, +  "IDBFileRequest": true, +  "IDBTransaction": true, +  "IDBCursor": true, +  "IDBFileHandle": true, +  "IDBMutableFile": true, +  "IDBKeyRange": true, +  "IDBVersionChangeEvent": true, +  "IDBObjectStore": true, +  "IDBFactory": true, +  "IDBCursorWithValue": true, +  "IDBOpenDBRequest": true, +  "IDBRequest": true, +  "IDBIndex": true, +  "IDBDatabase": true, +  "cat_audio": true, +  "AudioContext": true, +  "AudioBuffer": true, +  "AudioBufferSourceNode": true, +  "Audio": true, +  "MediaElementAudioSourceNode": true, +  "AudioNode": true, +  "BaseAudioContext": true, +  "AudioListener": true, +  "MediaStreamAudioSourceNode": true, +  "OfflineAudioContext": true, +  "AudioDestinationNode": true, +  "AudioParam": true, +  "MediaStreamAudioDestinationNode": true, +  "OfflineAudioCompletionEvent": true, +  "AudioStreamTrack": true, +  "AudioScheduledSourceNode": true, +  "AudioProcessingEvent": true, +  "cat_gamepad": true, +  "GamepadButton": true, +  "GamepadHapticActuator": true, +  "GamepadAxisMoveEvent": true, +  "GamepadPose": true, +  "GamepadEvent": true, +  "Gamepad": true, +  "GamepadButtonEvent": true, +  "cat_media": true, +  "MediaKeys": true, +  "MediaKeyError": true, +  "MediaSource": true, +  "MediaDevices": true, +  "MediaKeyStatusMap": true, +  "MediaStreamTrackEvent": true, +  "MediaRecorder": true, +  "MediaQueryListEvent": true, +  "MediaStream": true, +  "MediaEncryptedEvent": true, +  "MediaStreamTrack": true, +  "MediaError": true, +  "MediaStreamEvent": true, +  "MediaQueryList": true, +  "MediaKeySystemAccess": true, +  "MediaDeviceInfo": true, +  "MediaKeySession": true, +  "MediaList": true, +  "MediaRecorderErrorEvent": true, +  "MediaKeyMessageEvent": true, +  "cat_event2": true, +  "SpeechSynthesisErrorEvent": true, +  "BeforeUnloadEvent": true, +  "CustomEvent": true, +  "PageTransitionEvent": true, +  "PopupBlockedEvent": true, +  "CloseEvent": true, +  "ProgressEvent": true, +  "MutationEvent": true, +  "MessageEvent": true, +  "FocusEvent": true, +  "TrackEvent": true, +  "DeviceMotionEvent": true, +  "TimeEvent": true, +  "PointerEvent": true, +  "UserProximityEvent": true, +  "StorageEvent": true, +  "DragEvent": true, +  "MouseScrollEvent": true, +  "EventSource": true, +  "PopStateEvent": true, +  "DeviceProximityEvent": true, +  "SpeechSynthesisEvent": true, +  "XMLHttpRequestEventTarget": true, +  "ClipboardEvent": true, +  "AnimationPlaybackEvent": true, +  "DeviceLightEvent": true, +  "BlobEvent": true, +  "MouseEvent": true, +  "WheelEvent": true, +  "InputEvent": true, +  "HashChangeEvent": true, +  "DeviceOrientationEvent": true, +  "CompositionEvent": true, +  "KeyEvent": true, +  "ScrollAreaEvent": true, +  "KeyboardEvent": true, +  "TransitionEvent": true, +  "ErrorEvent": true, +  "AnimationEvent": true, +  "FontFaceSetLoadEvent": true, +  "EventTarget": true, +  "captureEvents": true, +  "releaseEvents": true, +  "Event": true, +  "UIEvent": true, +  "cat_other": false, +  "undefined": false, +  "Array": false, +  "Boolean": false, +  "JSON": false, +  "Date": false, +  "Math": false, +  "Number": false, +  "String": false, +  "RegExp": false, +  "Error": false, +  "InternalError": false, +  "EvalError": false, +  "RangeError": false, +  "ReferenceError": false, +  "SyntaxError": false, +  "TypeError": false, +  "URIError": false, +  "ArrayBuffer": true, +  "Int8Array": true, +  "Uint8Array": true, +  "Int16Array": true, +  "Uint16Array": true, +  "Int32Array": true, +  "Uint32Array": true, +  "Float32Array": true, +  "Float64Array": true, +  "Uint8ClampedArray": true, +  "Proxy": true, +  "WeakMap": true, +  "Map": true, +  "Set": true, +  "DataView": false, +  "Symbol": false, +  "SharedArrayBuffer": true, +  "Intl": false, +  "TypedObject": true, +  "Reflect": true, +  "SIMD": true, +  "WeakSet": true, +  "Atomics": true, +  "Promise": true, +  "WebAssembly": true, +  "NaN": false, +  "Infinity": false, +  "isNaN": false, +  "isFinite": false, +  "parseFloat": false, +  "parseInt": false, +  "escape": false, +  "unescape": false, +  "decodeURI": false, +  "encodeURI": false, +  "decodeURIComponent": false, +  "encodeURIComponent": false, +  "uneval": false, +  "BatteryManager": true, +  "CanvasGradient": true, +  "TextDecoder": true, +  "Plugin": true, +  "PushManager": true, +  "ChannelMergerNode": true, +  "PerformanceResourceTiming": true, +  "ServiceWorker": true, +  "TextTrackCueList": true, +  "PerformanceEntry": true, +  "TextTrackList": true, +  "StyleSheet": true, +  "PerformanceMeasure": true, +  "DesktopNotificationCenter": true, +  "Comment": true, +  "DelayNode": true, +  "XPathResult": true, +  "CDATASection": true, +  "MessageChannel": true, +  "BiquadFilterNode": true, +  "SpeechSynthesisUtterance": true, +  "Crypto": true, +  "Navigator": true, +  "FileList": true, +  "URLSearchParams": false, +  "ServiceWorkerContainer": true, +  "ValidityState": true, +  "ProcessingInstruction": true, +  "AbortSignal": true, +  "FontFace": true, +  "FileReader": true, +  "Worker": true, +  "External": true, +  "ImageBitmap": true, +  "TimeRanges": true, +  "Option": true, +  "TextTrack": true, +  "Image": true, +  "AnimationTimeline": true, +  "VideoPlaybackQuality": true, +  "VTTCue": true, +  "Storage": true, +  "XPathExpression": true, +  "CharacterData": false, +  "TextMetrics": true, +  "AnimationEffectReadOnly": true, +  "PerformanceTiming": false, +  "PerformanceMark": true, +  "ImageBitmapRenderingContext": true, +  "Headers": true, +  "Range": false, +  "Rect": true, +  "AnimationEffectTimingReadOnly": true, +  "KeyframeEffect": true, +  "Permissions": true, +  "TextEncoder": true, +  "ImageData": true, +  "SpeechSynthesisVoice": true, +  "StorageManager": true, +  "TextTrackCue": true, +  "WebSocket": true, +  "DocumentType": true, +  "XPathEvaluator": true, +  "PerformanceNavigationTiming": true, +  "IdleDeadline": true, +  "FileSystem": true, +  "FileSystemFileEntry": true, +  "CacheStorage": true, +  "MimeType": true, +  "PannerNode": true, +  "NodeFilter": true, +  "StereoPannerNode": true, +  "console": false, +  "DynamicsCompressorNode": true, +  "PaintRequest": true, +  "RGBColor": true, +  "FontFaceSet": false, +  "PaintRequestList": true, +  "FileSystemEntry": true, +  "XMLDocument": false, +  "SourceBuffer": false, +  "Screen": true, +  "NamedNodeMap": false, +  "History": true, +  "Response": true, +  "AnimationEffectTiming": true, +  "ServiceWorkerRegistration": true, +  "CanvasRenderingContext2D": true, +  "ScriptProcessorNode": true, +  "FileSystemDirectoryReader": true, +  "MimeTypeArray": true, +  "CanvasCaptureMediaStream": true, +  "Directory": true, +  "mozRTCPeerConnection": true, +  "PerformanceObserverEntryList": true, +  "PushSubscriptionOptions": true, +  "Text": false, +  "IntersectionObserverEntry": true, +  "SubtleCrypto": true, +  "Animation": true, +  "DataTransfer": true, +  "TreeWalker": true, +  "XMLHttpRequest": true, +  "LocalMediaStream": true, +  "ConvolverNode": true, +  "WaveShaperNode": true, +  "DataTransferItemList": false, +  "Request": true, +  "SourceBufferList": false, +  "XSLTProcessor": true, +  "XMLHttpRequestUpload": true, +  "SharedWorker": true, +  "Notification": false, +  "DataTransferItem": true, +  "AnalyserNode": true, +  "mozRTCIceCandidate": true, +  "PerformanceObserver": true, +  "OfflineResourceList": true, +  "FileSystemDirectoryEntry": true, +  "DesktopNotification": false, +  "DataChannel": true, +  "IIRFilterNode": true, +  "ChannelSplitterNode": true, +  "File": true, +  "ConstantSourceNode": true, +  "CryptoKey": true, +  "GainNode": true, +  "AbortController": true, +  "Attr": true, +  "SpeechSynthesis": true, +  "PushSubscription": false, +  "XMLStylesheetProcessingInstruction": false, +  "NodeIterator": true, +  "VideoStreamTrack": true, +  "XMLSerializer": true, +  "CaretPosition": true, +  "FormData": true, +  "CanvasPattern": true, +  "mozRTCSessionDescription": true, +  "Path2D": true, +  "PerformanceNavigation": true, +  "URL": false, +  "PluginArray": true, +  "MutationRecord": true, +  "WebKitCSSMatrix": true, +  "PeriodicWave": true, +  "DocumentFragment": true, +  "DocumentTimeline": false, +  "ScreenOrientation": true, +  "BroadcastChannel": true, +  "PermissionStatus": true, +  "IntersectionObserver": true, +  "Blob": true, +  "MessagePort": true, +  "BarProp": true, +  "OscillatorNode": true, +  "Cache": true, +  "RadioNodeList": true, +  "KeyframeEffectReadOnly": true, +  "InstallTrigger": true, +  "Function": false, +  "Object": false, +  "eval": true, +  "Window": false, +  "close": false, +  "stop": false, +  "focus": false, +  "blur": false, +  "open": true, +  "alert": false, +  "confirm": false, +  "prompt": false, +  "print": false, +  "postMessage": true, +  "getSelection": true, +  "getComputedStyle": true, +  "matchMedia": true, +  "moveTo": false, +  "moveBy": false, +  "resizeTo": false, +  "resizeBy": false, +  "scroll": false, +  "scrollTo": false, +  "scrollBy": false, +  "requestAnimationFrame": true, +  "cancelAnimationFrame": true, +  "getDefaultComputedStyle": false, +  "scrollByLines": false, +  "scrollByPages": false, +  "sizeToContent": false, +  "updateCommands": true, +  "find": false, +  "dump": true, +  "setResizable": false, +  "requestIdleCallback": false, +  "cancelIdleCallback": false, +  "btoa": true, +  "atob": true, +  "setTimeout": true, +  "clearTimeout": true, +  "setInterval": true, +  "clearInterval": true, +  "createImageBitmap": true, +  "fetch": true, +  "self": true, +  "name": false, +  "history": true, +  "locationbar": true, +  "menubar": true, +  "personalbar": true, +  "scrollbars": true, +  "statusbar": true, +  "toolbar": true, +  "status": true, +  "closed": true, +  "frames": true, +  "length": false, +  "opener": true, +  "parent": true, +  "frameElement": true, +  "navigator": true, +  "external": true, +  "applicationCache": true, +  "screen": true, +  "innerWidth": true, +  "innerHeight": true, +  "scrollX": true, +  "pageXOffset": true, +  "scrollY": true, +  "pageYOffset": true, +  "screenX": true, +  "screenY": true, +  "outerWidth": true, +  "outerHeight": true, +  "performance": true, +  "mozInnerScreenX": true, +  "mozInnerScreenY": true, +  "devicePixelRatio": true, +  "scrollMaxX": true, +  "scrollMaxY": true, +  "fullScreen": false, +  "mozPaintCount": true, +  "sidebar": false, +  "crypto": true, +  "speechSynthesis": true, +  "localStorage": true, +  "origin": true, +  "isSecureContext": false, +  "indexedDB": true, +  "caches": true, +  "sessionStorage": true, +  "window": false, +  "document": true, +  "location": false, +  "top": true, +  "netscape": true, +  "Node": true, +  "Document": true, +  "Performance": false, +  "startProfiling": true, +  "stopProfiling": true, +  "pauseProfilers": true, +  "resumeProfilers": true, +  "dumpProfile": true, +  "getMaxGCPauseSinceClear": true, +  "clearMaxGCPauseAccumulator": true, +  "Location": true, +  "StyleSheetList": false, +  "Selection": false, +  "Element": true, +  "AnonymousContent": false, +  "MutationObserver": true, +  "NodeList": true, +  "StopIteration": true +}; + + +//************************Comes from HTML file index.html's script test.js**************************** + +/** +*	If this is true, it evaluates entire scripts instead of returning as soon as it encounters a violation. +* +*	Also, it controls whether or not this part of the code logs to the console. +* +*/ +var DEBUG = true; +console.log("DEBUG:" + DEBUG); + +function dbg_print(a, b) { +  if (DEBUG == true) { +    //console.log(a,b) +  } +} +function full_evaluate(script) { +  var res = true; +  if (script === undefined || script == "") { +    return [true, "Harmless null script"]; +  } + +  var ast = acornLoose.parse(script).body[0]; + +  var flag = false; +  var amtloops = 0; + +  var loopkeys = { "for": true, "if": true, "while": true, "switch": true }; +  var operators = { "||": true, "&&": true, "=": true, "==": true, "++": true, "--": true, "+=": true, "-=": true, "*": true }; +  try { +    var tokens = acorn.tokenizer(script); +  } catch (e) { +    console.warn("Tokenizer could not be initiated (probably invalid code)"); +    return [false, "Tokenizer could not be initiated (probably invalid code)"]; +  } +  try { +    var toke = tokens.getToken(); +  } catch (e) { +    console.warn("couldn't get first token (probably invalid code)"); +    console.warn("Continuing evaluation"); +  } + +  /** +  * Given the end of an identifer token, it tests for bracket suffix notation +  */ +  function being_called(end) { +    var i = 0; +    while (script.charAt(end + i).match(/\s/g) !== null) { +      i++; +      if (i >= script.length - 1) { +        return false; +      } +    } +    if (script.charAt(end + i) == "(") { +      return true; +    } else { +      return false; +    } +  } +  /** +  * Given the end of an identifer token, it tests for parentheses +  */ +  function is_bsn(end) { +    var i = 0; +    while (script.charAt(end + i).match(/\s/g) !== null) { +      i++; +      if (i >= script.length - 1) { +        return false; +      } +    } +    if (script.charAt(end + i) == "[") { +      return true; +    } else { +      return false; +    } +  } +  var error_count = 0; +  while (toke.type != acorn.tokTypes.eof) { +    if (toke.type.keyword !== undefined) { +      // This type of loop detection ignores functional loop alternatives and ternary operators +      //dbg_print("Keyword:"+toke.type.keyword); +      console.log(toke); +      if (toke.type.keyword == "function") { +        dbg_print("%c NONTRIVIAL: Function declaration.", "color:red"); +        if (DEBUG == false) { +          return [false, "NONTRIVIAL: Function declaration."]; +        } +      } + +      if (loopkeys[toke.type.keyword] !== undefined) { +        amtloops++; +        if (amtloops > 3) { +          dbg_print("%c NONTRIVIAL: Too many loops/conditionals.", "color:red"); +          if (DEBUG == false) { +            return [false, "NONTRIVIAL: Too many loops/conditionals."]; +          } +        } +      } +    } else if (toke.value !== undefined) { +      var status = fname_data[toke.value]; +      if (status === true) { // is the identifier banned? +        dbg_print("%c NONTRIVIAL: nontrivial token: '" + toke.value + "'", "color:red"); +        if (DEBUG == false) { +          return [false, "NONTRIVIAL: nontrivial token: '" + toke.value + "'"]; +        } +      } else if (status === false) {// is the identifier not banned? +        // Is there bracket suffix notation? +        if (operators[toke.value] === undefined) { +          if (is_bsn(toke.end)) { +            dbg_print("%c NONTRIVIAL: Bracket suffix notation on variable '" + toke.value + "'", "color:red"); +            if (DEBUG == false) { +              return [false, "%c NONTRIVIAL: Bracket suffix notation on variable '" + toke.value + "'"]; +            } +          } +        } +      } else if (status === undefined) {// is the identifier user defined? +        // Are arguments being passed to a user defined variable? +        if (being_called(toke.end)) { +          dbg_print("%c NONTRIVIAL: User defined variable '" + toke.value + "' called as function", "color:red"); +          if (DEBUG == false) { +            return [false, "NONTRIVIAL: User defined variable '" + toke.value + "' called as function"]; +          } +        } +        // Is there bracket suffix notation? +        if (operators[toke.value] === undefined) { +          if (is_bsn(toke.end)) { +            dbg_print("%c NONTRIVIAL: Bracket suffix notation on variable '" + toke.value + "'", "color:red"); +            if (DEBUG == false) { +              return [false, "NONTRIVIAL: Bracket suffix notation on variable '" + toke.value + "'"]; +            } +          } +        } +      } else { +        dbg_print("trivial token:" + toke.value); +      } +    } +    // If not a keyword or an identifier it's some kind of operator, field parenthesis, brackets +    try { +      toke = tokens.getToken(); +    } catch (e) { +      dbg_print("Denied script because it cannot be parsed."); +      return [false, "NONTRIVIAL: Cannot be parsed."]; +      console.warn("Continuing evaluation"); +      error_count++; +    } +  } + +  dbg_print("%cAppears to be trivial.", "color:green;"); +  return [true, "Script appears to be trivial."]; +} + +//**************************************************************************************************** + +window.onload = function() { +  document.getElementById("parse").addEventListener("click", function() { +    var script = document.getElementById("input").value; +    var ast = acornLoose.parse(script).body[0]; +    document.getElementById("output").innerHTML = JSON.stringify(ast, null, '\t'); // Indented with tab +    document.getElementById("output").innerHTML = full_evaluate(script) + "\n\n" + document.getElementById("output").innerHTML; +  }); +} | 
