diff --git a/package-lock.json b/package-lock.json
index b48c1f5e1d9..35a72529151 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5928,7 +5928,6 @@
},
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
"version": "1.3.0",
- "extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -54799,6 +54798,27 @@
"version": "0.10.31",
"license": "MIT"
},
+ "node_modules/butterchurn": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/butterchurn/-/butterchurn-2.6.7.tgz",
+ "integrity": "sha512-BJiRA8L0L2+84uoG2SSfkp0kclBuN+vQKf217pK7pMlwEO2ZEg3MtO2/o+l8Qpr8Nbejg8tmL1ZHD1jmhiaaqg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.0.0",
+ "ecma-proposal-math-extensions": "0.0.2"
+ }
+ },
+ "node_modules/butterchurn-presets": {
+ "version": "2.4.7",
+ "resolved": "https://registry.npmjs.org/butterchurn-presets/-/butterchurn-presets-2.4.7.tgz",
+ "integrity": "sha512-4MdM8ripz/VfH1BCldrIKdAc/1ryJFBDvqlyow6Ivo1frwj0H3duzvSMFC7/wIjAjxb1QpwVHVqGqS9uAFKhpg==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-runtime": "^6.26.0",
+ "ecma-proposal-math-extensions": "0.0.2",
+ "lodash": "^4.17.4"
+ }
+ },
"node_modules/bytes": {
"version": "3.0.0",
"license": "MIT",
@@ -60579,6 +60599,12 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/ecma-proposal-math-extensions": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/ecma-proposal-math-extensions/-/ecma-proposal-math-extensions-0.0.2.tgz",
+ "integrity": "sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==",
+ "license": "MIT"
+ },
"node_modules/editorconfig": {
"version": "1.0.4",
"dev": true,
@@ -155749,6 +155775,8 @@
"array-range": "1.0.1",
"body-scroll-lock": "4.0.0-beta.0",
"bs58": "5.0.0",
+ "butterchurn": "^2.6.7",
+ "butterchurn-presets": "^2.4.7",
"canvas-loop": "1.0.7",
"chart.js": "2.9.3",
"clamp": "1.0.1",
diff --git a/packages/web/package.json b/packages/web/package.json
index 91bcc3e7930..ec926b4b8ae 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -103,10 +103,10 @@
"@tanstack/react-query-devtools": "5.62.7",
"@wagmi/connectors": "5.7.11",
"array-pack-2d": "0.1.1",
- "array-range": "1.0.1",
"body-scroll-lock": "4.0.0-beta.0",
"bs58": "5.0.0",
- "canvas-loop": "1.0.7",
+ "butterchurn": "2.6.7",
+ "butterchurn-presets": "2.4.7",
"chart.js": "2.9.3",
"clamp": "1.0.1",
"classnames": "2.2.6",
@@ -116,23 +116,12 @@
"electron-updater": "6.3.9",
"exif-parser": "0.1.12",
"formik": "2.4.6",
- "gl-audio-analyser": "1.0.3",
- "gl-buffer": "2.1.2",
- "gl-mat4": "1.2.0",
- "gl-quad": "1.1.3",
- "gl-shader": "4.2.1",
- "gl-shader-core": "2.2.0",
- "gl-vao": "1.3.0",
- "glsl-noise": "0.0.0",
- "glsl-random": "0.0.4",
- "hex-rgb": "1.0.0",
"history": "4.10.1",
"inherits": "2.0.4",
"jimp": "0.6.8",
"js-sha3": "0.8.0",
"js-yaml": "3.13.1",
"jsmediatags": "3.8.1",
- "lerp": "1.0.3",
"linkify-react": "4.1.0",
"linkifyjs": "4.1.0",
"localforage": "1.10.0",
@@ -140,9 +129,7 @@
"lottie-react": "2.4.0",
"markdown-to-jsx": "7.4.3",
"numeral": "2.0.6",
- "orbit-controls": "0.0.1",
"persona": "5.5.0",
- "perspective-camera": "2.0.1",
"prop-types": "15.7.2",
"query-string": "6.13.5",
"react": "19.0.0",
@@ -184,7 +171,6 @@
"vike": "0.4.247",
"vike-react": "^0.3.7",
"wagmi": "2.14.15",
- "webgl-context": "2.2.0",
"zod-formik-adapter": "1.2.0"
},
"main": "src/electron.js",
diff --git a/packages/web/src/components/nav/desktop/NowPlayingArtworkTile.module.css b/packages/web/src/components/nav/desktop/NowPlayingArtworkTile.module.css
new file mode 100644
index 00000000000..c9ef628fe59
--- /dev/null
+++ b/packages/web/src/components/nav/desktop/NowPlayingArtworkTile.module.css
@@ -0,0 +1,72 @@
+/* `Link` fills the tile; `.coverArtLink:hover` shows the pill (pill has `pointer-events: auto`) */
+.coverArtLink {
+ display: block;
+ position: relative;
+ height: 100%;
+ width: 100%;
+}
+
+.artworkOverlay {
+ position: absolute;
+ inset: 0;
+ pointer-events: none;
+ z-index: 1;
+}
+
+.visualizerPill {
+ position: absolute;
+ bottom: 8px;
+ right: 8px;
+ z-index: 2;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 6px;
+ margin: 0;
+ padding: 5px 10px;
+ border: none;
+ border-radius: 999px;
+ cursor: pointer;
+ opacity: 0;
+ pointer-events: none;
+ transition:
+ opacity 0.22s ease,
+ background 0.15s ease,
+ transform 0.15s ease;
+ background: rgba(255, 255, 255, 0.12);
+ backdrop-filter: blur(20px) saturate(160%);
+ -webkit-backdrop-filter: blur(20px) saturate(160%);
+ border: 1px solid rgba(255, 255, 255, 0.22);
+ box-shadow:
+ 0 2px 16px rgba(0, 0, 0, 0.18),
+ inset 0 1px 0 rgba(255, 255, 255, 0.18);
+}
+
+.coverArtLink:hover .visualizerPill,
+.visualizerPill:focus-visible {
+ opacity: 1;
+ pointer-events: auto;
+}
+
+.visualizerPill:hover {
+ background: rgba(255, 255, 255, 0.2);
+}
+
+.visualizerPill:active {
+ background: rgba(255, 255, 255, 0.3);
+ transform: scale(0.98);
+}
+
+/* Legibility on very light or very dark artwork */
+.visualizerPillLabel {
+ color: rgba(255, 255, 255, 0.96) !important;
+ text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
+ letter-spacing: 0.02em;
+}
+
+.visualizerPillIcon {
+ width: 14px;
+ height: 14px;
+ fill: rgba(255, 255, 255, 0.96);
+ filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.4));
+}
diff --git a/packages/web/src/components/nav/desktop/NowPlayingArtworkTile.tsx b/packages/web/src/components/nav/desktop/NowPlayingArtworkTile.tsx
index e60519eefb4..b0b4e122666 100644
--- a/packages/web/src/components/nav/desktop/NowPlayingArtworkTile.tsx
+++ b/packages/web/src/components/nav/desktop/NowPlayingArtworkTile.tsx
@@ -6,10 +6,10 @@ import { playerSelectors } from '@audius/common/store'
import {
IconImage,
IconWaveForm as IconVisualizer,
- IconButton,
useTheme,
Box,
- Paper
+ Paper,
+ Text
} from '@audius/harmony'
import { animated, useSpring } from '@react-spring/web'
import { useDispatch, useSelector } from 'react-redux'
@@ -22,15 +22,18 @@ import {
useTrackCoverArt,
useTrackCoverArtDominantColor
} from 'hooks/useTrackCoverArt'
-import { NO_VISUALIZER_ROUTES } from 'pages/visualizer/Visualizer'
+import { NO_VISUALIZER_ROUTES } from 'pages/visualizer/constants'
import { openVisualizer } from 'pages/visualizer/store/slice'
import { fullTrackPage } from 'utils/route'
+import styles from './NowPlayingArtworkTile.module.css'
+
const { getTrackId } = playerSelectors
const messages = {
viewTrack: 'View currently playing track',
- showVisualizer: 'Show Visualizer'
+ visualizer: 'Visualizer',
+ openVisualizer: 'Open visualizer'
}
const AnimatedPaper = animated(Paper)
@@ -39,7 +42,7 @@ export const NowPlayingArtworkTile = () => {
const dispatch = useDispatch()
const location = useLocation()
const { pathname } = location
- const { color, spacing, motion } = useTheme()
+ const { motion } = useTheme()
const { data: currentUserId } = useCurrentUserId()
const trackId = useSelector(getTrackId)
@@ -64,6 +67,7 @@ export const NowPlayingArtworkTile = () => {
const handleShowVisualizer = useCallback(
(event: MouseEvent) => {
+ event.stopPropagation()
if (NO_VISUALIZER_ROUTES.has(pathname)) return
event.preventDefault()
dispatch(openVisualizer())
@@ -100,41 +104,52 @@ export const NowPlayingArtworkTile = () => {
}}
style={slideInProps}
>
-
+
- {hasNoArtwork ? (
-
-
-
- ) : null}
-
+
+ {hasNoArtwork ? (
+
+
+
+ ) : null}
+ {NO_VISUALIZER_ROUTES.has(pathname) ? null : (
+
+ )}
+
diff --git a/packages/web/src/components/play-bar/desktop/components/PlayingTrackInfo.module.css b/packages/web/src/components/play-bar/desktop/components/PlayingTrackInfo.module.css
index 490e88017d0..0bb500840d3 100644
--- a/packages/web/src/components/play-bar/desktop/components/PlayingTrackInfo.module.css
+++ b/packages/web/src/components/play-bar/desktop/components/PlayingTrackInfo.module.css
@@ -95,3 +95,28 @@
position: relative;
top: 1px;
}
+
+/* Overlay (e.g. visualizer): full title and artist on one line each, no ellipsis */
+.fullTrackText {
+ width: max-content;
+ max-width: none;
+}
+
+.fullTrackText .text {
+ min-width: max-content;
+}
+
+.fullTrackText .trackTitleContainer {
+ width: max-content;
+ max-width: none;
+}
+
+.fullTrackText .trackTitle,
+.fullTrackText .artistName {
+ overflow: visible;
+ text-overflow: clip;
+}
+
+.fullTrackText .artistNameWrapper {
+ max-width: none;
+}
diff --git a/packages/web/src/components/play-bar/desktop/components/PlayingTrackInfo.tsx b/packages/web/src/components/play-bar/desktop/components/PlayingTrackInfo.tsx
index 2857973a369..a650c94d148 100644
--- a/packages/web/src/components/play-bar/desktop/components/PlayingTrackInfo.tsx
+++ b/packages/web/src/components/play-bar/desktop/components/PlayingTrackInfo.tsx
@@ -35,6 +35,8 @@ interface PlayingTrackInfoProps {
artistHandle: string
hasShadow: boolean
dominantColor?: Color
+ /** When true, title and artist wrap instead of single-line ellipsis (e.g. visualizer overlay). */
+ fullTrackText?: boolean
onClickTrackTitle: () => void
onClickArtistName: () => void
}
@@ -58,7 +60,8 @@ const PlayingTrackInfo = ({
isTrackUnlisted,
isStreamGated,
hasShadow,
- dominantColor
+ dominantColor,
+ fullTrackText
}: PlayingTrackInfoProps) => {
const { data: track } = useTrack(trackId)
const { hasStreamAccess } = useGatedContentAccess(track)
@@ -107,7 +110,11 @@ const PlayingTrackInfo = ({
}
return (
-
+
import('./VisualizerProvider'))
@@ -39,20 +43,47 @@ const Visualizer = ({
}, [isVisible])
const onToggleVisibility = useCallback(() => {
- // Don't toggle in the case that we are on a route that disables the visualizer
if (NO_VISUALIZER_ROUTES.has(pathname)) return
toggleVisibility()
}, [toggleVisibility, pathname])
const onCloseVisualizer = useCallback(() => {
+ if (!isVisible) return
closeVisualizer()
- }, [closeVisualizer, pathname])
+ }, [closeVisualizer, isVisible])
+
+ const onHistoryForward = useCallback(() => {
+ if (isVisible) ButterchurnVisualizer?.historyForwardOrNext()
+ }, [isVisible])
+
+ const onHistoryBack = useCallback(() => {
+ if (isVisible) ButterchurnVisualizer?.historyBack()
+ }, [isVisible])
+
+ const onRandomPreset = useCallback(() => {
+ if (isVisible) ButterchurnVisualizer?.randomPreset()
+ }, [isVisible])
+
+ const hotkeyMap = useMemo(
+ () => ({
+ 27 /* ESC */: onCloseVisualizer,
+ 86 /* v */: onToggleVisibility,
+ // Space (32) intentionally omitted — conflicts with global play/pause hotkey
+ 190 /* . */: onHistoryForward,
+ 188 /* , */: onHistoryBack,
+ 82 /* r */: onRandomPreset
+ }),
+ [
+ onCloseVisualizer,
+ onToggleVisibility,
+ onHistoryForward,
+ onHistoryBack,
+ onRandomPreset
+ ]
+ )
- useHotkeys({
- 27 /* ESC */: onCloseVisualizer,
- 86 /* v */: onToggleVisibility
- })
+ useHotkeys(hotkeyMap)
return isLoaded ? (
}>
diff --git a/packages/web/src/pages/visualizer/VisualizerProvider.module.css b/packages/web/src/pages/visualizer/VisualizerProvider.module.css
index 669b029f00a..00d404efea2 100644
--- a/packages/web/src/pages/visualizer/VisualizerProvider.module.css
+++ b/packages/web/src/pages/visualizer/VisualizerProvider.module.css
@@ -1,5 +1,9 @@
.visualizer {
- /* Add z-index so it shows search bar and profile page elements. */
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
z-index: 15;
display: none;
opacity: 0;
@@ -12,27 +16,116 @@
display: block;
}
-.closeButtonIcon {
+/* Cursor hidden while top controls are idle-hidden (options closed) */
+.visualizerCursorHidden {
+ cursor: none;
+}
+
+.topControlsWrap {
position: absolute;
- top: 25px;
- left: 25px;
- width: 24px;
- height: 24px;
+ top: 22px;
+ left: 22px;
+ z-index: 1;
+ opacity: 0;
+ transition: opacity 0.25s ease;
+ pointer-events: none;
+ display: flex;
+ align-items: center;
+ background: rgba(255, 255, 255, 0.12);
+ backdrop-filter: blur(20px) saturate(160%);
+ -webkit-backdrop-filter: blur(20px) saturate(160%);
+ border: 1px solid rgba(255, 255, 255, 0.22);
+ border-radius: 999px;
+ box-shadow:
+ 0 2px 16px rgba(0, 0, 0, 0.18),
+ inset 0 1px 0 rgba(255, 255, 255, 0.18);
+ padding: 4px;
+}
+
+.topControlsWrapVisible {
+ opacity: 1;
+ pointer-events: auto;
+}
+
+.pillButton {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 32px;
+ height: 32px;
+ border-radius: 50%;
+ background: transparent;
+ border: none;
cursor: pointer;
+ color: rgba(255, 255, 255, 0.9);
+ transition: background 0.15s ease;
+ padding: 0;
+}
+.pillButton:hover {
+ background: rgba(255, 255, 255, 0.15);
+}
+.pillButton:active {
+ background: rgba(255, 255, 255, 0.25);
}
-.closeButtonIcon:hover {
- transform: scale(1.1);
+.pillIcon {
+ width: 20px;
+ height: 20px;
+ fill: currentColor;
+}
+
+.pillDivider {
+ width: 1px;
+ height: 16px;
+ background: rgba(255, 255, 255, 0.2);
+ margin: 0 4px;
+}
+
+.optionsPopup {
+ margin-top: 12px;
+ background: rgba(18, 18, 22, 0.45) !important;
+ backdrop-filter: blur(24px) saturate(180%) !important;
+ -webkit-backdrop-filter: blur(24px) saturate(180%) !important;
+ border: 1px solid rgba(255, 255, 255, 0.14) !important;
+ box-shadow:
+ 0 12px 40px rgba(0, 0, 0, 0.35),
+ inset 0 1px 0 rgba(255, 255, 255, 0.08) !important;
+ border-radius: 16px !important;
+}
+
+.optionsPanel {
+ padding: 16px 16px 18px;
+ width: 260px;
}
.logoWrapper {
position: absolute;
- top: 9px; /* Want logo to be 25px from top, it has existing top-margin of 16px */
+ top: 25px;
left: 0;
width: 100%;
display: inline-flex;
align-items: center;
justify-content: center;
+ pointer-events: none;
+}
+
+/* White mark + exclusion — visible against vivid Milkdrop output */
+.logoMark {
+ mix-blend-mode: exclusion;
+}
+
+.trackCornerCluster {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ opacity: 0;
+ transition: opacity 0.25s ease;
+ pointer-events: none;
+}
+
+.trackCornerClusterVisible {
+ opacity: 1;
+ pointer-events: auto;
}
.infoOverlayTileShadow {
@@ -55,7 +148,8 @@
display: flex;
flex-direction: column;
align-items: flex-start;
- overflow: hidden;
+ /* Allow wrapped track/artist text to extend below the tile */
+ overflow: visible;
transition:
all ease-in-out 0.18s,
opacity ease-in-out 0.5s;
@@ -74,12 +168,22 @@
width: 208px;
height: 208px;
overflow: hidden;
- border: 2px solid var(--currently-playing-border);
- border-radius: 15px;
+ border-radius: 8px;
box-shadow: 0 5px 16px -2px rgba(85, 84, 89, 0.5) !important;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
+ position: relative;
+}
+
+.artworkWrapper .artwork::after {
+ content: '';
+ position: absolute;
+ inset: 0;
+ border: 1px solid rgba(255, 255, 255, 0.25);
+ border-radius: 8px;
+ mix-blend-mode: exclusion;
+ pointer-events: none;
}
.playing {
cursor: pointer;
@@ -105,3 +209,87 @@
padding: 0px;
max-width: calc(100% - 128px) !important;
}
+
+.panelHeader {
+ margin-bottom: 2px;
+}
+
+.panelTitle {
+ letter-spacing: -0.02em;
+}
+
+/* Horizontal “segmented” transport: prev | next */
+.optionsNavRail {
+ display: flex;
+ flex-direction: row;
+ align-items: stretch;
+ border-radius: 14px;
+ padding: 4px;
+ background: rgba(0, 0, 0, 0.22);
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2);
+}
+
+.optionsNavCell {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 38px;
+ background: transparent;
+ border: none;
+ cursor: pointer;
+ color: rgba(255, 255, 255, 0.9);
+ transition: background 0.15s ease;
+ border-radius: 10px;
+ padding: 0;
+}
+
+.optionsNavCell:hover:not(:disabled) {
+ background: rgba(255, 255, 255, 0.12);
+}
+
+.optionsNavCell:active:not(:disabled) {
+ background: rgba(255, 255, 255, 0.2);
+}
+
+.optionsNavCell:disabled {
+ opacity: 0.3;
+ cursor: not-allowed;
+}
+
+.navIcon {
+ width: 24px;
+ height: 24px;
+ fill: currentColor;
+}
+
+.optionsNavDivider {
+ width: 1px;
+ align-self: stretch;
+ margin: 6px 0;
+ background: rgba(255, 255, 255, 0.12);
+ flex-shrink: 0;
+}
+
+.autoAdvanceBlock {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 16px;
+ padding-top: 14px;
+ margin-top: 2px;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+.autoAdvanceHint {
+ opacity: 0.68;
+ line-height: 1.35;
+ max-width: 200px;
+}
+
+.autoSwitch {
+ flex-shrink: 0;
+ transform: scale(0.94);
+ opacity: 0.95;
+}
diff --git a/packages/web/src/pages/visualizer/VisualizerProvider.tsx b/packages/web/src/pages/visualizer/VisualizerProvider.tsx
index ac6ccd87e92..9f3dd14a5b1 100644
--- a/packages/web/src/pages/visualizer/VisualizerProvider.tsx
+++ b/packages/web/src/pages/visualizer/VisualizerProvider.tsx
@@ -1,44 +1,73 @@
import {
queueSelectors,
- themeSelectors,
playerSelectors
} from '@audius/common/store'
import { Nullable, route } from '@audius/common/utils'
import { Name, SquareSizes, Track } from '@audius/common/models'
-import { useEffect, useState, useCallback } from 'react'
+import {
+ useEffect,
+ useState,
+ useCallback,
+ useRef,
+ type ReactNode
+} from 'react'
import { push } from 'utils/navigation'
import { AppState } from 'store/types'
import { Dispatch } from 'redux'
import { connect } from 'react-redux'
import cn from 'classnames'
-import Visualizer1 from 'utils/visualizer/visualizer-1.js'
+import ButterchurnVisualizer from 'utils/visualizer/butterchurnVisualizer'
import Toast from 'components/toast/Toast'
import styles from './VisualizerProvider.module.css'
-import { shouldShowDark } from 'utils/theme/theme'
import { make, TrackEvent } from 'common/store/analytics/actions'
import DynamicImage from 'components/dynamic-image/DynamicImage'
import PlayingTrackInfo from 'components/play-bar/desktop/components/PlayingTrackInfo'
-import { webglSupported } from './utils'
+import { webgl2Supported } from './utils'
import {
- IconAudiusLogoHorizontal,
- useTheme,
- IconClose as IconRemove
+ IconAudiusLogoHorizontalNew,
+ IconClose as IconRemove,
+ IconCaretLeft,
+ IconCaretRight,
+ IconKebabHorizontal,
+ Flex,
+ Switch,
+ Text,
+ Popup
} from '@audius/harmony'
-import {
- useTrackCoverArt,
- useTrackCoverArtDominantColors
-} from 'hooks/useTrackCoverArt'
+import { useTrackCoverArt } from 'hooks/useTrackCoverArt'
import { audioPlayer } from 'services/audio-player'
import { useCurrentTrack } from '@audius/common/hooks'
import { useUser } from '@audius/common/api'
+import { toggleAutoCycle, toggleAutoHideTrackDetails } from './store/slice'
+import {
+ getIsVisible,
+ getIsAutoCycling,
+ getAutoHideTrackDetails
+} from './store/selectors'
const { profilePage } = route
const { makeGetCurrent } = queueSelectors
const { getPlaying } = playerSelectors
-const { getTheme } = themeSelectors
+
+const messages = {
+ browserUnsupported: (browser: string) =>
+ `Heads Up! Visualizer is not fully supported in ${browser} 😢 Please switch to a different browser like Chrome to view!`,
+ optionsTriggerLabel: 'Open visualizer options',
+ optionsHeading: 'Visualizer Options',
+ previous: 'Previous visualizer',
+ next: 'Next visualizer',
+ autoAdvance: 'Auto-advance',
+ autoAdvanceHint: 'New visualizer every 45s',
+ autoHideTrackDetails: 'Auto-hide Now Playing',
+ autoHideTrackDetailsHint: 'Fades when mouse is idle',
+ closeVisualizer: 'Close visualizer'
+}
+
+/** ms to keep the now-playing corner visible after `currentQueueItem.uid` changes while auto-hide is on */
+const TRACK_CHANGE_NOW_PLAYING_MS = 4500
const Artwork = ({ track }: { track?: Track | null }) => {
const { track_id } = track || {}
@@ -49,41 +78,319 @@ const Artwork = ({ track }: { track?: Track | null }) => {
return
}
+const VisualizerAutoCycleSync = connect((state: AppState) => ({
+ isVisible: getIsVisible(state),
+ isAutoCycling: getIsAutoCycling(state)
+}))(function VisualizerAutoCycleSyncInner({
+ isVisible,
+ isAutoCycling
+}: {
+ isVisible: boolean
+ isAutoCycling: boolean
+}) {
+ useEffect(() => {
+ if (isVisible && isAutoCycling) {
+ ButterchurnVisualizer?.startAutoCycle()
+ } else {
+ ButterchurnVisualizer?.stopAutoCycle()
+ }
+ }, [isVisible, isAutoCycling])
+ return null
+})
+
+const VisualizerOptionsForm = connect(
+ (state: AppState) => ({
+ isAutoCycling: getIsAutoCycling(state),
+ autoHideTrackDetails: getAutoHideTrackDetails(state)
+ }),
+ { toggleAutoCycle, toggleAutoHideTrackDetails }
+)(function VisualizerOptionsFormInner({
+ isAutoCycling,
+ autoHideTrackDetails,
+ toggleAutoCycle: onToggleAutoCycle,
+ toggleAutoHideTrackDetails: onToggleAutoHideTrackDetails,
+ canBack
+}: {
+ isAutoCycling: boolean
+ autoHideTrackDetails: boolean
+ toggleAutoCycle: () => void
+ toggleAutoHideTrackDetails: () => void
+ canBack: boolean
+}) {
+ return (
+
+
+
+ {messages.optionsHeading}
+
+
+
+
+
+
+
+
+
+
+ {messages.autoAdvance}
+
+
+ {messages.autoAdvanceHint}
+
+
+
+ {
+ onToggleAutoCycle()
+ }}
+ aria-label={messages.autoAdvance}
+ />
+
+
+
+
+
+ {messages.autoHideTrackDetails}
+
+
+ {messages.autoHideTrackDetailsHint}
+
+
+
+ {
+ onToggleAutoHideTrackDetails()
+ }}
+ aria-label={messages.autoHideTrackDetails}
+ />
+
+
+
+ )
+})
+
+const VisualizerTrackCorner = connect(
+ (state: AppState) => ({
+ autoHideTrackDetails: getAutoHideTrackDetails(state)
+ })
+)(function VisualizerTrackCornerInner({
+ showControls,
+ nowPlayingPeek,
+ autoHideTrackDetails,
+ children
+}: {
+ showControls: boolean
+ nowPlayingPeek: boolean
+ autoHideTrackDetails: boolean
+ children: ReactNode
+}) {
+ const clusterVisible =
+ !autoHideTrackDetails || showControls || nowPlayingPeek
+ return (
+
+ {children}
+
+ )
+})
+
type VisualizerProps = {
isVisible: boolean
onClose: () => void
} & ReturnType &
ReturnType>
-const webGLExists = webglSupported()
-const messages = (browser: string) => ({
- notSupported: `Heads Up! Visualizer is not fully supported in ${browser} 😢 Please switch to a different browser like Chrome to view!`
-})
+const webGL2Exists = webgl2Supported()
const Visualizer = ({
isVisible,
currentQueueItem,
playing,
- theme,
+ autoHideTrackDetails,
onClose,
recordOpen,
recordClose,
goToRoute
}: VisualizerProps) => {
const [toastText, setToastText] = useState('')
- const { spacing } = useTheme()
- // Used to fadeIn/Out the visualizer (opacity 0 -> 1) through a css class
const [fadeVisualizer, setFadeVisualizer] = useState>(null)
- // Used to show/hide the visualizer (display: block/none) through a css class
const [showVisualizer, setShowVisualizer] = useState(false)
+ const [showControls, setShowControls] = useState(false)
+ const [nowPlayingPeek, setNowPlayingPeek] = useState(false)
+ const [optionsOpen, setOptionsOpen] = useState(false)
+ const [, setHistoryTick] = useState(0)
+ const controlsTimerRef = useRef | null>(null)
+ const trackFlashTimerRef = useRef | null>(null)
+ const prevQueueUidRef = useRef(null)
+
+ const optionsAnchorRef = useRef(null)
+
+ const optionsOpenRef = useRef(optionsOpen)
+ useEffect(() => {
+ optionsOpenRef.current = optionsOpen
+ }, [optionsOpen])
+
+ const revealChromeForMs = useCallback((ms: number) => {
+ setShowControls(true)
+ if (controlsTimerRef.current) clearTimeout(controlsTimerRef.current)
+ controlsTimerRef.current = setTimeout(() => {
+ if (!optionsOpenRef.current) {
+ setShowControls(false)
+ }
+ }, ms)
+ }, [])
+
+ const handleMouseMove = useCallback(() => {
+ revealChromeForMs(3000)
+ }, [revealChromeForMs])
+
+ useEffect(() => {
+ if (!isVisible || !showVisualizer) return
+ const onMove = () => handleMouseMove()
+ window.addEventListener('mousemove', onMove, { passive: true })
+ return () => window.removeEventListener('mousemove', onMove)
+ }, [isVisible, showVisualizer, handleMouseMove])
+
+ useEffect(() => {
+ if (!isVisible || !showVisualizer) return
+ handleMouseMove()
+ }, [isVisible, showVisualizer, handleMouseMove])
+
+ useEffect(() => {
+ if (!optionsOpen && showControls) {
+ handleMouseMove()
+ }
+ }, [optionsOpen, showControls, handleMouseMove])
+
+ useEffect(() => {
+ if (!showControls) {
+ setOptionsOpen(false)
+ }
+ }, [showControls])
+
+ useEffect(() => {
+ if (!isVisible) {
+ prevQueueUidRef.current = null
+ setNowPlayingPeek(false)
+ if (trackFlashTimerRef.current) {
+ clearTimeout(trackFlashTimerRef.current)
+ trackFlashTimerRef.current = null
+ }
+ }
+ }, [isVisible])
const currentTrack = useCurrentTrack()
+
+ useEffect(() => {
+ if (!isVisible || !showVisualizer || !autoHideTrackDetails) return
+ const uid = currentQueueItem?.uid
+ if (!uid) return
+ if (prevQueueUidRef.current === uid) return
+ prevQueueUidRef.current = uid
+
+ setNowPlayingPeek(true)
+ if (trackFlashTimerRef.current) clearTimeout(trackFlashTimerRef.current)
+ trackFlashTimerRef.current = setTimeout(() => {
+ setNowPlayingPeek(false)
+ trackFlashTimerRef.current = null
+ }, TRACK_CHANGE_NOW_PLAYING_MS)
+ }, [
+ isVisible,
+ showVisualizer,
+ autoHideTrackDetails,
+ currentQueueItem?.uid
+ ])
+
+ useEffect(() => {
+ return () => {
+ if (trackFlashTimerRef.current) {
+ clearTimeout(trackFlashTimerRef.current)
+ }
+ }
+ }, [])
+
+ useEffect(() => {
+ ButterchurnVisualizer?.setOnHistoryChange?.(() =>
+ setHistoryTick((t) => t + 1)
+ )
+ return () => ButterchurnVisualizer?.setOnHistoryChange?.(null)
+ }, [])
+
+ useEffect(() => {
+ return () => {
+ if (controlsTimerRef.current) clearTimeout(controlsTimerRef.current)
+ }
+ }, [])
+
+ const canBack = ButterchurnVisualizer?.canHistoryBack() ?? false
+
+ const chromeIdleHidden = !showControls && !optionsOpen
+
const { data: user } = useUser(currentTrack?.owner_id)
useEffect(() => {
if (showVisualizer) {
- let browser
- if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
+ let browser: string | undefined
+ if (!webGL2Exists) {
+ browser = 'your browser'
+ } else if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
browser = 'Safari'
} else if (/MSIE/i.test(navigator.userAgent)) {
browser = 'Internet Explorer'
@@ -91,62 +398,47 @@ const Visualizer = ({
browser = 'your browser'
}
if (browser) {
- setToastText(messages(browser).notSupported)
+ setToastText(messages.browserUnsupported(browser))
}
}
}, [showVisualizer])
- // Update Colors
- const dominantColors = useTrackCoverArtDominantColors({
- trackId: currentTrack?.track_id
- })
- useEffect(() => {
- if (dominantColors !== null) {
- Visualizer1?.setDominantColors(dominantColors)
- }
- }, [isVisible, dominantColors, playing])
+ const audioBindKey = `${audioPlayer?.audio?.currentSrc ?? ''}|${Boolean(audioPlayer?.audioCtx)}`
- // Rebind audio
useEffect(() => {
- if (!audioPlayer) {
- return
- }
- if (playing) {
- if (audioPlayer.audioCtx) {
- Visualizer1?.bind(audioPlayer)
- } else {
- audioPlayer.audio.addEventListener('canplay', () => {
- Visualizer1?.bind(audioPlayer)
- })
- }
+ if (!isVisible || !audioPlayer || !playing) return
+ const player = audioPlayer
+
+ if (player.audioCtx) {
+ ButterchurnVisualizer?.bind(player)
+ } else {
+ const onCanPlay = () => ButterchurnVisualizer?.bind(player)
+ player.audio.addEventListener('canplay', onCanPlay)
+ return () => player.audio.removeEventListener('canplay', onCanPlay)
}
- }, [isVisible, playing])
+ }, [isVisible, playing, audioBindKey])
useEffect(() => {
if (isVisible) {
- const darkMode = shouldShowDark(theme)
- Visualizer1?.show(darkMode)
+ ButterchurnVisualizer?.show()
recordOpen()
setShowVisualizer(true)
- // Fade in after a 50ms delay because setting showVisualizer() and fadeVisualizer() at the
- // same time leads to a race condition resulting in the animation not fading in sometimes
setTimeout(() => {
setFadeVisualizer(true)
}, 50)
} else {
setFadeVisualizer(false)
}
- }, [isVisible, theme])
+ }, [isVisible])
- // On Closing of visualizer -> fadeOut
- // Wait some time before removing the wrapper DOM element to allow time for fading out animation.
useEffect(() => {
if (fadeVisualizer === false) {
- setTimeout(() => {
+ const timer = setTimeout(() => {
setShowVisualizer(false)
- Visualizer1?.hide()
+ ButterchurnVisualizer?.hide()
recordClose()
}, 400)
+ return () => clearTimeout(timer)
}
}, [fadeVisualizer])
@@ -164,9 +456,6 @@ const Visualizer = ({
const renderTrackInfo = () => {
const { uid } = currentQueueItem
- const dominantColor = dominantColors
- ? dominantColors[0]
- : { r: 0, g: 0, b: 0 }
return currentTrack && user && uid ? (
) : (
@@ -201,43 +490,85 @@ const Visualizer = ({
+
-
-
-
-
{
- goToTrackPage()
- onClose()
- }}
+
- {renderTrackInfo()}
+
+
+
+
+
setOptionsOpen(false)}
+ anchorRef={optionsAnchorRef}
+ anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }}
+ transformOrigin={{ horizontal: 'left', vertical: 'top' }}
+ className={styles.optionsPopup}
+ zIndex={20}
+ >
+
+
+
+
+
+
{
+ goToTrackPage()
+ onClose()
+ }}
+ >
+
+
+ {!autoHideTrackDetails || showControls || nowPlayingPeek
+ ? renderTrackInfo()
+ : null}
+
+
{
return {
currentQueueItem,
playing: getPlaying(state),
- theme: getTheme(state)
+ autoHideTrackDetails: getAutoHideTrackDetails(state)
}
}
return mapStateToProps
diff --git a/packages/web/src/pages/visualizer/constants.ts b/packages/web/src/pages/visualizer/constants.ts
new file mode 100644
index 00000000000..9a13391c7be
--- /dev/null
+++ b/packages/web/src/pages/visualizer/constants.ts
@@ -0,0 +1,10 @@
+import { route } from '@audius/common/utils'
+
+const { UPLOAD_PAGE, UPLOAD_ALBUM_PAGE, UPLOAD_PLAYLIST_PAGE } = route
+
+/** Paths where `openVisualizer` / toggle are ignored (e.g. upload flows). */
+export const NO_VISUALIZER_ROUTES = new Set([
+ UPLOAD_PAGE,
+ UPLOAD_ALBUM_PAGE,
+ UPLOAD_PLAYLIST_PAGE
+])
diff --git a/packages/web/src/pages/visualizer/store/selectors.ts b/packages/web/src/pages/visualizer/store/selectors.ts
index 57e2bbfe57d..50e9ecdc9e6 100644
--- a/packages/web/src/pages/visualizer/store/selectors.ts
+++ b/packages/web/src/pages/visualizer/store/selectors.ts
@@ -3,3 +3,9 @@ import { AppState } from 'store/types'
const getBaseState = (state: AppState) => state.application.ui.visualizer
export const getIsVisible = (state: AppState) => getBaseState(state).isVisible
+
+export const getIsAutoCycling = (state: AppState) =>
+ getBaseState(state).isAutoCycling ?? true
+
+export const getAutoHideTrackDetails = (state: AppState) =>
+ getBaseState(state).autoHideTrackDetails ?? true
diff --git a/packages/web/src/pages/visualizer/store/slice.ts b/packages/web/src/pages/visualizer/store/slice.ts
index 4da52b0d8cd..bc290f25698 100644
--- a/packages/web/src/pages/visualizer/store/slice.ts
+++ b/packages/web/src/pages/visualizer/store/slice.ts
@@ -1,6 +1,10 @@
import { createSlice } from '@reduxjs/toolkit'
-const initialState = { isVisible: false }
+const initialState = {
+ isVisible: false,
+ isAutoCycling: true,
+ autoHideTrackDetails: true
+}
const slice = createSlice({
name: 'application/ui/visualizer',
@@ -14,11 +18,22 @@ const slice = createSlice({
},
openVisualizer: (state) => {
state.isVisible = true
+ },
+ toggleAutoCycle: (state) => {
+ state.isAutoCycling = !state.isAutoCycling
+ },
+ toggleAutoHideTrackDetails: (state) => {
+ state.autoHideTrackDetails = !state.autoHideTrackDetails
}
}
})
-export const { toggleVisibility, closeVisualizer, openVisualizer } =
- slice.actions
+export const {
+ toggleVisibility,
+ closeVisualizer,
+ openVisualizer,
+ toggleAutoCycle,
+ toggleAutoHideTrackDetails
+} = slice.actions
export default slice.reducer
diff --git a/packages/web/src/pages/visualizer/utils.ts b/packages/web/src/pages/visualizer/utils.ts
index 435a7f20479..906da11fb25 100644
--- a/packages/web/src/pages/visualizer/utils.ts
+++ b/packages/web/src/pages/visualizer/utils.ts
@@ -10,3 +10,12 @@ export const webglSupported = () => {
return false
}
}
+
+export const webgl2Supported = () => {
+ try {
+ const canvas = document.createElement('canvas')
+ return !!(window.WebGL2RenderingContext && canvas.getContext('webgl2'))
+ } catch (e) {
+ return false
+ }
+}
diff --git a/packages/web/src/types/butterchurn-preset-packs.d.ts b/packages/web/src/types/butterchurn-preset-packs.d.ts
new file mode 100644
index 00000000000..72c607e441b
--- /dev/null
+++ b/packages/web/src/types/butterchurn-preset-packs.d.ts
@@ -0,0 +1,24 @@
+declare module 'butterchurn' {
+ /** UMD / Vite: `import('butterchurn')` resolves to `{ default: Butterchurn }` */
+ export default class Butterchurn {
+ static createVisualizer(
+ audioContext: AudioContext,
+ canvas: HTMLCanvasElement,
+ opts: { width: number; height: number; pixelRatio: number }
+ ): {
+ render: () => void
+ setRendererSize: (w: number, h: number) => void
+ loadPreset: (preset: object, blendTime: number) => void
+ connectAudio: (node: AudioNode) => void
+ disconnectAudio: (node: AudioNode) => void
+ }
+ }
+}
+
+declare module 'butterchurn/lib/isSupported.min' {
+ export default function isSupported(): boolean
+}
+
+declare module 'butterchurn-presets' {
+ export function getPresets(): Record
+}
diff --git a/packages/web/src/utils/visualizer/GLAudioAnalyser.js b/packages/web/src/utils/visualizer/GLAudioAnalyser.js
deleted file mode 100644
index 83269a49f1f..00000000000
--- a/packages/web/src/utils/visualizer/GLAudioAnalyser.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import Analyser from 'web-audio-analyser'
-import Texture from 'gl-texture2d'
-import ndarray from 'ndarray'
-
-export default class GLAudioAnalyser {
- constructor (gl, audio, ctx) {
- this.gl = gl
- this.audio = audio
- this.ctx = ctx
-
- this.waa = Analyser(this.audio, this.ctx, { audible: false })
-
- var size = (this.waa.analyser[0] || this.waa.analyser).frequencyBinCount
-
- this.waveNda = ndarray(new Float32Array(size), [size, 1])
- this.waveTex = Texture(gl, this.waveNda, { float: true })
- this.waveFlt = this.waveNda.data
-
- this.freqNda = ndarray(new Float32Array(size), [size, 1])
- this.freqTex = Texture(gl, this.freqNda, { float: true })
- this.freqFlt = this.freqNda.data
- }
-
- waveform = (channel) => {
- return this.waa.waveform(null, channel)
- }
-
- frequencies = (channel) => {
- return this.waa.frequencies(null, channel)
- }
-
- bindWaveform = (index) => {
- var wave = this.waveform()
- var waveFlt = this.waveFlt
-
- for (var i = 0; i < wave.length; i++) {
- waveFlt[i] = (wave[i] - 128) / 128
- }
-
- var retVal = this.waveTex.bind(index)
- this.waveTex.setPixels(this.waveNda)
- return retVal
- }
-
- bindFrequencies = (index) => {
- var freq = this.frequencies()
- var freqFlt = this.freqFlt
-
- for (var i = 0; i < freq.length; i++) {
- freqFlt[i] = freq[i] / 256
- }
-
- var retVal = this.freqTex.bind(index)
- this.freqTex.setPixels(this.freqNda)
- return retVal
- }
-}
diff --git a/packages/web/src/utils/visualizer/butterchurnVisualizer.ts b/packages/web/src/utils/visualizer/butterchurnVisualizer.ts
new file mode 100644
index 00000000000..1ba7b180c21
--- /dev/null
+++ b/packages/web/src/utils/visualizer/butterchurnVisualizer.ts
@@ -0,0 +1,429 @@
+// Milkdrop (butterchurn): singleton canvas, lazy `import()` until bind/show.
+
+import { loadPresets, getPresetKeys, getRandomPresetKey } from './presets'
+
+const BLEND_TIME = 2.7 // seconds for smooth preset transitions
+const AUTO_CYCLE_MS = 45000 // auto-advance interval
+const PRESET_HISTORY_MAX = 10
+
+type AudioPlayerLike = {
+ source: MediaElementAudioSourceNode | null
+ audioCtx: AudioContext | null
+}
+
+type PresetMap = Record
+
+type ButterchurnDefault = (typeof import('butterchurn'))['default']
+
+let ButterchurnClass: ButterchurnDefault | null = null
+let libLoadPromise: Promise | null = null
+
+function resolveButterchurnDefault(
+ bcMod: typeof import('butterchurn')
+): ButterchurnDefault | null {
+ const mod = bcMod as { default?: ButterchurnDefault } & Partial
+ const ctor = mod.default ?? (mod as unknown as ButterchurnDefault)
+ return typeof ctor?.createVisualizer === 'function' ? ctor : null
+}
+
+/** Singleflight load; resolves false if import fails or `isSupported` is false */
+function loadButterchurnLib(): Promise {
+ if (typeof window === 'undefined') return Promise.resolve(false)
+ if (libLoadPromise) return libLoadPromise
+ libLoadPromise = (async () => {
+ try {
+ const [bcMod, { default: isSup }] = await Promise.all([
+ import('butterchurn'),
+ import('butterchurn/lib/isSupported.min')
+ ])
+ ButterchurnClass = resolveButterchurnDefault(bcMod)
+ if (!ButterchurnClass) {
+ return false
+ }
+ try {
+ return Boolean(isSup())
+ } catch {
+ return false
+ }
+ } catch {
+ return false
+ }
+ })()
+ return libLoadPromise
+}
+
+let canvas: HTMLCanvasElement | null = null
+let visualizer: any = null
+let animFrameId: number | null = null
+let autoCycleTimer: ReturnType | null = null
+let presets: PresetMap | null = null
+let presetKeys: string[] = []
+let currentPresetIndex = -1
+let currentPresetName: string | null = null
+let connectedAudioNode: AudioNode | null = null
+/** Recreate the visualizer when this diverges from `audioPlayer.audioCtx` */
+let boundAudioContext: AudioContext | null = null
+let presetHistoryPast: string[] = []
+let presetHistoryFuture: string[] = []
+let onHistoryChange: (() => void) | null = null
+
+/** Invalidates in-flight `bind` continuations after `loadButterchurnLib` (shared promise). */
+let bindGeneration = 0
+
+function sourceBelongsToContext(
+ source: MediaElementAudioSourceNode,
+ ctx: AudioContext
+): boolean {
+ return source.context === ctx
+}
+
+function trimHistory(arr: string[]) {
+ while (arr.length > PRESET_HISTORY_MAX) {
+ arr.shift()
+ }
+}
+
+function notifyHistory() {
+ onHistoryChange?.()
+}
+
+function clearPresetHistory() {
+ presetHistoryPast = []
+ presetHistoryFuture = []
+ notifyHistory()
+}
+
+function createCanvas(): HTMLCanvasElement {
+ const c = document.createElement('canvas')
+ c.style.position = 'fixed'
+ c.style.top = '0'
+ c.style.left = '0'
+ c.style.width = '100vw'
+ c.style.height = '100vh'
+ c.style.pointerEvents = 'none'
+ c.style.display = 'none'
+ return c
+}
+
+function handleResize() {
+ if (!canvas || !visualizer) return
+ const w = canvas.clientWidth || window.innerWidth
+ const h = canvas.clientHeight || window.innerHeight
+ const width = w * window.devicePixelRatio
+ const height = h * window.devicePixelRatio
+ if (!width || !height) return
+ canvas.width = width
+ canvas.height = height
+ visualizer.setRendererSize(width, height)
+}
+
+function renderLoop() {
+ if (visualizer) {
+ visualizer.render()
+ }
+ animFrameId = requestAnimationFrame(renderLoop)
+}
+
+function loadPresetByIndex(index: number, blendTime: number) {
+ if (!visualizer || !presets || presetKeys.length === 0) return
+ const wrappedIndex =
+ ((index % presetKeys.length) + presetKeys.length) % presetKeys.length
+ currentPresetIndex = wrappedIndex
+ currentPresetName = presetKeys[wrappedIndex]
+ try {
+ visualizer.loadPreset(presets[currentPresetName], blendTime)
+ } catch {
+ // Bad or incompatible preset data — skip without taking down the app
+ }
+}
+
+async function initPresets() {
+ if (!presets) {
+ presets = await loadPresets()
+ presetKeys = getPresetKeys(presets)
+ }
+}
+
+function teardownVisualizerForNewAudioContext() {
+ if (animFrameId !== null) {
+ cancelAnimationFrame(animFrameId)
+ animFrameId = null
+ }
+ if (visualizer && connectedAudioNode) {
+ try {
+ visualizer.disconnectAudio(connectedAudioNode)
+ } catch {
+ // Stale node
+ }
+ }
+ visualizer = null
+ connectedAudioNode = null
+ boundAudioContext = null
+}
+
+function createVisualizerWithAudioContext(audioCtx: AudioContext) {
+ if (!canvas || !ButterchurnClass) return
+
+ const w = canvas.clientWidth || window.innerWidth
+ const h = canvas.clientHeight || window.innerHeight
+ const width = Math.max(w * window.devicePixelRatio, 800)
+ const height = Math.max(h * window.devicePixelRatio, 600)
+ canvas.width = width
+ canvas.height = height
+
+ visualizer = ButterchurnClass.createVisualizer(audioCtx, canvas, {
+ width,
+ height,
+ pixelRatio: window.devicePixelRatio || 1
+ })
+ boundAudioContext = audioCtx
+
+ if (connectedAudioNode) {
+ if (
+ connectedAudioNode instanceof MediaElementAudioSourceNode &&
+ sourceBelongsToContext(connectedAudioNode, audioCtx)
+ ) {
+ try {
+ visualizer.connectAudio(connectedAudioNode)
+ } catch {
+ /* cross-context or disposed node */
+ }
+ }
+ }
+
+ if (canvas.style.display !== 'none' && animFrameId === null) {
+ animFrameId = requestAnimationFrame(renderLoop)
+ }
+
+ initPresets()
+ .then(() => {
+ if (presets && presetKeys.length > 0 && visualizer) {
+ const key = getRandomPresetKey(presets, currentPresetName)
+ const idx = presetKeys.indexOf(key)
+ loadPresetByIndex(idx >= 0 ? idx : 0, 0)
+ }
+ })
+ .catch(() => {
+ // Dynamic import / preset pack failed
+ })
+}
+
+function applyShow() {
+ if (!canvas) {
+ canvas = createCanvas()
+ }
+
+ const visWrapper = document.querySelector('.visualizer')
+ if (visWrapper && !visWrapper.contains(canvas)) {
+ visWrapper.appendChild(canvas)
+ }
+
+ canvas.style.display = 'block'
+
+ window.addEventListener('resize', handleResize)
+ handleResize()
+
+ if (visualizer && animFrameId === null) {
+ animFrameId = requestAnimationFrame(renderLoop)
+ }
+}
+
+function show() {
+ void loadButterchurnLib().then((ok) => {
+ if (!ok) return
+ applyShow()
+ })
+}
+
+function hide() {
+ try {
+ if (animFrameId !== null) {
+ cancelAnimationFrame(animFrameId)
+ animFrameId = null
+ }
+ stopAutoCycle()
+ window.removeEventListener('resize', handleResize)
+ clearPresetHistory()
+
+ if (canvas) {
+ canvas.style.display = 'none'
+ }
+ } catch {
+ /* hide is best-effort */
+ }
+}
+
+function bindAfterLibLoaded(
+ audioPlayer: AudioPlayerLike,
+ generation: number
+) {
+ if (generation !== bindGeneration) return
+ if (!ButterchurnClass) return
+ const ctx = audioPlayer.audioCtx
+ if (!ctx) return
+
+ const nextSource = audioPlayer.source
+ if (!nextSource) return
+
+ if (
+ visualizer != null &&
+ (boundAudioContext == null || boundAudioContext !== ctx)
+ ) {
+ teardownVisualizerForNewAudioContext()
+ } else if (
+ visualizer == null &&
+ boundAudioContext != null &&
+ boundAudioContext !== ctx
+ ) {
+ boundAudioContext = null
+ connectedAudioNode = null
+ }
+
+ if (
+ visualizer &&
+ connectedAudioNode &&
+ connectedAudioNode !== nextSource
+ ) {
+ try {
+ visualizer.disconnectAudio(connectedAudioNode)
+ } catch {
+ // Stale node after track change / browser quirks
+ }
+ }
+
+ if (!sourceBelongsToContext(nextSource, ctx)) {
+ return
+ }
+
+ connectedAudioNode = nextSource
+
+ if (!canvas) {
+ canvas = createCanvas()
+ }
+
+ if (!visualizer) {
+ createVisualizerWithAudioContext(ctx)
+ return
+ }
+
+ if (boundAudioContext !== ctx) {
+ teardownVisualizerForNewAudioContext()
+ connectedAudioNode = nextSource
+ createVisualizerWithAudioContext(ctx)
+ return
+ }
+
+ try {
+ visualizer.connectAudio(connectedAudioNode)
+ } catch {
+ teardownVisualizerForNewAudioContext()
+ connectedAudioNode = nextSource
+ createVisualizerWithAudioContext(ctx)
+ }
+}
+
+function bind(audioPlayer: AudioPlayerLike) {
+ const generation = ++bindGeneration
+ void loadButterchurnLib().then((ok) => {
+ if (!ok || generation !== bindGeneration) return
+ bindAfterLibLoaded(audioPlayer, generation)
+ })
+}
+
+function stop() {
+ if (animFrameId !== null) {
+ cancelAnimationFrame(animFrameId)
+ animFrameId = null
+ }
+ stopAutoCycle()
+}
+
+function pushCurrentOntoPastAndClearFuture() {
+ if (currentPresetName) {
+ presetHistoryPast.push(currentPresetName)
+ trimHistory(presetHistoryPast)
+ }
+ presetHistoryFuture = []
+}
+
+function randomPreset() {
+ if (!visualizer || !presets || presetKeys.length === 0) return
+ pushCurrentOntoPastAndClearFuture()
+ const key = getRandomPresetKey(presets, currentPresetName)
+ const idx = presetKeys.indexOf(key)
+ loadPresetByIndex(idx >= 0 ? idx : 0, BLEND_TIME)
+ notifyHistory()
+}
+
+function historyBack() {
+ if (!visualizer || presetHistoryPast.length === 0) return
+ const key = presetHistoryPast.pop()!
+ if (currentPresetName) {
+ presetHistoryFuture.push(currentPresetName)
+ trimHistory(presetHistoryFuture)
+ }
+ const idx = presetKeys.indexOf(key)
+ if (idx >= 0) loadPresetByIndex(idx, BLEND_TIME)
+ notifyHistory()
+}
+
+function historyForward() {
+ if (!visualizer || presetHistoryFuture.length === 0) return
+ const key = presetHistoryFuture.pop()!
+ if (currentPresetName) {
+ presetHistoryPast.push(currentPresetName)
+ trimHistory(presetHistoryPast)
+ }
+ const idx = presetKeys.indexOf(key)
+ if (idx >= 0) loadPresetByIndex(idx, BLEND_TIME)
+ notifyHistory()
+}
+
+function historyForwardOrNext() {
+ if (presetHistoryFuture.length > 0) {
+ historyForward()
+ } else {
+ randomPreset()
+ }
+}
+
+function canHistoryBack() {
+ return presetHistoryPast.length > 0
+}
+
+function startAutoCycle() {
+ stopAutoCycle()
+ autoCycleTimer = setInterval(() => {
+ randomPreset()
+ }, AUTO_CYCLE_MS)
+}
+
+function stopAutoCycle() {
+ if (autoCycleTimer !== null) {
+ clearInterval(autoCycleTimer)
+ autoCycleTimer = null
+ }
+}
+
+function setOnHistoryChange(cb: (() => void) | null) {
+ onHistoryChange = cb
+}
+
+const ButterchurnVisualizer =
+ typeof window === 'undefined'
+ ? null
+ : {
+ show,
+ hide,
+ bind,
+ stop,
+ randomPreset,
+ historyBack,
+ historyForwardOrNext,
+ canHistoryBack,
+ startAutoCycle,
+ stopAutoCycle,
+ setOnHistoryChange
+ }
+
+export default ButterchurnVisualizer
diff --git a/packages/web/src/utils/visualizer/gl-line-3d.js b/packages/web/src/utils/visualizer/gl-line-3d.js
deleted file mode 100644
index 74a6b305016..00000000000
--- a/packages/web/src/utils/visualizer/gl-line-3d.js
+++ /dev/null
@@ -1,154 +0,0 @@
-import createBuffer from 'gl-buffer'
-import createVAO from 'gl-vao'
-
-import pack from 'array-pack-2d'
-import identity from 'gl-mat4/identity'
-import clamp from 'clamp'
-
-export default function (gl, shader, path) {
- if (!shader) throw new TypeError('need to pass a shader')
- shader.bind()
- shader.attributes.position.location = 0
- shader.attributes.direction.location = 1
- shader.attributes.next.location = 2
- shader.attributes.previous.location = 3
-
- // each vertex has the following attribs:
- // vec3 position //current point on line
- // vec3 previous //previous point on line
- // vec3 next //next point on line
- // float direction //a sign, -1 or 1
-
- // we submit two vertices per point so that
- // we can expand them away from each other
- let indexBuffer = emptyBuffer(Uint16Array, gl.ELEMENT_ARRAY_BUFFER)
- let positionBuffer = emptyBuffer()
- let previousBuffer = emptyBuffer()
- let nextBuffer = emptyBuffer()
- let directionBuffer = emptyBuffer()
- let count = 0
- let vao = createVAO(gl)
-
- // default uniforms
- let model = identity([])
- let projection = identity([])
- let view = identity([])
- let thickness = 1
- let aspect = 1
- let miter = 0
- let color = [1, 1, 1]
-
- if (path) update(path)
-
- return {
- update,
- model,
- view,
- projection,
- thickness,
- color,
- miter,
- aspect,
-
- draw() {
- shader.bind()
- shader.uniforms.model = this.model
- shader.uniforms.view = this.view
- shader.uniforms.projection = this.projection
- shader.uniforms.color = this.color
- shader.uniforms.thickness = this.thickness
- shader.uniforms.aspect = this.aspect
- shader.uniforms.miter = this.miter
-
- vao.bind()
- vao.draw(gl.TRIANGLES, count)
- vao.unbind()
- }
- }
-
- // in real-world you wouldn't want to create so
- // many typed arrays per frame
- function update(path) {
- // ensure 3 component vectors
- if (path.length > 0 && path[0].length !== 3) {
- path = path.map((point) => {
- let [x, y, z] = point
- return [x || 0, y || 0, z || 0]
- })
- }
-
- count = (path.length - 1) * 6
-
- // each pair has a mirrored direction
- let direction = duplicate(
- path.map((x) => 1),
- true
- )
- // now get the positional data for each vertex
- let positions = duplicate(path)
- let previous = duplicate(path.map(relative(-1)))
- let next = duplicate(path.map(relative(+1)))
- let indexUint16 = createIndices(path.length)
-
- // now update the buffers with float/short data
- positionBuffer.update(pack(positions))
- previousBuffer.update(pack(previous))
- nextBuffer.update(pack(next))
- directionBuffer.update(pack(direction))
- indexBuffer.update(indexUint16)
-
- vao.update(
- [
- { buffer: positionBuffer, size: 3 },
- { buffer: directionBuffer, size: 1 },
- { buffer: nextBuffer, size: 3 },
- { buffer: previousBuffer, size: 3 }
- ],
- indexBuffer
- )
- }
-
- function emptyBuffer(ArrayType, type) {
- ArrayType = ArrayType || Float32Array
- return createBuffer(
- gl,
- new ArrayType(),
- type || gl.ARRAY_BUFFER,
- gl.STATIC_DRAW
- )
- }
-}
-
-function relative(offset) {
- return (point, index, list) => {
- index = clamp(index + offset, 0, list.length - 1)
- return list[index]
- }
-}
-
-function duplicate(nestedArray, mirror) {
- var out = []
- nestedArray.forEach((x) => {
- let x1 = mirror ? -x : x
- out.push(x1, x)
- })
- return out
-}
-
-// counter-clockwise indices but prepared for duplicate vertices
-function createIndices(length) {
- let indices = new Uint16Array(length * 6)
- let c = 0
- let index = 0
- for (let j = 0; j < length; j++) {
- let i = index
- indices[c++] = i + 0
- indices[c++] = i + 1
- indices[c++] = i + 2
- indices[c++] = i + 2
- indices[c++] = i + 1
- indices[c++] = i + 3
- index += 2
- }
- return indices
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/.npmignore b/packages/web/src/utils/visualizer/gl-vignette-background/.npmignore
deleted file mode 100644
index 50c74582d56..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/.npmignore
+++ /dev/null
@@ -1,6 +0,0 @@
-node_modules
-*.log
-.DS_Store
-bundle.js
-test
-test.js
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/LICENSE.md b/packages/web/src/utils/visualizer/gl-vignette-background/LICENSE.md
deleted file mode 100644
index 927a999b6ee..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/LICENSE.md
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-Copyright (c) 2014 Matt DesLauriers
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/README.md b/packages/web/src/utils/visualizer/gl-vignette-background/README.md
deleted file mode 100644
index b3f68fe3c04..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/README.md
+++ /dev/null
@@ -1,106 +0,0 @@
-# gl-vignette-background
-
-[](http://github.com/badges/stability-badges)
-
-Creates a soft gradient background with noise, suitable for your sweet WebGL demos!
-
-
-
-```js
-var createBackground = require('gl-vignette-background')
-
-var width = 490,
- height = 400
-
-var gl = require('webgl-context')({
- width: width
- height: height
-})
-
-require('domready')(function() {
- gl.clear(gl.COLOR_BUFFER_BIT)
- gl.viewport(0, 0, width, height)
-
- //create our quad
- var bg = createBackground(gl)
-
- var radius = width * 1.05
-
- //optional styling
- bg.style({
- scale: [ 1/width * radius, 1/height * radius],
- aspect: 1,
- color1: [1, 1, 1],
- color2: [40/255, 56/255, 68/255], //rgb expressed in 0.0 - 1.0
- smoothing: [ -0.5, 1.0 ],
- noiseAlpha: 0.07,
- offset: [ -0.05, -0.15 ]
- })
-
- //draw the full-screen quad
- bg.draw()
-
- //place canvas on DOM
- document.body.appendChild(gl.canvas)
-})
-```
-
-See [demo/index.js](demo/index.js) for a full-screen example.
-
-## Usage
-
-[](https://nodei.co/npm/gl-vignette-background/)
-
-Inherits functions and members from [gl-quad](https://www.npmjs.org/package/gl-quad).
-
-## functions
-
-### ```var bg = createBackground(gl [, style])```
-
-Creates a background quad with some default options (bright and soft white gradient in the center, using the current canvas size for aspect ratio).
-
-You can provide `style` to override some defaults, e.g:
-
-```js
-bg = createBackground(gl {
- color1: [ 1, 0, 0]
-})
-```
-
-See [styling](#styling)
-
-
-### ```bg.style(options)```
-
-Style the background with the given overrides in the specified object. Acts the same as the styling options passed to constructor.
-
-### ```bg.draw()```
-
-Draws the quad.
-
-### ```bg.dispose()```
-
-Disposes the quad and its shader.
-
-## styling
-
-The following options are stylable:
-
-- `aspect`: a float for aspect ratio; typically set whenever the background size changes
-- `smoothing`: a vec2 representing the low and high end for the smooth function
-- `noiseAlpha`: the opacity of the random noise (set to zero to disable)
-- `coloredNoise`: a bool for whether noise is enabled, `1` for chromatic, `0` for monochrome
-- `offset`: the position vec2 offset, normalized. `[0, 0]` is center (default), `[-0.5, -0.5]` will be top left
-- `scale`: the vec2 amount to scale the gradient, normalized. default is `[1, 1]`
-- `color1`: the first `[r, g, b]` color in the gradient, default white
-- `color2`: the second `[r, g, b]` color in the gradient, default black
-
-## running the demo
-
-Install [beefy](https://www.npmjs.org/package/beefy) and run:
-
-```beefy demo/index.js --open```
-
-## License
-
-MIT, see [LICENSE.md](http://github.com/mattdesl/gl-vignette-background/blob/master/LICENSE.md) for details.
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/create-shader.js b/packages/web/src/utils/visualizer/gl-vignette-background/create-shader.js
deleted file mode 100644
index 3a134fa8dbc..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/create-shader.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { create } from 'gl-shader-core'
-import { cloneDeep } from 'lodash'
-
-var indices = [
- 'position',
- 'normal',
- 'color'
-]
-var tex = 'texcoord'
-
-function idx(name) {
- var i = indices.indexOf(name)
- if (i !== -1)
- return i
- if (name.indexOf(tex) === 0)
- return parseInt(name.substring(tex.length), 10)|0 + 3
- return undefined
-}
-
-function remap(attribute) {
- attribute.location = idx(attribute.name)
-}
-
-module.exports = function(shader) {
- return function(gl) {
- var s = cloneDeep(shader)
- s.attributes.forEach(remap)
- return create(gl, s.vertex, s.fragment, s.uniforms, s.attributes)
- }
-}
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/demo/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/demo/index.js
deleted file mode 100644
index 30678c842e4..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/demo/index.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var shader2
-
-var createBackground = require('../')
-var colorString = require('color-string')
-
-var background
-
-require('canvas-testbed')(render, start, {
- context: 'webgl',
- once: true
-})
-
-function rgb(str) {
- return colorString.getRgb(str).map(function(a) {
- return a/255
- })
-}
-
-function render(gl, width, height) {
- gl.clear(gl.COLOR_BUFFER_BIT)
-
- var radius = Math.max(width, height) * 1.05
- background.style({
- scale: [ 1/width * radius, 1/height * radius],
- aspect: 1,
- color1: rgb('#ffffff'),
- color2: rgb('#283844'),
- smoothing: [ -0.5, 1.0 ],
- noiseAlpha: 0.07,
- offset: [ -0.05, -0.15 ]
- })
- background.draw()
-}
-
-function start(gl) {
- background = createBackground(gl)
-}
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/frag.glsl b/packages/web/src/utils/visualizer/gl-vignette-background/frag.glsl
deleted file mode 100644
index 64a213e6457..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/frag.glsl
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifdef GL_ES
-precision mediump float;
-#endif
-
-varying vec2 vUv;
-
-#pragma glslify: random = require(glsl-random)
-
-uniform float aspect;
-uniform vec2 scale;
-uniform vec2 offset;
-uniform bool coloredNoise;
-
-uniform vec2 smoothing;
-uniform float noiseAlpha;
-
-uniform vec3 color1;
-uniform vec3 color2;
-
-vec3 BlendOverlay(vec3 base, vec3 blend) {
- return vec3(
- base.r < 0.5 ? (2.0 * base.r * blend.r) : (1.0 - 2.0 * (1.0 - base.r) * (1.0 - blend.r)),
- base.g < 0.5 ? (2.0 * base.g * blend.g) : (1.0 - 2.0 * (1.0 - base.g) * (1.0 - blend.g)),
- base.b < 0.5 ? (2.0 * base.b * blend.b) : (1.0 - 2.0 * (1.0 - base.b) * (1.0 - blend.b))
- );
-}
-
-//TODO: textures, alpha ?
-
-void main() {
- vec2 pos = vUv;
- pos -= 0.5;
-
- pos.x *= aspect;
- pos /= scale;
- pos -= offset;
-
- float dist = length(pos);
- dist = smoothstep(smoothing.x, smoothing.y, 1.-dist);
-
- vec4 color = vec4(1.0);
- color.rgb = mix(color2, color1, dist);
-
- if (noiseAlpha > 0.0) {
- vec3 noise = coloredNoise ? vec3(random(vUv * 1.5), random(vUv * 2.5), random(vUv)) : vec3(random(vUv));
- color.rgb = mix(color.rgb, BlendOverlay(color.rgb, noise), noiseAlpha);
- }
- gl_FragColor = color;
-}
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/index.js
deleted file mode 100644
index d46b951b82b..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/index.js
+++ /dev/null
@@ -1,79 +0,0 @@
-// Required to do this in order to play with webpack & create-react-app without ejecting
-import vertexShader from './vert.glsl'
-import fragmentShader from './frag.glsl'
-
-//var glslify = require('glslify')
-import Quad from 'gl-quad'
-import inherits from 'inherits'
-
-import createShader from 'gl-shader'
-
-import toIdentity from 'gl-mat4/identity'
-import mat4 from 'gl-mat4/create'
-
-function Vignette(gl, options) {
- if (!(this instanceof Vignette)) return new Vignette(gl, options)
- Quad.call(this, gl)
- options = options || {}
- this.gl = gl
-
- var shader = options.shader
-
- if (!shader) {
- this.defaultShader = createShader(gl, vertexShader, fragmentShader)
-
- //defaultShader(gl)
- }
- this.shader = shader || this.defaultShader
-
- var identity = toIdentity(mat4())
-
- //some defaults
- this.style({
- aspect: gl.canvas.width / gl.canvas.height,
- smoothing: [-0.4, 0.8],
- noiseAlpha: 0.04,
- coloredNoise: true,
- offset: [0, 0],
- color1: [1, 1, 1],
- color2: [0, 0, 0],
- scale: [1.0, 1.0],
- projection: identity,
- view: identity,
- model: identity
- })
-
- //mix in user options
- if (options) this.style(options)
-}
-
-inherits(Vignette, Quad)
-
-Vignette.prototype.style = function (options) {
- if (!options) return
-
- this.shader.bind()
- var uniforms = this.shader.uniforms
- for (var k in options) {
- if (
- options.hasOwnProperty(k) &&
- (options[k] || typeof options[k] === 'number')
- ) {
- uniforms[k] = options[k]
- }
- }
-}
-
-Vignette.prototype.draw = function () {
- Quad.prototype.draw.call(this, this.shader)
-}
-
-Vignette.prototype.dispose = function () {
- if (this.defaultShader) {
- this.defaultShader.dispose()
- this.defaultShader = undefined
- }
- Quad.prototype.dispose.call(this)
-}
-
-export default Vignette
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/esparse b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/esparse
deleted file mode 120000
index 7423b18b24e..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/esparse
+++ /dev/null
@@ -1 +0,0 @@
-../esprima/bin/esparse.js
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/esvalidate b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/esvalidate
deleted file mode 120000
index 16069effbc9..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/esvalidate
+++ /dev/null
@@ -1 +0,0 @@
-../esprima/bin/esvalidate.js
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/glslify b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/glslify
deleted file mode 120000
index 73d1fc5899a..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/.bin/glslify
+++ /dev/null
@@ -1 +0,0 @@
-../glslify/bin/glslify
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/ChangeLog b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/ChangeLog
deleted file mode 100644
index dc24f2f93e2..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/ChangeLog
+++ /dev/null
@@ -1,77 +0,0 @@
-2015-03-03: Version 1.2.5
-
- * Fix scanning of implicit octal literals (issue 565)
-
-2015-02-05: Version 1.2.4
-
- * Fix parsing of LeftHandSideExpression in ForInStatement (issue 560)
- * Fix the handling of automatic semicolon insertion (issue 574)
-
-2015-01-18: Version 1.2.3
-
- * Fix division by this (issue 616)
-
-2014-05-18: Version 1.2.2
-
- * Fix duplicated tokens when collecting comments (issue 537)
-
-2014-05-04: Version 1.2.1
-
- * Ensure that Program node may still have leading comments (issue 536)
-
-2014-04-29: Version 1.2.0
-
- * Fix semicolon handling for expression statement (issue 462, 533)
- * Disallow escaped characters in regular expression flags (issue 503)
- * Performance improvement for location tracking (issue 520)
- * Improve the speed of comment attachment (issue 522)
-
-2014-03-26: Version 1.1.1
-
- * Fix token handling of forward slash after an array literal (issue 512)
-
-2014-03-23: Version 1.1.0
-
- * Optionally attach comments to the owning syntax nodes (issue 197)
- * Simplify binary parsing with stack-based shift reduce (issue 352)
- * Always include the raw source of literals (issue 376)
- * Add optional input source information (issue 386)
- * Tokenizer API for pure lexical scanning (issue 398)
- * Improve the web site and its online demos (issue 337, 400, 404)
- * Performance improvement for location tracking (issue 417, 424)
- * Support HTML comment syntax (issue 451)
- * Drop support for legacy browsers (issue 474)
-
-2013-08-27: Version 1.0.4
-
- * Minimize the payload for packages (issue 362)
- * Fix missing cases on an empty switch statement (issue 436)
- * Support escaped ] in regexp literal character classes (issue 442)
- * Tolerate invalid left-hand side expression (issue 130)
-
-2013-05-17: Version 1.0.3
-
- * Variable declaration needs at least one declarator (issue 391)
- * Fix benchmark's variance unit conversion (issue 397)
- * IE < 9: \v should be treated as vertical tab (issue 405)
- * Unary expressions should always have prefix: true (issue 418)
- * Catch clause should only accept an identifier (issue 423)
- * Tolerate setters without parameter (issue 426)
-
-2012-11-02: Version 1.0.2
-
- Improvement:
-
- * Fix esvalidate JUnit output upon a syntax error (issue 374)
-
-2012-10-28: Version 1.0.1
-
- Improvements:
-
- * esvalidate understands shebang in a Unix shell script (issue 361)
- * esvalidate treats fatal parsing failure as an error (issue 361)
- * Reduce Node.js package via .npmignore (issue 362)
-
-2012-10-22: Version 1.0.0
-
- Initial release.
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/LICENSE.BSD b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/LICENSE.BSD
deleted file mode 100644
index 3e580c355a9..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/LICENSE.BSD
+++ /dev/null
@@ -1,19 +0,0 @@
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/README.md b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/README.md
deleted file mode 100644
index e76d7640cb4..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-**Esprima** ([esprima.org](http://esprima.org), BSD license) is a high performance,
-standard-compliant [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)
-parser written in ECMAScript (also popularly known as
-[JavaScript](http://en.wikipedia.org/wiki/JavaScript>JavaScript)).
-Esprima is created and maintained by [Ariya Hidayat](http://twitter.com/ariyahidayat),
-with the help of [many contributors](https://github.com/ariya/esprima/contributors).
-
-### Features
-
-- Full support for ECMAScript 5.1 ([ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm))
-- Sensible [syntax tree format](http://esprima.org/doc/index.html#ast) compatible with Mozilla
-[Parser AST](https://developer.mozilla.org/en/SpiderMonkey/Parser_API)
-- Optional tracking of syntax node location (index-based and line-column)
-- Heavily tested (> 650 [unit tests](http://esprima.org/test/) with [full code coverage](http://esprima.org/test/coverage.html))
-- [Partial support](http://esprima.org/doc/es6.html) for ECMAScript 6
-
-Esprima serves as a **building block** for some JavaScript
-language tools, from [code instrumentation](http://esprima.org/demo/functiontrace.html)
-to [editor autocompletion](http://esprima.org/demo/autocomplete.html).
-
-Esprima runs on many popular web browsers, as well as other ECMAScript platforms such as
-[Rhino](http://www.mozilla.org/rhino), [Nashorn](http://openjdk.java.net/projects/nashorn/), and [Node.js](https://npmjs.org/package/esprima).
-
-For more information, check the web site [esprima.org](http://esprima.org).
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/bin/esparse.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/bin/esparse.js
deleted file mode 100755
index 560366695a1..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/bin/esparse.js
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/env node
-/*
- Copyright (C) 2012 Ariya Hidayat
- Copyright (C) 2011 Ariya Hidayat
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*jslint sloppy:true node:true rhino:true */
-
-var fs, esprima, fname, content, options, syntax;
-
-if (typeof require === 'function') {
- fs = require('fs');
- esprima = require('esprima');
-} else if (typeof load === 'function') {
- try {
- load('esprima.js');
- } catch (e) {
- load('../esprima.js');
- }
-}
-
-// Shims to Node.js objects when running under Rhino.
-if (typeof console === 'undefined' && typeof process === 'undefined') {
- console = { log: print };
- fs = { readFileSync: readFile };
- process = { argv: arguments, exit: quit };
- process.argv.unshift('esparse.js');
- process.argv.unshift('rhino');
-}
-
-function showUsage() {
- console.log('Usage:');
- console.log(' esparse [options] file.js');
- console.log();
- console.log('Available options:');
- console.log();
- console.log(' --comment Gather all line and block comments in an array');
- console.log(' --loc Include line-column location info for each syntax node');
- console.log(' --range Include index-based range for each syntax node');
- console.log(' --raw Display the raw value of literals');
- console.log(' --tokens List all tokens in an array');
- console.log(' --tolerant Tolerate errors on a best-effort basis (experimental)');
- console.log(' -v, --version Shows program version');
- console.log();
- process.exit(1);
-}
-
-if (process.argv.length <= 2) {
- showUsage();
-}
-
-options = {};
-
-process.argv.splice(2).forEach(function (entry) {
-
- if (entry === '-h' || entry === '--help') {
- showUsage();
- } else if (entry === '-v' || entry === '--version') {
- console.log('ECMAScript Parser (using Esprima version', esprima.version, ')');
- console.log();
- process.exit(0);
- } else if (entry === '--comment') {
- options.comment = true;
- } else if (entry === '--loc') {
- options.loc = true;
- } else if (entry === '--range') {
- options.range = true;
- } else if (entry === '--raw') {
- options.raw = true;
- } else if (entry === '--tokens') {
- options.tokens = true;
- } else if (entry === '--tolerant') {
- options.tolerant = true;
- } else if (entry.slice(0, 2) === '--') {
- console.log('Error: unknown option ' + entry + '.');
- process.exit(1);
- } else if (typeof fname === 'string') {
- console.log('Error: more than one input file.');
- process.exit(1);
- } else {
- fname = entry;
- }
-});
-
-if (typeof fname !== 'string') {
- console.log('Error: no input file.');
- process.exit(1);
-}
-
-// Special handling for regular expression literal since we need to
-// convert it to a string literal, otherwise it will be decoded
-// as object "{}" and the regular expression would be lost.
-function adjustRegexLiteral(key, value) {
- if (key === 'value' && value instanceof RegExp) {
- value = value.toString();
- }
- return value;
-}
-
-try {
- content = fs.readFileSync(fname, 'utf-8');
- syntax = esprima.parse(content, options);
- console.log(JSON.stringify(syntax, adjustRegexLiteral, 4));
-} catch (e) {
- console.log('Error: ' + e.message);
- process.exit(1);
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/bin/esvalidate.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/bin/esvalidate.js
deleted file mode 100755
index dddd8a2ada4..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/bin/esvalidate.js
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/usr/bin/env node
-/*
- Copyright (C) 2012 Ariya Hidayat
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*jslint sloppy:true plusplus:true node:true rhino:true */
-/*global phantom:true */
-
-var fs, system, esprima, options, fnames, count;
-
-if (typeof esprima === 'undefined') {
- // PhantomJS can only require() relative files
- if (typeof phantom === 'object') {
- fs = require('fs');
- system = require('system');
- esprima = require('./esprima');
- } else if (typeof require === 'function') {
- fs = require('fs');
- esprima = require('esprima');
- } else if (typeof load === 'function') {
- try {
- load('esprima.js');
- } catch (e) {
- load('../esprima.js');
- }
- }
-}
-
-// Shims to Node.js objects when running under PhantomJS 1.7+.
-if (typeof phantom === 'object') {
- fs.readFileSync = fs.read;
- process = {
- argv: [].slice.call(system.args),
- exit: phantom.exit
- };
- process.argv.unshift('phantomjs');
-}
-
-// Shims to Node.js objects when running under Rhino.
-if (typeof console === 'undefined' && typeof process === 'undefined') {
- console = { log: print };
- fs = { readFileSync: readFile };
- process = { argv: arguments, exit: quit };
- process.argv.unshift('esvalidate.js');
- process.argv.unshift('rhino');
-}
-
-function showUsage() {
- console.log('Usage:');
- console.log(' esvalidate [options] file.js');
- console.log();
- console.log('Available options:');
- console.log();
- console.log(' --format=type Set the report format, plain (default) or junit');
- console.log(' -v, --version Print program version');
- console.log();
- process.exit(1);
-}
-
-if (process.argv.length <= 2) {
- showUsage();
-}
-
-options = {
- format: 'plain'
-};
-
-fnames = [];
-
-process.argv.splice(2).forEach(function (entry) {
-
- if (entry === '-h' || entry === '--help') {
- showUsage();
- } else if (entry === '-v' || entry === '--version') {
- console.log('ECMAScript Validator (using Esprima version', esprima.version, ')');
- console.log();
- process.exit(0);
- } else if (entry.slice(0, 9) === '--format=') {
- options.format = entry.slice(9);
- if (options.format !== 'plain' && options.format !== 'junit') {
- console.log('Error: unknown report format ' + options.format + '.');
- process.exit(1);
- }
- } else if (entry.slice(0, 2) === '--') {
- console.log('Error: unknown option ' + entry + '.');
- process.exit(1);
- } else {
- fnames.push(entry);
- }
-});
-
-if (fnames.length === 0) {
- console.log('Error: no input file.');
- process.exit(1);
-}
-
-if (options.format === 'junit') {
- console.log('');
- console.log('');
-}
-
-count = 0;
-fnames.forEach(function (fname) {
- var content, timestamp, syntax, name;
- try {
- content = fs.readFileSync(fname, 'utf-8');
-
- if (content[0] === '#' && content[1] === '!') {
- content = '//' + content.substr(2, content.length);
- }
-
- timestamp = Date.now();
- syntax = esprima.parse(content, { tolerant: true });
-
- if (options.format === 'junit') {
-
- name = fname;
- if (name.lastIndexOf('/') >= 0) {
- name = name.slice(name.lastIndexOf('/') + 1);
- }
-
- console.log('');
-
- syntax.errors.forEach(function (error) {
- var msg = error.message;
- msg = msg.replace(/^Line\ [0-9]*\:\ /, '');
- console.log(' ');
- console.log(' ' +
- error.message + '(' + name + ':' + error.lineNumber + ')' +
- '');
- console.log(' ');
- });
-
- console.log('');
-
- } else if (options.format === 'plain') {
-
- syntax.errors.forEach(function (error) {
- var msg = error.message;
- msg = msg.replace(/^Line\ [0-9]*\:\ /, '');
- msg = fname + ':' + error.lineNumber + ': ' + msg;
- console.log(msg);
- ++count;
- });
-
- }
- } catch (e) {
- ++count;
- if (options.format === 'junit') {
- console.log('');
- console.log(' ');
- console.log(' ' +
- e.message + '(' + fname + ((e.lineNumber) ? ':' + e.lineNumber : '') +
- ')');
- console.log(' ');
- console.log('');
- } else {
- console.log('Error: ' + e.message);
- }
- }
-});
-
-if (options.format === 'junit') {
- console.log('');
-}
-
-if (count > 0) {
- process.exit(1);
-}
-
-if (count === 0 && typeof phantom === 'object') {
- process.exit(0);
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/esprima.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/esprima.js
deleted file mode 100644
index 595a06602e5..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/esprima.js
+++ /dev/null
@@ -1,3772 +0,0 @@
-/*
- Copyright (C) 2013 Ariya Hidayat
- Copyright (C) 2013 Thaddee Tyl
- Copyright (C) 2013 Mathias Bynens
- Copyright (C) 2012 Ariya Hidayat
- Copyright (C) 2012 Mathias Bynens
- Copyright (C) 2012 Joost-Wim Boekesteijn
- Copyright (C) 2012 Kris Kowal
- Copyright (C) 2012 Yusuke Suzuki
- Copyright (C) 2012 Arpad Borsos
- Copyright (C) 2011 Ariya Hidayat
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*jslint bitwise:true plusplus:true */
-/*global esprima:true, define:true, exports:true, window: true,
-throwErrorTolerant: true,
-throwError: true, generateStatement: true, peek: true,
-parseAssignmentExpression: true, parseBlock: true, parseExpression: true,
-parseFunctionDeclaration: true, parseFunctionExpression: true,
-parseFunctionSourceElements: true, parseVariableIdentifier: true,
-parseLeftHandSideExpression: true,
-parseUnaryExpression: true,
-parseStatement: true, parseSourceElement: true */
-
-(function (root, factory) {
- 'use strict';
-
- // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,
- // Rhino, and plain browser loading.
-
- /* istanbul ignore next */
- if (typeof define === 'function' && define.amd) {
- define(['exports'], factory);
- } else if (typeof exports !== 'undefined') {
- factory(exports);
- } else {
- factory((root.esprima = {}));
- }
-}(this, function (exports) {
- 'use strict';
-
- var Token,
- TokenName,
- FnExprTokens,
- Syntax,
- PropertyKind,
- Messages,
- Regex,
- SyntaxTreeDelegate,
- source,
- strict,
- index,
- lineNumber,
- lineStart,
- length,
- delegate,
- lookahead,
- state,
- extra;
-
- Token = {
- BooleanLiteral: 1,
- EOF: 2,
- Identifier: 3,
- Keyword: 4,
- NullLiteral: 5,
- NumericLiteral: 6,
- Punctuator: 7,
- StringLiteral: 8,
- RegularExpression: 9
- };
-
- TokenName = {};
- TokenName[Token.BooleanLiteral] = 'Boolean';
- TokenName[Token.EOF] = '';
- TokenName[Token.Identifier] = 'Identifier';
- TokenName[Token.Keyword] = 'Keyword';
- TokenName[Token.NullLiteral] = 'Null';
- TokenName[Token.NumericLiteral] = 'Numeric';
- TokenName[Token.Punctuator] = 'Punctuator';
- TokenName[Token.StringLiteral] = 'String';
- TokenName[Token.RegularExpression] = 'RegularExpression';
-
- // A function following one of those tokens is an expression.
- FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',
- 'return', 'case', 'delete', 'throw', 'void',
- // assignment operators
- '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',
- '&=', '|=', '^=', ',',
- // binary/unary operators
- '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',
- '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',
- '<=', '<', '>', '!=', '!=='];
-
- Syntax = {
- AssignmentExpression: 'AssignmentExpression',
- ArrayExpression: 'ArrayExpression',
- BlockStatement: 'BlockStatement',
- BinaryExpression: 'BinaryExpression',
- BreakStatement: 'BreakStatement',
- CallExpression: 'CallExpression',
- CatchClause: 'CatchClause',
- ConditionalExpression: 'ConditionalExpression',
- ContinueStatement: 'ContinueStatement',
- DoWhileStatement: 'DoWhileStatement',
- DebuggerStatement: 'DebuggerStatement',
- EmptyStatement: 'EmptyStatement',
- ExpressionStatement: 'ExpressionStatement',
- ForStatement: 'ForStatement',
- ForInStatement: 'ForInStatement',
- FunctionDeclaration: 'FunctionDeclaration',
- FunctionExpression: 'FunctionExpression',
- Identifier: 'Identifier',
- IfStatement: 'IfStatement',
- Literal: 'Literal',
- LabeledStatement: 'LabeledStatement',
- LogicalExpression: 'LogicalExpression',
- MemberExpression: 'MemberExpression',
- NewExpression: 'NewExpression',
- ObjectExpression: 'ObjectExpression',
- Program: 'Program',
- Property: 'Property',
- ReturnStatement: 'ReturnStatement',
- SequenceExpression: 'SequenceExpression',
- SwitchStatement: 'SwitchStatement',
- SwitchCase: 'SwitchCase',
- ThisExpression: 'ThisExpression',
- ThrowStatement: 'ThrowStatement',
- TryStatement: 'TryStatement',
- UnaryExpression: 'UnaryExpression',
- UpdateExpression: 'UpdateExpression',
- VariableDeclaration: 'VariableDeclaration',
- VariableDeclarator: 'VariableDeclarator',
- WhileStatement: 'WhileStatement',
- WithStatement: 'WithStatement'
- };
-
- PropertyKind = {
- Data: 1,
- Get: 2,
- Set: 4
- };
-
- // Error messages should be identical to V8.
- Messages = {
- UnexpectedToken: 'Unexpected token %0',
- UnexpectedNumber: 'Unexpected number',
- UnexpectedString: 'Unexpected string',
- UnexpectedIdentifier: 'Unexpected identifier',
- UnexpectedReserved: 'Unexpected reserved word',
- UnexpectedEOS: 'Unexpected end of input',
- NewlineAfterThrow: 'Illegal newline after throw',
- InvalidRegExp: 'Invalid regular expression',
- UnterminatedRegExp: 'Invalid regular expression: missing /',
- InvalidLHSInAssignment: 'Invalid left-hand side in assignment',
- InvalidLHSInForIn: 'Invalid left-hand side in for-in',
- MultipleDefaultsInSwitch: 'More than one default clause in switch statement',
- NoCatchOrFinally: 'Missing catch or finally after try',
- UnknownLabel: 'Undefined label \'%0\'',
- Redeclaration: '%0 \'%1\' has already been declared',
- IllegalContinue: 'Illegal continue statement',
- IllegalBreak: 'Illegal break statement',
- IllegalReturn: 'Illegal return statement',
- StrictModeWith: 'Strict mode code may not include a with statement',
- StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',
- StrictVarName: 'Variable name may not be eval or arguments in strict mode',
- StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',
- StrictParamDupe: 'Strict mode function may not have duplicate parameter names',
- StrictFunctionName: 'Function name may not be eval or arguments in strict mode',
- StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',
- StrictDelete: 'Delete of an unqualified identifier in strict mode.',
- StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode',
- AccessorDataProperty: 'Object literal may not have data and accessor property with the same name',
- AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name',
- StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',
- StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',
- StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',
- StrictReservedWord: 'Use of future reserved word in strict mode'
- };
-
- // See also tools/generate-unicode-regex.py.
- Regex = {
- NonAsciiIdentifierStart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'),
- NonAsciiIdentifierPart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]')
- };
-
- // Ensure the condition is true, otherwise throw an error.
- // This is only to have a better contract semantic, i.e. another safety net
- // to catch a logic error. The condition shall be fulfilled in normal case.
- // Do NOT use this to enforce a certain condition on any user input.
-
- function assert(condition, message) {
- /* istanbul ignore if */
- if (!condition) {
- throw new Error('ASSERT: ' + message);
- }
- }
-
- function isDecimalDigit(ch) {
- return (ch >= 48 && ch <= 57); // 0..9
- }
-
- function isHexDigit(ch) {
- return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;
- }
-
- function isOctalDigit(ch) {
- return '01234567'.indexOf(ch) >= 0;
- }
-
-
- // 7.2 White Space
-
- function isWhiteSpace(ch) {
- return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||
- (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);
- }
-
- // 7.3 Line Terminators
-
- function isLineTerminator(ch) {
- return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);
- }
-
- // 7.6 Identifier Names and Identifiers
-
- function isIdentifierStart(ch) {
- return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)
- (ch >= 0x41 && ch <= 0x5A) || // A..Z
- (ch >= 0x61 && ch <= 0x7A) || // a..z
- (ch === 0x5C) || // \ (backslash)
- ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch)));
- }
-
- function isIdentifierPart(ch) {
- return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)
- (ch >= 0x41 && ch <= 0x5A) || // A..Z
- (ch >= 0x61 && ch <= 0x7A) || // a..z
- (ch >= 0x30 && ch <= 0x39) || // 0..9
- (ch === 0x5C) || // \ (backslash)
- ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch)));
- }
-
- // 7.6.1.2 Future Reserved Words
-
- function isFutureReservedWord(id) {
- switch (id) {
- case 'class':
- case 'enum':
- case 'export':
- case 'extends':
- case 'import':
- case 'super':
- return true;
- default:
- return false;
- }
- }
-
- function isStrictModeReservedWord(id) {
- switch (id) {
- case 'implements':
- case 'interface':
- case 'package':
- case 'private':
- case 'protected':
- case 'public':
- case 'static':
- case 'yield':
- case 'let':
- return true;
- default:
- return false;
- }
- }
-
- function isRestrictedWord(id) {
- return id === 'eval' || id === 'arguments';
- }
-
- // 7.6.1.1 Keywords
-
- function isKeyword(id) {
- if (strict && isStrictModeReservedWord(id)) {
- return true;
- }
-
- // 'const' is specialized as Keyword in V8.
- // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next.
- // Some others are from future reserved words.
-
- switch (id.length) {
- case 2:
- return (id === 'if') || (id === 'in') || (id === 'do');
- case 3:
- return (id === 'var') || (id === 'for') || (id === 'new') ||
- (id === 'try') || (id === 'let');
- case 4:
- return (id === 'this') || (id === 'else') || (id === 'case') ||
- (id === 'void') || (id === 'with') || (id === 'enum');
- case 5:
- return (id === 'while') || (id === 'break') || (id === 'catch') ||
- (id === 'throw') || (id === 'const') || (id === 'yield') ||
- (id === 'class') || (id === 'super');
- case 6:
- return (id === 'return') || (id === 'typeof') || (id === 'delete') ||
- (id === 'switch') || (id === 'export') || (id === 'import');
- case 7:
- return (id === 'default') || (id === 'finally') || (id === 'extends');
- case 8:
- return (id === 'function') || (id === 'continue') || (id === 'debugger');
- case 10:
- return (id === 'instanceof');
- default:
- return false;
- }
- }
-
- // 7.4 Comments
-
- function addComment(type, value, start, end, loc) {
- var comment, attacher;
-
- assert(typeof start === 'number', 'Comment must have valid position');
-
- // Because the way the actual token is scanned, often the comments
- // (if any) are skipped twice during the lexical analysis.
- // Thus, we need to skip adding a comment if the comment array already
- // handled it.
- if (state.lastCommentStart >= start) {
- return;
- }
- state.lastCommentStart = start;
-
- comment = {
- type: type,
- value: value
- };
- if (extra.range) {
- comment.range = [start, end];
- }
- if (extra.loc) {
- comment.loc = loc;
- }
- extra.comments.push(comment);
- if (extra.attachComment) {
- extra.leadingComments.push(comment);
- extra.trailingComments.push(comment);
- }
- }
-
- function skipSingleLineComment(offset) {
- var start, loc, ch, comment;
-
- start = index - offset;
- loc = {
- start: {
- line: lineNumber,
- column: index - lineStart - offset
- }
- };
-
- while (index < length) {
- ch = source.charCodeAt(index);
- ++index;
- if (isLineTerminator(ch)) {
- if (extra.comments) {
- comment = source.slice(start + offset, index - 1);
- loc.end = {
- line: lineNumber,
- column: index - lineStart - 1
- };
- addComment('Line', comment, start, index - 1, loc);
- }
- if (ch === 13 && source.charCodeAt(index) === 10) {
- ++index;
- }
- ++lineNumber;
- lineStart = index;
- return;
- }
- }
-
- if (extra.comments) {
- comment = source.slice(start + offset, index);
- loc.end = {
- line: lineNumber,
- column: index - lineStart
- };
- addComment('Line', comment, start, index, loc);
- }
- }
-
- function skipMultiLineComment() {
- var start, loc, ch, comment;
-
- if (extra.comments) {
- start = index - 2;
- loc = {
- start: {
- line: lineNumber,
- column: index - lineStart - 2
- }
- };
- }
-
- while (index < length) {
- ch = source.charCodeAt(index);
- if (isLineTerminator(ch)) {
- if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {
- ++index;
- }
- ++lineNumber;
- ++index;
- lineStart = index;
- if (index >= length) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
- } else if (ch === 0x2A) {
- // Block comment ends with '*/'.
- if (source.charCodeAt(index + 1) === 0x2F) {
- ++index;
- ++index;
- if (extra.comments) {
- comment = source.slice(start + 2, index - 2);
- loc.end = {
- line: lineNumber,
- column: index - lineStart
- };
- addComment('Block', comment, start, index, loc);
- }
- return;
- }
- ++index;
- } else {
- ++index;
- }
- }
-
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
-
- function skipComment() {
- var ch, start;
-
- start = (index === 0);
- while (index < length) {
- ch = source.charCodeAt(index);
-
- if (isWhiteSpace(ch)) {
- ++index;
- } else if (isLineTerminator(ch)) {
- ++index;
- if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {
- ++index;
- }
- ++lineNumber;
- lineStart = index;
- start = true;
- } else if (ch === 0x2F) { // U+002F is '/'
- ch = source.charCodeAt(index + 1);
- if (ch === 0x2F) {
- ++index;
- ++index;
- skipSingleLineComment(2);
- start = true;
- } else if (ch === 0x2A) { // U+002A is '*'
- ++index;
- ++index;
- skipMultiLineComment();
- } else {
- break;
- }
- } else if (start && ch === 0x2D) { // U+002D is '-'
- // U+003E is '>'
- if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {
- // '-->' is a single-line comment
- index += 3;
- skipSingleLineComment(3);
- } else {
- break;
- }
- } else if (ch === 0x3C) { // U+003C is '<'
- if (source.slice(index + 1, index + 4) === '!--') {
- ++index; // `<`
- ++index; // `!`
- ++index; // `-`
- ++index; // `-`
- skipSingleLineComment(4);
- } else {
- break;
- }
- } else {
- break;
- }
- }
- }
-
- function scanHexEscape(prefix) {
- var i, len, ch, code = 0;
-
- len = (prefix === 'u') ? 4 : 2;
- for (i = 0; i < len; ++i) {
- if (index < length && isHexDigit(source[index])) {
- ch = source[index++];
- code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());
- } else {
- return '';
- }
- }
- return String.fromCharCode(code);
- }
-
- function getEscapedIdentifier() {
- var ch, id;
-
- ch = source.charCodeAt(index++);
- id = String.fromCharCode(ch);
-
- // '\u' (U+005C, U+0075) denotes an escaped character.
- if (ch === 0x5C) {
- if (source.charCodeAt(index) !== 0x75) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
- ++index;
- ch = scanHexEscape('u');
- if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
- id = ch;
- }
-
- while (index < length) {
- ch = source.charCodeAt(index);
- if (!isIdentifierPart(ch)) {
- break;
- }
- ++index;
- id += String.fromCharCode(ch);
-
- // '\u' (U+005C, U+0075) denotes an escaped character.
- if (ch === 0x5C) {
- id = id.substr(0, id.length - 1);
- if (source.charCodeAt(index) !== 0x75) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
- ++index;
- ch = scanHexEscape('u');
- if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
- id += ch;
- }
- }
-
- return id;
- }
-
- function getIdentifier() {
- var start, ch;
-
- start = index++;
- while (index < length) {
- ch = source.charCodeAt(index);
- if (ch === 0x5C) {
- // Blackslash (U+005C) marks Unicode escape sequence.
- index = start;
- return getEscapedIdentifier();
- }
- if (isIdentifierPart(ch)) {
- ++index;
- } else {
- break;
- }
- }
-
- return source.slice(start, index);
- }
-
- function scanIdentifier() {
- var start, id, type;
-
- start = index;
-
- // Backslash (U+005C) starts an escaped character.
- id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();
-
- // There is no keyword or literal with only one character.
- // Thus, it must be an identifier.
- if (id.length === 1) {
- type = Token.Identifier;
- } else if (isKeyword(id)) {
- type = Token.Keyword;
- } else if (id === 'null') {
- type = Token.NullLiteral;
- } else if (id === 'true' || id === 'false') {
- type = Token.BooleanLiteral;
- } else {
- type = Token.Identifier;
- }
-
- return {
- type: type,
- value: id,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
-
- // 7.7 Punctuators
-
- function scanPunctuator() {
- var start = index,
- code = source.charCodeAt(index),
- code2,
- ch1 = source[index],
- ch2,
- ch3,
- ch4;
-
- switch (code) {
-
- // Check for most common single-character punctuators.
- case 0x2E: // . dot
- case 0x28: // ( open bracket
- case 0x29: // ) close bracket
- case 0x3B: // ; semicolon
- case 0x2C: // , comma
- case 0x7B: // { open curly brace
- case 0x7D: // } close curly brace
- case 0x5B: // [
- case 0x5D: // ]
- case 0x3A: // :
- case 0x3F: // ?
- case 0x7E: // ~
- ++index;
- if (extra.tokenize) {
- if (code === 0x28) {
- extra.openParenToken = extra.tokens.length;
- } else if (code === 0x7B) {
- extra.openCurlyToken = extra.tokens.length;
- }
- }
- return {
- type: Token.Punctuator,
- value: String.fromCharCode(code),
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
-
- default:
- code2 = source.charCodeAt(index + 1);
-
- // '=' (U+003D) marks an assignment or comparison operator.
- if (code2 === 0x3D) {
- switch (code) {
- case 0x2B: // +
- case 0x2D: // -
- case 0x2F: // /
- case 0x3C: // <
- case 0x3E: // >
- case 0x5E: // ^
- case 0x7C: // |
- case 0x25: // %
- case 0x26: // &
- case 0x2A: // *
- index += 2;
- return {
- type: Token.Punctuator,
- value: String.fromCharCode(code) + String.fromCharCode(code2),
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
-
- case 0x21: // !
- case 0x3D: // =
- index += 2;
-
- // !== and ===
- if (source.charCodeAt(index) === 0x3D) {
- ++index;
- }
- return {
- type: Token.Punctuator,
- value: source.slice(start, index),
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
- }
- }
-
- // 4-character punctuator: >>>=
-
- ch4 = source.substr(index, 4);
-
- if (ch4 === '>>>=') {
- index += 4;
- return {
- type: Token.Punctuator,
- value: ch4,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- // 3-character punctuators: === !== >>> <<= >>=
-
- ch3 = ch4.substr(0, 3);
-
- if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {
- index += 3;
- return {
- type: Token.Punctuator,
- value: ch3,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- // Other 2-character punctuators: ++ -- << >> && ||
- ch2 = ch3.substr(0, 2);
-
- if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {
- index += 2;
- return {
- type: Token.Punctuator,
- value: ch2,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- // 1-character punctuators: < > = ! + - * % & | ^ /
- if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {
- ++index;
- return {
- type: Token.Punctuator,
- value: ch1,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
-
- // 7.8.3 Numeric Literals
-
- function scanHexLiteral(start) {
- var number = '';
-
- while (index < length) {
- if (!isHexDigit(source[index])) {
- break;
- }
- number += source[index++];
- }
-
- if (number.length === 0) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
-
- if (isIdentifierStart(source.charCodeAt(index))) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
-
- return {
- type: Token.NumericLiteral,
- value: parseInt('0x' + number, 16),
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- function scanOctalLiteral(start) {
- var number = '0' + source[index++];
- while (index < length) {
- if (!isOctalDigit(source[index])) {
- break;
- }
- number += source[index++];
- }
-
- if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
-
- return {
- type: Token.NumericLiteral,
- value: parseInt(number, 8),
- octal: true,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- function isImplicitOctalLiteral() {
- var i, ch;
-
- // Implicit octal, unless there is a non-octal digit.
- // (Annex B.1.1 on Numeric Literals)
- for (i = index + 1; i < length; ++i) {
- ch = source[i];
- if (ch === '8' || ch === '9') {
- return false;
- }
- if (!isOctalDigit(ch)) {
- return true;
- }
- }
-
- return true;
- }
-
- function scanNumericLiteral() {
- var number, start, ch;
-
- ch = source[index];
- assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),
- 'Numeric literal must start with a decimal digit or a decimal point');
-
- start = index;
- number = '';
- if (ch !== '.') {
- number = source[index++];
- ch = source[index];
-
- // Hex number starts with '0x'.
- // Octal number starts with '0'.
- if (number === '0') {
- if (ch === 'x' || ch === 'X') {
- ++index;
- return scanHexLiteral(start);
- }
- if (isOctalDigit(ch)) {
- if (isImplicitOctalLiteral()) {
- return scanOctalLiteral(start);
- }
- }
- }
-
- while (isDecimalDigit(source.charCodeAt(index))) {
- number += source[index++];
- }
- ch = source[index];
- }
-
- if (ch === '.') {
- number += source[index++];
- while (isDecimalDigit(source.charCodeAt(index))) {
- number += source[index++];
- }
- ch = source[index];
- }
-
- if (ch === 'e' || ch === 'E') {
- number += source[index++];
-
- ch = source[index];
- if (ch === '+' || ch === '-') {
- number += source[index++];
- }
- if (isDecimalDigit(source.charCodeAt(index))) {
- while (isDecimalDigit(source.charCodeAt(index))) {
- number += source[index++];
- }
- } else {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
- }
-
- if (isIdentifierStart(source.charCodeAt(index))) {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
-
- return {
- type: Token.NumericLiteral,
- value: parseFloat(number),
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- // 7.8.4 String Literals
-
- function scanStringLiteral() {
- var str = '', quote, start, ch, code, unescaped, restore, octal = false, startLineNumber, startLineStart;
- startLineNumber = lineNumber;
- startLineStart = lineStart;
-
- quote = source[index];
- assert((quote === '\'' || quote === '"'),
- 'String literal must starts with a quote');
-
- start = index;
- ++index;
-
- while (index < length) {
- ch = source[index++];
-
- if (ch === quote) {
- quote = '';
- break;
- } else if (ch === '\\') {
- ch = source[index++];
- if (!ch || !isLineTerminator(ch.charCodeAt(0))) {
- switch (ch) {
- case 'u':
- case 'x':
- restore = index;
- unescaped = scanHexEscape(ch);
- if (unescaped) {
- str += unescaped;
- } else {
- index = restore;
- str += ch;
- }
- break;
- case 'n':
- str += '\n';
- break;
- case 'r':
- str += '\r';
- break;
- case 't':
- str += '\t';
- break;
- case 'b':
- str += '\b';
- break;
- case 'f':
- str += '\f';
- break;
- case 'v':
- str += '\x0B';
- break;
-
- default:
- if (isOctalDigit(ch)) {
- code = '01234567'.indexOf(ch);
-
- // \0 is not octal escape sequence
- if (code !== 0) {
- octal = true;
- }
-
- if (index < length && isOctalDigit(source[index])) {
- octal = true;
- code = code * 8 + '01234567'.indexOf(source[index++]);
-
- // 3 digits are only allowed when string starts
- // with 0, 1, 2, 3
- if ('0123'.indexOf(ch) >= 0 &&
- index < length &&
- isOctalDigit(source[index])) {
- code = code * 8 + '01234567'.indexOf(source[index++]);
- }
- }
- str += String.fromCharCode(code);
- } else {
- str += ch;
- }
- break;
- }
- } else {
- ++lineNumber;
- if (ch === '\r' && source[index] === '\n') {
- ++index;
- }
- lineStart = index;
- }
- } else if (isLineTerminator(ch.charCodeAt(0))) {
- break;
- } else {
- str += ch;
- }
- }
-
- if (quote !== '') {
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
-
- return {
- type: Token.StringLiteral,
- value: str,
- octal: octal,
- startLineNumber: startLineNumber,
- startLineStart: startLineStart,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- function testRegExp(pattern, flags) {
- var value;
- try {
- value = new RegExp(pattern, flags);
- } catch (e) {
- throwError({}, Messages.InvalidRegExp);
- }
- return value;
- }
-
- function scanRegExpBody() {
- var ch, str, classMarker, terminated, body;
-
- ch = source[index];
- assert(ch === '/', 'Regular expression literal must start with a slash');
- str = source[index++];
-
- classMarker = false;
- terminated = false;
- while (index < length) {
- ch = source[index++];
- str += ch;
- if (ch === '\\') {
- ch = source[index++];
- // ECMA-262 7.8.5
- if (isLineTerminator(ch.charCodeAt(0))) {
- throwError({}, Messages.UnterminatedRegExp);
- }
- str += ch;
- } else if (isLineTerminator(ch.charCodeAt(0))) {
- throwError({}, Messages.UnterminatedRegExp);
- } else if (classMarker) {
- if (ch === ']') {
- classMarker = false;
- }
- } else {
- if (ch === '/') {
- terminated = true;
- break;
- } else if (ch === '[') {
- classMarker = true;
- }
- }
- }
-
- if (!terminated) {
- throwError({}, Messages.UnterminatedRegExp);
- }
-
- // Exclude leading and trailing slash.
- body = str.substr(1, str.length - 2);
- return {
- value: body,
- literal: str
- };
- }
-
- function scanRegExpFlags() {
- var ch, str, flags, restore;
-
- str = '';
- flags = '';
- while (index < length) {
- ch = source[index];
- if (!isIdentifierPart(ch.charCodeAt(0))) {
- break;
- }
-
- ++index;
- if (ch === '\\' && index < length) {
- ch = source[index];
- if (ch === 'u') {
- ++index;
- restore = index;
- ch = scanHexEscape('u');
- if (ch) {
- flags += ch;
- for (str += '\\u'; restore < index; ++restore) {
- str += source[restore];
- }
- } else {
- index = restore;
- flags += 'u';
- str += '\\u';
- }
- throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');
- } else {
- str += '\\';
- throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');
- }
- } else {
- flags += ch;
- str += ch;
- }
- }
-
- return {
- value: flags,
- literal: str
- };
- }
-
- function scanRegExp() {
- var start, body, flags, pattern, value;
-
- lookahead = null;
- skipComment();
- start = index;
-
- body = scanRegExpBody();
- flags = scanRegExpFlags();
- value = testRegExp(body.value, flags.value);
-
- if (extra.tokenize) {
- return {
- type: Token.RegularExpression,
- value: value,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: start,
- end: index
- };
- }
-
- return {
- literal: body.literal + flags.literal,
- value: value,
- start: start,
- end: index
- };
- }
-
- function collectRegex() {
- var pos, loc, regex, token;
-
- skipComment();
-
- pos = index;
- loc = {
- start: {
- line: lineNumber,
- column: index - lineStart
- }
- };
-
- regex = scanRegExp();
- loc.end = {
- line: lineNumber,
- column: index - lineStart
- };
-
- /* istanbul ignore next */
- if (!extra.tokenize) {
- // Pop the previous token, which is likely '/' or '/='
- if (extra.tokens.length > 0) {
- token = extra.tokens[extra.tokens.length - 1];
- if (token.range[0] === pos && token.type === 'Punctuator') {
- if (token.value === '/' || token.value === '/=') {
- extra.tokens.pop();
- }
- }
- }
-
- extra.tokens.push({
- type: 'RegularExpression',
- value: regex.literal,
- range: [pos, index],
- loc: loc
- });
- }
-
- return regex;
- }
-
- function isIdentifierName(token) {
- return token.type === Token.Identifier ||
- token.type === Token.Keyword ||
- token.type === Token.BooleanLiteral ||
- token.type === Token.NullLiteral;
- }
-
- function advanceSlash() {
- var prevToken,
- checkToken;
- // Using the following algorithm:
- // https://github.com/mozilla/sweet.js/wiki/design
- prevToken = extra.tokens[extra.tokens.length - 1];
- if (!prevToken) {
- // Nothing before that: it cannot be a division.
- return collectRegex();
- }
- if (prevToken.type === 'Punctuator') {
- if (prevToken.value === ']') {
- return scanPunctuator();
- }
- if (prevToken.value === ')') {
- checkToken = extra.tokens[extra.openParenToken - 1];
- if (checkToken &&
- checkToken.type === 'Keyword' &&
- (checkToken.value === 'if' ||
- checkToken.value === 'while' ||
- checkToken.value === 'for' ||
- checkToken.value === 'with')) {
- return collectRegex();
- }
- return scanPunctuator();
- }
- if (prevToken.value === '}') {
- // Dividing a function by anything makes little sense,
- // but we have to check for that.
- if (extra.tokens[extra.openCurlyToken - 3] &&
- extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') {
- // Anonymous function.
- checkToken = extra.tokens[extra.openCurlyToken - 4];
- if (!checkToken) {
- return scanPunctuator();
- }
- } else if (extra.tokens[extra.openCurlyToken - 4] &&
- extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') {
- // Named function.
- checkToken = extra.tokens[extra.openCurlyToken - 5];
- if (!checkToken) {
- return collectRegex();
- }
- } else {
- return scanPunctuator();
- }
- // checkToken determines whether the function is
- // a declaration or an expression.
- if (FnExprTokens.indexOf(checkToken.value) >= 0) {
- // It is an expression.
- return scanPunctuator();
- }
- // It is a declaration.
- return collectRegex();
- }
- return collectRegex();
- }
- if (prevToken.type === 'Keyword' && prevToken.value !== 'this') {
- return collectRegex();
- }
- return scanPunctuator();
- }
-
- function advance() {
- var ch;
-
- skipComment();
-
- if (index >= length) {
- return {
- type: Token.EOF,
- lineNumber: lineNumber,
- lineStart: lineStart,
- start: index,
- end: index
- };
- }
-
- ch = source.charCodeAt(index);
-
- if (isIdentifierStart(ch)) {
- return scanIdentifier();
- }
-
- // Very common: ( and ) and ;
- if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {
- return scanPunctuator();
- }
-
- // String literal starts with single quote (U+0027) or double quote (U+0022).
- if (ch === 0x27 || ch === 0x22) {
- return scanStringLiteral();
- }
-
-
- // Dot (.) U+002E can also start a floating-point number, hence the need
- // to check the next character.
- if (ch === 0x2E) {
- if (isDecimalDigit(source.charCodeAt(index + 1))) {
- return scanNumericLiteral();
- }
- return scanPunctuator();
- }
-
- if (isDecimalDigit(ch)) {
- return scanNumericLiteral();
- }
-
- // Slash (/) U+002F can also start a regex.
- if (extra.tokenize && ch === 0x2F) {
- return advanceSlash();
- }
-
- return scanPunctuator();
- }
-
- function collectToken() {
- var loc, token, range, value;
-
- skipComment();
- loc = {
- start: {
- line: lineNumber,
- column: index - lineStart
- }
- };
-
- token = advance();
- loc.end = {
- line: lineNumber,
- column: index - lineStart
- };
-
- if (token.type !== Token.EOF) {
- value = source.slice(token.start, token.end);
- extra.tokens.push({
- type: TokenName[token.type],
- value: value,
- range: [token.start, token.end],
- loc: loc
- });
- }
-
- return token;
- }
-
- function lex() {
- var token;
-
- token = lookahead;
- index = token.end;
- lineNumber = token.lineNumber;
- lineStart = token.lineStart;
-
- lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();
-
- index = token.end;
- lineNumber = token.lineNumber;
- lineStart = token.lineStart;
-
- return token;
- }
-
- function peek() {
- var pos, line, start;
-
- pos = index;
- line = lineNumber;
- start = lineStart;
- lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();
- index = pos;
- lineNumber = line;
- lineStart = start;
- }
-
- function Position(line, column) {
- this.line = line;
- this.column = column;
- }
-
- function SourceLocation(startLine, startColumn, line, column) {
- this.start = new Position(startLine, startColumn);
- this.end = new Position(line, column);
- }
-
- SyntaxTreeDelegate = {
-
- name: 'SyntaxTree',
-
- processComment: function (node) {
- var lastChild, trailingComments;
-
- if (node.type === Syntax.Program) {
- if (node.body.length > 0) {
- return;
- }
- }
-
- if (extra.trailingComments.length > 0) {
- if (extra.trailingComments[0].range[0] >= node.range[1]) {
- trailingComments = extra.trailingComments;
- extra.trailingComments = [];
- } else {
- extra.trailingComments.length = 0;
- }
- } else {
- if (extra.bottomRightStack.length > 0 &&
- extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments &&
- extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments[0].range[0] >= node.range[1]) {
- trailingComments = extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;
- delete extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;
- }
- }
-
- // Eating the stack.
- while (extra.bottomRightStack.length > 0 && extra.bottomRightStack[extra.bottomRightStack.length - 1].range[0] >= node.range[0]) {
- lastChild = extra.bottomRightStack.pop();
- }
-
- if (lastChild) {
- if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) {
- node.leadingComments = lastChild.leadingComments;
- delete lastChild.leadingComments;
- }
- } else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) {
- node.leadingComments = extra.leadingComments;
- extra.leadingComments = [];
- }
-
-
- if (trailingComments) {
- node.trailingComments = trailingComments;
- }
-
- extra.bottomRightStack.push(node);
- },
-
- markEnd: function (node, startToken) {
- if (extra.range) {
- node.range = [startToken.start, index];
- }
- if (extra.loc) {
- node.loc = new SourceLocation(
- startToken.startLineNumber === undefined ? startToken.lineNumber : startToken.startLineNumber,
- startToken.start - (startToken.startLineStart === undefined ? startToken.lineStart : startToken.startLineStart),
- lineNumber,
- index - lineStart
- );
- this.postProcess(node);
- }
-
- if (extra.attachComment) {
- this.processComment(node);
- }
- return node;
- },
-
- postProcess: function (node) {
- if (extra.source) {
- node.loc.source = extra.source;
- }
- return node;
- },
-
- createArrayExpression: function (elements) {
- return {
- type: Syntax.ArrayExpression,
- elements: elements
- };
- },
-
- createAssignmentExpression: function (operator, left, right) {
- return {
- type: Syntax.AssignmentExpression,
- operator: operator,
- left: left,
- right: right
- };
- },
-
- createBinaryExpression: function (operator, left, right) {
- var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression :
- Syntax.BinaryExpression;
- return {
- type: type,
- operator: operator,
- left: left,
- right: right
- };
- },
-
- createBlockStatement: function (body) {
- return {
- type: Syntax.BlockStatement,
- body: body
- };
- },
-
- createBreakStatement: function (label) {
- return {
- type: Syntax.BreakStatement,
- label: label
- };
- },
-
- createCallExpression: function (callee, args) {
- return {
- type: Syntax.CallExpression,
- callee: callee,
- 'arguments': args
- };
- },
-
- createCatchClause: function (param, body) {
- return {
- type: Syntax.CatchClause,
- param: param,
- body: body
- };
- },
-
- createConditionalExpression: function (test, consequent, alternate) {
- return {
- type: Syntax.ConditionalExpression,
- test: test,
- consequent: consequent,
- alternate: alternate
- };
- },
-
- createContinueStatement: function (label) {
- return {
- type: Syntax.ContinueStatement,
- label: label
- };
- },
-
- createDebuggerStatement: function () {
- return {
- type: Syntax.DebuggerStatement
- };
- },
-
- createDoWhileStatement: function (body, test) {
- return {
- type: Syntax.DoWhileStatement,
- body: body,
- test: test
- };
- },
-
- createEmptyStatement: function () {
- return {
- type: Syntax.EmptyStatement
- };
- },
-
- createExpressionStatement: function (expression) {
- return {
- type: Syntax.ExpressionStatement,
- expression: expression
- };
- },
-
- createForStatement: function (init, test, update, body) {
- return {
- type: Syntax.ForStatement,
- init: init,
- test: test,
- update: update,
- body: body
- };
- },
-
- createForInStatement: function (left, right, body) {
- return {
- type: Syntax.ForInStatement,
- left: left,
- right: right,
- body: body,
- each: false
- };
- },
-
- createFunctionDeclaration: function (id, params, defaults, body) {
- return {
- type: Syntax.FunctionDeclaration,
- id: id,
- params: params,
- defaults: defaults,
- body: body,
- rest: null,
- generator: false,
- expression: false
- };
- },
-
- createFunctionExpression: function (id, params, defaults, body) {
- return {
- type: Syntax.FunctionExpression,
- id: id,
- params: params,
- defaults: defaults,
- body: body,
- rest: null,
- generator: false,
- expression: false
- };
- },
-
- createIdentifier: function (name) {
- return {
- type: Syntax.Identifier,
- name: name
- };
- },
-
- createIfStatement: function (test, consequent, alternate) {
- return {
- type: Syntax.IfStatement,
- test: test,
- consequent: consequent,
- alternate: alternate
- };
- },
-
- createLabeledStatement: function (label, body) {
- return {
- type: Syntax.LabeledStatement,
- label: label,
- body: body
- };
- },
-
- createLiteral: function (token) {
- return {
- type: Syntax.Literal,
- value: token.value,
- raw: source.slice(token.start, token.end)
- };
- },
-
- createMemberExpression: function (accessor, object, property) {
- return {
- type: Syntax.MemberExpression,
- computed: accessor === '[',
- object: object,
- property: property
- };
- },
-
- createNewExpression: function (callee, args) {
- return {
- type: Syntax.NewExpression,
- callee: callee,
- 'arguments': args
- };
- },
-
- createObjectExpression: function (properties) {
- return {
- type: Syntax.ObjectExpression,
- properties: properties
- };
- },
-
- createPostfixExpression: function (operator, argument) {
- return {
- type: Syntax.UpdateExpression,
- operator: operator,
- argument: argument,
- prefix: false
- };
- },
-
- createProgram: function (body) {
- return {
- type: Syntax.Program,
- body: body
- };
- },
-
- createProperty: function (kind, key, value) {
- return {
- type: Syntax.Property,
- key: key,
- value: value,
- kind: kind
- };
- },
-
- createReturnStatement: function (argument) {
- return {
- type: Syntax.ReturnStatement,
- argument: argument
- };
- },
-
- createSequenceExpression: function (expressions) {
- return {
- type: Syntax.SequenceExpression,
- expressions: expressions
- };
- },
-
- createSwitchCase: function (test, consequent) {
- return {
- type: Syntax.SwitchCase,
- test: test,
- consequent: consequent
- };
- },
-
- createSwitchStatement: function (discriminant, cases) {
- return {
- type: Syntax.SwitchStatement,
- discriminant: discriminant,
- cases: cases
- };
- },
-
- createThisExpression: function () {
- return {
- type: Syntax.ThisExpression
- };
- },
-
- createThrowStatement: function (argument) {
- return {
- type: Syntax.ThrowStatement,
- argument: argument
- };
- },
-
- createTryStatement: function (block, guardedHandlers, handlers, finalizer) {
- return {
- type: Syntax.TryStatement,
- block: block,
- guardedHandlers: guardedHandlers,
- handlers: handlers,
- finalizer: finalizer
- };
- },
-
- createUnaryExpression: function (operator, argument) {
- if (operator === '++' || operator === '--') {
- return {
- type: Syntax.UpdateExpression,
- operator: operator,
- argument: argument,
- prefix: true
- };
- }
- return {
- type: Syntax.UnaryExpression,
- operator: operator,
- argument: argument,
- prefix: true
- };
- },
-
- createVariableDeclaration: function (declarations, kind) {
- return {
- type: Syntax.VariableDeclaration,
- declarations: declarations,
- kind: kind
- };
- },
-
- createVariableDeclarator: function (id, init) {
- return {
- type: Syntax.VariableDeclarator,
- id: id,
- init: init
- };
- },
-
- createWhileStatement: function (test, body) {
- return {
- type: Syntax.WhileStatement,
- test: test,
- body: body
- };
- },
-
- createWithStatement: function (object, body) {
- return {
- type: Syntax.WithStatement,
- object: object,
- body: body
- };
- }
- };
-
- // Return true if there is a line terminator before the next token.
-
- function peekLineTerminator() {
- var pos, line, start, found;
-
- pos = index;
- line = lineNumber;
- start = lineStart;
- skipComment();
- found = lineNumber !== line;
- index = pos;
- lineNumber = line;
- lineStart = start;
-
- return found;
- }
-
- // Throw an exception
-
- function throwError(token, messageFormat) {
- var error,
- args = Array.prototype.slice.call(arguments, 2),
- msg = messageFormat.replace(
- /%(\d)/g,
- function (whole, index) {
- assert(index < args.length, 'Message reference must be in range');
- return args[index];
- }
- );
-
- if (typeof token.lineNumber === 'number') {
- error = new Error('Line ' + token.lineNumber + ': ' + msg);
- error.index = token.start;
- error.lineNumber = token.lineNumber;
- error.column = token.start - lineStart + 1;
- } else {
- error = new Error('Line ' + lineNumber + ': ' + msg);
- error.index = index;
- error.lineNumber = lineNumber;
- error.column = index - lineStart + 1;
- }
-
- error.description = msg;
- throw error;
- }
-
- function throwErrorTolerant() {
- try {
- throwError.apply(null, arguments);
- } catch (e) {
- if (extra.errors) {
- extra.errors.push(e);
- } else {
- throw e;
- }
- }
- }
-
-
- // Throw an exception because of the token.
-
- function throwUnexpected(token) {
- if (token.type === Token.EOF) {
- throwError(token, Messages.UnexpectedEOS);
- }
-
- if (token.type === Token.NumericLiteral) {
- throwError(token, Messages.UnexpectedNumber);
- }
-
- if (token.type === Token.StringLiteral) {
- throwError(token, Messages.UnexpectedString);
- }
-
- if (token.type === Token.Identifier) {
- throwError(token, Messages.UnexpectedIdentifier);
- }
-
- if (token.type === Token.Keyword) {
- if (isFutureReservedWord(token.value)) {
- throwError(token, Messages.UnexpectedReserved);
- } else if (strict && isStrictModeReservedWord(token.value)) {
- throwErrorTolerant(token, Messages.StrictReservedWord);
- return;
- }
- throwError(token, Messages.UnexpectedToken, token.value);
- }
-
- // BooleanLiteral, NullLiteral, or Punctuator.
- throwError(token, Messages.UnexpectedToken, token.value);
- }
-
- // Expect the next token to match the specified punctuator.
- // If not, an exception will be thrown.
-
- function expect(value) {
- var token = lex();
- if (token.type !== Token.Punctuator || token.value !== value) {
- throwUnexpected(token);
- }
- }
-
- // Expect the next token to match the specified keyword.
- // If not, an exception will be thrown.
-
- function expectKeyword(keyword) {
- var token = lex();
- if (token.type !== Token.Keyword || token.value !== keyword) {
- throwUnexpected(token);
- }
- }
-
- // Return true if the next token matches the specified punctuator.
-
- function match(value) {
- return lookahead.type === Token.Punctuator && lookahead.value === value;
- }
-
- // Return true if the next token matches the specified keyword
-
- function matchKeyword(keyword) {
- return lookahead.type === Token.Keyword && lookahead.value === keyword;
- }
-
- // Return true if the next token is an assignment operator
-
- function matchAssign() {
- var op;
-
- if (lookahead.type !== Token.Punctuator) {
- return false;
- }
- op = lookahead.value;
- return op === '=' ||
- op === '*=' ||
- op === '/=' ||
- op === '%=' ||
- op === '+=' ||
- op === '-=' ||
- op === '<<=' ||
- op === '>>=' ||
- op === '>>>=' ||
- op === '&=' ||
- op === '^=' ||
- op === '|=';
- }
-
- function consumeSemicolon() {
- var line, oldIndex = index, oldLineNumber = lineNumber,
- oldLineStart = lineStart, oldLookahead = lookahead;
-
- // Catch the very common case first: immediately a semicolon (U+003B).
- if (source.charCodeAt(index) === 0x3B || match(';')) {
- lex();
- return;
- }
-
- line = lineNumber;
- skipComment();
- if (lineNumber !== line) {
- index = oldIndex;
- lineNumber = oldLineNumber;
- lineStart = oldLineStart;
- lookahead = oldLookahead;
- return;
- }
-
- if (lookahead.type !== Token.EOF && !match('}')) {
- throwUnexpected(lookahead);
- }
- }
-
- // Return true if provided expression is LeftHandSideExpression
-
- function isLeftHandSide(expr) {
- return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;
- }
-
- // 11.1.4 Array Initialiser
-
- function parseArrayInitialiser() {
- var elements = [], startToken;
-
- startToken = lookahead;
- expect('[');
-
- while (!match(']')) {
- if (match(',')) {
- lex();
- elements.push(null);
- } else {
- elements.push(parseAssignmentExpression());
-
- if (!match(']')) {
- expect(',');
- }
- }
- }
-
- lex();
-
- return delegate.markEnd(delegate.createArrayExpression(elements), startToken);
- }
-
- // 11.1.5 Object Initialiser
-
- function parsePropertyFunction(param, first) {
- var previousStrict, body, startToken;
-
- previousStrict = strict;
- startToken = lookahead;
- body = parseFunctionSourceElements();
- if (first && strict && isRestrictedWord(param[0].name)) {
- throwErrorTolerant(first, Messages.StrictParamName);
- }
- strict = previousStrict;
- return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body), startToken);
- }
-
- function parseObjectPropertyKey() {
- var token, startToken;
-
- startToken = lookahead;
- token = lex();
-
- // Note: This function is called only from parseObjectProperty(), where
- // EOF and Punctuator tokens are already filtered out.
-
- if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {
- if (strict && token.octal) {
- throwErrorTolerant(token, Messages.StrictOctalLiteral);
- }
- return delegate.markEnd(delegate.createLiteral(token), startToken);
- }
-
- return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
- }
-
- function parseObjectProperty() {
- var token, key, id, value, param, startToken;
-
- token = lookahead;
- startToken = lookahead;
-
- if (token.type === Token.Identifier) {
-
- id = parseObjectPropertyKey();
-
- // Property Assignment: Getter and Setter.
-
- if (token.value === 'get' && !match(':')) {
- key = parseObjectPropertyKey();
- expect('(');
- expect(')');
- value = parsePropertyFunction([]);
- return delegate.markEnd(delegate.createProperty('get', key, value), startToken);
- }
- if (token.value === 'set' && !match(':')) {
- key = parseObjectPropertyKey();
- expect('(');
- token = lookahead;
- if (token.type !== Token.Identifier) {
- expect(')');
- throwErrorTolerant(token, Messages.UnexpectedToken, token.value);
- value = parsePropertyFunction([]);
- } else {
- param = [ parseVariableIdentifier() ];
- expect(')');
- value = parsePropertyFunction(param, token);
- }
- return delegate.markEnd(delegate.createProperty('set', key, value), startToken);
- }
- expect(':');
- value = parseAssignmentExpression();
- return delegate.markEnd(delegate.createProperty('init', id, value), startToken);
- }
- if (token.type === Token.EOF || token.type === Token.Punctuator) {
- throwUnexpected(token);
- } else {
- key = parseObjectPropertyKey();
- expect(':');
- value = parseAssignmentExpression();
- return delegate.markEnd(delegate.createProperty('init', key, value), startToken);
- }
- }
-
- function parseObjectInitialiser() {
- var properties = [], property, name, key, kind, map = {}, toString = String, startToken;
-
- startToken = lookahead;
-
- expect('{');
-
- while (!match('}')) {
- property = parseObjectProperty();
-
- if (property.key.type === Syntax.Identifier) {
- name = property.key.name;
- } else {
- name = toString(property.key.value);
- }
- kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;
-
- key = '$' + name;
- if (Object.prototype.hasOwnProperty.call(map, key)) {
- if (map[key] === PropertyKind.Data) {
- if (strict && kind === PropertyKind.Data) {
- throwErrorTolerant({}, Messages.StrictDuplicateProperty);
- } else if (kind !== PropertyKind.Data) {
- throwErrorTolerant({}, Messages.AccessorDataProperty);
- }
- } else {
- if (kind === PropertyKind.Data) {
- throwErrorTolerant({}, Messages.AccessorDataProperty);
- } else if (map[key] & kind) {
- throwErrorTolerant({}, Messages.AccessorGetSet);
- }
- }
- map[key] |= kind;
- } else {
- map[key] = kind;
- }
-
- properties.push(property);
-
- if (!match('}')) {
- expect(',');
- }
- }
-
- expect('}');
-
- return delegate.markEnd(delegate.createObjectExpression(properties), startToken);
- }
-
- // 11.1.6 The Grouping Operator
-
- function parseGroupExpression() {
- var expr;
-
- expect('(');
-
- expr = parseExpression();
-
- expect(')');
-
- return expr;
- }
-
-
- // 11.1 Primary Expressions
-
- function parsePrimaryExpression() {
- var type, token, expr, startToken;
-
- if (match('(')) {
- return parseGroupExpression();
- }
-
- if (match('[')) {
- return parseArrayInitialiser();
- }
-
- if (match('{')) {
- return parseObjectInitialiser();
- }
-
- type = lookahead.type;
- startToken = lookahead;
-
- if (type === Token.Identifier) {
- expr = delegate.createIdentifier(lex().value);
- } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {
- if (strict && lookahead.octal) {
- throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);
- }
- expr = delegate.createLiteral(lex());
- } else if (type === Token.Keyword) {
- if (matchKeyword('function')) {
- return parseFunctionExpression();
- }
- if (matchKeyword('this')) {
- lex();
- expr = delegate.createThisExpression();
- } else {
- throwUnexpected(lex());
- }
- } else if (type === Token.BooleanLiteral) {
- token = lex();
- token.value = (token.value === 'true');
- expr = delegate.createLiteral(token);
- } else if (type === Token.NullLiteral) {
- token = lex();
- token.value = null;
- expr = delegate.createLiteral(token);
- } else if (match('/') || match('/=')) {
- if (typeof extra.tokens !== 'undefined') {
- expr = delegate.createLiteral(collectRegex());
- } else {
- expr = delegate.createLiteral(scanRegExp());
- }
- peek();
- } else {
- throwUnexpected(lex());
- }
-
- return delegate.markEnd(expr, startToken);
- }
-
- // 11.2 Left-Hand-Side Expressions
-
- function parseArguments() {
- var args = [];
-
- expect('(');
-
- if (!match(')')) {
- while (index < length) {
- args.push(parseAssignmentExpression());
- if (match(')')) {
- break;
- }
- expect(',');
- }
- }
-
- expect(')');
-
- return args;
- }
-
- function parseNonComputedProperty() {
- var token, startToken;
-
- startToken = lookahead;
- token = lex();
-
- if (!isIdentifierName(token)) {
- throwUnexpected(token);
- }
-
- return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
- }
-
- function parseNonComputedMember() {
- expect('.');
-
- return parseNonComputedProperty();
- }
-
- function parseComputedMember() {
- var expr;
-
- expect('[');
-
- expr = parseExpression();
-
- expect(']');
-
- return expr;
- }
-
- function parseNewExpression() {
- var callee, args, startToken;
-
- startToken = lookahead;
- expectKeyword('new');
- callee = parseLeftHandSideExpression();
- args = match('(') ? parseArguments() : [];
-
- return delegate.markEnd(delegate.createNewExpression(callee, args), startToken);
- }
-
- function parseLeftHandSideExpressionAllowCall() {
- var expr, args, property, startToken, previousAllowIn = state.allowIn;
-
- startToken = lookahead;
- state.allowIn = true;
- expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
-
- for (;;) {
- if (match('.')) {
- property = parseNonComputedMember();
- expr = delegate.createMemberExpression('.', expr, property);
- } else if (match('(')) {
- args = parseArguments();
- expr = delegate.createCallExpression(expr, args);
- } else if (match('[')) {
- property = parseComputedMember();
- expr = delegate.createMemberExpression('[', expr, property);
- } else {
- break;
- }
- delegate.markEnd(expr, startToken);
- }
- state.allowIn = previousAllowIn;
-
- return expr;
- }
-
- function parseLeftHandSideExpression() {
- var expr, property, startToken;
- assert(state.allowIn, 'callee of new expression always allow in keyword.');
-
- startToken = lookahead;
-
- expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
-
- while (match('.') || match('[')) {
- if (match('[')) {
- property = parseComputedMember();
- expr = delegate.createMemberExpression('[', expr, property);
- } else {
- property = parseNonComputedMember();
- expr = delegate.createMemberExpression('.', expr, property);
- }
- delegate.markEnd(expr, startToken);
- }
- return expr;
- }
-
- // 11.3 Postfix Expressions
-
- function parsePostfixExpression() {
- var expr, token, startToken = lookahead;
-
- expr = parseLeftHandSideExpressionAllowCall();
-
- if (lookahead.type === Token.Punctuator) {
- if ((match('++') || match('--')) && !peekLineTerminator()) {
- // 11.3.1, 11.3.2
- if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
- throwErrorTolerant({}, Messages.StrictLHSPostfix);
- }
-
- if (!isLeftHandSide(expr)) {
- throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
- }
-
- token = lex();
- expr = delegate.markEnd(delegate.createPostfixExpression(token.value, expr), startToken);
- }
- }
-
- return expr;
- }
-
- // 11.4 Unary Operators
-
- function parseUnaryExpression() {
- var token, expr, startToken;
-
- if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {
- expr = parsePostfixExpression();
- } else if (match('++') || match('--')) {
- startToken = lookahead;
- token = lex();
- expr = parseUnaryExpression();
- // 11.4.4, 11.4.5
- if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
- throwErrorTolerant({}, Messages.StrictLHSPrefix);
- }
-
- if (!isLeftHandSide(expr)) {
- throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
- }
-
- expr = delegate.createUnaryExpression(token.value, expr);
- expr = delegate.markEnd(expr, startToken);
- } else if (match('+') || match('-') || match('~') || match('!')) {
- startToken = lookahead;
- token = lex();
- expr = parseUnaryExpression();
- expr = delegate.createUnaryExpression(token.value, expr);
- expr = delegate.markEnd(expr, startToken);
- } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {
- startToken = lookahead;
- token = lex();
- expr = parseUnaryExpression();
- expr = delegate.createUnaryExpression(token.value, expr);
- expr = delegate.markEnd(expr, startToken);
- if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {
- throwErrorTolerant({}, Messages.StrictDelete);
- }
- } else {
- expr = parsePostfixExpression();
- }
-
- return expr;
- }
-
- function binaryPrecedence(token, allowIn) {
- var prec = 0;
-
- if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {
- return 0;
- }
-
- switch (token.value) {
- case '||':
- prec = 1;
- break;
-
- case '&&':
- prec = 2;
- break;
-
- case '|':
- prec = 3;
- break;
-
- case '^':
- prec = 4;
- break;
-
- case '&':
- prec = 5;
- break;
-
- case '==':
- case '!=':
- case '===':
- case '!==':
- prec = 6;
- break;
-
- case '<':
- case '>':
- case '<=':
- case '>=':
- case 'instanceof':
- prec = 7;
- break;
-
- case 'in':
- prec = allowIn ? 7 : 0;
- break;
-
- case '<<':
- case '>>':
- case '>>>':
- prec = 8;
- break;
-
- case '+':
- case '-':
- prec = 9;
- break;
-
- case '*':
- case '/':
- case '%':
- prec = 11;
- break;
-
- default:
- break;
- }
-
- return prec;
- }
-
- // 11.5 Multiplicative Operators
- // 11.6 Additive Operators
- // 11.7 Bitwise Shift Operators
- // 11.8 Relational Operators
- // 11.9 Equality Operators
- // 11.10 Binary Bitwise Operators
- // 11.11 Binary Logical Operators
-
- function parseBinaryExpression() {
- var marker, markers, expr, token, prec, stack, right, operator, left, i;
-
- marker = lookahead;
- left = parseUnaryExpression();
-
- token = lookahead;
- prec = binaryPrecedence(token, state.allowIn);
- if (prec === 0) {
- return left;
- }
- token.prec = prec;
- lex();
-
- markers = [marker, lookahead];
- right = parseUnaryExpression();
-
- stack = [left, token, right];
-
- while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {
-
- // Reduce: make a binary expression from the three topmost entries.
- while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {
- right = stack.pop();
- operator = stack.pop().value;
- left = stack.pop();
- expr = delegate.createBinaryExpression(operator, left, right);
- markers.pop();
- marker = markers[markers.length - 1];
- delegate.markEnd(expr, marker);
- stack.push(expr);
- }
-
- // Shift.
- token = lex();
- token.prec = prec;
- stack.push(token);
- markers.push(lookahead);
- expr = parseUnaryExpression();
- stack.push(expr);
- }
-
- // Final reduce to clean-up the stack.
- i = stack.length - 1;
- expr = stack[i];
- markers.pop();
- while (i > 1) {
- expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
- i -= 2;
- marker = markers.pop();
- delegate.markEnd(expr, marker);
- }
-
- return expr;
- }
-
-
- // 11.12 Conditional Operator
-
- function parseConditionalExpression() {
- var expr, previousAllowIn, consequent, alternate, startToken;
-
- startToken = lookahead;
-
- expr = parseBinaryExpression();
-
- if (match('?')) {
- lex();
- previousAllowIn = state.allowIn;
- state.allowIn = true;
- consequent = parseAssignmentExpression();
- state.allowIn = previousAllowIn;
- expect(':');
- alternate = parseAssignmentExpression();
-
- expr = delegate.createConditionalExpression(expr, consequent, alternate);
- delegate.markEnd(expr, startToken);
- }
-
- return expr;
- }
-
- // 11.13 Assignment Operators
-
- function parseAssignmentExpression() {
- var token, left, right, node, startToken;
-
- token = lookahead;
- startToken = lookahead;
-
- node = left = parseConditionalExpression();
-
- if (matchAssign()) {
- // LeftHandSideExpression
- if (!isLeftHandSide(left)) {
- throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
- }
-
- // 11.13.1
- if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) {
- throwErrorTolerant(token, Messages.StrictLHSAssignment);
- }
-
- token = lex();
- right = parseAssignmentExpression();
- node = delegate.markEnd(delegate.createAssignmentExpression(token.value, left, right), startToken);
- }
-
- return node;
- }
-
- // 11.14 Comma Operator
-
- function parseExpression() {
- var expr, startToken = lookahead;
-
- expr = parseAssignmentExpression();
-
- if (match(',')) {
- expr = delegate.createSequenceExpression([ expr ]);
-
- while (index < length) {
- if (!match(',')) {
- break;
- }
- lex();
- expr.expressions.push(parseAssignmentExpression());
- }
-
- delegate.markEnd(expr, startToken);
- }
-
- return expr;
- }
-
- // 12.1 Block
-
- function parseStatementList() {
- var list = [],
- statement;
-
- while (index < length) {
- if (match('}')) {
- break;
- }
- statement = parseSourceElement();
- if (typeof statement === 'undefined') {
- break;
- }
- list.push(statement);
- }
-
- return list;
- }
-
- function parseBlock() {
- var block, startToken;
-
- startToken = lookahead;
- expect('{');
-
- block = parseStatementList();
-
- expect('}');
-
- return delegate.markEnd(delegate.createBlockStatement(block), startToken);
- }
-
- // 12.2 Variable Statement
-
- function parseVariableIdentifier() {
- var token, startToken;
-
- startToken = lookahead;
- token = lex();
-
- if (token.type !== Token.Identifier) {
- throwUnexpected(token);
- }
-
- return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
- }
-
- function parseVariableDeclaration(kind) {
- var init = null, id, startToken;
-
- startToken = lookahead;
- id = parseVariableIdentifier();
-
- // 12.2.1
- if (strict && isRestrictedWord(id.name)) {
- throwErrorTolerant({}, Messages.StrictVarName);
- }
-
- if (kind === 'const') {
- expect('=');
- init = parseAssignmentExpression();
- } else if (match('=')) {
- lex();
- init = parseAssignmentExpression();
- }
-
- return delegate.markEnd(delegate.createVariableDeclarator(id, init), startToken);
- }
-
- function parseVariableDeclarationList(kind) {
- var list = [];
-
- do {
- list.push(parseVariableDeclaration(kind));
- if (!match(',')) {
- break;
- }
- lex();
- } while (index < length);
-
- return list;
- }
-
- function parseVariableStatement() {
- var declarations;
-
- expectKeyword('var');
-
- declarations = parseVariableDeclarationList();
-
- consumeSemicolon();
-
- return delegate.createVariableDeclaration(declarations, 'var');
- }
-
- // kind may be `const` or `let`
- // Both are experimental and not in the specification yet.
- // see http://wiki.ecmascript.org/doku.php?id=harmony:const
- // and http://wiki.ecmascript.org/doku.php?id=harmony:let
- function parseConstLetDeclaration(kind) {
- var declarations, startToken;
-
- startToken = lookahead;
-
- expectKeyword(kind);
-
- declarations = parseVariableDeclarationList(kind);
-
- consumeSemicolon();
-
- return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind), startToken);
- }
-
- // 12.3 Empty Statement
-
- function parseEmptyStatement() {
- expect(';');
- return delegate.createEmptyStatement();
- }
-
- // 12.4 Expression Statement
-
- function parseExpressionStatement() {
- var expr = parseExpression();
- consumeSemicolon();
- return delegate.createExpressionStatement(expr);
- }
-
- // 12.5 If statement
-
- function parseIfStatement() {
- var test, consequent, alternate;
-
- expectKeyword('if');
-
- expect('(');
-
- test = parseExpression();
-
- expect(')');
-
- consequent = parseStatement();
-
- if (matchKeyword('else')) {
- lex();
- alternate = parseStatement();
- } else {
- alternate = null;
- }
-
- return delegate.createIfStatement(test, consequent, alternate);
- }
-
- // 12.6 Iteration Statements
-
- function parseDoWhileStatement() {
- var body, test, oldInIteration;
-
- expectKeyword('do');
-
- oldInIteration = state.inIteration;
- state.inIteration = true;
-
- body = parseStatement();
-
- state.inIteration = oldInIteration;
-
- expectKeyword('while');
-
- expect('(');
-
- test = parseExpression();
-
- expect(')');
-
- if (match(';')) {
- lex();
- }
-
- return delegate.createDoWhileStatement(body, test);
- }
-
- function parseWhileStatement() {
- var test, body, oldInIteration;
-
- expectKeyword('while');
-
- expect('(');
-
- test = parseExpression();
-
- expect(')');
-
- oldInIteration = state.inIteration;
- state.inIteration = true;
-
- body = parseStatement();
-
- state.inIteration = oldInIteration;
-
- return delegate.createWhileStatement(test, body);
- }
-
- function parseForVariableDeclaration() {
- var token, declarations, startToken;
-
- startToken = lookahead;
- token = lex();
- declarations = parseVariableDeclarationList();
-
- return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value), startToken);
- }
-
- function parseForStatement() {
- var init, test, update, left, right, body, oldInIteration, previousAllowIn = state.allowIn;
-
- init = test = update = null;
-
- expectKeyword('for');
-
- expect('(');
-
- if (match(';')) {
- lex();
- } else {
- if (matchKeyword('var') || matchKeyword('let')) {
- state.allowIn = false;
- init = parseForVariableDeclaration();
- state.allowIn = previousAllowIn;
-
- if (init.declarations.length === 1 && matchKeyword('in')) {
- lex();
- left = init;
- right = parseExpression();
- init = null;
- }
- } else {
- state.allowIn = false;
- init = parseExpression();
- state.allowIn = previousAllowIn;
-
- if (matchKeyword('in')) {
- // LeftHandSideExpression
- if (!isLeftHandSide(init)) {
- throwErrorTolerant({}, Messages.InvalidLHSInForIn);
- }
-
- lex();
- left = init;
- right = parseExpression();
- init = null;
- }
- }
-
- if (typeof left === 'undefined') {
- expect(';');
- }
- }
-
- if (typeof left === 'undefined') {
-
- if (!match(';')) {
- test = parseExpression();
- }
- expect(';');
-
- if (!match(')')) {
- update = parseExpression();
- }
- }
-
- expect(')');
-
- oldInIteration = state.inIteration;
- state.inIteration = true;
-
- body = parseStatement();
-
- state.inIteration = oldInIteration;
-
- return (typeof left === 'undefined') ?
- delegate.createForStatement(init, test, update, body) :
- delegate.createForInStatement(left, right, body);
- }
-
- // 12.7 The continue statement
-
- function parseContinueStatement() {
- var label = null, key;
-
- expectKeyword('continue');
-
- // Optimize the most common form: 'continue;'.
- if (source.charCodeAt(index) === 0x3B) {
- lex();
-
- if (!state.inIteration) {
- throwError({}, Messages.IllegalContinue);
- }
-
- return delegate.createContinueStatement(null);
- }
-
- if (peekLineTerminator()) {
- if (!state.inIteration) {
- throwError({}, Messages.IllegalContinue);
- }
-
- return delegate.createContinueStatement(null);
- }
-
- if (lookahead.type === Token.Identifier) {
- label = parseVariableIdentifier();
-
- key = '$' + label.name;
- if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
- throwError({}, Messages.UnknownLabel, label.name);
- }
- }
-
- consumeSemicolon();
-
- if (label === null && !state.inIteration) {
- throwError({}, Messages.IllegalContinue);
- }
-
- return delegate.createContinueStatement(label);
- }
-
- // 12.8 The break statement
-
- function parseBreakStatement() {
- var label = null, key;
-
- expectKeyword('break');
-
- // Catch the very common case first: immediately a semicolon (U+003B).
- if (source.charCodeAt(index) === 0x3B) {
- lex();
-
- if (!(state.inIteration || state.inSwitch)) {
- throwError({}, Messages.IllegalBreak);
- }
-
- return delegate.createBreakStatement(null);
- }
-
- if (peekLineTerminator()) {
- if (!(state.inIteration || state.inSwitch)) {
- throwError({}, Messages.IllegalBreak);
- }
-
- return delegate.createBreakStatement(null);
- }
-
- if (lookahead.type === Token.Identifier) {
- label = parseVariableIdentifier();
-
- key = '$' + label.name;
- if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
- throwError({}, Messages.UnknownLabel, label.name);
- }
- }
-
- consumeSemicolon();
-
- if (label === null && !(state.inIteration || state.inSwitch)) {
- throwError({}, Messages.IllegalBreak);
- }
-
- return delegate.createBreakStatement(label);
- }
-
- // 12.9 The return statement
-
- function parseReturnStatement() {
- var argument = null;
-
- expectKeyword('return');
-
- if (!state.inFunctionBody) {
- throwErrorTolerant({}, Messages.IllegalReturn);
- }
-
- // 'return' followed by a space and an identifier is very common.
- if (source.charCodeAt(index) === 0x20) {
- if (isIdentifierStart(source.charCodeAt(index + 1))) {
- argument = parseExpression();
- consumeSemicolon();
- return delegate.createReturnStatement(argument);
- }
- }
-
- if (peekLineTerminator()) {
- return delegate.createReturnStatement(null);
- }
-
- if (!match(';')) {
- if (!match('}') && lookahead.type !== Token.EOF) {
- argument = parseExpression();
- }
- }
-
- consumeSemicolon();
-
- return delegate.createReturnStatement(argument);
- }
-
- // 12.10 The with statement
-
- function parseWithStatement() {
- var object, body;
-
- if (strict) {
- // TODO(ikarienator): Should we update the test cases instead?
- skipComment();
- throwErrorTolerant({}, Messages.StrictModeWith);
- }
-
- expectKeyword('with');
-
- expect('(');
-
- object = parseExpression();
-
- expect(')');
-
- body = parseStatement();
-
- return delegate.createWithStatement(object, body);
- }
-
- // 12.10 The swith statement
-
- function parseSwitchCase() {
- var test, consequent = [], statement, startToken;
-
- startToken = lookahead;
- if (matchKeyword('default')) {
- lex();
- test = null;
- } else {
- expectKeyword('case');
- test = parseExpression();
- }
- expect(':');
-
- while (index < length) {
- if (match('}') || matchKeyword('default') || matchKeyword('case')) {
- break;
- }
- statement = parseStatement();
- consequent.push(statement);
- }
-
- return delegate.markEnd(delegate.createSwitchCase(test, consequent), startToken);
- }
-
- function parseSwitchStatement() {
- var discriminant, cases, clause, oldInSwitch, defaultFound;
-
- expectKeyword('switch');
-
- expect('(');
-
- discriminant = parseExpression();
-
- expect(')');
-
- expect('{');
-
- cases = [];
-
- if (match('}')) {
- lex();
- return delegate.createSwitchStatement(discriminant, cases);
- }
-
- oldInSwitch = state.inSwitch;
- state.inSwitch = true;
- defaultFound = false;
-
- while (index < length) {
- if (match('}')) {
- break;
- }
- clause = parseSwitchCase();
- if (clause.test === null) {
- if (defaultFound) {
- throwError({}, Messages.MultipleDefaultsInSwitch);
- }
- defaultFound = true;
- }
- cases.push(clause);
- }
-
- state.inSwitch = oldInSwitch;
-
- expect('}');
-
- return delegate.createSwitchStatement(discriminant, cases);
- }
-
- // 12.13 The throw statement
-
- function parseThrowStatement() {
- var argument;
-
- expectKeyword('throw');
-
- if (peekLineTerminator()) {
- throwError({}, Messages.NewlineAfterThrow);
- }
-
- argument = parseExpression();
-
- consumeSemicolon();
-
- return delegate.createThrowStatement(argument);
- }
-
- // 12.14 The try statement
-
- function parseCatchClause() {
- var param, body, startToken;
-
- startToken = lookahead;
- expectKeyword('catch');
-
- expect('(');
- if (match(')')) {
- throwUnexpected(lookahead);
- }
-
- param = parseVariableIdentifier();
- // 12.14.1
- if (strict && isRestrictedWord(param.name)) {
- throwErrorTolerant({}, Messages.StrictCatchVariable);
- }
-
- expect(')');
- body = parseBlock();
- return delegate.markEnd(delegate.createCatchClause(param, body), startToken);
- }
-
- function parseTryStatement() {
- var block, handlers = [], finalizer = null;
-
- expectKeyword('try');
-
- block = parseBlock();
-
- if (matchKeyword('catch')) {
- handlers.push(parseCatchClause());
- }
-
- if (matchKeyword('finally')) {
- lex();
- finalizer = parseBlock();
- }
-
- if (handlers.length === 0 && !finalizer) {
- throwError({}, Messages.NoCatchOrFinally);
- }
-
- return delegate.createTryStatement(block, [], handlers, finalizer);
- }
-
- // 12.15 The debugger statement
-
- function parseDebuggerStatement() {
- expectKeyword('debugger');
-
- consumeSemicolon();
-
- return delegate.createDebuggerStatement();
- }
-
- // 12 Statements
-
- function parseStatement() {
- var type = lookahead.type,
- expr,
- labeledBody,
- key,
- startToken;
-
- if (type === Token.EOF) {
- throwUnexpected(lookahead);
- }
-
- if (type === Token.Punctuator && lookahead.value === '{') {
- return parseBlock();
- }
-
- startToken = lookahead;
-
- if (type === Token.Punctuator) {
- switch (lookahead.value) {
- case ';':
- return delegate.markEnd(parseEmptyStatement(), startToken);
- case '(':
- return delegate.markEnd(parseExpressionStatement(), startToken);
- default:
- break;
- }
- }
-
- if (type === Token.Keyword) {
- switch (lookahead.value) {
- case 'break':
- return delegate.markEnd(parseBreakStatement(), startToken);
- case 'continue':
- return delegate.markEnd(parseContinueStatement(), startToken);
- case 'debugger':
- return delegate.markEnd(parseDebuggerStatement(), startToken);
- case 'do':
- return delegate.markEnd(parseDoWhileStatement(), startToken);
- case 'for':
- return delegate.markEnd(parseForStatement(), startToken);
- case 'function':
- return delegate.markEnd(parseFunctionDeclaration(), startToken);
- case 'if':
- return delegate.markEnd(parseIfStatement(), startToken);
- case 'return':
- return delegate.markEnd(parseReturnStatement(), startToken);
- case 'switch':
- return delegate.markEnd(parseSwitchStatement(), startToken);
- case 'throw':
- return delegate.markEnd(parseThrowStatement(), startToken);
- case 'try':
- return delegate.markEnd(parseTryStatement(), startToken);
- case 'var':
- return delegate.markEnd(parseVariableStatement(), startToken);
- case 'while':
- return delegate.markEnd(parseWhileStatement(), startToken);
- case 'with':
- return delegate.markEnd(parseWithStatement(), startToken);
- default:
- break;
- }
- }
-
- expr = parseExpression();
-
- // 12.12 Labelled Statements
- if ((expr.type === Syntax.Identifier) && match(':')) {
- lex();
-
- key = '$' + expr.name;
- if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
- throwError({}, Messages.Redeclaration, 'Label', expr.name);
- }
-
- state.labelSet[key] = true;
- labeledBody = parseStatement();
- delete state.labelSet[key];
- return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody), startToken);
- }
-
- consumeSemicolon();
-
- return delegate.markEnd(delegate.createExpressionStatement(expr), startToken);
- }
-
- // 13 Function Definition
-
- function parseFunctionSourceElements() {
- var sourceElement, sourceElements = [], token, directive, firstRestricted,
- oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, startToken;
-
- startToken = lookahead;
- expect('{');
-
- while (index < length) {
- if (lookahead.type !== Token.StringLiteral) {
- break;
- }
- token = lookahead;
-
- sourceElement = parseSourceElement();
- sourceElements.push(sourceElement);
- if (sourceElement.expression.type !== Syntax.Literal) {
- // this is not directive
- break;
- }
- directive = source.slice(token.start + 1, token.end - 1);
- if (directive === 'use strict') {
- strict = true;
- if (firstRestricted) {
- throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
- }
- } else {
- if (!firstRestricted && token.octal) {
- firstRestricted = token;
- }
- }
- }
-
- oldLabelSet = state.labelSet;
- oldInIteration = state.inIteration;
- oldInSwitch = state.inSwitch;
- oldInFunctionBody = state.inFunctionBody;
-
- state.labelSet = {};
- state.inIteration = false;
- state.inSwitch = false;
- state.inFunctionBody = true;
-
- while (index < length) {
- if (match('}')) {
- break;
- }
- sourceElement = parseSourceElement();
- if (typeof sourceElement === 'undefined') {
- break;
- }
- sourceElements.push(sourceElement);
- }
-
- expect('}');
-
- state.labelSet = oldLabelSet;
- state.inIteration = oldInIteration;
- state.inSwitch = oldInSwitch;
- state.inFunctionBody = oldInFunctionBody;
-
- return delegate.markEnd(delegate.createBlockStatement(sourceElements), startToken);
- }
-
- function parseParams(firstRestricted) {
- var param, params = [], token, stricted, paramSet, key, message;
- expect('(');
-
- if (!match(')')) {
- paramSet = {};
- while (index < length) {
- token = lookahead;
- param = parseVariableIdentifier();
- key = '$' + token.value;
- if (strict) {
- if (isRestrictedWord(token.value)) {
- stricted = token;
- message = Messages.StrictParamName;
- }
- if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
- stricted = token;
- message = Messages.StrictParamDupe;
- }
- } else if (!firstRestricted) {
- if (isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictParamName;
- } else if (isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictReservedWord;
- } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
- firstRestricted = token;
- message = Messages.StrictParamDupe;
- }
- }
- params.push(param);
- paramSet[key] = true;
- if (match(')')) {
- break;
- }
- expect(',');
- }
- }
-
- expect(')');
-
- return {
- params: params,
- stricted: stricted,
- firstRestricted: firstRestricted,
- message: message
- };
- }
-
- function parseFunctionDeclaration() {
- var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, startToken;
-
- startToken = lookahead;
-
- expectKeyword('function');
- token = lookahead;
- id = parseVariableIdentifier();
- if (strict) {
- if (isRestrictedWord(token.value)) {
- throwErrorTolerant(token, Messages.StrictFunctionName);
- }
- } else {
- if (isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictFunctionName;
- } else if (isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictReservedWord;
- }
- }
-
- tmp = parseParams(firstRestricted);
- params = tmp.params;
- stricted = tmp.stricted;
- firstRestricted = tmp.firstRestricted;
- if (tmp.message) {
- message = tmp.message;
- }
-
- previousStrict = strict;
- body = parseFunctionSourceElements();
- if (strict && firstRestricted) {
- throwError(firstRestricted, message);
- }
- if (strict && stricted) {
- throwErrorTolerant(stricted, message);
- }
- strict = previousStrict;
-
- return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body), startToken);
- }
-
- function parseFunctionExpression() {
- var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict, startToken;
-
- startToken = lookahead;
- expectKeyword('function');
-
- if (!match('(')) {
- token = lookahead;
- id = parseVariableIdentifier();
- if (strict) {
- if (isRestrictedWord(token.value)) {
- throwErrorTolerant(token, Messages.StrictFunctionName);
- }
- } else {
- if (isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictFunctionName;
- } else if (isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictReservedWord;
- }
- }
- }
-
- tmp = parseParams(firstRestricted);
- params = tmp.params;
- stricted = tmp.stricted;
- firstRestricted = tmp.firstRestricted;
- if (tmp.message) {
- message = tmp.message;
- }
-
- previousStrict = strict;
- body = parseFunctionSourceElements();
- if (strict && firstRestricted) {
- throwError(firstRestricted, message);
- }
- if (strict && stricted) {
- throwErrorTolerant(stricted, message);
- }
- strict = previousStrict;
-
- return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body), startToken);
- }
-
- // 14 Program
-
- function parseSourceElement() {
- if (lookahead.type === Token.Keyword) {
- switch (lookahead.value) {
- case 'const':
- case 'let':
- return parseConstLetDeclaration(lookahead.value);
- case 'function':
- return parseFunctionDeclaration();
- default:
- return parseStatement();
- }
- }
-
- if (lookahead.type !== Token.EOF) {
- return parseStatement();
- }
- }
-
- function parseSourceElements() {
- var sourceElement, sourceElements = [], token, directive, firstRestricted;
-
- while (index < length) {
- token = lookahead;
- if (token.type !== Token.StringLiteral) {
- break;
- }
-
- sourceElement = parseSourceElement();
- sourceElements.push(sourceElement);
- if (sourceElement.expression.type !== Syntax.Literal) {
- // this is not directive
- break;
- }
- directive = source.slice(token.start + 1, token.end - 1);
- if (directive === 'use strict') {
- strict = true;
- if (firstRestricted) {
- throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
- }
- } else {
- if (!firstRestricted && token.octal) {
- firstRestricted = token;
- }
- }
- }
-
- while (index < length) {
- sourceElement = parseSourceElement();
- /* istanbul ignore if */
- if (typeof sourceElement === 'undefined') {
- break;
- }
- sourceElements.push(sourceElement);
- }
- return sourceElements;
- }
-
- function parseProgram() {
- var body, startToken;
-
- skipComment();
- peek();
- startToken = lookahead;
- strict = false;
-
- body = parseSourceElements();
- return delegate.markEnd(delegate.createProgram(body), startToken);
- }
-
- function filterTokenLocation() {
- var i, entry, token, tokens = [];
-
- for (i = 0; i < extra.tokens.length; ++i) {
- entry = extra.tokens[i];
- token = {
- type: entry.type,
- value: entry.value
- };
- if (extra.range) {
- token.range = entry.range;
- }
- if (extra.loc) {
- token.loc = entry.loc;
- }
- tokens.push(token);
- }
-
- extra.tokens = tokens;
- }
-
- function tokenize(code, options) {
- var toString,
- token,
- tokens;
-
- toString = String;
- if (typeof code !== 'string' && !(code instanceof String)) {
- code = toString(code);
- }
-
- delegate = SyntaxTreeDelegate;
- source = code;
- index = 0;
- lineNumber = (source.length > 0) ? 1 : 0;
- lineStart = 0;
- length = source.length;
- lookahead = null;
- state = {
- allowIn: true,
- labelSet: {},
- inFunctionBody: false,
- inIteration: false,
- inSwitch: false,
- lastCommentStart: -1
- };
-
- extra = {};
-
- // Options matching.
- options = options || {};
-
- // Of course we collect tokens here.
- options.tokens = true;
- extra.tokens = [];
- extra.tokenize = true;
- // The following two fields are necessary to compute the Regex tokens.
- extra.openParenToken = -1;
- extra.openCurlyToken = -1;
-
- extra.range = (typeof options.range === 'boolean') && options.range;
- extra.loc = (typeof options.loc === 'boolean') && options.loc;
-
- if (typeof options.comment === 'boolean' && options.comment) {
- extra.comments = [];
- }
- if (typeof options.tolerant === 'boolean' && options.tolerant) {
- extra.errors = [];
- }
-
- try {
- peek();
- if (lookahead.type === Token.EOF) {
- return extra.tokens;
- }
-
- token = lex();
- while (lookahead.type !== Token.EOF) {
- try {
- token = lex();
- } catch (lexError) {
- token = lookahead;
- if (extra.errors) {
- extra.errors.push(lexError);
- // We have to break on the first error
- // to avoid infinite loops.
- break;
- } else {
- throw lexError;
- }
- }
- }
-
- filterTokenLocation();
- tokens = extra.tokens;
- if (typeof extra.comments !== 'undefined') {
- tokens.comments = extra.comments;
- }
- if (typeof extra.errors !== 'undefined') {
- tokens.errors = extra.errors;
- }
- } catch (e) {
- throw e;
- } finally {
- extra = {};
- }
- return tokens;
- }
-
- function parse(code, options) {
- var program, toString;
-
- toString = String;
- if (typeof code !== 'string' && !(code instanceof String)) {
- code = toString(code);
- }
-
- delegate = SyntaxTreeDelegate;
- source = code;
- index = 0;
- lineNumber = (source.length > 0) ? 1 : 0;
- lineStart = 0;
- length = source.length;
- lookahead = null;
- state = {
- allowIn: true,
- labelSet: {},
- inFunctionBody: false,
- inIteration: false,
- inSwitch: false,
- lastCommentStart: -1
- };
-
- extra = {};
- if (typeof options !== 'undefined') {
- extra.range = (typeof options.range === 'boolean') && options.range;
- extra.loc = (typeof options.loc === 'boolean') && options.loc;
- extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;
-
- if (extra.loc && options.source !== null && options.source !== undefined) {
- extra.source = toString(options.source);
- }
-
- if (typeof options.tokens === 'boolean' && options.tokens) {
- extra.tokens = [];
- }
- if (typeof options.comment === 'boolean' && options.comment) {
- extra.comments = [];
- }
- if (typeof options.tolerant === 'boolean' && options.tolerant) {
- extra.errors = [];
- }
- if (extra.attachComment) {
- extra.range = true;
- extra.comments = [];
- extra.bottomRightStack = [];
- extra.trailingComments = [];
- extra.leadingComments = [];
- }
- }
-
- try {
- program = parseProgram();
- if (typeof extra.comments !== 'undefined') {
- program.comments = extra.comments;
- }
- if (typeof extra.tokens !== 'undefined') {
- filterTokenLocation();
- program.tokens = extra.tokens;
- }
- if (typeof extra.errors !== 'undefined') {
- program.errors = extra.errors;
- }
- } catch (e) {
- throw e;
- } finally {
- extra = {};
- }
-
- return program;
- }
-
- // Sync with *.json manifests.
- exports.version = '1.2.5';
-
- exports.tokenize = tokenize;
-
- exports.parse = parse;
-
- // Deep copy.
- /* istanbul ignore next */
- exports.Syntax = (function () {
- var name, types = {};
-
- if (typeof Object.create === 'function') {
- types = Object.create(null);
- }
-
- for (name in Syntax) {
- if (Syntax.hasOwnProperty(name)) {
- types[name] = Syntax[name];
- }
- }
-
- if (typeof Object.freeze === 'function') {
- Object.freeze(types);
- }
-
- return types;
- }());
-
-}));
-/* vim: set sw=4 ts=4 et tw=80 : */
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/package.json b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/package.json
deleted file mode 100644
index 47c8d2574a9..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/package.json
+++ /dev/null
@@ -1,107 +0,0 @@
-{
- "_from": "esprima@^1.0.4",
- "_id": "esprima@1.2.5",
- "_inBundle": false,
- "_integrity": "sha1-CZNQL+r2aBODJXVvMPmlH+7sEek=",
- "_location": "/gl-vignette-background/esprima",
- "_phantomChildren": {},
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "esprima@^1.0.4",
- "name": "esprima",
- "escapedName": "esprima",
- "rawSpec": "^1.0.4",
- "saveSpec": null,
- "fetchSpec": "^1.0.4"
- },
- "_requiredBy": [
- "/gl-vignette-background/glslify"
- ],
- "_resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz",
- "_shasum": "0993502feaf668138325756f30f9a51feeec11e9",
- "_spec": "esprima@^1.0.4",
- "_where": "/Users/forrest/Audius/vis-test/node_modules/gl-vignette-background/node_modules/glslify",
- "author": {
- "name": "Ariya Hidayat",
- "email": "ariya.hidayat@gmail.com"
- },
- "bin": {
- "esparse": "./bin/esparse.js",
- "esvalidate": "./bin/esvalidate.js"
- },
- "bugs": {
- "url": "http://issues.esprima.org"
- },
- "bundleDependencies": false,
- "deprecated": false,
- "description": "ECMAScript parsing infrastructure for multipurpose analysis",
- "devDependencies": {
- "complexity-report": "~0.6.1",
- "eslint": "~0.4.3",
- "istanbul": "~0.2.6",
- "jscs": "~1.2.4",
- "jslint": "~0.1.9",
- "json-diff": "~0.3.1",
- "optimist": "~0.6.0",
- "regenerate": "~0.5.4",
- "unicode-6.3.0": "~0.1.0"
- },
- "engines": {
- "node": ">=0.4.0"
- },
- "files": [
- "bin",
- "test/run.js",
- "test/runner.js",
- "test/test.js",
- "test/compat.js",
- "test/reflect.js",
- "esprima.js"
- ],
- "homepage": "http://esprima.org",
- "keywords": [
- "ast",
- "ecmascript",
- "javascript",
- "parser",
- "syntax"
- ],
- "licenses": [
- {
- "type": "BSD",
- "url": "http://github.com/ariya/esprima/raw/master/LICENSE.BSD"
- }
- ],
- "main": "esprima.js",
- "maintainers": [
- {
- "name": "Ariya Hidayat",
- "email": "ariya.hidayat@gmail.com",
- "url": "http://ariya.ofilabs.com"
- }
- ],
- "name": "esprima",
- "repository": {
- "type": "git",
- "url": "git+ssh://git@github.com/ariya/esprima.git"
- },
- "scripts": {
- "analyze-complexity": "node tools/list-complexity.js",
- "analyze-coverage": "node node_modules/istanbul/lib/cli.js cover test/runner.js",
- "benchmark": "node test/benchmarks.js",
- "benchmark-quick": "node test/benchmarks.js quick",
- "check-complexity": "node node_modules/complexity-report/src/cli.js --maxcc 14 --silent -l -w esprima.js",
- "check-coverage": "node node_modules/istanbul/lib/cli.js check-coverage --statement 100 --branch 100 --function 100",
- "check-version": "node tools/check-version.js",
- "complexity": "npm run-script analyze-complexity && npm run-script check-complexity",
- "coverage": "npm run-script analyze-coverage && npm run-script check-coverage",
- "eslint": "node node_modules/eslint/bin/eslint.js esprima.js",
- "generate-regex": "node tools/generate-identifier-regex.js",
- "jscs": "node node_modules/jscs/bin/jscs esprima.js",
- "jslint": "echo Skipping JSLint",
- "lint": "npm run-script check-version && npm run-script eslint && npm run-script jscs && npm run-script jslint",
- "test": "npm run-script lint && node test/run.js && npm run-script coverage && npm run-script complexity"
- },
- "version": "1.2.5"
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/compat.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/compat.js
deleted file mode 100644
index d9b052402c1..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/compat.js
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- Copyright (C) 2012 Joost-Wim Boekesteijn
- Copyright (C) 2011 Ariya Hidayat
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*jslint node: true */
-/*global document: true, window:true, esprima: true, testReflect: true */
-
-var runTests;
-
-function getContext(esprima, reportCase, reportFailure) {
- 'use strict';
-
- var Reflect, Pattern;
-
- // Maps Mozilla Reflect object to our Esprima parser.
- Reflect = {
- parse: function (code) {
- var result;
-
- reportCase(code);
-
- try {
- result = esprima.parse(code);
- } catch (error) {
- result = error;
- }
-
- return result;
- }
- };
-
- // This is used by Reflect test suite to match a syntax tree.
- Pattern = function (obj) {
- var pattern;
-
- // Poor man's deep object cloning.
- pattern = JSON.parse(JSON.stringify(obj));
-
- // Special handling for regular expression literal since we need to
- // convert it to a string literal, otherwise it will be decoded
- // as object "{}" and the regular expression would be lost.
- if (obj.type && obj.type === 'Literal') {
- if (obj.value instanceof RegExp) {
- pattern = {
- type: obj.type,
- value: obj.value.toString()
- };
- }
- }
-
- // Special handling for branch statement because SpiderMonkey
- // prefers to put the 'alternate' property before 'consequent'.
- if (obj.type && obj.type === 'IfStatement') {
- pattern = {
- type: pattern.type,
- test: pattern.test,
- consequent: pattern.consequent,
- alternate: pattern.alternate
- };
- }
-
- // Special handling for do while statement because SpiderMonkey
- // prefers to put the 'test' property before 'body'.
- if (obj.type && obj.type === 'DoWhileStatement') {
- pattern = {
- type: pattern.type,
- body: pattern.body,
- test: pattern.test
- };
- }
-
- function adjustRegexLiteralAndRaw(key, value) {
- if (key === 'value' && value instanceof RegExp) {
- value = value.toString();
- } else if (key === 'raw' && typeof value === "string") {
- // Ignore Esprima-specific 'raw' property.
- return undefined;
- }
- return value;
- }
-
- if (obj.type && (obj.type === 'Program')) {
- pattern.assert = function (tree) {
- var actual, expected;
- actual = JSON.stringify(tree, adjustRegexLiteralAndRaw, 4);
- expected = JSON.stringify(obj, null, 4);
-
- if (expected !== actual) {
- reportFailure(expected, actual);
- }
- };
- }
-
- return pattern;
- };
-
- return {
- Reflect: Reflect,
- Pattern: Pattern
- };
-}
-
-if (typeof window !== 'undefined') {
- // Run all tests in a browser environment.
- runTests = function () {
- 'use strict';
-
- var total = 0,
- failures = 0;
-
- function setText(el, str) {
- if (typeof el.innerText === 'string') {
- el.innerText = str;
- } else {
- el.textContent = str;
- }
- }
-
- function reportCase(code) {
- var report, e;
- report = document.getElementById('report');
- e = document.createElement('pre');
- e.setAttribute('class', 'code');
- setText(e, code);
- report.appendChild(e);
- total += 1;
- }
-
- function reportFailure(expected, actual) {
- var report, e;
-
- failures += 1;
-
- report = document.getElementById('report');
-
- e = document.createElement('p');
- setText(e, 'Expected');
- report.appendChild(e);
-
- e = document.createElement('pre');
- e.setAttribute('class', 'expected');
- setText(e, expected);
- report.appendChild(e);
-
- e = document.createElement('p');
- setText(e, 'Actual');
- report.appendChild(e);
-
- e = document.createElement('pre');
- e.setAttribute('class', 'actual');
- setText(e, actual);
- report.appendChild(e);
- }
-
- setText(document.getElementById('version'), esprima.version);
-
- window.setTimeout(function () {
- var tick, context = getContext(esprima, reportCase, reportFailure);
-
- tick = new Date();
- testReflect(context.Reflect, context.Pattern);
- tick = (new Date()) - tick;
-
- if (failures > 0) {
- document.getElementById('status').className = 'alert-box alert';
- setText(document.getElementById('status'), total + ' tests. ' +
- 'Failures: ' + failures + '. ' + tick + ' ms');
- } else {
- document.getElementById('status').className = 'alert-box success';
- setText(document.getElementById('status'), total + ' tests. ' +
- 'No failure. ' + tick + ' ms');
- }
- }, 11);
- };
-} else {
- (function (global) {
- 'use strict';
- var esprima = require('../esprima'),
- tick,
- total = 0,
- failures = [],
- header,
- current,
- context;
-
- function reportCase(code) {
- total += 1;
- current = code;
- }
-
- function reportFailure(expected, actual) {
- failures.push({
- source: current,
- expected: expected.toString(),
- actual: actual.toString()
- });
- }
-
- context = getContext(esprima, reportCase, reportFailure);
-
- tick = new Date();
- require('./reflect').testReflect(context.Reflect, context.Pattern);
- tick = (new Date()) - tick;
-
- header = total + ' tests. ' + failures.length + ' failures. ' +
- tick + ' ms';
- if (failures.length) {
- console.error(header);
- failures.forEach(function (failure) {
- console.error(failure.source + ': Expected\n ' +
- failure.expected.split('\n').join('\n ') +
- '\nto match\n ' + failure.actual);
- });
- } else {
- console.log(header);
- }
- process.exit(failures.length === 0 ? 0 : 1);
- }(this));
-}
-/* vim: set sw=4 ts=4 et tw=80 : */
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/reflect.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/reflect.js
deleted file mode 100644
index dba1ba8f1fe..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/reflect.js
+++ /dev/null
@@ -1,422 +0,0 @@
-// This is modified from Mozilla Reflect.parse test suite (the file is located
-// at js/src/tests/js1_8_5/extensions/reflect-parse.js in the source tree).
-//
-// Some notable changes:
-// * Removed unsupported features (destructuring, let, comprehensions...).
-// * Removed tests for E4X (ECMAScript for XML).
-// * Removed everything related to builder.
-// * Enclosed every 'Pattern' construct with a scope.
-// * Tweaked some expected tree to remove generator field.
-// * Removed the test for bug 632030 and bug 632024.
-
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/licenses/publicdomain/
- */
-
-(function (exports) {
-
-function testReflect(Reflect, Pattern) {
-
-function program(elts) { return Pattern({ type: "Program", body: elts }) }
-function exprStmt(expr) { return Pattern({ type: "ExpressionStatement", expression: expr }) }
-function throwStmt(expr) { return Pattern({ type: "ThrowStatement", argument: expr }) }
-function returnStmt(expr) { return Pattern({ type: "ReturnStatement", argument: expr }) }
-function yieldExpr(expr) { return Pattern({ type: "YieldExpression", argument: expr }) }
-function lit(val) { return Pattern({ type: "Literal", value: val }) }
-var thisExpr = Pattern({ type: "ThisExpression" });
-function funDecl(id, params, body) { return Pattern({ type: "FunctionDeclaration",
- id: id,
- params: params,
- defaults: [],
- body: body,
- rest: null,
- generator: false,
- expression: false
- }) }
-function genFunDecl(id, params, body) { return Pattern({ type: "FunctionDeclaration",
- id: id,
- params: params,
- defaults: [],
- body: body,
- rest: null,
- generator: false,
- expression: false
- }) }
-function declarator(id, init) { return Pattern({ type: "VariableDeclarator", id: id, init: init }) }
-function varDecl(decls) { return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "var" }) }
-function letDecl(decls) { return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "let" }) }
-function constDecl(decls) { return Pattern({ type: "VariableDeclaration", declarations: decls, kind: "const" }) }
-function ident(name) { return Pattern({ type: "Identifier", name: name }) }
-function dotExpr(obj, id) { return Pattern({ type: "MemberExpression", computed: false, object: obj, property: id }) }
-function memExpr(obj, id) { return Pattern({ type: "MemberExpression", computed: true, object: obj, property: id }) }
-function forStmt(init, test, update, body) { return Pattern({ type: "ForStatement", init: init, test: test, update: update, body: body }) }
-function forInStmt(lhs, rhs, body) { return Pattern({ type: "ForInStatement", left: lhs, right: rhs, body: body, each: false }) }
-function forEachInStmt(lhs, rhs, body) { return Pattern({ type: "ForInStatement", left: lhs, right: rhs, body: body, each: true }) }
-function breakStmt(lab) { return Pattern({ type: "BreakStatement", label: lab }) }
-function continueStmt(lab) { return Pattern({ type: "ContinueStatement", label: lab }) }
-function blockStmt(body) { return Pattern({ type: "BlockStatement", body: body }) }
-var emptyStmt = Pattern({ type: "EmptyStatement" });
-function ifStmt(test, cons, alt) { return Pattern({ type: "IfStatement", test: test, alternate: alt, consequent: cons }) }
-function labStmt(lab, stmt) { return Pattern({ type: "LabeledStatement", label: lab, body: stmt }) }
-function withStmt(obj, stmt) { return Pattern({ type: "WithStatement", object: obj, body: stmt }) }
-function whileStmt(test, stmt) { return Pattern({ type: "WhileStatement", test: test, body: stmt }) }
-function doStmt(stmt, test) { return Pattern({ type: "DoWhileStatement", test: test, body: stmt }) }
-function switchStmt(disc, cases) { return Pattern({ type: "SwitchStatement", discriminant: disc, cases: cases }) }
-function caseClause(test, stmts) { return Pattern({ type: "SwitchCase", test: test, consequent: stmts }) }
-function defaultClause(stmts) { return Pattern({ type: "SwitchCase", test: null, consequent: stmts }) }
-function catchClause(id, guard, body) { if (guard) { return Pattern({ type: "GuardedCatchClause", param: id, guard: guard, body: body }) } else { return Pattern({ type: "CatchClause", param: id, body: body }) } }
-function tryStmt(body, guarded, catches, fin) { return Pattern({ type: "TryStatement", block: body, guardedHandlers: guarded, handlers: catches, finalizer: fin }) }
-function letStmt(head, body) { return Pattern({ type: "LetStatement", head: head, body: body }) }
-function funExpr(id, args, body, gen) { return Pattern({ type: "FunctionExpression",
- id: id,
- params: args,
- defaults: [],
- body: body,
- rest: null,
- generator: false,
- expression: false
- }) }
-function genFunExpr(id, args, body) { return Pattern({ type: "FunctionExpression",
- id: id,
- params: args,
- defaults: [],
- body: body,
- rest: null,
- generator: false,
- expression: false
- }) }
-
-function unExpr(op, arg) { return Pattern({ type: "UnaryExpression", operator: op, argument: arg, prefix: true }) }
-function binExpr(op, left, right) { return Pattern({ type: "BinaryExpression", operator: op, left: left, right: right }) }
-function aExpr(op, left, right) { return Pattern({ type: "AssignmentExpression", operator: op, left: left, right: right }) }
-function updExpr(op, arg, prefix) { return Pattern({ type: "UpdateExpression", operator: op, argument: arg, prefix: prefix }) }
-function logExpr(op, left, right) { return Pattern({ type: "LogicalExpression", operator: op, left: left, right: right }) }
-
-function condExpr(test, cons, alt) { return Pattern({ type: "ConditionalExpression", test: test, consequent: cons, alternate: alt }) }
-function seqExpr(exprs) { return Pattern({ type: "SequenceExpression", expressions: exprs }) }
-function newExpr(callee, args) { return Pattern({ type: "NewExpression", callee: callee, arguments: args }) }
-function callExpr(callee, args) { return Pattern({ type: "CallExpression", callee: callee, arguments: args }) }
-function arrExpr(elts) { return Pattern({ type: "ArrayExpression", elements: elts }) }
-function objExpr(elts) { return Pattern({ type: "ObjectExpression", properties: elts }) }
-function objProp(key, value, kind) { return Pattern({ type: "Property", key: key, value: value, kind: kind }) }
-
-function arrPatt(elts) { return Pattern({ type: "ArrayPattern", elements: elts }) }
-function objPatt(elts) { return Pattern({ type: "ObjectPattern", properties: elts }) }
-
-function localSrc(src) { return "(function(){ " + src + " })" }
-function localPatt(patt) { return program([exprStmt(funExpr(null, [], blockStmt([patt])))]) }
-function blockSrc(src) { return "(function(){ { " + src + " } })" }
-function blockPatt(patt) { return program([exprStmt(funExpr(null, [], blockStmt([blockStmt([patt])])))]) }
-
-function assertBlockStmt(src, patt) {
- blockPatt(patt).assert(Reflect.parse(blockSrc(src)));
-}
-
-function assertBlockExpr(src, patt) {
- assertBlockStmt(src, exprStmt(patt));
-}
-
-function assertBlockDecl(src, patt, builder) {
- blockPatt(patt).assert(Reflect.parse(blockSrc(src), {builder: builder}));
-}
-
-function assertLocalStmt(src, patt) {
- localPatt(patt).assert(Reflect.parse(localSrc(src)));
-}
-
-function assertLocalExpr(src, patt) {
- assertLocalStmt(src, exprStmt(patt));
-}
-
-function assertLocalDecl(src, patt) {
- localPatt(patt).assert(Reflect.parse(localSrc(src)));
-}
-
-function assertGlobalStmt(src, patt, builder) {
- program([patt]).assert(Reflect.parse(src, {builder: builder}));
-}
-
-function assertGlobalExpr(src, patt, builder) {
- program([exprStmt(patt)]).assert(Reflect.parse(src, {builder: builder}));
- //assertStmt(src, exprStmt(patt));
-}
-
-function assertGlobalDecl(src, patt) {
- program([patt]).assert(Reflect.parse(src));
-}
-
-function assertProg(src, patt) {
- program(patt).assert(Reflect.parse(src));
-}
-
-function assertStmt(src, patt) {
- assertLocalStmt(src, patt);
- assertGlobalStmt(src, patt);
- assertBlockStmt(src, patt);
-}
-
-function assertExpr(src, patt) {
- assertLocalExpr(src, patt);
- assertGlobalExpr(src, patt);
- assertBlockExpr(src, patt);
-}
-
-function assertDecl(src, patt) {
- assertLocalDecl(src, patt);
- assertGlobalDecl(src, patt);
- assertBlockDecl(src, patt);
-}
-
-function assertError(src, errorType) {
- try {
- Reflect.parse(src);
- } catch (e) {
- return;
- }
- throw new Error("expected " + errorType.name + " for " + uneval(src));
-}
-
-
-// general tests
-
-// NB: These are useful but for now jit-test doesn't do I/O reliably.
-
-//program(_).assert(Reflect.parse(snarf('data/flapjax.txt')));
-//program(_).assert(Reflect.parse(snarf('data/jquery-1.4.2.txt')));
-//program(_).assert(Reflect.parse(snarf('data/prototype.js')));
-//program(_).assert(Reflect.parse(snarf('data/dojo.js.uncompressed.js')));
-//program(_).assert(Reflect.parse(snarf('data/mootools-1.2.4-core-nc.js')));
-
-
-// declarations
-
-assertDecl("var x = 1, y = 2, z = 3",
- varDecl([declarator(ident("x"), lit(1)),
- declarator(ident("y"), lit(2)),
- declarator(ident("z"), lit(3))]));
-assertDecl("var x, y, z",
- varDecl([declarator(ident("x"), null),
- declarator(ident("y"), null),
- declarator(ident("z"), null)]));
-assertDecl("function foo() { }",
- funDecl(ident("foo"), [], blockStmt([])));
-assertDecl("function foo() { return 42 }",
- funDecl(ident("foo"), [], blockStmt([returnStmt(lit(42))])));
-
-
-// Bug 591437: rebound args have their defs turned into uses
-assertDecl("function f(a) { function a() { } }",
- funDecl(ident("f"), [ident("a")], blockStmt([funDecl(ident("a"), [], blockStmt([]))])));
-assertDecl("function f(a,b,c) { function b() { } }",
- funDecl(ident("f"), [ident("a"),ident("b"),ident("c")], blockStmt([funDecl(ident("b"), [], blockStmt([]))])));
-
-// expressions
-
-assertExpr("true", lit(true));
-assertExpr("false", lit(false));
-assertExpr("42", lit(42));
-assertExpr("(/asdf/)", lit(/asdf/));
-assertExpr("this", thisExpr);
-assertExpr("foo", ident("foo"));
-assertExpr("foo.bar", dotExpr(ident("foo"), ident("bar")));
-assertExpr("foo[bar]", memExpr(ident("foo"), ident("bar")));
-assertExpr("(function(){})", funExpr(null, [], blockStmt([])));
-assertExpr("(function f() {})", funExpr(ident("f"), [], blockStmt([])));
-assertExpr("(function f(x,y,z) {})", funExpr(ident("f"), [ident("x"),ident("y"),ident("z")], blockStmt([])));
-assertExpr("(++x)", updExpr("++", ident("x"), true));
-assertExpr("(x++)", updExpr("++", ident("x"), false));
-assertExpr("(+x)", unExpr("+", ident("x")));
-assertExpr("(-x)", unExpr("-", ident("x")));
-assertExpr("(!x)", unExpr("!", ident("x")));
-assertExpr("(~x)", unExpr("~", ident("x")));
-assertExpr("(delete x)", unExpr("delete", ident("x")));
-assertExpr("(typeof x)", unExpr("typeof", ident("x")));
-assertExpr("(void x)", unExpr("void", ident("x")));
-assertExpr("(x == y)", binExpr("==", ident("x"), ident("y")));
-assertExpr("(x != y)", binExpr("!=", ident("x"), ident("y")));
-assertExpr("(x === y)", binExpr("===", ident("x"), ident("y")));
-assertExpr("(x !== y)", binExpr("!==", ident("x"), ident("y")));
-assertExpr("(x < y)", binExpr("<", ident("x"), ident("y")));
-assertExpr("(x <= y)", binExpr("<=", ident("x"), ident("y")));
-assertExpr("(x > y)", binExpr(">", ident("x"), ident("y")));
-assertExpr("(x >= y)", binExpr(">=", ident("x"), ident("y")));
-assertExpr("(x << y)", binExpr("<<", ident("x"), ident("y")));
-assertExpr("(x >> y)", binExpr(">>", ident("x"), ident("y")));
-assertExpr("(x >>> y)", binExpr(">>>", ident("x"), ident("y")));
-assertExpr("(x + y)", binExpr("+", ident("x"), ident("y")));
-assertExpr("(w + x + y + z)", binExpr("+", binExpr("+", binExpr("+", ident("w"), ident("x")), ident("y")), ident("z")));
-assertExpr("(x - y)", binExpr("-", ident("x"), ident("y")));
-assertExpr("(w - x - y - z)", binExpr("-", binExpr("-", binExpr("-", ident("w"), ident("x")), ident("y")), ident("z")));
-assertExpr("(x * y)", binExpr("*", ident("x"), ident("y")));
-assertExpr("(x / y)", binExpr("/", ident("x"), ident("y")));
-assertExpr("(x % y)", binExpr("%", ident("x"), ident("y")));
-assertExpr("(x | y)", binExpr("|", ident("x"), ident("y")));
-assertExpr("(x ^ y)", binExpr("^", ident("x"), ident("y")));
-assertExpr("(x & y)", binExpr("&", ident("x"), ident("y")));
-assertExpr("(x in y)", binExpr("in", ident("x"), ident("y")));
-assertExpr("(x instanceof y)", binExpr("instanceof", ident("x"), ident("y")));
-assertExpr("(x = y)", aExpr("=", ident("x"), ident("y")));
-assertExpr("(x += y)", aExpr("+=", ident("x"), ident("y")));
-assertExpr("(x -= y)", aExpr("-=", ident("x"), ident("y")));
-assertExpr("(x *= y)", aExpr("*=", ident("x"), ident("y")));
-assertExpr("(x /= y)", aExpr("/=", ident("x"), ident("y")));
-assertExpr("(x %= y)", aExpr("%=", ident("x"), ident("y")));
-assertExpr("(x <<= y)", aExpr("<<=", ident("x"), ident("y")));
-assertExpr("(x >>= y)", aExpr(">>=", ident("x"), ident("y")));
-assertExpr("(x >>>= y)", aExpr(">>>=", ident("x"), ident("y")));
-assertExpr("(x |= y)", aExpr("|=", ident("x"), ident("y")));
-assertExpr("(x ^= y)", aExpr("^=", ident("x"), ident("y")));
-assertExpr("(x &= y)", aExpr("&=", ident("x"), ident("y")));
-assertExpr("(x || y)", logExpr("||", ident("x"), ident("y")));
-assertExpr("(x && y)", logExpr("&&", ident("x"), ident("y")));
-assertExpr("(w || x || y || z)", logExpr("||", logExpr("||", logExpr("||", ident("w"), ident("x")), ident("y")), ident("z")))
-assertExpr("(x ? y : z)", condExpr(ident("x"), ident("y"), ident("z")));
-assertExpr("(x,y)", seqExpr([ident("x"),ident("y")]))
-assertExpr("(x,y,z)", seqExpr([ident("x"),ident("y"),ident("z")]))
-assertExpr("(a,b,c,d,e,f,g)", seqExpr([ident("a"),ident("b"),ident("c"),ident("d"),ident("e"),ident("f"),ident("g")]));
-assertExpr("(new Object)", newExpr(ident("Object"), []));
-assertExpr("(new Object())", newExpr(ident("Object"), []));
-assertExpr("(new Object(42))", newExpr(ident("Object"), [lit(42)]));
-assertExpr("(new Object(1,2,3))", newExpr(ident("Object"), [lit(1),lit(2),lit(3)]));
-assertExpr("(String())", callExpr(ident("String"), []));
-assertExpr("(String(42))", callExpr(ident("String"), [lit(42)]));
-assertExpr("(String(1,2,3))", callExpr(ident("String"), [lit(1),lit(2),lit(3)]));
-assertExpr("[]", arrExpr([]));
-assertExpr("[1]", arrExpr([lit(1)]));
-assertExpr("[1,2]", arrExpr([lit(1),lit(2)]));
-assertExpr("[1,2,3]", arrExpr([lit(1),lit(2),lit(3)]));
-assertExpr("[1,,2,3]", arrExpr([lit(1),,lit(2),lit(3)]));
-assertExpr("[1,,,2,3]", arrExpr([lit(1),,,lit(2),lit(3)]));
-assertExpr("[1,,,2,,3]", arrExpr([lit(1),,,lit(2),,lit(3)]));
-assertExpr("[1,,,2,,,3]", arrExpr([lit(1),,,lit(2),,,lit(3)]));
-assertExpr("[,1,2,3]", arrExpr([,lit(1),lit(2),lit(3)]));
-assertExpr("[,,1,2,3]", arrExpr([,,lit(1),lit(2),lit(3)]));
-assertExpr("[,,,1,2,3]", arrExpr([,,,lit(1),lit(2),lit(3)]));
-assertExpr("[,,,1,2,3,]", arrExpr([,,,lit(1),lit(2),lit(3)]));
-assertExpr("[,,,1,2,3,,]", arrExpr([,,,lit(1),lit(2),lit(3),undefined]));
-assertExpr("[,,,1,2,3,,,]", arrExpr([,,,lit(1),lit(2),lit(3),undefined,undefined]));
-assertExpr("[,,,,,]", arrExpr([undefined,undefined,undefined,undefined,undefined]));
-assertExpr("({})", objExpr([]));
-assertExpr("({x:1})", objExpr([objProp(ident("x"), lit(1), "init")]));
-assertExpr("({x:1, y:2})", objExpr([objProp(ident("x"), lit(1), "init"),
- objProp(ident("y"), lit(2), "init")]));
-assertExpr("({x:1, y:2, z:3})", objExpr([objProp(ident("x"), lit(1), "init"),
- objProp(ident("y"), lit(2), "init"),
- objProp(ident("z"), lit(3), "init") ]));
-assertExpr("({x:1, 'y':2, z:3})", objExpr([objProp(ident("x"), lit(1), "init"),
- objProp(lit("y"), lit(2), "init"),
- objProp(ident("z"), lit(3), "init") ]));
-assertExpr("({'x':1, 'y':2, z:3})", objExpr([objProp(lit("x"), lit(1), "init"),
- objProp(lit("y"), lit(2), "init"),
- objProp(ident("z"), lit(3), "init") ]));
-assertExpr("({'x':1, 'y':2, 3:3})", objExpr([objProp(lit("x"), lit(1), "init"),
- objProp(lit("y"), lit(2), "init"),
- objProp(lit(3), lit(3), "init") ]));
-
-// Bug 571617: eliminate constant-folding
-assertExpr("2 + 3", binExpr("+", lit(2), lit(3)));
-
-// Bug 632026: constant-folding
-assertExpr("typeof(0?0:a)", unExpr("typeof", condExpr(lit(0), lit(0), ident("a"))));
-
-// Bug 632056: constant-folding
-program([exprStmt(ident("f")),
- ifStmt(lit(1),
- funDecl(ident("f"), [], blockStmt([])),
- null)]).assert(Reflect.parse("f; if (1) function f(){}"));
-
-// statements
-
-assertStmt("throw 42", throwStmt(lit(42)));
-assertStmt("for (;;) break", forStmt(null, null, null, breakStmt(null)));
-assertStmt("for (x; y; z) break", forStmt(ident("x"), ident("y"), ident("z"), breakStmt(null)));
-assertStmt("for (var x; y; z) break", forStmt(varDecl([declarator(ident("x"), null)]), ident("y"), ident("z"), breakStmt(null)));
-assertStmt("for (var x = 42; y; z) break", forStmt(varDecl([declarator(ident("x"), lit(42))]), ident("y"), ident("z"), breakStmt(null)));
-assertStmt("for (x; ; z) break", forStmt(ident("x"), null, ident("z"), breakStmt(null)));
-assertStmt("for (var x; ; z) break", forStmt(varDecl([declarator(ident("x"), null)]), null, ident("z"), breakStmt(null)));
-assertStmt("for (var x = 42; ; z) break", forStmt(varDecl([declarator(ident("x"), lit(42))]), null, ident("z"), breakStmt(null)));
-assertStmt("for (x; y; ) break", forStmt(ident("x"), ident("y"), null, breakStmt(null)));
-assertStmt("for (var x; y; ) break", forStmt(varDecl([declarator(ident("x"), null)]), ident("y"), null, breakStmt(null)));
-assertStmt("for (var x = 42; y; ) break", forStmt(varDecl([declarator(ident("x"),lit(42))]), ident("y"), null, breakStmt(null)));
-assertStmt("for (var x in y) break", forInStmt(varDecl([declarator(ident("x"),null)]), ident("y"), breakStmt(null)));
-assertStmt("for (x in y) break", forInStmt(ident("x"), ident("y"), breakStmt(null)));
-assertStmt("{ }", blockStmt([]));
-assertStmt("{ throw 1; throw 2; throw 3; }", blockStmt([ throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]));
-assertStmt(";", emptyStmt);
-assertStmt("if (foo) throw 42;", ifStmt(ident("foo"), throwStmt(lit(42)), null));
-assertStmt("if (foo) throw 42; else true;", ifStmt(ident("foo"), throwStmt(lit(42)), exprStmt(lit(true))));
-assertStmt("if (foo) { throw 1; throw 2; throw 3; }",
- ifStmt(ident("foo"),
- blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
- null));
-assertStmt("if (foo) { throw 1; throw 2; throw 3; } else true;",
- ifStmt(ident("foo"),
- blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
- exprStmt(lit(true))));
-assertStmt("foo: for(;;) break foo;", labStmt(ident("foo"), forStmt(null, null, null, breakStmt(ident("foo")))));
-assertStmt("foo: for(;;) continue foo;", labStmt(ident("foo"), forStmt(null, null, null, continueStmt(ident("foo")))));
-assertStmt("with (obj) { }", withStmt(ident("obj"), blockStmt([])));
-assertStmt("with (obj) { obj; }", withStmt(ident("obj"), blockStmt([exprStmt(ident("obj"))])));
-assertStmt("while (foo) { }", whileStmt(ident("foo"), blockStmt([])));
-assertStmt("while (foo) { foo; }", whileStmt(ident("foo"), blockStmt([exprStmt(ident("foo"))])));
-assertStmt("do { } while (foo);", doStmt(blockStmt([]), ident("foo")));
-assertStmt("do { foo; } while (foo)", doStmt(blockStmt([exprStmt(ident("foo"))]), ident("foo")));
-assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; }",
- switchStmt(ident("foo"),
- [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
- caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
- defaultClause([ exprStmt(lit(3)) ]) ]));
-assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; case 42: 42; }",
- switchStmt(ident("foo"),
- [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
- caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
- defaultClause([ exprStmt(lit(3)) ]),
- caseClause(lit(42), [ exprStmt(lit(42)) ]) ]));
-assertStmt("try { } catch (e) { }",
- tryStmt(blockStmt([]),
- [],
- [ catchClause(ident("e"), null, blockStmt([])) ],
- null));
-assertStmt("try { } catch (e) { } finally { }",
- tryStmt(blockStmt([]),
- [],
- [ catchClause(ident("e"), null, blockStmt([])) ],
- blockStmt([])));
-assertStmt("try { } finally { }",
- tryStmt(blockStmt([]),
- [],
- [],
- blockStmt([])));
-
-// redeclarations (TOK_NAME nodes with lexdef)
-
-assertStmt("function f() { function g() { } function g() { } }",
- funDecl(ident("f"), [], blockStmt([funDecl(ident("g"), [], blockStmt([])),
- funDecl(ident("g"), [], blockStmt([]))])));
-
-assertStmt("function f() { function g() { } function g() { return 42 } }",
- funDecl(ident("f"), [], blockStmt([funDecl(ident("g"), [], blockStmt([])),
- funDecl(ident("g"), [], blockStmt([returnStmt(lit(42))]))])));
-
-assertStmt("function f() { var x = 42; var x = 43; }",
- funDecl(ident("f"), [], blockStmt([varDecl([declarator(ident("x"),lit(42))]),
- varDecl([declarator(ident("x"),lit(43))])])));
-
-// getters and setters
-
- assertExpr("({ get x() { return 42 } })",
- objExpr([ objProp(ident("x"),
- funExpr(null, [], blockStmt([returnStmt(lit(42))])),
- "get" ) ]));
- assertExpr("({ set x(v) { return 42 } })",
- objExpr([ objProp(ident("x"),
- funExpr(null, [ident("v")], blockStmt([returnStmt(lit(42))])),
- "set" ) ]));
-
-}
-
-exports.testReflect = testReflect;
-
-}(typeof exports === 'undefined' ? this : exports));
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/run.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/run.js
deleted file mode 100644
index 0f08f1575b1..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/run.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- Copyright (C) 2012 Yusuke Suzuki
- Copyright (C) 2012 Ariya Hidayat
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*jslint node:true */
-
-(function () {
- 'use strict';
-
- var child = require('child_process'),
- nodejs = '"' + process.execPath + '"',
- ret = 0,
- suites,
- index;
-
- suites = [
- 'runner',
- 'compat',
- 'parselibs'
- ];
-
- function nextTest() {
- var suite = suites[index];
-
- if (index < suites.length) {
- child.exec(nodejs + ' ./test/' + suite + '.js', function (err, stdout, stderr) {
- if (stdout) {
- process.stdout.write(suite + ': ' + stdout);
- }
- if (stderr) {
- process.stderr.write(suite + ': ' + stderr);
- }
- if (err) {
- ret = err.code;
- }
- index += 1;
- nextTest();
- });
- } else {
- process.exit(ret);
- }
- }
-
- index = 0;
- nextTest();
-}());
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/runner.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/runner.js
deleted file mode 100644
index fe71f3dbeca..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/runner.js
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
- Copyright (C) 2012 Ariya Hidayat
- Copyright (C) 2012 Joost-Wim Boekesteijn
- Copyright (C) 2012 Yusuke Suzuki
- Copyright (C) 2012 Arpad Borsos
- Copyright (C) 2011 Ariya Hidayat
- Copyright (C) 2011 Yusuke Suzuki
- Copyright (C) 2011 Arpad Borsos
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*jslint browser:true node:true */
-/*global esprima:true, testFixture:true */
-
-var runTests;
-
-// Special handling for regular expression literal since we need to
-// convert it to a string literal, otherwise it will be decoded
-// as object "{}" and the regular expression would be lost.
-function adjustRegexLiteral(key, value) {
- 'use strict';
- if (key === 'value' && value instanceof RegExp) {
- value = value.toString();
- }
- return value;
-}
-
-function NotMatchingError(expected, actual) {
- 'use strict';
- Error.call(this, 'Expected ');
- this.expected = expected;
- this.actual = actual;
-}
-NotMatchingError.prototype = new Error();
-
-function errorToObject(e) {
- 'use strict';
- var msg = e.toString();
-
- // Opera 9.64 produces an non-standard string in toString().
- if (msg.substr(0, 6) !== 'Error:') {
- if (typeof e.message === 'string') {
- msg = 'Error: ' + e.message;
- }
- }
-
- return {
- index: e.index,
- lineNumber: e.lineNumber,
- column: e.column,
- message: msg
- };
-}
-
-function sortedObject(o) {
- if (o === null) {
- return o;
- }
- if (o instanceof Array) {
- return o.map(sortedObject);
- }
- if (typeof o !== 'object') {
- return o;
- }
- if (o instanceof RegExp) {
- return o;
- }
- var keys = Object.keys(o);
- var result = {
- range: undefined,
- loc: undefined
- };
- keys.forEach(function (key) {
- if (o.hasOwnProperty(key)){
- result[key] = sortedObject(o[key]);
- }
- });
- return result;
-}
-
-function hasAttachedComment(syntax) {
- var key;
- for (key in syntax) {
- if (key === 'leadingComments' || key === 'trailingComments') {
- return true;
- }
- if (typeof syntax[key] === 'object' && syntax[key] !== null) {
- if (hasAttachedComment(syntax[key])) {
- return true;
- }
- }
- }
- return false;
-}
-
-function testParse(esprima, code, syntax) {
- 'use strict';
- var expected, tree, actual, options, StringObject, i, len, err;
-
- // alias, so that JSLint does not complain.
- StringObject = String;
-
- options = {
- comment: (typeof syntax.comments !== 'undefined'),
- range: true,
- loc: true,
- tokens: (typeof syntax.tokens !== 'undefined'),
- raw: true,
- tolerant: (typeof syntax.errors !== 'undefined'),
- source: null
- };
-
- if (options.comment) {
- options.attachComment = hasAttachedComment(syntax);
- }
-
- if (typeof syntax.tokens !== 'undefined') {
- if (syntax.tokens.length > 0) {
- options.range = (typeof syntax.tokens[0].range !== 'undefined');
- options.loc = (typeof syntax.tokens[0].loc !== 'undefined');
- }
- }
-
- if (typeof syntax.comments !== 'undefined') {
- if (syntax.comments.length > 0) {
- options.range = (typeof syntax.comments[0].range !== 'undefined');
- options.loc = (typeof syntax.comments[0].loc !== 'undefined');
- }
- }
-
- if (options.loc) {
- options.source = syntax.loc.source;
- }
-
- syntax = sortedObject(syntax);
- expected = JSON.stringify(syntax, null, 4);
- try {
- // Some variations of the options.
- tree = esprima.parse(code, { tolerant: options.tolerant });
- tree = esprima.parse(code, { tolerant: options.tolerant, range: true });
- tree = esprima.parse(code, { tolerant: options.tolerant, loc: true });
-
- tree = esprima.parse(code, options);
- tree = (options.comment || options.tokens || options.tolerant) ? tree : tree.body[0];
-
- if (options.tolerant) {
- for (i = 0, len = tree.errors.length; i < len; i += 1) {
- tree.errors[i] = errorToObject(tree.errors[i]);
- }
- }
- tree = sortedObject(tree);
- actual = JSON.stringify(tree, adjustRegexLiteral, 4);
-
- // Only to ensure that there is no error when using string object.
- esprima.parse(new StringObject(code), options);
-
- } catch (e) {
- throw new NotMatchingError(expected, e.toString());
- }
- if (expected !== actual) {
- throw new NotMatchingError(expected, actual);
- }
-
- function filter(key, value) {
- if (key === 'value' && value instanceof RegExp) {
- value = value.toString();
- }
- return (key === 'loc' || key === 'range') ? undefined : value;
- }
-
- if (options.tolerant) {
- return;
- }
-
-
- // Check again without any location info.
- options.range = false;
- options.loc = false;
- syntax = sortedObject(syntax);
- expected = JSON.stringify(syntax, filter, 4);
- try {
- tree = esprima.parse(code, options);
- tree = (options.comment || options.tokens) ? tree : tree.body[0];
-
- if (options.tolerant) {
- for (i = 0, len = tree.errors.length; i < len; i += 1) {
- tree.errors[i] = errorToObject(tree.errors[i]);
- }
- }
- tree = sortedObject(tree);
- actual = JSON.stringify(tree, filter, 4);
- } catch (e) {
- throw new NotMatchingError(expected, e.toString());
- }
- if (expected !== actual) {
- throw new NotMatchingError(expected, actual);
- }
-}
-
-function testTokenize(esprima, code, tokens) {
- 'use strict';
- var options, expected, actual, tree;
-
- options = {
- comment: true,
- tolerant: true,
- loc: true,
- range: true
- };
-
- expected = JSON.stringify(tokens, null, 4);
-
- try {
- tree = esprima.tokenize(code, options);
- actual = JSON.stringify(tree, null, 4);
- } catch (e) {
- throw new NotMatchingError(expected, e.toString());
- }
- if (expected !== actual) {
- throw new NotMatchingError(expected, actual);
- }
-}
-
-function testError(esprima, code, exception) {
- 'use strict';
- var i, options, expected, actual, err, handleInvalidRegexFlag, tokenize;
-
- // Different parsing options should give the same error.
- options = [
- {},
- { comment: true },
- { raw: true },
- { raw: true, comment: true }
- ];
-
- // If handleInvalidRegexFlag is true, an invalid flag in a regular expression
- // will throw an exception. In some old version V8, this is not the case
- // and hence handleInvalidRegexFlag is false.
- handleInvalidRegexFlag = false;
- try {
- 'test'.match(new RegExp('[a-z]', 'x'));
- } catch (e) {
- handleInvalidRegexFlag = true;
- }
-
- exception.description = exception.message.replace(/Error: Line [0-9]+: /, '');
-
- if (exception.tokenize) {
- tokenize = true;
- exception.tokenize = undefined;
- }
- expected = JSON.stringify(exception);
-
- for (i = 0; i < options.length; i += 1) {
-
- try {
- if (tokenize) {
- esprima.tokenize(code, options[i])
- } else {
- esprima.parse(code, options[i]);
- }
- } catch (e) {
- err = errorToObject(e);
- err.description = e.description;
- actual = JSON.stringify(err);
- }
-
- if (expected !== actual) {
-
- // Compensate for old V8 which does not handle invalid flag.
- if (exception.message.indexOf('Invalid regular expression') > 0) {
- if (typeof actual === 'undefined' && !handleInvalidRegexFlag) {
- return;
- }
- }
-
- throw new NotMatchingError(expected, actual);
- }
-
- }
-}
-
-function testAPI(esprima, code, result) {
- 'use strict';
- var expected, res, actual;
-
- expected = JSON.stringify(result.result, null, 4);
- try {
- if (typeof result.property !== 'undefined') {
- res = esprima[result.property];
- } else {
- res = esprima[result.call].apply(esprima, result.args);
- }
- actual = JSON.stringify(res, adjustRegexLiteral, 4);
- } catch (e) {
- throw new NotMatchingError(expected, e.toString());
- }
- if (expected !== actual) {
- throw new NotMatchingError(expected, actual);
- }
-}
-
-function runTest(esprima, code, result) {
- 'use strict';
- if (result.hasOwnProperty('lineNumber')) {
- testError(esprima, code, result);
- } else if (result.hasOwnProperty('result')) {
- testAPI(esprima, code, result);
- } else if (result instanceof Array) {
- testTokenize(esprima, code, result);
- } else {
- testParse(esprima, code, result);
- }
-}
-
-if (typeof window !== 'undefined') {
- // Run all tests in a browser environment.
- runTests = function () {
- 'use strict';
- var total = 0,
- failures = 0,
- category,
- fixture,
- source,
- tick,
- expected,
- index,
- len;
-
- function setText(el, str) {
- if (typeof el.innerText === 'string') {
- el.innerText = str;
- } else {
- el.textContent = str;
- }
- }
-
- function startCategory(category) {
- var report, e;
- report = document.getElementById('report');
- e = document.createElement('h4');
- setText(e, category);
- report.appendChild(e);
- }
-
- function reportSuccess(code) {
- var report, e;
- report = document.getElementById('report');
- e = document.createElement('pre');
- e.setAttribute('class', 'code');
- setText(e, code);
- report.appendChild(e);
- }
-
- function reportFailure(code, expected, actual) {
- var report, e;
-
- report = document.getElementById('report');
-
- e = document.createElement('p');
- setText(e, 'Code:');
- report.appendChild(e);
-
- e = document.createElement('pre');
- e.setAttribute('class', 'code');
- setText(e, code);
- report.appendChild(e);
-
- e = document.createElement('p');
- setText(e, 'Expected');
- report.appendChild(e);
-
- e = document.createElement('pre');
- e.setAttribute('class', 'expected');
- setText(e, expected);
- report.appendChild(e);
-
- e = document.createElement('p');
- setText(e, 'Actual');
- report.appendChild(e);
-
- e = document.createElement('pre');
- e.setAttribute('class', 'actual');
- setText(e, actual);
- report.appendChild(e);
- }
-
- setText(document.getElementById('version'), esprima.version);
-
- tick = new Date();
- for (category in testFixture) {
- if (testFixture.hasOwnProperty(category)) {
- startCategory(category);
- fixture = testFixture[category];
- for (source in fixture) {
- if (fixture.hasOwnProperty(source)) {
- expected = fixture[source];
- total += 1;
- try {
- runTest(esprima, source, expected);
- reportSuccess(source, JSON.stringify(expected, null, 4));
- } catch (e) {
- failures += 1;
- reportFailure(source, e.expected, e.actual);
- }
- }
- }
- }
- }
- tick = (new Date()) - tick;
-
- if (failures > 0) {
- document.getElementById('status').className = 'alert-box alert';
- setText(document.getElementById('status'), total + ' tests. ' +
- 'Failures: ' + failures + '. ' + tick + ' ms.');
- } else {
- document.getElementById('status').className = 'alert-box success';
- setText(document.getElementById('status'), total + ' tests. ' +
- 'No failure. ' + tick + ' ms.');
- }
- };
-} else {
- (function () {
- 'use strict';
-
- var esprima = require('../esprima'),
- vm = require('vm'),
- fs = require('fs'),
- diff = require('json-diff').diffString,
- total = 0,
- failures = [],
- tick = new Date(),
- expected,
- header;
-
- vm.runInThisContext(fs.readFileSync(__dirname + '/test.js', 'utf-8'));
-
- Object.keys(testFixture).forEach(function (category) {
- Object.keys(testFixture[category]).forEach(function (source) {
- total += 1;
- expected = testFixture[category][source];
- try {
- runTest(esprima, source, expected);
- } catch (e) {
- e.source = source;
- failures.push(e);
- }
- });
- });
- tick = (new Date()) - tick;
-
- header = total + ' tests. ' + failures.length + ' failures. ' +
- tick + ' ms';
- if (failures.length) {
- console.error(header);
- failures.forEach(function (failure) {
- try {
- var expectedObject = JSON.parse(failure.expected);
- var actualObject = JSON.parse(failure.actual);
-
- console.error(failure.source + ': Expected\n ' +
- failure.expected.split('\n').join('\n ') +
- '\nto match\n ' + failure.actual + '\nDiff:\n' +
- diff(expectedObject, actualObject));
- } catch (ex) {
- console.error(failure.source + ': Expected\n ' +
- failure.expected.split('\n').join('\n ') +
- '\nto match\n ' + failure.actual);
- }
- });
- } else {
- console.log(header);
- }
- process.exit(failures.length === 0 ? 0 : 1);
- }());
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/test.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/test.js
deleted file mode 100644
index d9872d907b7..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/esprima/test/test.js
+++ /dev/null
@@ -1,25593 +0,0 @@
-/*
- Copyright (C) 2013 Mathias Bynens
- Copyright (C) 2012 Ariya Hidayat
- Copyright (C) 2012 Joost-Wim Boekesteijn
- Copyright (C) 2012 Yusuke Suzuki
- Copyright (C) 2012 Arpad Borsos
- Copyright (C) 2011 Ariya Hidayat
- Copyright (C) 2011 Yusuke Suzuki
- Copyright (C) 2011 Arpad Borsos
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-var testFixture = {
-
- 'Primary Expression': {
-
- 'this\n': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'ThisExpression',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- }],
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- },
- tokens: [{
- type: 'Keyword',
- value: 'this',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- }]
- },
-
- 'null\n': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: null,
- raw: 'null',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- }],
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- },
- tokens: [{
- type: 'Null',
- value: 'null',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- }]
- },
-
- '\n 42\n\n': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- }
- },
- range: [5, 7],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- }
- }],
- range: [5, 7],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- },
- tokens: [{
- type: 'Numeric',
- value: '42',
- range: [5, 7],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- }
- }]
- },
-
- '(1 + 2 ) * 3': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [1, 2],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 2 }
- }
- },
- right: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [1, 6],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 6 }
- }
- },
- right: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [11, 12],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- }
-
- },
-
- 'Grouping Operator': {
-
- '(1) + (2 ) + 3': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [1, 2],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 2 }
- }
- },
- right: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- right: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [14, 15],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
-
- '4 + 5 << (6)': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '<<',
- left: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Literal',
- value: 4,
- raw: '4',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 5,
- raw: '5',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Literal',
- value: 6,
- raw: '6',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- }
-
- },
-
- 'Array Initializer': {
-
- 'x = []': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- }],
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- },
- tokens: [{
- type: 'Identifier',
- value: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- }, {
- type: 'Punctuator',
- value: '=',
- range: [2, 3],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'Punctuator',
- value: '[',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'Punctuator',
- value: ']',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- }]
- },
-
- 'x = [ ]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x = [ 42 ]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [{
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [6, 8],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 8 }
- }
- }],
- range: [4, 10],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 10 }
- }
- },
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- },
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- },
-
- 'x = [ 42, ]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [{
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [6, 8],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 8 }
- }
- }],
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'x = [ ,, 42 ]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [
- null,
- null,
- {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [9, 11],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 11 }
- }
- }],
- range: [4, 13],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
-
- 'x = [ 1, 2, 3, ]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [{
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- }, {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- }],
- range: [4, 16],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- 'x = [ 1, 2,, 3, ]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [{
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- }, null, {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- }],
- range: [4, 17],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
-
- '日本語 = []': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: '日本語',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [6, 8],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
-
- 'T\u203F = []': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'T\u203F',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'T\u200C = []': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'T\u200C',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'T\u200D = []': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'T\u200D',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- '\u2163\u2161 = []': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: '\u2163\u2161',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- '\u2163\u2161\u200A=\u2009[]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: '\u2163\u2161',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- }
-
- },
-
- 'Object Initializer': {
-
- 'x = {}': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [],
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x = { }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [],
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x = { answer: 42 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'answer',
- range: [6, 12],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 12 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [14, 16],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 16 }
- }
- },
- kind: 'init',
- range: [6, 16],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 16 }
- }
- }],
- range: [4, 18],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 18 }
- }
- },
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- },
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- },
-
- 'x = { if: 42 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'if',
- range: [6, 8],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 8 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- kind: 'init',
- range: [6, 12],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 12 }
- }
- }],
- range: [4, 14],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- 'x = { true: 42 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'true',
- range: [6, 10],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 10 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [12, 14],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 14 }
- }
- },
- kind: 'init',
- range: [6, 14],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 14 }
- }
- }],
- range: [4, 16],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- 'x = { false: 42 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'false',
- range: [6, 11],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 11 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [13, 15],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 15 }
- }
- },
- kind: 'init',
- range: [6, 15],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 15 }
- }
- }],
- range: [4, 17],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
-
- 'x = { null: 42 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'null',
- range: [6, 10],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 10 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [12, 14],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 14 }
- }
- },
- kind: 'init',
- range: [6, 14],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 14 }
- }
- }],
- range: [4, 16],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- 'x = { "answer": 42 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Literal',
- value: 'answer',
- raw: '"answer"',
- range: [6, 14],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 14 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [16, 18],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 18 }
- }
- },
- kind: 'init',
- range: [6, 18],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 18 }
- }
- }],
- range: [4, 20],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 20 }
- }
- },
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
-
- 'x = { x: 1, x: 2 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [
- {
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- value: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- kind: 'init',
- range: [6, 10],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 10 }
- }
- },
- {
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'x',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- },
- value: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- },
- kind: 'init',
- range: [12, 16],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 16 }
- }
- }
- ],
- range: [4, 18],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 18 }
- }
- },
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- },
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- },
-
- 'x = { get width() { return m_width } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'width',
- range: [10, 15],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 15 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ReturnStatement',
- argument: {
- type: 'Identifier',
- name: 'm_width',
- range: [27, 34],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 34 }
- }
- },
- range: [20, 35],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 35 }
- }
- }],
- range: [18, 36],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 36 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [18, 36],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 36 }
- }
- },
- kind: 'get',
- range: [6, 36],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 36 }
- }
- }],
- range: [4, 38],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 38 }
- }
- },
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- },
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- },
-
- 'x = { get undef() {} }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'undef',
- range: [10, 15],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 15 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [18, 20],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 20 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [18, 20],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 20 }
- }
- },
- kind: 'get',
- range: [6, 20],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 20 }
- }
- }],
- range: [4, 22],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
-
- 'x = { get if() {} }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'if',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [15, 17],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 17 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [15, 17],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 17 }
- }
- },
- kind: 'get',
- range: [6, 17],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 17 }
- }
- }],
- range: [4, 19],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 19 }
- }
- },
- range: [0, 19],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 19 }
- }
- },
- range: [0, 19],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 19 }
- }
- },
-
- 'x = { get true() {} }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'true',
- range: [10, 14],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 14 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [17, 19],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 19 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [17, 19],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 19 }
- }
- },
- kind: 'get',
- range: [6, 19],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 19 }
- }
- }],
- range: [4, 21],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
-
- 'x = { get false() {} }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'false',
- range: [10, 15],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 15 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [18, 20],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 20 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [18, 20],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 20 }
- }
- },
- kind: 'get',
- range: [6, 20],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 20 }
- }
- }],
- range: [4, 22],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
-
- 'x = { get null() {} }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'null',
- range: [10, 14],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 14 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [17, 19],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 19 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [17, 19],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 19 }
- }
- },
- kind: 'get',
- range: [6, 19],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 19 }
- }
- }],
- range: [4, 21],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
-
- 'x = { get "undef"() {} }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Literal',
- value: 'undef',
- raw: '"undef"',
- range: [10, 17],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 17 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [20, 22],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 22 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [20, 22],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 22 }
- }
- },
- kind: 'get',
- range: [6, 22],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 22 }
- }
- }],
- range: [4, 24],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 24 }
- }
- },
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- }
- },
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- }
- },
-
- 'x = { get 10() {} }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Literal',
- value: 10,
- raw: '10',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [15, 17],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 17 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [15, 17],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 17 }
- }
- },
- kind: 'get',
- range: [6, 17],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 17 }
- }
- }],
- range: [4, 19],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 19 }
- }
- },
- range: [0, 19],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 19 }
- }
- },
- range: [0, 19],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 19 }
- }
- },
-
- 'x = { set width(w) { m_width = w } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'width',
- range: [10, 15],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 15 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'w',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'm_width',
- range: [21, 28],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 28 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'w',
- range: [31, 32],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 32 }
- }
- },
- range: [21, 32],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 32 }
- }
- },
- range: [21, 33],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 33 }
- }
- }],
- range: [19, 34],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 34 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [19, 34],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 34 }
- }
- },
- kind: 'set',
- range: [6, 34],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 34 }
- }
- }],
- range: [4, 36],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 36 }
- }
- },
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
-
- 'x = { set if(w) { m_if = w } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'if',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'w',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'm_if',
- range: [18, 22],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 22 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'w',
- range: [25, 26],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 26 }
- }
- },
- range: [18, 26],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 26 }
- }
- },
- range: [18, 27],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 27 }
- }
- }],
- range: [16, 28],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 28 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [16, 28],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 28 }
- }
- },
- kind: 'set',
- range: [6, 28],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 28 }
- }
- }],
- range: [4, 30],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 30 }
- }
- },
- range: [0, 30],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 30 }
- }
- },
- range: [0, 30],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 30 }
- }
- },
-
- 'x = { set true(w) { m_true = w } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'true',
- range: [10, 14],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 14 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'w',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'm_true',
- range: [20, 26],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 26 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'w',
- range: [29, 30],
- loc: {
- start: { line: 1, column: 29 },
- end: { line: 1, column: 30 }
- }
- },
- range: [20, 30],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 30 }
- }
- },
- range: [20, 31],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 31 }
- }
- }],
- range: [18, 32],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 32 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [18, 32],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 32 }
- }
- },
- kind: 'set',
- range: [6, 32],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 32 }
- }
- }],
- range: [4, 34],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 34 }
- }
- },
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- }
- },
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- }
- },
-
- 'x = { set false(w) { m_false = w } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'false',
- range: [10, 15],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 15 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'w',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'm_false',
- range: [21, 28],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 28 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'w',
- range: [31, 32],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 32 }
- }
- },
- range: [21, 32],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 32 }
- }
- },
- range: [21, 33],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 33 }
- }
- }],
- range: [19, 34],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 34 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [19, 34],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 34 }
- }
- },
- kind: 'set',
- range: [6, 34],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 34 }
- }
- }],
- range: [4, 36],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 36 }
- }
- },
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
-
- 'x = { set null(w) { m_null = w } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'null',
- range: [10, 14],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 14 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'w',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'm_null',
- range: [20, 26],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 26 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'w',
- range: [29, 30],
- loc: {
- start: { line: 1, column: 29 },
- end: { line: 1, column: 30 }
- }
- },
- range: [20, 30],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 30 }
- }
- },
- range: [20, 31],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 31 }
- }
- }],
- range: [18, 32],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 32 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [18, 32],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 32 }
- }
- },
- kind: 'set',
- range: [6, 32],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 32 }
- }
- }],
- range: [4, 34],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 34 }
- }
- },
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- }
- },
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- }
- },
-
- 'x = { set "null"(w) { m_null = w } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Literal',
- value: 'null',
- raw: '"null"',
- range: [10, 16],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 16 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'w',
- range: [17, 18],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 18 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'm_null',
- range: [22, 28],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 28 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'w',
- range: [31, 32],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 32 }
- }
- },
- range: [22, 32],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 32 }
- }
- },
- range: [22, 33],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 33 }
- }
- }],
- range: [20, 34],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 34 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [20, 34],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 34 }
- }
- },
- kind: 'set',
- range: [6, 34],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 34 }
- }
- }],
- range: [4, 36],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 36 }
- }
- },
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
-
- 'x = { set 10(w) { m_null = w } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Literal',
- value: 10,
- raw: '10',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'w',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'm_null',
- range: [18, 24],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 24 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'w',
- range: [27, 28],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 28 }
- }
- },
- range: [18, 28],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 28 }
- }
- },
- range: [18, 29],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 29 }
- }
- }],
- range: [16, 30],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 30 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [16, 30],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 30 }
- }
- },
- kind: 'set',
- range: [6, 30],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 30 }
- }
- }],
- range: [4, 32],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 32 }
- }
- },
- range: [0, 32],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 32 }
- }
- },
- range: [0, 32],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 32 }
- }
- },
-
- 'x = { get: 42 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'get',
- range: [6, 9],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 9 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [11, 13],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 13 }
- }
- },
- kind: 'init',
- range: [6, 13],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 13 }
- }
- }],
- range: [4, 15],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
-
- 'x = { set: 43 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'set',
- range: [6, 9],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 9 }
- }
- },
- value: {
- type: 'Literal',
- value: 43,
- raw: '43',
- range: [11, 13],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 13 }
- }
- },
- kind: 'init',
- range: [6, 13],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 13 }
- }
- }],
- range: [4, 15],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
-
- 'x = { __proto__: 2 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: '__proto__',
- range: [6, 15],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 15 }
- }
- },
- value: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [17, 18],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 18 }
- }
- },
- kind: 'init',
- range: [6, 18],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 18 }
- }
- }],
- range: [4, 20],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 20 }
- }
- },
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
-
- 'x = {"__proto__": 2 }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Literal',
- value: '__proto__',
- raw: '"__proto__"',
- range: [5, 16],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 16 }
- }
- },
- value: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- kind: 'init',
- range: [5, 19],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 19 }
- }
- }],
- range: [4, 21],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
-
- 'x = { get width() { return m_width }, set width(width) { m_width = width; } }': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'width',
- range: [10, 15],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 15 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ReturnStatement',
- argument: {
- type: 'Identifier',
- name: 'm_width',
- range: [27, 34],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 34 }
- }
- },
- range: [20, 35],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 35 }
- }
- }],
- range: [18, 36],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 36 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [18, 36],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 36 }
- }
- },
- kind: 'get',
- range: [6, 36],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 36 }
- }
- }, {
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'width',
- range: [42, 47],
- loc: {
- start: { line: 1, column: 42 },
- end: { line: 1, column: 47 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'width',
- range: [48, 53],
- loc: {
- start: { line: 1, column: 48 },
- end: { line: 1, column: 53 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'm_width',
- range: [57, 64],
- loc: {
- start: { line: 1, column: 57 },
- end: { line: 1, column: 64 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'width',
- range: [67, 72],
- loc: {
- start: { line: 1, column: 67 },
- end: { line: 1, column: 72 }
- }
- },
- range: [57, 72],
- loc: {
- start: { line: 1, column: 57 },
- end: { line: 1, column: 72 }
- }
- },
- range: [57, 73],
- loc: {
- start: { line: 1, column: 57 },
- end: { line: 1, column: 73 }
- }
- }],
- range: [55, 75],
- loc: {
- start: { line: 1, column: 55 },
- end: { line: 1, column: 75 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [55, 75],
- loc: {
- start: { line: 1, column: 55 },
- end: { line: 1, column: 75 }
- }
- },
- kind: 'set',
- range: [38, 75],
- loc: {
- start: { line: 1, column: 38 },
- end: { line: 1, column: 75 }
- }
- }],
- range: [4, 77],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 77 }
- }
- },
- range: [0, 77],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 77 }
- }
- },
- range: [0, 77],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 77 }
- }
- }
-
-
- },
-
- 'Comments': {
-
- '/* block comment */ 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [20, 22],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 22 }
- }
- },
- range: [20, 22],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 22 }
- }
- },
-
- '42 /* block comment 1 */ /* block comment 2 */': {
- "type": "Program",
- "body": [
- {
- "type": "ExpressionStatement",
- "expression": {
- "type": "Literal",
- "value": 42,
- "raw": "42",
- "range": [
- 0,
- 2
- ],
- "trailingComments": [
- {
- "type": "Block",
- "value": " block comment 1 ",
- "range": [
- 3,
- 24
- ]
- },
- {
- "type": "Block",
- "value": " block comment 2 ",
- "range": [
- 25,
- 46
- ]
- }
- ]
- },
- "range": [
- 0,
- 46
- ]
- }
- ],
- "range": [
- 0,
- 46
- ],
- "comments": [
- {
- "type": "Block",
- "value": " block comment 1 ",
- "range": [
- 3,
- 24
- ]
- },
- {
- "type": "Block",
- "value": " block comment 2 ",
- "range": [
- 25,
- 46
- ]
- }
- ],
- "tokens": [
- {
- "type": "Numeric",
- "range": [
- 0,
- 2
- ],
- "value": "42"
- }
- ]
- },
-
- 'var p1;/* block comment 1 */ /* block comment 2 */': {
- "range": [
- 0,
- 7
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 7
- }
- },
- "type": "Program",
- "body": [
- {
- "range": [
- 0,
- 7
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 7
- }
- },
- "type": "VariableDeclaration",
- "declarations": [
- {
- "range": [
- 4,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 4
- },
- "end": {
- "line": 1,
- "column": 6
- }
- },
- "type": "VariableDeclarator",
- "id": {
- "range": [
- 4,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 4
- },
- "end": {
- "line": 1,
- "column": 6
- }
- },
- "type": "Identifier",
- "name": "p1"
- },
- "init": null
- }
- ],
- "kind": "var",
- "trailingComments": [
- {
- "range": [
- 7,
- 28
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 7
- },
- "end": {
- "line": 1,
- "column": 28
- }
- },
- "type": "Block",
- "value": " block comment 1 "
- },
- {
- "range": [
- 29,
- 50
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 29
- },
- "end": {
- "line": 1,
- "column": 50
- }
- },
- "type": "Block",
- "value": " block comment 2 "
- }
- ]
- }
- ],
- "comments": [
- {
- "range": [
- 7,
- 28
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 7
- },
- "end": {
- "line": 1,
- "column": 28
- }
- },
- "type": "Block",
- "value": " block comment 1 "
- },
- {
- "range": [
- 29,
- 50
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 29
- },
- "end": {
- "line": 1,
- "column": 50
- }
- },
- "type": "Block",
- "value": " block comment 2 "
- }
- ],
- "tokens": [
- {
- "range": [
- 0,
- 3
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 3
- }
- },
- "type": "Keyword",
- "value": "var"
- },
- {
- "range": [
- 4,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 4
- },
- "end": {
- "line": 1,
- "column": 6
- }
- },
- "type": "Identifier",
- "value": "p1"
- },
- {
- "range": [
- 6,
- 7
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 6
- },
- "end": {
- "line": 1,
- "column": 7
- }
- },
- "type": "Punctuator",
- "value": ";"
- }
- ]
- },
-
- '/*42*/': {
- "range": [
- 6,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 6
- },
- "end": {
- "line": 1,
- "column": 6
- }
- },
- "type": "Program",
- "body": [],
- "leadingComments": [
- {
- "range": [
- 0,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 6
- }
- },
- "type": "Block",
- "value": "42"
- }
- ],
- "comments": [
- {
- "range": [
- 0,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 6
- }
- },
- "type": "Block",
- "value": "42"
- }
- ],
- "tokens": []
- },
-
- '(a + /* assignmenr */b ) * c': {
- "type": "Program",
- "body": [
- {
- "type": "ExpressionStatement",
- "expression": {
- "type": "BinaryExpression",
- "operator": "*",
- "left": {
- "type": "BinaryExpression",
- "operator": "+",
- "left": {
- "type": "Identifier",
- "name": "a",
- "range": [
- 1,
- 2
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 1
- },
- "end": {
- "line": 1,
- "column": 2
- }
- }
- },
- "right": {
- "type": "Identifier",
- "name": "b",
- "range": [
- 21,
- 22
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 21
- },
- "end": {
- "line": 1,
- "column": 22
- }
- },
- "leadingComments": [
- {
- "type": "Block",
- "value": " assignmenr ",
- "range": [
- 5,
- 21
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 5
- },
- "end": {
- "line": 1,
- "column": 21
- }
- }
- }
- ]
- },
- "range": [
- 1,
- 22
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 1
- },
- "end": {
- "line": 1,
- "column": 22
- }
- }
- },
- "right": {
- "type": "Identifier",
- "name": "c",
- "range": [
- 27,
- 28
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 27
- },
- "end": {
- "line": 1,
- "column": 28
- }
- }
- },
- "range": [
- 0,
- 28
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 28
- }
- }
- },
- "range": [
- 0,
- 28
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 28
- }
- }
- }
- ],
- "range": [
- 0,
- 28
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 28
- }
- },
- "comments": [
- {
- "type": "Block",
- "value": " assignmenr ",
- "range": [
- 5,
- 21
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 5
- },
- "end": {
- "line": 1,
- "column": 21
- }
- }
- }
- ]
- },
-
- '/* assignmenr */\n a = b': {
- "type": "Program",
- "body": [
- {
- "type": "ExpressionStatement",
- "expression": {
- "type": "AssignmentExpression",
- "operator": "=",
- "left": {
- "type": "Identifier",
- "name": "a",
- "range": [
- 18,
- 19
- ],
- "loc": {
- "start": {
- "line": 2,
- "column": 1
- },
- "end": {
- "line": 2,
- "column": 2
- }
- }
- },
- "right": {
- "type": "Identifier",
- "name": "b",
- "range": [
- 22,
- 23
- ],
- "loc": {
- "start": {
- "line": 2,
- "column": 5
- },
- "end": {
- "line": 2,
- "column": 6
- }
- }
- },
- "range": [
- 18,
- 23
- ],
- "loc": {
- "start": {
- "line": 2,
- "column": 1
- },
- "end": {
- "line": 2,
- "column": 6
- }
- }
- },
- "range": [
- 18,
- 23
- ],
- "loc": {
- "start": {
- "line": 2,
- "column": 1
- },
- "end": {
- "line": 2,
- "column": 6
- }
- },
- "leadingComments": [
- {
- "type": "Block",
- "value": " assignmenr ",
- "range": [
- 0,
- 16
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 16
- }
- }
- }
- ]
- }
- ],
- "range": [
- 18,
- 23
- ],
- "loc": {
- "start": {
- "line": 2,
- "column": 1
- },
- "end": {
- "line": 2,
- "column": 6
- }
- },
- "comments": [
- {
- "type": "Block",
- "value": " assignmenr ",
- "range": [
- 0,
- 16
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 16
- }
- }
- }
- ]
- },
-
- '42 /*The*/ /*Answer*/': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- }],
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- },
- comments: [{
- type: 'Block',
- value: 'The',
- range: [3, 10],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 10 }
- }
- }, {
- type: 'Block',
- value: 'Answer',
- range: [11, 21],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 21 }
- }
- }]
- },
-
- '42 /*the*/ /*answer*/': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [0, 2]
- },
- range: [0, 21]
- }],
- range: [0, 21],
- comments: [{
- type: 'Block',
- value: 'the',
- range: [3, 10]
- }, {
- type: 'Block',
- value: 'answer',
- range: [11, 21]
- }]
- },
-
- '42 /* the * answer */': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
-
- '42 /* The * answer */': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- }],
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- },
- comments: [{
- type: 'Block',
- value: ' The * answer ',
- range: [3, 21],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 21 }
- }
- }]
- },
-
- '/* multiline\ncomment\nshould\nbe\nignored */ 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [42, 44],
- loc: {
- start: { line: 5, column: 11 },
- end: { line: 5, column: 13 }
- }
- },
- range: [42, 44],
- loc: {
- start: { line: 5, column: 11 },
- end: { line: 5, column: 13 }
- }
- },
-
- '/*a\r\nb*/ 42': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [9, 11],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- }
- },
- range: [9, 11],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- },
- leadingComments: [{
- type: 'Block',
- value: 'a\r\nb',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 3 }
- }
- }]
- }],
- range: [9, 11],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- },
- comments: [{
- type: 'Block',
- value: 'a\r\nb',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 3 }
- }
- }]
- },
-
- '/*a\rb*/ 42': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- }
- },
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- }
- }],
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- },
- comments: [{
- type: 'Block',
- value: 'a\rb',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 3 }
- }
- }]
- },
-
- '/*a\nb*/ 42': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- }
- },
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- },
- leadingComments: [{
- type: 'Block',
- value: 'a\nb',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 3 }
- }
- }]
- }],
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- },
- comments: [{
- type: 'Block',
- value: 'a\nb',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 3 }
- }
- }]
- },
-
- '/*a\nc*/ 42': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- }
- },
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- },
- leadingComments: [{
- type: 'Block',
- value: 'a\nc',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 3 }
- }
- }]
- }],
- range: [8, 10],
- loc: {
- start: { line: 2, column: 4 },
- end: { line: 2, column: 6 }
- },
- comments: [{
- type: 'Block',
- value: 'a\nc',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 3 }
- }
- }]
- },
-
- '// one\\n': {
- type: 'Program',
- body: [],
- range: [8, 8],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 8 }
- },
- leadingComments: [{
- type: 'Line',
- value: ' one\\n',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- }],
- comments: [{
- type: 'Line',
- value: ' one\\n',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- }]
- },
-
- '// line comment\n42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [16, 18],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- }
- },
- range: [16, 18],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- }
- },
-
- '42 // line comment': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- },
- trailingComments: [{
- type: 'Line',
- value: ' line comment',
- range: [3, 18],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 18 }
- }
- }]
- },
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- }],
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- },
- comments: [{
- type: 'Line',
- value: ' line comment',
- range: [3, 18],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 18 }
- }
- }]
- },
-
- '// Hello, world!\n42': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [17, 19],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- }
- },
- range: [17, 19],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- },
- leadingComments: [{
- type: 'Line',
- value: ' Hello, world!',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }]
- }],
- range: [17, 19],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- },
- comments: [{
- type: 'Line',
- value: ' Hello, world!',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }]
- },
-
- '// Hello, world!\n': {
- type: 'Program',
- body: [],
- range: [17, 17],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 0 }
- },
- comments: [{
- type: 'Line',
- value: ' Hello, world!',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }]
- },
-
- '// Hallo, world!\n': {
- type: 'Program',
- body: [],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 0 }
- },
- comments: [{
- type: 'Line',
- value: ' Hallo, world!',
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }]
- },
-
- '//\n42': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [3, 5],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- }
- },
- range: [3, 5],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- },
- leadingComments: [{
- type: 'Line',
- value: '',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- }]
- }],
- range: [3, 5],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- },
- comments: [{
- type: 'Line',
- value: '',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- }]
- },
-
- '//': {
- type: 'Program',
- body: [],
- range: [2, 2],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 2 }
- },
- comments: [{
- type: 'Line',
- value: '',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- }]
- },
-
- '// ': {
- type: 'Program',
- body: [],
- range: [3, 3],
- comments: [{
- type: 'Line',
- value: ' ',
- range: [0, 3]
- }]
- },
-
- '/**/42': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- }
- },
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- },
- leadingComments: [{
- type: 'Block',
- value: '',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- }]
- }],
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- },
- comments: [{
- type: 'Block',
- value: '',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- }]
- },
-
- '42/**/': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- },
- trailingComments: [{
- type: 'Block',
- value: '',
- range: [2, 6],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 6 }
- }
- }]
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- }],
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- },
- comments: [{
- type: 'Block',
- value: '',
- range: [2, 6],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 6 }
- }
- }]
- },
-
- '// Hello, world!\n\n// Another hello\n42': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [37, 39],
- loc: {
- start: { line: 4, column: 0 },
- end: { line: 4, column: 2 }
- }
- },
- range: [37, 39],
- loc: {
- start: { line: 4, column: 0 },
- end: { line: 4, column: 2 }
- },
- leadingComments: [{
- type: 'Line',
- value: ' Hello, world!',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }, {
- type: 'Line',
- value: ' Another hello',
- range: [18, 36],
- loc: {
- start: { line: 3, column: 0 },
- end: { line: 3, column: 18 }
- }
- }]
- }],
- range: [37, 39],
- loc: {
- start: { line: 4, column: 0 },
- end: { line: 4, column: 2 }
- },
- comments: [{
- type: 'Line',
- value: ' Hello, world!',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }, {
- type: 'Line',
- value: ' Another hello',
- range: [18, 36],
- loc: {
- start: { line: 3, column: 0 },
- end: { line: 3, column: 18 }
- }
- }]
- },
-
- 'if (x) { doThat() // Some comment\n }': {
- type: 'Program',
- body: [{
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- consequent: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doThat',
- range: [9, 15],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 15 }
- }
- },
- 'arguments': [],
- range: [9, 17],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 17 }
- }
- },
- range: [9, 17],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 17 }
- },
- trailingComments: [{
- type: 'Line',
- value: ' Some comment',
- range: [18, 33],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 33 }
- }
- }]
- }],
- range: [7, 36],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 2, column: 2 }
- }
- },
- alternate: null,
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 2 }
- }
- }],
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 2 }
- },
- comments: [{
- type: 'Line',
- value: ' Some comment',
- range: [18, 33],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 33 }
- }
- }]
- },
-
- 'if (x) { // Some comment\ndoThat(); }': {
- type: 'Program',
- body: [{
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- consequent: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doThat',
- range: [25, 31],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 6 }
- }
- },
- 'arguments': [],
- range: [25, 33],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 8 }
- }
- },
- range: [25, 34],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 9 }
- },
- leadingComments: [{
- type: 'Line',
- value: ' Some comment',
- range: [9, 24],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 24 }
- }
- }]
- }],
- range: [7, 36],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 2, column: 11 }
- }
- },
- alternate: null,
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 11 }
- }
- }],
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 11 }
- },
- comments: [{
- type: 'Line',
- value: ' Some comment',
- range: [9, 24],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 24 }
- }
- }]
- },
-
- 'if (x) { /* Some comment */ doThat() }': {
- type: 'Program',
- body: [{
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- consequent: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doThat',
- range: [28, 34],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 34 }
- }
- },
- 'arguments': [],
- range: [28, 36],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 36 }
- }
- },
- range: [28, 37],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 37 }
- },
- leadingComments: [{
- type: 'Block',
- value: ' Some comment ',
- range: [9, 27],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 27 }
- }
- }]
- }],
- range: [7, 38],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 38 }
- }
- },
- alternate: null,
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- }],
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- },
- comments: [{
- type: 'Block',
- value: ' Some comment ',
- range: [9, 27],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 27 }
- }
- }]
- },
-
- 'if (x) { doThat() /* Some comment */ }': {
- type: 'Program',
- body: [{
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- consequent: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doThat',
- range: [9, 15],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 15 }
- }
- },
- 'arguments': [],
- range: [9, 17],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 17 }
- },
- trailingComments: [{
- type: 'Block',
- value: ' Some comment ',
- range: [18, 36],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 36 }
- }
- }]
- },
- range: [9, 37],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 37 }
- }
- }],
- range: [7, 38],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 38 }
- }
- },
- alternate: null,
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- }],
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- },
- comments: [{
- type: 'Block',
- value: ' Some comment ',
- range: [18, 36],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 36 }
- }
- }]
- },
-
- 'switch (answer) { case 42: /* perfect */ bingo() }': {
- type: 'Program',
- body: [{
- type: 'SwitchStatement',
- discriminant: {
- type: 'Identifier',
- name: 'answer',
- range: [8, 14],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 14 }
- }
- },
- cases: [{
- type: 'SwitchCase',
- test: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [23, 25],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 25 }
- }
- },
- consequent: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'bingo',
- range: [41, 46],
- loc: {
- start: { line: 1, column: 41 },
- end: { line: 1, column: 46 }
- }
- },
- 'arguments': [],
- range: [41, 48],
- loc: {
- start: { line: 1, column: 41 },
- end: { line: 1, column: 48 }
- }
- },
- range: [41, 49],
- loc: {
- start: { line: 1, column: 41 },
- end: { line: 1, column: 49 }
- },
- leadingComments: [{
- type: 'Block',
- value: ' perfect ',
- range: [27, 40],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 40 }
- }
- }]
- }],
- range: [18, 49],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 49 }
- }
- }],
- range: [0, 50],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 50 }
- }
- }],
- range: [0, 50],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 50 }
- },
- comments: [{
- type: 'Block',
- value: ' perfect ',
- range: [27, 40],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 40 }
- }
- }]
- },
-
- 'switch (answer) { case 42: bingo() /* perfect */ }': {
- type: 'Program',
- body: [{
- type: 'SwitchStatement',
- discriminant: {
- type: 'Identifier',
- name: 'answer',
- range: [8, 14],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 14 }
- }
- },
- cases: [{
- type: 'SwitchCase',
- test: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [23, 25],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 25 }
- }
- },
- consequent: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'bingo',
- range: [27, 32],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 32 }
- }
- },
- 'arguments': [],
- range: [27, 34],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 34 }
- },
- trailingComments: [{
- type: 'Block',
- value: ' perfect ',
- range: [35, 48],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 48 }
- }
- }]
- },
- range: [27, 49],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 49 }
- }
- }],
- range: [18, 49],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 49 }
- }
- }],
- range: [0, 50],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 50 }
- }
- }],
- range: [0, 50],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 50 }
- },
- comments: [{
- type: 'Block',
- value: ' perfect ',
- range: [35, 48],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 48 }
- }
- }]
- },
-
- '/* header */ (function(){ var version = 1; }).call(this)': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'version',
- range: [30, 37],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 37 }
- }
- },
- init: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [40, 41],
- loc: {
- start: { line: 1, column: 40 },
- end: { line: 1, column: 41 }
- }
- },
- range: [30, 41],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 41 }
- }
- }],
- kind: 'var',
- range: [26, 42],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 42 }
- }
- }],
- range: [24, 44],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 44 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [14, 44],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 44 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'call',
- range: [46, 50],
- loc: {
- start: { line: 1, column: 46 },
- end: { line: 1, column: 50 }
- }
- },
- range: [13, 50],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 50 }
- }
- },
- 'arguments': [{
- type: 'ThisExpression',
- range: [51, 55],
- loc: {
- start: { line: 1, column: 51 },
- end: { line: 1, column: 55 }
- }
- }],
- range: [13, 56],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 56 }
- }
- },
- range: [13, 56],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 56 }
- },
- leadingComments: [{
- type: 'Block',
- value: ' header ',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- }]
- }],
- range: [13, 56],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 56 }
- },
- comments: [{
- type: 'Block',
- value: ' header ',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- }]
- },
-
- '(function(){ var version = 1; /* sync */ }).call(this)': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'version',
- range: [17, 24],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 24 }
- }
- },
- init: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [27, 28],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 28 }
- }
- },
- range: [17, 28],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 28 }
- }
- }],
- kind: 'var',
- range: [13, 29],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 29 }
- },
- trailingComments: [{
- type: 'Block',
- value: ' sync ',
- range: [30, 40],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 40 }
- }
- }]
- }],
- range: [11, 42],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 42 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 42],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 42 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'call',
- range: [44, 48],
- loc: {
- start: { line: 1, column: 44 },
- end: { line: 1, column: 48 }
- },
- leadingComments: [{
- type: 'Block',
- value: ' sync ',
- range: [30, 40],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 40 }
- }
- }]
- },
- range: [0, 48],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 48 }
- }
- },
- 'arguments': [{
- type: 'ThisExpression',
- range: [49, 53],
- loc: {
- start: { line: 1, column: 49 },
- end: { line: 1, column: 53 }
- }
- }],
- range: [0, 54],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 54 }
- }
- },
- range: [0, 54],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 54 }
- }
- }],
- range: [0, 54],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 54 }
- },
- comments: [{
- type: 'Block',
- value: ' sync ',
- range: [30, 40],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 40 }
- }
- }]
- },
-
- 'function f() { /* infinite */ while (true) { } /* bar */ var each; }': {
- type: 'Program',
- body: [{
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'f',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [37, 41],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 41 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [],
- range: [43, 46],
- loc: {
- start: { line: 1, column: 43 },
- end: { line: 1, column: 46 }
- }
- },
- range: [30, 46],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 46 }
- },
- leadingComments: [{
- type: 'Block',
- value: ' infinite ',
- range: [15, 29],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 29 }
- }
- }],
- trailingComments: [{
- type: 'Block',
- value: ' bar ',
- range: [47, 56],
- loc: {
- start: { line: 1, column: 47 },
- end: { line: 1, column: 56 }
- }
- }]
- }, {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'each',
- range: [61, 65],
- loc: {
- start: { line: 1, column: 61 },
- end: { line: 1, column: 65 }
- }
- },
- init: null,
- range: [61, 65],
- loc: {
- start: { line: 1, column: 61 },
- end: { line: 1, column: 65 }
- }
- }],
- kind: 'var',
- range: [57, 66],
- loc: {
- start: { line: 1, column: 57 },
- end: { line: 1, column: 66 }
- },
- leadingComments: [{
- type: 'Block',
- value: ' bar ',
- range: [47, 56],
- loc: {
- start: { line: 1, column: 47 },
- end: { line: 1, column: 56 }
- }
- }]
- }],
- range: [13, 68],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 68 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 68],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 68 }
- }
- }],
- range: [0, 68],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 68 }
- },
- comments: [{
- type: 'Block',
- value: ' infinite ',
- range: [15, 29],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 29 }
- }
- }, {
- type: 'Block',
- value: ' bar ',
- range: [47, 56],
- loc: {
- start: { line: 1, column: 47 },
- end: { line: 1, column: 56 }
- }
- }]
- },
-
- ' comment': {
- type: 'Program',
- body: [],
- range: [11, 11],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 11 }
- },
- comments: [{
- type: 'Line',
- value: ' comment',
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- }]
- },
-
- ' comment': {
- type: 'Program',
- body: [],
- range: [14, 14],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 14 }
- },
- comments: [{
- type: 'Line',
- value: ' comment',
- range: [3, 14],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 14 }
- }
- }]
- },
-
- ' \t /* block comment */ --> comment': {
- type: 'Program',
- body: [],
- range: [35, 35],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 35 }
- },
- comments: [{
- type: 'Block',
- value: ' block comment ',
- range: [3, 22],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 22 }
- }
- }, {
- type: 'Line',
- value: ' comment',
- range: [24, 35],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 35 }
- }
- }]
- },
-
- '/* block comment */--> comment': {
- type: 'Program',
- body: [],
- range: [30, 30],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 30 }
- },
- comments: [{
- type: 'Block',
- value: ' block comment ',
- range: [0, 19],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 19 }
- }
- }, {
- type: 'Line',
- value: ' comment',
- range: [19, 30],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 30 }
- }
- }]
- },
-
- '/* not comment*/; i-->0': {
- type: 'Program',
- body: [{
- type: 'EmptyStatement',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '>',
- left: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'i',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- prefix: false,
- range: [18, 21],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 21 }
- }
- },
- right: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- },
- range: [18, 23],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 23 }
- }
- },
- range: [18, 23],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 23 }
- }
- }],
- range: [16, 23],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 23 }
- },
- tokens: [{
- type: 'Punctuator',
- value: ';',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- }, {
- type: 'Identifier',
- value: 'i',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- }, {
- type: 'Punctuator',
- value: '--',
- range: [19, 21],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 21 }
- }
- }, {
- type: 'Punctuator',
- value: '>',
- range: [21, 22],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 22 }
- }
- }, {
- type: 'Numeric',
- value: '0',
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- }]
-
- },
-
- 'while (i-->0) {}': {
- type: 'WhileStatement',
- test: {
- type: 'BinaryExpression',
- operator: '>',
- left: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'i',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- prefix: false,
- range: [7, 10],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 10 }
- }
- },
- right: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [11, 12],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 12 }
- }
- },
- range: [7, 12],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 12 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [],
- range: [14, 16],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }
- },
-
- 'Numeric Literals': {
-
- '0': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
-
- '42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
-
- '3': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [0, 1]
- },
- range: [0, 1]
- }],
- range: [0, 1],
- tokens: [{
- type: 'Numeric',
- value: '3',
- range: [0, 1]
- }]
- },
-
- '5': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 5,
- raw: '5',
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- }],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- },
- tokens: [{
- type: 'Numeric',
- value: '5',
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- }]
- },
-
- '.14': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0.14,
- raw: '.14',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
-
- '3.14159': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 3.14159,
- raw: '3.14159',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- '6.02214179e+23': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 6.02214179e+23,
- raw: '6.02214179e+23',
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- '1.492417830e-10': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 1.49241783e-10,
- raw: '1.492417830e-10',
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
-
- '0x0': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0,
- raw: '0x0',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
-
- '0x0;': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0,
- raw: '0x0',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
-
- '0e+100 ': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0,
- raw: '0e+100',
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- '0e+100': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0,
- raw: '0e+100',
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- '0xabc': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0xabc,
- raw: '0xabc',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- '0xdef': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0xdef,
- raw: '0xdef',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- '0X1A': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0x1A,
- raw: '0X1A',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
-
- '0x10': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0x10,
- raw: '0x10',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
-
- '0x100': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0x100,
- raw: '0x100',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- '0X04': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0X04,
- raw: '0X04',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
-
- '02': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 2,
- raw: '02',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
-
- '012': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 10,
- raw: '012',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
-
- '0012': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 10,
- raw: '0012',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
-
- '08': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 8,
- raw: '08',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
-
- '0008': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 8,
- raw: '0008',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
-
- '09': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 9,
- raw: '09',
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
-
- '09.5': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 9.5,
- raw: '09.5',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- }
-
- },
-
- 'String Literals': {
-
- '"Hello"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello',
- raw: '"Hello"',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- '"\\n\\r\\t\\v\\b\\f\\\\\\\'\\"\\0"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: '\n\r\t\x0B\b\f\\\'"\x00',
- raw: '"\\n\\r\\t\\v\\b\\f\\\\\\\'\\"\\0"',
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
-
- '"\\u0061"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'a',
- raw: '"\\u0061"',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
-
- '"\\x61"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'a',
- raw: '"\\x61"',
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- '"\\u00"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'u00',
- raw: '"\\u00"',
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- '"\\xt"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'xt',
- raw: '"\\xt"',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- '"Hello\\nworld"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\nworld',
- raw: '"Hello\\nworld"',
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- '"Hello\\\nworld"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Helloworld',
- raw: '"Hello\\\nworld"',
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 6 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 6 }
- }
- },
-
- '"Hello\\02World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\u0002World',
- raw: '"Hello\\02World"',
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
-
- '"Hello\\012World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\u000AWorld',
- raw: '"Hello\\012World"',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- '"Hello\\122World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\122World',
- raw: '"Hello\\122World"',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- '"Hello\\0122World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\u000A2World',
- raw: '"Hello\\0122World"',
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
-
- '"Hello\\312World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\u00CAWorld',
- raw: '"Hello\\312World"',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- '"Hello\\412World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\412World',
- raw: '"Hello\\412World"',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- '"Hello\\812World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello812World',
- raw: '"Hello\\812World"',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- '"Hello\\712World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\712World',
- raw: '"Hello\\712World"',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- '"Hello\\0World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\u0000World',
- raw: '"Hello\\0World"',
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- '"Hello\\\r\nworld"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Helloworld',
- raw: '"Hello\\\r\nworld"',
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 6 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 6 }
- }
- },
-
- '"Hello\\1World"': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'Hello\u0001World',
- raw: '"Hello\\1World"',
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- }
- },
-
- 'Regular Expression Literals': {
-
- 'var x = /[a-z]/i': {
- type: 'Program',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'Literal',
- value: '/[a-z]/i',
- raw: '/[a-z]/i',
- range: [8, 16],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 16 }
- }
- },
- range: [4, 16],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 16 }
- }
- }],
- kind: 'var',
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }],
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- },
- tokens: [{
- type: 'Keyword',
- value: 'var',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'Identifier',
- value: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'Punctuator',
- value: '=',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'RegularExpression',
- value: '/[a-z]/i',
- range: [8, 16],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 16 }
- }
- }]
- },
-
- 'var x = /[x-z]/i': {
- type: 'Program',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5]
- },
- init: {
- type: 'Literal',
- value: '/[x-z]/i',
- raw: '/[x-z]/i',
- range: [8, 16]
- },
- range: [4, 16]
- }],
- kind: 'var',
- range: [0, 16]
- }],
- range: [0, 16],
- tokens: [{
- type: 'Keyword',
- value: 'var',
- range: [0, 3]
- }, {
- type: 'Identifier',
- value: 'x',
- range: [4, 5]
- }, {
- type: 'Punctuator',
- value: '=',
- range: [6, 7]
- }, {
- type: 'RegularExpression',
- value: '/[x-z]/i',
- range: [8, 16]
- }]
- },
-
- 'var x = /[a-c]/i': {
- type: 'Program',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'Literal',
- value: '/[a-c]/i',
- raw: '/[a-c]/i',
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 16 }
- }
- },
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 16 }
- }
- }],
- kind: 'var',
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- },
- tokens: [{
- type: 'Keyword',
- value: 'var',
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'Identifier',
- value: 'x',
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'Punctuator',
- value: '=',
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'RegularExpression',
- value: '/[a-c]/i',
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 16 }
- }
- }]
- },
-
- 'var x = /[P QR]/i': {
- type: 'Program',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'Literal',
- value: '/[P QR]/i',
- raw: '/[P QR]/i',
- range: [8, 17],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 17 }
- }
- },
- range: [4, 17],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 17 }
- }
- }],
- kind: 'var',
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- }],
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- },
- tokens: [{
- type: 'Keyword',
- value: 'var',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'Identifier',
- value: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'Punctuator',
- value: '=',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'RegularExpression',
- value: '/[P QR]/i',
- range: [8, 17],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 17 }
- }
- }]
- },
-
- 'var x = /[\\]/]/': {
- type: 'Program',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'Literal',
- value: new RegExp('[\\]/]').toString(),
- raw: '/[\\]/]/',
- range: [8, 15],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 15 }
- }
- },
- range: [4, 15],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 15 }
- }
- }],
- kind: 'var',
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- }],
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- },
- tokens: [{
- type: 'Keyword',
- value: 'var',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'Identifier',
- value: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'Punctuator',
- value: '=',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'RegularExpression',
- value: '/[\\]/]/',
- range: [8, 15],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 15 }
- }
- }]
- },
-
- 'var x = /foo\\/bar/': {
- type: 'Program',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'Literal',
- value: '/foo\\/bar/',
- raw: '/foo\\/bar/',
- range: [8, 18],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 18 }
- }
- },
- range: [4, 18],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 18 }
- }
- }],
- kind: 'var',
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- }],
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- },
- tokens: [{
- type: 'Keyword',
- value: 'var',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'Identifier',
- value: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'Punctuator',
- value: '=',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'RegularExpression',
- value: '/foo\\/bar/',
- range: [8, 18],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 18 }
- }
- }]
- },
-
- 'var x = /=([^=\\s])+/g': {
- type: 'Program',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'Literal',
- value: '/=([^=\\s])+/g',
- raw: '/=([^=\\s])+/g',
- range: [8, 21],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 21 }
- }
- },
- range: [4, 21],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 21 }
- }
- }],
- kind: 'var',
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- }],
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- },
- tokens: [{
- type: 'Keyword',
- value: 'var',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'Identifier',
- value: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'Punctuator',
- value: '=',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'RegularExpression',
- value: '/=([^=\\s])+/g',
- range: [8, 21],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 21 }
- }
- }]
- },
-
- 'var x = /42/g.test': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Literal',
- value: '/42/g',
- raw: '/42/g',
- range: [8, 13],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 13 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'test',
- range: [14, 18],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 18 }
- }
- },
- range: [8, 18],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 18 }
- }
- },
- range: [4, 18],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 18 }
- }
- }],
- kind: 'var',
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- }
-
- },
-
- 'Left-Hand-Side Expression': {
-
- 'new Button': {
- type: 'ExpressionStatement',
- expression: {
- type: 'NewExpression',
- callee: {
- type: 'Identifier',
- name: 'Button',
- range: [4, 10],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 10 }
- }
- },
- 'arguments': [],
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- },
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- },
-
- 'new Button()': {
- type: 'ExpressionStatement',
- expression: {
- type: 'NewExpression',
- callee: {
- type: 'Identifier',
- name: 'Button',
- range: [4, 10],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 10 }
- }
- },
- 'arguments': [],
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
-
- 'new new foo': {
- type: 'ExpressionStatement',
- expression: {
- type: 'NewExpression',
- callee: {
- type: 'NewExpression',
- callee: {
- type: 'Identifier',
- name: 'foo',
- range: [8, 11],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 11 }
- }
- },
- 'arguments': [],
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- 'arguments': [],
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'new new foo()': {
- type: 'ExpressionStatement',
- expression: {
- type: 'NewExpression',
- callee: {
- type: 'NewExpression',
- callee: {
- type: 'Identifier',
- name: 'foo',
- range: [8, 11],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 11 }
- }
- },
- 'arguments': [],
- range: [4, 13],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 13 }
- }
- },
- 'arguments': [],
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
-
- 'new foo().bar()': {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'NewExpression',
- callee: {
- type: 'Identifier',
- name: 'foo',
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- 'arguments': [],
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'bar',
- range: [10, 13],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
- 'arguments': [],
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- },
-
- 'new foo[bar]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'NewExpression',
- callee: {
- type: 'MemberExpression',
- computed: true,
- object: {
- type: 'Identifier',
- name: 'foo',
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'bar',
- range: [8, 11],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 11 }
- }
- },
- range: [4, 12],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 12 }
- }
- },
- 'arguments': [],
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
-
- 'new foo.bar()': {
- type: 'ExpressionStatement',
- expression: {
- type: 'NewExpression',
- callee: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'foo',
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'bar',
- range: [8, 11],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 11 }
- }
- },
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- 'arguments': [],
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
-
- '( new foo).bar()': {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'NewExpression',
- callee: {
- type: 'Identifier',
- name: 'foo',
- range: [6, 9],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 9 }
- }
- },
- 'arguments': [],
- range: [2, 9],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 9 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'bar',
- range: [11, 14],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- 'arguments': [],
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- 'foo(bar, baz)': {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'foo',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'bar',
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- }, {
- type: 'Identifier',
- name: 'baz',
- range: [9, 12],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 12 }
- }
- }],
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
-
- '( foo )()': {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'foo',
- range: [5, 8],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 8 }
- }
- },
- 'arguments': [],
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
-
- 'universe.milkyway': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'milkyway',
- range: [9, 17],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
-
- 'universe.milkyway.solarsystem': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'milkyway',
- range: [9, 17],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'solarsystem',
- range: [18, 29],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 29 }
- }
- },
- range: [0, 29],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 29 }
- }
- },
- range: [0, 29],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 29 }
- }
- },
-
- 'universe.milkyway.solarsystem.Earth': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'milkyway',
- range: [9, 17],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'solarsystem',
- range: [18, 29],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 29 }
- }
- },
- range: [0, 29],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 29 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'Earth',
- range: [30, 35],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 35 }
- }
- },
- range: [0, 35],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 35 }
- }
- },
- range: [0, 35],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 35 }
- }
- },
-
- 'universe[galaxyName, otherUselessName]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: true,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'SequenceExpression',
- expressions: [{
- type: 'Identifier',
- name: 'galaxyName',
- range: [9, 19],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 19 }
- }
- }, {
- type: 'Identifier',
- name: 'otherUselessName',
- range: [21, 37],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 37 }
- }
- }],
- range: [9, 37],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 37 }
- }
- },
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- },
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- },
-
- 'universe[galaxyName]': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: true,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'galaxyName',
- range: [9, 19],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 19 }
- }
- },
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
-
- 'universe[42].galaxies': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'MemberExpression',
- computed: true,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [9, 11],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'galaxies',
- range: [13, 21],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
-
- 'universe(42).galaxies': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- 'arguments': [{
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [9, 11],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 11 }
- }
- }],
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'galaxies',
- range: [13, 21],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
-
- 'universe(42).galaxies(14, 3, 77).milkyway': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'CallExpression',
- callee: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- 'arguments': [{
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [9, 11],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 11 }
- }
- }],
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'galaxies',
- range: [13, 21],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
- 'arguments': [{
- type: 'Literal',
- value: 14,
- raw: '14',
- range: [22, 24],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 24 }
- }
- }, {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [26, 27],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 27 }
- }
- }, {
- type: 'Literal',
- value: 77,
- raw: '77',
- range: [29, 31],
- loc: {
- start: { line: 1, column: 29 },
- end: { line: 1, column: 31 }
- }
- }],
- range: [0, 32],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 32 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'milkyway',
- range: [33, 41],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 41 }
- }
- },
- range: [0, 41],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 41 }
- }
- },
- range: [0, 41],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 41 }
- }
- },
-
- 'earth.asia.Indonesia.prepareForElection(2014)': {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'earth',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'asia',
- range: [6, 10],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 10 }
- }
- },
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'Indonesia',
- range: [11, 20],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 20 }
- }
- },
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'prepareForElection',
- range: [21, 39],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 39 }
- }
- },
- range: [0, 39],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 39 }
- }
- },
- 'arguments': [{
- type: 'Literal',
- value: 2014,
- raw: '2014',
- range: [40, 44],
- loc: {
- start: { line: 1, column: 40 },
- end: { line: 1, column: 44 }
- }
- }],
- range: [0, 45],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 45 }
- }
- },
- range: [0, 45],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 45 }
- }
- },
-
- 'universe.if': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'if',
- range: [9, 11],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'universe.true': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'true',
- range: [9, 13],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
-
- 'universe.false': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'false',
- range: [9, 14],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- 'universe.null': {
- type: 'ExpressionStatement',
- expression: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'universe',
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'null',
- range: [9, 13],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }
-
- },
-
- 'Postfix Expressions': {
-
- 'x++': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- prefix: false,
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
-
- 'x--': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- prefix: false,
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
-
- 'eval++': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'eval',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- prefix: false,
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'eval--': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'eval',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- prefix: false,
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'arguments++': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'arguments',
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- prefix: false,
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'arguments--': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'arguments',
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- prefix: false,
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- }
-
- },
-
- 'Unary Operators': {
-
- '++x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [2, 3],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 3 }
- }
- },
- prefix: true,
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
-
- '--x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [2, 3],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 3 }
- }
- },
- prefix: true,
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
-
- '++eval': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'eval',
- range: [2, 6],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 6 }
- }
- },
- prefix: true,
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- '--eval': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'eval',
- range: [2, 6],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 6 }
- }
- },
- prefix: true,
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- '++arguments': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'arguments',
- range: [2, 11],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 11 }
- }
- },
- prefix: true,
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- '--arguments': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'arguments',
- range: [2, 11],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 11 }
- }
- },
- prefix: true,
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- '+x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UnaryExpression',
- operator: '+',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [1, 2],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 2 }
- }
- },
- prefix: true,
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
-
- '-x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UnaryExpression',
- operator: '-',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [1, 2],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 2 }
- }
- },
- prefix: true,
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
-
- '~x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UnaryExpression',
- operator: '~',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [1, 2],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 2 }
- }
- },
- prefix: true,
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
-
- '!x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UnaryExpression',
- operator: '!',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [1, 2],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 2 }
- }
- },
- prefix: true,
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- },
-
- 'void x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UnaryExpression',
- operator: 'void',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- prefix: true,
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'delete x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UnaryExpression',
- operator: 'delete',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- prefix: true,
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
-
- 'typeof x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'UnaryExpression',
- operator: 'typeof',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- prefix: true,
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- }
-
- },
-
- 'Multiplicative Operators': {
-
- 'x * y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- 'x / y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '/',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- 'x % y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '%',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- }
-
- },
-
- 'Additive Operators': {
-
- 'x + y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- 'x - y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '-',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- '"use strict" + 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [15, 17],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- }
-
- },
-
- 'Bitwise Shift Operator': {
-
- 'x << y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '<<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x >> y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '>>',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x >>> y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '>>>',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- }
-
- },
-
- 'Relational Operators': {
-
- 'x < y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- 'x > y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '>',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- 'x <= y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '<=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x >= y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '>=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x in y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: 'in',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x instanceof y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: 'instanceof',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- 'x < y < z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- }
-
- },
-
- 'Equality Operators': {
-
- 'x == y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '==',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x != y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '!=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x === y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '===',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x !== y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '!==',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- }
-
- },
-
- 'Binary Bitwise Operators': {
-
- 'x & y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '&',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- 'x ^ y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '^',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- 'x | y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '|',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- }
-
- },
-
- 'Binary Expressions': {
-
- 'x + y + z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x - y + z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'BinaryExpression',
- operator: '-',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x + y - z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '-',
- left: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x - y - z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '-',
- left: {
- type: 'BinaryExpression',
- operator: '-',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x + y * z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x + y / z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '/',
- left: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x - y % z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '-',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '%',
- left: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x * y * z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x * y / z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '/',
- left: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x * y % z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '%',
- left: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x % y * z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'BinaryExpression',
- operator: '%',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x << y << z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '<<',
- left: {
- type: 'BinaryExpression',
- operator: '<<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'x | y | z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '|',
- left: {
- type: 'BinaryExpression',
- operator: '|',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x & y & z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '&',
- left: {
- type: 'BinaryExpression',
- operator: '&',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x ^ y ^ z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '^',
- left: {
- type: 'BinaryExpression',
- operator: '^',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x & y | z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '|',
- left: {
- type: 'BinaryExpression',
- operator: '&',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x | y ^ z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '|',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '^',
- left: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x | y & z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '|',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '&',
- left: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- }
-
- },
-
- 'Binary Logical Operators': {
-
- 'x || y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'LogicalExpression',
- operator: '||',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x && y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'LogicalExpression',
- operator: '&&',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'x || y || z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'LogicalExpression',
- operator: '||',
- left: {
- type: 'LogicalExpression',
- operator: '||',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'x && y && z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'LogicalExpression',
- operator: '&&',
- left: {
- type: 'LogicalExpression',
- operator: '&&',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'x || y && z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'LogicalExpression',
- operator: '||',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'LogicalExpression',
- operator: '&&',
- left: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 }
- }
- },
- range: [5, 11],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'x || y ^ z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'LogicalExpression',
- operator: '||',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '^',
- left: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- range: [5, 10],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 10 }
- }
- },
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- },
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- }
-
- },
-
- 'Conditional Operator': {
-
- 'y ? 1 : 2': {
- type: 'ExpressionStatement',
- expression: {
- type: 'ConditionalExpression',
- test: {
- type: 'Identifier',
- name: 'y',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- consequent: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- alternate: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x && y ? 1 : 2': {
- type: 'ExpressionStatement',
- expression: {
- type: 'ConditionalExpression',
- test: {
- type: 'LogicalExpression',
- operator: '&&',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- consequent: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- alternate: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- 'x = (0) ? 1 : 2' : {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [ 0, 1 ],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'ConditionalExpression',
- test: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [ 5, 6 ],
- loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } }
- },
- consequent: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [ 10, 11 ],
- loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } }
- },
- alternate: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [ 14, 15 ],
- loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } }
- },
- range: [ 4, 15 ],
- loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } }
- },
- range: [ 0, 15 ],
- loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } }
- },
- range: [ 0, 15 ],
- loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } }
- }
- },
-
- 'Assignment Operators': {
-
- 'x = 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'eval = 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'eval',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [7, 9],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'arguments = 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'arguments',
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [12, 14],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- 'x *= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '*=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x /= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '/=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x %= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '%=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x += 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '+=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x -= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '-=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x <<= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '<<=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [6, 8],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
-
- 'x >>= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '>>=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [6, 8],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
-
- 'x >>>= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '>>>=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [7, 9],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'x &= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '&=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x ^= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '^=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- 'x |= 42': {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '|=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [5, 7],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- }
-
- },
-
- 'Complex Expression': {
-
- 'a || b && c | d ^ e & f == g < h >>> i + j * k': {
- type: 'ExpressionStatement',
- expression: {
- type: 'LogicalExpression',
- operator: '||',
- left: {
- type: 'Identifier',
- name: 'a',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'LogicalExpression',
- operator: '&&',
- left: {
- type: 'Identifier',
- name: 'b',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '|',
- left: {
- type: 'Identifier',
- name: 'c',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '^',
- left: {
- type: 'Identifier',
- name: 'd',
- range: [14, 15],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 15 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '&',
- left: {
- type: 'Identifier',
- name: 'e',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '==',
- left: {
- type: 'Identifier',
- name: 'f',
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'g',
- range: [27, 28],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 28 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '>>>',
- left: {
- type: 'Identifier',
- name: 'h',
- range: [31, 32],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 32 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Identifier',
- name: 'i',
- range: [37, 38],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 38 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'j',
- range: [41, 42],
- loc: {
- start: { line: 1, column: 41 },
- end: { line: 1, column: 42 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'k',
- range: [45, 46],
- loc: {
- start: { line: 1, column: 45 },
- end: { line: 1, column: 46 }
- }
- },
- range: [41, 46],
- loc: {
- start: { line: 1, column: 41 },
- end: { line: 1, column: 46 }
- }
- },
- range: [37, 46],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 46 }
- }
- },
- range: [31, 46],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 46 }
- }
- },
- range: [27, 46],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 46 }
- }
- },
- range: [22, 46],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 46 }
- }
- },
- range: [18, 46],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 46 }
- }
- },
- range: [14, 46],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 46 }
- }
- },
- range: [10, 46],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 46 }
- }
- },
- range: [5, 46],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 46 }
- }
- },
- range: [0, 46],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 46 }
- }
- },
- range: [0, 46],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 46 }
- }
- }
-
- },
-
- 'Block': {
-
- '{ foo }': {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'foo',
- range: [2, 5],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 5 }
- }
- },
- range: [2, 6],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 6 }
- }
- }],
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- '{ doThis(); doThat(); }': {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doThis',
- range: [2, 8],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 8 }
- }
- },
- 'arguments': [],
- range: [2, 10],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 10 }
- }
- },
- range: [2, 11],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 11 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doThat',
- range: [12, 18],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 18 }
- }
- },
- 'arguments': [],
- range: [12, 20],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 20 }
- }
- },
- range: [12, 21],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 21 }
- }
- }],
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- }
- },
-
- '{}': {
- type: 'BlockStatement',
- body: [],
- range: [0, 2],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 2 }
- }
- }
-
- },
-
- 'Variable Statement': {
-
- 'var x': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: null,
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }],
- kind: 'var',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- 'var x, y;': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: null,
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'y',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- init: null,
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- }],
- kind: 'var',
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'var x = 42': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [8, 10],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 10 }
- }
- },
- range: [4, 10],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 10 }
- }
- }],
- kind: 'var',
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- },
-
- 'var eval = 42, arguments = 42': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'eval',
- range: [4, 8],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 8 }
- }
- },
- init: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [11, 13],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 13 }
- }
- },
- range: [4, 13],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'arguments',
- range: [15, 24],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 24 }
- }
- },
- init: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [27, 29],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 29 }
- }
- },
- range: [15, 29],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 29 }
- }
- }],
- kind: 'var',
- range: [0, 29],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 29 }
- }
- },
-
- 'var x = 14, y = 3, z = 1977': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: 'Literal',
- value: 14,
- raw: '14',
- range: [8, 10],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 10 }
- }
- },
- range: [4, 10],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 10 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'y',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- },
- init: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- },
- range: [12, 17],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 17 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'z',
- range: [19, 20],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 20 }
- }
- },
- init: {
- type: 'Literal',
- value: 1977,
- raw: '1977',
- range: [23, 27],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 27 }
- }
- },
- range: [19, 27],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 27 }
- }
- }],
- kind: 'var',
- range: [0, 27],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 27 }
- }
- },
-
- 'var implements, interface, package': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'implements',
- range: [4, 14],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 14 }
- }
- },
- init: null,
- range: [4, 14],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 14 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'interface',
- range: [16, 25],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 25 }
- }
- },
- init: null,
- range: [16, 25],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 25 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'package',
- range: [27, 34],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 34 }
- }
- },
- init: null,
- range: [27, 34],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 34 }
- }
- }],
- kind: 'var',
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- }
- },
-
- 'var private, protected, public, static': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'private',
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- init: null,
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'protected',
- range: [13, 22],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 22 }
- }
- },
- init: null,
- range: [13, 22],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 22 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'public',
- range: [24, 30],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 30 }
- }
- },
- init: null,
- range: [24, 30],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 30 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'static',
- range: [32, 38],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 38 }
- }
- },
- init: null,
- range: [32, 38],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 38 }
- }
- }],
- kind: 'var',
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- }
-
- },
-
- 'Let Statement': {
-
- 'let x': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: null,
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }],
- kind: 'let',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
-
- '{ let x }': {
- type: 'BlockStatement',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- init: null,
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- }],
- kind: 'let',
- range: [2, 8],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 8 }
- }
- }],
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- '{ let x = 42 }': {
- type: 'BlockStatement',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- init: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- range: [6, 12],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 12 }
- }
- }],
- kind: 'let',
- range: [2, 13],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 13 }
- }
- }],
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- '{ let x = 14, y = 3, z = 1977 }': {
- type: 'BlockStatement',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- init: {
- type: 'Literal',
- value: 14,
- raw: '14',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- range: [6, 12],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 12 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'y',
- range: [14, 15],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 15 }
- }
- },
- init: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- range: [14, 19],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 19 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'z',
- range: [21, 22],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 22 }
- }
- },
- init: {
- type: 'Literal',
- value: 1977,
- raw: '1977',
- range: [25, 29],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 29 }
- }
- },
- range: [21, 29],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 29 }
- }
- }],
- kind: 'let',
- range: [2, 30],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 30 }
- }
- }],
- range: [0, 31],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 31 }
- }
- }
-
- },
-
- 'Const Statement': {
-
- 'const x = 42': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- init: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- range: [6, 12],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 12 }
- }
- }],
- kind: 'const',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
-
- '{ const x = 42 }': {
- type: 'BlockStatement',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- init: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [12, 14],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 14 }
- }
- },
- range: [8, 14],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 14 }
- }
- }],
- kind: 'const',
- range: [2, 15],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 15 }
- }
- }],
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
-
- '{ const x = 14, y = 3, z = 1977 }': {
- type: 'BlockStatement',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- init: {
- type: 'Literal',
- value: 14,
- raw: '14',
- range: [12, 14],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 14 }
- }
- },
- range: [8, 14],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 14 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'y',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- },
- init: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [20, 21],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 21 }
- }
- },
- range: [16, 21],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 21 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'z',
- range: [23, 24],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 24 }
- }
- },
- init: {
- type: 'Literal',
- value: 1977,
- raw: '1977',
- range: [27, 31],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 31 }
- }
- },
- range: [23, 31],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 31 }
- }
- }],
- kind: 'const',
- range: [2, 32],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 32 }
- }
- }],
- range: [0, 33],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 33 }
- }
- }
-
- },
-
- 'Empty Statement': {
-
- ';': {
- type: 'EmptyStatement',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- }
-
- },
-
- 'Expression Statement': {
-
- 'x': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
-
- 'x, y': {
- type: 'ExpressionStatement',
- expression: {
- type: 'SequenceExpression',
- expressions: [{
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- }, {
- type: 'Identifier',
- name: 'y',
- range: [3, 4],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 4 }
- }
- }],
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
-
- '\\u0061': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'a',
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- },
-
- 'a\\u0061': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'aa',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- '\\u0061a': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'aa',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
-
- '\\u0061a ': {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'aa',
- range: [0, 7],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- }
- },
-
- 'If Statement': {
-
- 'if (morning) goodMorning()': {
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'morning',
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- consequent: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'goodMorning',
- range: [13, 24],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 24 }
- }
- },
- 'arguments': [],
- range: [13, 26],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 26 }
- }
- },
- range: [13, 26],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 26 }
- }
- },
- alternate: null,
- range: [0, 26],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 26 }
- }
- },
-
- 'if (morning) (function(){})': {
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'morning',
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- consequent: {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [24, 26],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 26 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [14, 26],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 26 }
- }
- },
- range: [13, 27],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 27 }
- }
- },
- alternate: null,
- range: [0, 27],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 27 }
- }
- },
-
- 'if (morning) var x = 0;': {
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'morning',
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- consequent: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [17, 18],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 18 }
- }
- },
- init: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [21, 22],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 22 }
- }
- },
- range: [17, 22],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 22 }
- }
- }],
- kind: 'var',
- range: [13, 23],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 23 }
- }
- },
- alternate: null,
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- }
- },
-
- 'if (morning) function a(){}': {
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'morning',
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- consequent: {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'a',
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [25, 27],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 27 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [13, 27],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 27 }
- }
- },
- alternate: null,
- range: [0, 27],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 27 }
- }
- },
-
- 'if (morning) goodMorning(); else goodDay()': {
- type: 'IfStatement',
- test: {
- type: 'Identifier',
- name: 'morning',
- range: [4, 11],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 11 }
- }
- },
- consequent: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'goodMorning',
- range: [13, 24],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 24 }
- }
- },
- 'arguments': [],
- range: [13, 26],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 26 }
- }
- },
- range: [13, 27],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 27 }
- }
- },
- alternate: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'goodDay',
- range: [33, 40],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 40 }
- }
- },
- 'arguments': [],
- range: [33, 42],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 42 }
- }
- },
- range: [33, 42],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 42 }
- }
- },
- range: [0, 42],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 42 }
- }
- },
-
- 'if (true) that()\n; else;': {
- type: "IfStatement",
- test: {
- type: "Literal",
- value: true,
- raw: "true",
- range: [4, 8],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 8 }
- }
- },
- consequent: {
- type: "ExpressionStatement",
- expression: {
- type: "CallExpression",
- callee: {
- type: "Identifier",
- name: "that",
- range: [10, 14],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 14 }
- }
- },
- "arguments": [],
- range: [10, 16],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 16 }
- }
- },
- range: [10, 18],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 2, column: 1 }
- }
- },
- alternate: {
- type: "EmptyStatement",
- range: [23, 24],
- loc: {
- start: { line: 2, column: 6 },
- end: { line: 2, column: 7 }
- }
- },
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 7 }
- }
- },
-
- 'if (true) that(); else;': {
- type: "IfStatement",
- test: {
- type: "Literal",
- value: true,
- raw: "true",
- range: [4, 8],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 8 }
- }
- },
- consequent: {
- type: "ExpressionStatement",
- expression: {
- type: "CallExpression",
- callee: {
- type: "Identifier",
- name: "that",
- range: [10, 14],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 14 }
- }
- },
- "arguments": [],
- range: [10, 16],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 16 }
- }
- },
- range: [10, 17],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 17 }
- }
- },
- alternate: {
- type: "EmptyStatement",
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- },
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- }
- }
-
- },
-
- 'Iteration Statements': {
-
- 'do keep(); while (true)': {
- type: 'DoWhileStatement',
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'keep',
- range: [3, 7],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 7 }
- }
- },
- 'arguments': [],
- range: [3, 9],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 9 }
- }
- },
- range: [3, 10],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 10 }
- }
- },
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [18, 22],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- }
- },
-
- 'do keep(); while (true);': {
- type: 'DoWhileStatement',
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'keep',
- range: [3, 7],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 7 }
- }
- },
- 'arguments': [],
- range: [3, 9],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 9 }
- }
- },
- range: [3, 10],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 10 }
- }
- },
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [18, 22],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- }
- },
-
- 'do { x++; y--; } while (x < 10)': {
- type: 'DoWhileStatement',
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- prefix: false,
- range: [5, 8],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 8 }
- }
- },
- range: [5, 9],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 9 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'y',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 }
- }
- },
- prefix: false,
- range: [10, 13],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 13 }
- }
- },
- range: [10, 14],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 14 }
- }
- }],
- range: [3, 16],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 16 }
- }
- },
- test: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- },
- right: {
- type: 'Literal',
- value: 10,
- raw: '10',
- range: [28, 30],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 30 }
- }
- },
- range: [24, 30],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 30 }
- }
- },
- range: [0, 31],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 31 }
- }
- },
-
- '{ do { } while (false) false }': {
- type: 'BlockStatement',
- body: [{
- type: 'DoWhileStatement',
- body: {
- type: 'BlockStatement',
- body: [],
- range: [5, 8],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 8 }
- }
- },
- test: {
- type: 'Literal',
- value: false,
- raw: 'false',
- range: [16, 21],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 21 }
- }
- },
- range: [2, 22],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 22 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: false,
- raw: 'false',
- range: [23, 28],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 28 }
- }
- },
- range: [23, 29],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 29 }
- }
- }],
- range: [0, 30],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 30 }
- }
- },
-
- 'do that();while (true)': {
- type: "DoWhileStatement",
- body: {
- type: "ExpressionStatement",
- expression: {
- type: "CallExpression",
- callee: {
- type: "Identifier",
- name: "that",
- range: [3, 7],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 7 }
- }
- },
- "arguments": [],
- range: [3, 9],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 9 }
- }
- },
- range: [3, 10],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 10 }
- }
- },
- test: {
- type: "Literal",
- value: true,
- raw: "true",
- range: [17, 21],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
-
- 'do that()\n;while (true)': {
- type: "DoWhileStatement",
- body: {
- type: "ExpressionStatement",
- expression: {
- type: "CallExpression",
- callee: {
- type: "Identifier",
- name: "that",
- range: [3, 7],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 7 }
- }
- },
- "arguments": [],
- range: [3, 9],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 9 }
- }
- },
- range: [3, 11],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 2, column: 1 }
- }
- },
- test: {
- type: "Literal",
- value: true,
- raw: "true",
- range: [18, 22],
- loc: {
- start: { line: 2, column: 8 },
- end: { line: 2, column: 12 }
- }
- },
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 13 }
- }
- },
-
- 'while (true) doSomething()': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doSomething',
- range: [13, 24],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 24 }
- }
- },
- 'arguments': [],
- range: [13, 26],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 26 }
- }
- },
- range: [13, 26],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 26 }
- }
- },
- range: [0, 26],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 26 }
- }
- },
-
- 'while (x < 10) { x++; y--; }': {
- type: 'WhileStatement',
- test: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- right: {
- type: 'Literal',
- value: 10,
- raw: '10',
- range: [11, 13],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 13 }
- }
- },
- range: [7, 13],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 13 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [17, 18],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 18 }
- }
- },
- prefix: false,
- range: [17, 20],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 20 }
- }
- },
- range: [17, 21],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 21 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'y',
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- },
- prefix: false,
- range: [22, 25],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 25 }
- }
- },
- range: [22, 26],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 26 }
- }
- }],
- range: [15, 28],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 28 }
- }
- },
- range: [0, 28],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 28 }
- }
- },
-
- 'for(;;);': {
- type: 'ForStatement',
- init: null,
- test: null,
- update: null,
- body: {
- type: 'EmptyStatement',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
-
- 'for(;;){}': {
- type: 'ForStatement',
- init: null,
- test: null,
- update: null,
- body: {
- type: 'BlockStatement',
- body: [],
- range: [7, 9],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 9 }
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
-
- 'for(x = 0;;);': {
- type: 'ForStatement',
- init: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- test: null,
- update: null,
- body: {
- type: 'EmptyStatement',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
-
- 'for(var x = 0;;);': {
- type: 'ForStatement',
- init: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- init: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- },
- range: [8, 13],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 13 }
- }
- }],
- kind: 'var',
- range: [4, 13],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 13 }
- }
- },
- test: null,
- update: null,
- body: {
- type: 'EmptyStatement',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
-
- 'for(let x = 0;;);': {
- type: 'ForStatement',
- init: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- init: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- },
- range: [8, 13],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 13 }
- }
- }],
- kind: 'let',
- range: [4, 13],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 13 }
- }
- },
- test: null,
- update: null,
- body: {
- type: 'EmptyStatement',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- },
-
- 'for(var x = 0, y = 1;;);': {
- type: 'ForStatement',
- init: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- init: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- },
- range: [8, 13],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'y',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- },
- init: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [19, 20],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 20 }
- }
- },
- range: [15, 20],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 20 }
- }
- }],
- kind: 'var',
- range: [4, 20],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 20 }
- }
- },
- test: null,
- update: null,
- body: {
- type: 'EmptyStatement',
- range: [23, 24],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 24 }
- }
- },
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- }
- },
-
- 'for(x = 0; x < 42;);': {
- type: 'ForStatement',
- init: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- test: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [11, 12],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 12 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [15, 17],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 17 }
- }
- },
- range: [11, 17],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 17 }
- }
- },
- update: null,
- body: {
- type: 'EmptyStatement',
- range: [19, 20],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 20 }
- }
- },
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
-
- 'for(x = 0; x < 42; x++);': {
- type: 'ForStatement',
- init: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- test: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [11, 12],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 12 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [15, 17],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 17 }
- }
- },
- range: [11, 17],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 17 }
- }
- },
- update: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [19, 20],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 20 }
- }
- },
- prefix: false,
- range: [19, 22],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 22 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [23, 24],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 24 }
- }
- },
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- }
- },
-
- 'for(x = 0; x < 42; x++) process(x);': {
- type: 'ForStatement',
- init: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- test: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [11, 12],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 12 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [15, 17],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 17 }
- }
- },
- range: [11, 17],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 17 }
- }
- },
- update: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [19, 20],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 20 }
- }
- },
- prefix: false,
- range: [19, 22],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 22 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'process',
- range: [24, 31],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 31 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'x',
- range: [32, 33],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 33 }
- }
- }],
- range: [24, 34],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 34 }
- }
- },
- range: [24, 35],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 35 }
- }
- },
- range: [0, 35],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 35 }
- }
- },
-
- 'for(x in list) process(x);': {
- type: 'ForInStatement',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'list',
- range: [9, 13],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 13 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'process',
- range: [15, 22],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 22 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'x',
- range: [23, 24],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 24 }
- }
- }],
- range: [15, 25],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 25 }
- }
- },
- range: [15, 26],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 26 }
- }
- },
- each: false,
- range: [0, 26],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 26 }
- }
- },
-
- 'for (var x in list) process(x);': {
- type: 'ForInStatement',
- left: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- init: null,
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- }],
- kind: 'var',
- range: [5, 10],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 10 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'list',
- range: [14, 18],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 18 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'process',
- range: [20, 27],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 27 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'x',
- range: [28, 29],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 29 }
- }
- }],
- range: [20, 30],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 30 }
- }
- },
- range: [20, 31],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 31 }
- }
- },
- each: false,
- range: [0, 31],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 31 }
- }
- },
-
- 'for (var x = 42 in list) process(x);': {
- type: 'ForInStatement',
- left: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- init: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [13, 15],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 15 }
- }
- },
- range: [9, 15],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 15 }
- }
- }],
- kind: 'var',
- range: [5, 15],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 15 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'list',
- range: [19, 23],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 23 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'process',
- range: [25, 32],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 32 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'x',
- range: [33, 34],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 34 }
- }
- }],
- range: [25, 35],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 35 }
- }
- },
- range: [25, 36],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 36 }
- }
- },
- each: false,
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
-
- 'for (let x in list) process(x);': {
- type: 'ForInStatement',
- left: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- init: null,
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- }],
- kind: 'let',
- range: [5, 10],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 10 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'list',
- range: [14, 18],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 18 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'process',
- range: [20, 27],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 27 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'x',
- range: [28, 29],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 29 }
- }
- }],
- range: [20, 30],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 30 }
- }
- },
- range: [20, 31],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 31 }
- }
- },
- each: false,
- range: [0, 31],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 31 }
- }
- },
-
- 'for (var x = y = z in q);': {
- type: 'ForInStatement',
- left: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- init: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'y',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [17, 18],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 18 }
- }
- },
- range: [13, 18],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 18 }
- }
- },
- range: [9, 18],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 18 }
- }
- }],
- kind: 'var',
- range: [5, 18],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 18 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'q',
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- },
- each: false,
- range: [0, 25],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 25 }
- }
- },
-
- 'for (var a = b = c = (d in e) in z);': {
- type: 'ForInStatement',
- left: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'a',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- init: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'b',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- },
- right: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'c',
- range: [17, 18],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 18 }
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: 'in',
- left: {
- type: 'Identifier',
- name: 'd',
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'e',
- range: [27, 28],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 28 }
- }
- },
- range: [22, 28],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 28 }
- }
- },
- range: [17, 29],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 29 }
- }
- },
- range: [13, 29],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 29 }
- }
- },
- range: [9, 29],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 29 }
- }
- }],
- kind: 'var',
- range: [5, 29],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 29 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [33, 34],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 34 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [35, 36],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 36 }
- }
- },
- each: false,
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
-
- 'for (var i = function() { return 10 in [] } in list) process(x);': {
- type: 'ForInStatement',
- left: {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'i',
- range: [9, 10],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 10 }
- }
- },
- init: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ReturnStatement',
- argument: {
- type: 'BinaryExpression',
- operator: 'in',
- left: {
- type: 'Literal',
- value: 10,
- raw: '10',
- range: [33, 35],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 35 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [39, 41],
- loc: {
- start: { line: 1, column: 39 },
- end: { line: 1, column: 41 }
- }
- },
- range: [33, 41],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 41 }
- }
- },
- range: [26, 42],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 42 }
- }
- }],
- range: [24, 43],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 43 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [13, 43],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 43 }
- }
- },
- range: [9, 43],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 43 }
- }
- }],
- kind: 'var',
- range: [5, 43],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 43 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'list',
- range: [47, 51],
- loc: {
- start: { line: 1, column: 47 },
- end: { line: 1, column: 51 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'process',
- range: [53, 60],
- loc: {
- start: { line: 1, column: 53 },
- end: { line: 1, column: 60 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'x',
- range: [61, 62],
- loc: {
- start: { line: 1, column: 61 },
- end: { line: 1, column: 62 }
- }
- }],
- range: [53, 63],
- loc: {
- start: { line: 1, column: 53 },
- end: { line: 1, column: 63 }
- }
- },
- range: [53, 64],
- loc: {
- start: { line: 1, column: 53 },
- end: { line: 1, column: 64 }
- }
- },
- each: false,
- range: [0, 64],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 64 }
- }
- },
-
- 'for (a[b in c] in d);': {
- type: 'ForInStatement',
- left: {
- type: 'MemberExpression',
- computed: true,
- object: {
- type: 'Identifier',
- name: 'a',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- property: {
- type: 'BinaryExpression',
- operator: 'in',
- left: {
- type: 'Identifier',
- name: 'b',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'c',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- },
- range: [7, 13],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 13 }
- }
- },
- range: [5, 14],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 14 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'd',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [20, 21],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 21 }
- }
- },
- each: false,
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
-
- 'for (a(b in c)[0] in d);': {
- type: 'ForInStatement',
- left: {
- type: 'MemberExpression',
- computed: true,
- object: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'a',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- arguments: [{
- type: 'BinaryExpression',
- operator: 'in',
- left: {
- type: 'Identifier',
- name: 'b',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'c',
- range: [12, 13],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 13 }
- }
- },
- range: [7, 13],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 13 }
- }
- }],
- range: [5, 14],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 14 }
- }
- },
- property: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- },
- range: [5, 17],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 17 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'd',
- range: [21, 22],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 22 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [23, 24],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 24 }
- }
- },
- each: false,
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- }
- },
-
- 'for (a.in in a);': {
- type: 'ForInStatement',
- left: {
- type: 'MemberExpression',
- computed: false,
- object: {
- type: 'Identifier',
- name: 'a',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- property: {
- type: 'Identifier',
- name: 'in',
- range: [7, 9],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 9 }
- }
- },
- range: [5, 9],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 9 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'a',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- },
- each: false,
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }
-
- },
-
- 'continue statement': {
-
- 'while (true) { continue; }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ContinueStatement',
- label: null,
- range: [15, 24],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 24 }
- }
- }
- ],
- range: [13, 26],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 26 }
- }
- },
- range: [0, 26],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 26 }
- }
- },
-
- 'while (true) { continue }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ContinueStatement',
- label: null,
- range: [15, 24],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 24 }
- }
- }
- ],
- range: [13, 25],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 25 }
- }
- },
- range: [0, 25],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 25 }
- }
- },
-
- 'done: while (true) { continue done }': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: 'done',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- body: {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [13, 17],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 17 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ContinueStatement',
- label: {
- type: 'Identifier',
- name: 'done',
- range: [30, 34],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 34 }
- }
- },
- range: [21, 35],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 35 }
- }
- }
- ],
- range: [19, 36],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 36 }
- }
- },
- range: [6, 36],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 36 }
- }
- },
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- }
- },
-
- 'done: while (true) { continue done; }': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: 'done',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- body: {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [13, 17],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 17 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ContinueStatement',
- label: {
- type: 'Identifier',
- name: 'done',
- range: [30, 34],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 34 }
- }
- },
- range: [21, 35],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 35 }
- }
- }
- ],
- range: [19, 37],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 37 }
- }
- },
- range: [6, 37],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 37 }
- }
- },
- range: [0, 37],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 37 }
- }
- },
-
- '__proto__: while (true) { continue __proto__; }': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: '__proto__',
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- body: {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [18, 22],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 22 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ContinueStatement',
- label: {
- type: 'Identifier',
- name: '__proto__',
- range: [35, 44],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 44 }
- }
- },
- range: [26, 45],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 45 }
- }
- }],
- range: [24, 47],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 47 }
- }
- },
- range: [11, 47],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 47 }
- }
- },
- range: [0, 47],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 47 }
- }
- }
-
- },
-
- 'break statement': {
-
- 'while (true) { break }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'BreakStatement',
- label: null,
- range: [15, 21],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 21 }
- }
- }
- ],
- range: [13, 22],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
-
- 'done: while (true) { break done }': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: 'done',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- body: {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [13, 17],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 17 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'BreakStatement',
- label: {
- type: 'Identifier',
- name: 'done',
- range: [27, 31],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 31 }
- }
- },
- range: [21, 32],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 32 }
- }
- }
- ],
- range: [19, 33],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 33 }
- }
- },
- range: [6, 33],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 33 }
- }
- },
- range: [0, 33],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 33 }
- }
- },
-
- 'done: while (true) { break done; }': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: 'done',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- body: {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [13, 17],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 17 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'BreakStatement',
- label: {
- type: 'Identifier',
- name: 'done',
- range: [27, 31],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 31 }
- }
- },
- range: [21, 32],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 32 }
- }
- }
- ],
- range: [19, 34],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 34 }
- }
- },
- range: [6, 34],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 34 }
- }
- },
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- }
- },
-
- '__proto__: while (true) { break __proto__; }': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: '__proto__',
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- body: {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [18, 22],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 22 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'BreakStatement',
- label: {
- type: 'Identifier',
- name: '__proto__',
- range: [32, 41],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 41 }
- }
- },
- range: [26, 42],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 42 }
- }
- }],
- range: [24, 44],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 44 }
- }
- },
- range: [11, 44],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 44 }
- }
- },
- range: [0, 44],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 44 }
- }
- }
-
- },
-
- 'return statement': {
-
- '(function(){ return })': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ReturnStatement',
- argument: null,
- range: [13, 20],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 20 }
- }
- }
- ],
- range: [11, 21],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 21 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 21],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 21 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- },
-
- '(function(){ return; })': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ReturnStatement',
- argument: null,
- range: [13, 20],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 20 }
- }
- }
- ],
- range: [11, 22],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 22 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 22],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- }
- },
-
- '(function(){ return x; })': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ReturnStatement',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [20, 21],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 21 }
- }
- },
- range: [13, 22],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 22 }
- }
- }
- ],
- range: [11, 24],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 24 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 24],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 24 }
- }
- },
- range: [0, 25],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 25 }
- }
- },
-
- '(function(){ return x * y })': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ReturnStatement',
- argument: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [20, 21],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 21 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- },
- range: [20, 25],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 25 }
- }
- },
- range: [13, 26],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 26 }
- }
- }
- ],
- range: [11, 27],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 27 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 27],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 27 }
- }
- },
- range: [0, 28],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 28 }
- }
- }
- },
-
- 'with statement': {
-
- 'with (x) foo = bar': {
- type: 'WithStatement',
- object: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'foo',
- range: [9, 12],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 12 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'bar',
- range: [15, 18],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 18 }
- }
- },
- range: [9, 18],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 18 }
- }
- },
- range: [9, 18],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 18 }
- }
- },
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- },
-
- 'with (x) foo = bar;': {
- type: 'WithStatement',
- object: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'foo',
- range: [9, 12],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 12 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'bar',
- range: [15, 18],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 18 }
- }
- },
- range: [9, 18],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 18 }
- }
- },
- range: [9, 19],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 19 }
- }
- },
- range: [0, 19],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 19 }
- }
- },
-
- 'with (x) { foo = bar }': {
- type: 'WithStatement',
- object: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'foo',
- range: [11, 14],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 14 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'bar',
- range: [17, 20],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 20 }
- }
- },
- range: [11, 20],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 20 }
- }
- },
- range: [11, 21],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 21 }
- }
- }],
- range: [9, 22],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 22 }
- }
- },
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- }
- }
-
- },
-
- 'switch statement': {
-
- 'switch (x) {}': {
- type: 'SwitchStatement',
- discriminant: {
- type: 'Identifier',
- name: 'x',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 }
- }
- },
- cases:[],
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- },
-
- 'switch (answer) { case 42: hi(); break; }': {
- type: 'SwitchStatement',
- discriminant: {
- type: 'Identifier',
- name: 'answer',
- range: [8, 14],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 14 }
- }
- },
- cases: [{
- type: 'SwitchCase',
- test: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [23, 25],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 25 }
- }
- },
- consequent: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'hi',
- range: [27, 29],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 29 }
- }
- },
- 'arguments': [],
- range: [27, 31],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 31 }
- }
- },
- range: [27, 32],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 32 }
- }
- }, {
- type: 'BreakStatement',
- label: null,
- range: [33, 39],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 39 }
- }
- }],
- range: [18, 39],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 39 }
- }
- }],
- range: [0, 41],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 41 }
- }
- },
-
- 'switch (answer) { case 42: hi(); break; default: break }': {
- type: 'SwitchStatement',
- discriminant: {
- type: 'Identifier',
- name: 'answer',
- range: [8, 14],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 14 }
- }
- },
- cases: [{
- type: 'SwitchCase',
- test: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [23, 25],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 25 }
- }
- },
- consequent: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'hi',
- range: [27, 29],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 29 }
- }
- },
- 'arguments': [],
- range: [27, 31],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 31 }
- }
- },
- range: [27, 32],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 32 }
- }
- }, {
- type: 'BreakStatement',
- label: null,
- range: [33, 39],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 39 }
- }
- }],
- range: [18, 39],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 39 }
- }
- }, {
- type: 'SwitchCase',
- test: null,
- consequent: [{
- type: 'BreakStatement',
- label: null,
- range: [49, 55],
- loc: {
- start: { line: 1, column: 49 },
- end: { line: 1, column: 55 }
- }
- }],
- range: [40, 55],
- loc: {
- start: { line: 1, column: 40 },
- end: { line: 1, column: 55 }
- }
- }],
- range: [0, 56],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 56 }
- }
- }
-
- },
-
- 'Labelled Statements': {
-
- 'start: for (;;) break start': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: 'start',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- body: {
- type: 'ForStatement',
- init: null,
- test: null,
- update: null,
- body: {
- type: 'BreakStatement',
- label: {
- type: 'Identifier',
- name: 'start',
- range: [22, 27],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 27 }
- }
- },
- range: [16, 27],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 27 }
- }
- },
- range: [7, 27],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 27 }
- }
- },
- range: [0, 27],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 27 }
- }
- },
-
- 'start: while (true) break start': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: 'start',
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- body: {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [14, 18],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 18 }
- }
- },
- body: {
- type: 'BreakStatement',
- label: {
- type: 'Identifier',
- name: 'start',
- range: [26, 31],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 31 }
- }
- },
- range: [20, 31],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 31 }
- }
- },
- range: [7, 31],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 31 }
- }
- },
- range: [0, 31],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 31 }
- }
- },
-
- '__proto__: test': {
- type: 'LabeledStatement',
- label: {
- type: 'Identifier',
- name: '__proto__',
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- },
- body: {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'test',
- range: [11, 15],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 15 }
- }
- },
- range: [11, 15],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 15 }
- }
- },
- range: [0, 15],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 15 }
- }
- }
-
- },
-
- 'throw statement': {
-
- 'throw x;': {
- type: 'ThrowStatement',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- range: [0, 8],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 8 }
- }
- },
-
- 'throw x * y': {
- type: 'ThrowStatement',
- argument: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 }
- }
- },
- range: [6, 11],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 11 }
- }
- },
- range: [0, 11],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 11 }
- }
- },
-
- 'throw { message: "Error" }': {
- type: 'ThrowStatement',
- argument: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'message',
- range: [8, 15],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 15 }
- }
- },
- value: {
- type: 'Literal',
- value: 'Error',
- raw: '"Error"',
- range: [17, 24],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 24 }
- }
- },
- kind: 'init',
- range: [8, 24],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 24 }
- }
- }],
- range: [6, 26],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 26 }
- }
- },
- range: [0, 26],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 26 }
- }
- }
-
- },
-
- 'try statement': {
-
- 'try { } catch (e) { }': {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [],
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- guardedHandlers: [],
- handlers: [{
- type: 'CatchClause',
- param: {
- type: 'Identifier',
- name: 'e',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [],
- range: [18, 21],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 21 }
- }
- },
- range: [8, 21],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 21 }
- }
- }],
- finalizer: null,
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- }
- },
-
- 'try { } catch (eval) { }': {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [],
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- guardedHandlers: [],
- handlers: [{
- type: 'CatchClause',
- param: {
- type: 'Identifier',
- name: 'eval',
- range: [15, 19],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 19 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [],
- range: [21, 24],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 24 }
- }
- },
- range: [8, 24],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 24 }
- }
- }],
- finalizer: null,
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- }
- },
-
- 'try { } catch (arguments) { }': {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [],
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- guardedHandlers: [],
- handlers: [{
- type: 'CatchClause',
- param: {
- type: 'Identifier',
- name: 'arguments',
- range: [15, 24],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 24 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [],
- range: [26, 29],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 29 }
- }
- },
- range: [8, 29],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 29 }
- }
- }],
- finalizer: null,
- range: [0, 29],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 29 }
- }
- },
-
- 'try { } catch (e) { say(e) }': {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [],
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- guardedHandlers: [],
- handlers: [{
- type: 'CatchClause',
- param: {
- type: 'Identifier',
- name: 'e',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'say',
- range: [20, 23],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 23 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'e',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- }],
- range: [20, 26],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 26 }
- }
- },
- range: [20, 27],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 27 }
- }
- }],
- range: [18, 28],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 28 }
- }
- },
- range: [8, 28],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 28 }
- }
- }],
- finalizer: null,
- range: [0, 28],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 28 }
- }
- },
-
- 'try { } finally { cleanup(stuff) }': {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [],
- range: [4, 7],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 7 }
- }
- },
- guardedHandlers: [],
- handlers: [],
- finalizer: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'cleanup',
- range: [18, 25],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 25 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'stuff',
- range: [26, 31],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 31 }
- }
- }],
- range: [18, 32],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 32 }
- }
- },
- range: [18, 33],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 33 }
- }
- }],
- range: [16, 34],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 34 }
- }
- },
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- }
- },
-
- 'try { doThat(); } catch (e) { say(e) }': {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doThat',
- range: [6, 12],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 12 }
- }
- },
- 'arguments': [],
- range: [6, 14],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 14 }
- }
- },
- range: [6, 15],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 15 }
- }
- }],
- range: [4, 17],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 17 }
- }
- },
- guardedHandlers: [],
- handlers: [{
- type: 'CatchClause',
- param: {
- type: 'Identifier',
- name: 'e',
- range: [25, 26],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 26 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'say',
- range: [30, 33],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 33 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'e',
- range: [34, 35],
- loc: {
- start: { line: 1, column: 34 },
- end: { line: 1, column: 35 }
- }
- }],
- range: [30, 36],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 36 }
- }
- },
- range: [30, 37],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 37 }
- }
- }],
- range: [28, 38],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 38 }
- }
- },
- range: [18, 38],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 38 }
- }
- }],
- finalizer: null,
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- },
-
- 'try { doThat(); } catch (e) { say(e) } finally { cleanup(stuff) }': {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'doThat',
- range: [6, 12],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 12 }
- }
- },
- 'arguments': [],
- range: [6, 14],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 14 }
- }
- },
- range: [6, 15],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 15 }
- }
- }],
- range: [4, 17],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 17 }
- }
- },
- guardedHandlers: [],
- handlers: [{
- type: 'CatchClause',
- param: {
- type: 'Identifier',
- name: 'e',
- range: [25, 26],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 26 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'say',
- range: [30, 33],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 33 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'e',
- range: [34, 35],
- loc: {
- start: { line: 1, column: 34 },
- end: { line: 1, column: 35 }
- }
- }],
- range: [30, 36],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 36 }
- }
- },
- range: [30, 37],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 37 }
- }
- }],
- range: [28, 38],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 38 }
- }
- },
- range: [18, 38],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 38 }
- }
- }],
- finalizer: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'cleanup',
- range: [49, 56],
- loc: {
- start: { line: 1, column: 49 },
- end: { line: 1, column: 56 }
- }
- },
- 'arguments': [{
- type: 'Identifier',
- name: 'stuff',
- range: [57, 62],
- loc: {
- start: { line: 1, column: 57 },
- end: { line: 1, column: 62 }
- }
- }],
- range: [49, 63],
- loc: {
- start: { line: 1, column: 49 },
- end: { line: 1, column: 63 }
- }
- },
- range: [49, 64],
- loc: {
- start: { line: 1, column: 49 },
- end: { line: 1, column: 64 }
- }
- }],
- range: [47, 65],
- loc: {
- start: { line: 1, column: 47 },
- end: { line: 1, column: 65 }
- }
- },
- range: [0, 65],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 65 }
- }
- }
-
- },
-
- 'debugger statement': {
-
- 'debugger;': {
- type: 'DebuggerStatement',
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 }
- }
- }
-
- },
-
- 'Function Definition': {
-
- 'function hello() { sayHi(); }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'hello',
- range: [9, 14],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 14 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'sayHi',
- range: [19, 24],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 24 }
- }
- },
- 'arguments': [],
- range: [19, 26],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 26 }
- }
- },
- range: [19, 27],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 27 }
- }
- }],
- range: [17, 29],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 29 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 29],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 29 }
- }
- },
-
- 'function eval() { }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'eval',
- range: [9, 13],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 13 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [16, 19],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 19 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 19],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 19 }
- }
- },
-
- 'function arguments() { }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'arguments',
- range: [9, 18],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 18 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [21, 24],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 24 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- }
- },
-
- 'function test(t, t) { }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'test',
- range: [9, 13],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 13 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 't',
- range: [14, 15],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 15 }
- }
- }, {
- type: 'Identifier',
- name: 't',
- range: [17, 18],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 18 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [20, 23],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 23 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- }
- },
-
- '(function test(t, t) { })': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'test',
- range: [10, 14],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 14 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 't',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- }, {
- type: 'Identifier',
- name: 't',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [21, 24],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 24 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 24],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 24 }
- }
- },
- range: [0, 25],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 25 }
- }
- },
-
- 'function eval() { function inner() { "use strict" } }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'eval',
- range: [9, 13],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 13 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'inner',
- range: [27, 32],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 32 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '\"use strict\"',
- range: [37, 49],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 49 }
- }
- },
- range: [37, 50],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 50 }
- }
- }],
- range: [35, 51],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 51 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [18, 51],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 51 }
- }
- }],
- range: [16, 53],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 53 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 53],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 53 }
- }
- },
-
- 'function hello(a) { sayHi(); }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'hello',
- range: [9, 14],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 14 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 'a',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'sayHi',
- range: [20, 25],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 25 }
- }
- },
- 'arguments': [],
- range: [20, 27],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 27 }
- }
- },
- range: [20, 28],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 28 }
- }
- }],
- range: [18, 30],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 30 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 30],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 30 }
- }
- },
-
- 'function hello(a, b) { sayHi(); }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'hello',
- range: [9, 14],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 14 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 'a',
- range: [15, 16],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 16 }
- }
- }, {
- type: 'Identifier',
- name: 'b',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'sayHi',
- range: [23, 28],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 28 }
- }
- },
- 'arguments': [],
- range: [23, 30],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 30 }
- }
- },
- range: [23, 31],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 31 }
- }
- }],
- range: [21, 33],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 33 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 33],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 33 }
- }
- },
-
- 'var hi = function() { sayHi() };': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'hi',
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- }
- },
- init: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'sayHi',
- range: [22, 27],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 27 }
- }
- },
- 'arguments': [],
- range: [22, 29],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 29 }
- }
- },
- range: [22, 30],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 30 }
- }
- }],
- range: [20, 31],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 31 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [9, 31],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 31 }
- }
- },
- range: [4, 31],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 31 }
- }
- }],
- kind: 'var',
- range: [0, 32],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 32 }
- }
- },
-
- 'var hi = function eval() { };': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'hi',
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- }
- },
- init: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'eval',
- range: [18, 22],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 22 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [25, 28],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 28 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [9, 28],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 28 }
- }
- },
- range: [4, 28],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 28 }
- }
- }],
- kind: 'var',
- range: [0, 29],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 29 }
- }
- },
-
- 'var hi = function arguments() { };': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'hi',
- range: [4, 6],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 6 }
- }
- },
- init: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'arguments',
- range: [18, 27],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 27 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [30, 33],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 33 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [9, 33],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 33 }
- }
- },
- range: [4, 33],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 33 }
- }
- }],
- kind: 'var',
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- }
- },
-
- 'var hello = function hi() { sayHi() };': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'hello',
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- },
- init: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'hi',
- range: [21, 23],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 23 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'sayHi',
- range: [28, 33],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 33 }
- }
- },
- 'arguments': [],
- range: [28, 35],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 35 }
- }
- },
- range: [28, 36],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 36 }
- }
- }],
- range: [26, 37],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 37 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [12, 37],
- loc: {
- start: { line: 1, column: 12 },
- end: { line: 1, column: 37 }
- }
- },
- range: [4, 37],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 37 }
- }
- }],
- kind: 'var',
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- },
-
- '(function(){})': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [11, 13],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 13 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 13],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 13 }
- }
- },
- range: [0, 14],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 14 }
- }
- },
-
- 'function universe(__proto__) { }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'universe',
- range: [9, 17],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 17 }
- }
- },
- params: [{
- type: 'Identifier',
- name: '__proto__',
- range: [18, 27],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 27 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [29, 32],
- loc: {
- start: { line: 1, column: 29 },
- end: { line: 1, column: 32 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 32],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 32 }
- }
- },
-
- 'function test() { "use strict" + 42; }': {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'test',
- range: [9, 13],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 13 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [18, 30],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 30 }
- }
- },
- right: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [33, 35],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 35 }
- }
- },
- range: [18, 35],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 35 }
- }
- },
- range: [18, 36],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 36 }
- }
- }],
- range: [16, 38],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 38 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- }
- }
-
- },
-
- 'Automatic semicolon insertion': {
-
- '{ x\n++y }': {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'x',
- range: [2, 3],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 3 }
- }
- },
- range: [2, 3],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'y',
- range: [6, 7],
- loc: {
- start: { line: 2, column: 2 },
- end: { line: 2, column: 3 }
- }
- },
- prefix: true,
- range: [4, 7],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 3 }
- }
- },
- range: [4, 8],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 4 }
- }
- }],
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
-
- '{ x\n--y }': {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'x',
- range: [2, 3],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 3 }
- }
- },
- range: [2, 3],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 3 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'y',
- range: [6, 7],
- loc: {
- start: { line: 2, column: 2 },
- end: { line: 2, column: 3 }
- }
- },
- prefix: true,
- range: [4, 7],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 3 }
- }
- },
- range: [4, 8],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 4 }
- }
- }],
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
-
- 'var x /* comment */;': {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: null,
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- }],
- kind: 'var',
- range: [0, 20],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 20 }
- }
- },
-
- '{ var x = 14, y = 3\nz; }': {
- type: 'BlockStatement',
- body: [{
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [6, 7],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 7 }
- }
- },
- init: {
- type: 'Literal',
- value: 14,
- raw: '14',
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- range: [6, 12],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 12 }
- }
- }, {
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'y',
- range: [14, 15],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 15 }
- }
- },
- init: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- range: [14, 19],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 19 }
- }
- }],
- kind: 'var',
- range: [2, 19],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 19 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'z',
- range: [20, 21],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 1 }
- }
- },
- range: [20, 22],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- }
- }],
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 4 }
- }
- },
-
- 'while (true) { continue\nthere; }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ContinueStatement',
- label: null,
- range: [15, 23],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 23 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'there',
- range: [24, 29],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
- range: [24, 30],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 6 }
- }
- }],
- range: [13, 32],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 2, column: 8 }
- }
- },
- range: [0, 32],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 8 }
- }
- },
-
- 'while (true) { continue // Comment\nthere; }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ContinueStatement',
- label: null,
- range: [15, 23],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 23 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'there',
- range: [35, 40],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
- range: [35, 41],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 6 }
- }
- }],
- range: [13, 43],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 2, column: 8 }
- }
- },
- range: [0, 43],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 8 }
- }
- },
-
- 'while (true) { continue /* Multiline\nComment */there; }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ContinueStatement',
- label: null,
- range: [15, 23],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 23 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'there',
- range: [47, 52],
- loc: {
- start: { line: 2, column: 10 },
- end: { line: 2, column: 15 }
- }
- },
- range: [47, 53],
- loc: {
- start: { line: 2, column: 10 },
- end: { line: 2, column: 16 }
- }
- }],
- range: [13, 55],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 2, column: 18 }
- }
- },
- range: [0, 55],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 18 }
- }
- },
-
- 'while (true) { break\nthere; }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'BreakStatement',
- label: null,
- range: [15, 20],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 20 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'there',
- range: [21, 26],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
- range: [21, 27],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 6 }
- }
- }],
- range: [13, 29],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 2, column: 8 }
- }
- },
- range: [0, 29],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 8 }
- }
- },
-
- 'while (true) { break // Comment\nthere; }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'BreakStatement',
- label: null,
- range: [15, 20],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 20 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'there',
- range: [32, 37],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
- range: [32, 38],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 6 }
- }
- }],
- range: [13, 40],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 2, column: 8 }
- }
- },
- range: [0, 40],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 8 }
- }
- },
-
- 'while (true) { break /* Multiline\nComment */there; }': {
- type: 'WhileStatement',
- test: {
- type: 'Literal',
- value: true,
- raw: 'true',
- range: [7, 11],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 11 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'BreakStatement',
- label: null,
- range: [15, 20],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 20 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'there',
- range: [44, 49],
- loc: {
- start: { line: 2, column: 10 },
- end: { line: 2, column: 15 }
- }
- },
- range: [44, 50],
- loc: {
- start: { line: 2, column: 10 },
- end: { line: 2, column: 16 }
- }
- }],
- range: [13, 52],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 2, column: 18 }
- }
- },
- range: [0, 52],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 18 }
- }
- },
-
- '(function(){ return\nx; })': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ReturnStatement',
- argument: null,
- range: [13, 19],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 19 }
- }
- },
- {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'x',
- range: [20, 21],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 1 }
- }
- },
- range: [20, 22],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- }
- }
- ],
- range: [11, 24],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 2, column: 4 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 24],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 2, column: 4 }
- }
- },
- range: [0, 25],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
-
- '(function(){ return // Comment\nx; })': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ReturnStatement',
- argument: null,
- range: [13, 19],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 19 }
- }
- },
- {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'x',
- range: [31, 32],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 1 }
- }
- },
- range: [31, 33],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 2 }
- }
- }
- ],
- range: [11, 35],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 2, column: 4 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 35],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 2, column: 4 }
- }
- },
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
-
- '(function(){ return/* Multiline\nComment */x; })': {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [
- {
- type: 'ReturnStatement',
- argument: null,
- range: [13, 19],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 19 }
- }
- },
- {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'x',
- range: [42, 43],
- loc: {
- start: { line: 2, column: 10 },
- end: { line: 2, column: 11 }
- }
- },
- range: [42, 44],
- loc: {
- start: { line: 2, column: 10 },
- end: { line: 2, column: 12 }
- }
- }
- ],
- range: [11, 46],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 2, column: 14 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 46],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 2, column: 14 }
- }
- },
- range: [0, 47],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 15 }
- }
- },
-
- '{ throw error\nerror; }': {
- type: 'BlockStatement',
- body: [{
- type: 'ThrowStatement',
- argument: {
- type: 'Identifier',
- name: 'error',
- range: [8, 13],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 13 }
- }
- },
- range: [2, 13],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'error',
- range: [14, 19],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
- range: [14, 20],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 6 }
- }
- }],
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 8 }
- }
- },
-
- '{ throw error// Comment\nerror; }': {
- type: 'BlockStatement',
- body: [{
- type: 'ThrowStatement',
- argument: {
- type: 'Identifier',
- name: 'error',
- range: [8, 13],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 13 }
- }
- },
- range: [2, 13],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'error',
- range: [24, 29],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 5 }
- }
- },
- range: [24, 30],
- loc: {
- start: { line: 2, column: 0 },
- end: { line: 2, column: 6 }
- }
- }],
- range: [0, 32],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 8 }
- }
- },
-
- '{ throw error/* Multiline\nComment */error; }': {
- type: 'BlockStatement',
- body: [{
- type: 'ThrowStatement',
- argument: {
- type: 'Identifier',
- name: 'error',
- range: [8, 13],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 13 }
- }
- },
- range: [2, 13],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'error',
- range: [36, 41],
- loc: {
- start: { line: 2, column: 10 },
- end: { line: 2, column: 15 }
- }
- },
- range: [36, 42],
- loc: {
- start: { line: 2, column: 10 },
- end: { line: 2, column: 16 }
- }
- }],
- range: [0, 44],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 2, column: 18 }
- }
- }
-
- },
-
- 'Directive Prolog': {
-
- '(function () { \'use\\x20strict\'; with (i); }())': {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '\'use\\x20strict\'',
- range: [15, 30],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 30 }
- }
- },
- range: [15, 31],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 31 }
- }
- }, {
- type: 'WithStatement',
- object: {
- type: 'Identifier',
- name: 'i',
- range: [38, 39],
- loc: {
- start: { line: 1, column: 38 },
- end: { line: 1, column: 39 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [40, 41],
- loc: {
- start: { line: 1, column: 40 },
- end: { line: 1, column: 41 }
- }
- },
- range: [32, 41],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 41 }
- }
- }],
- range: [13, 43],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 43 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 43],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 43 }
- }
- },
- 'arguments': [],
- range: [1, 45],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 45 }
- }
- },
- range: [0, 46],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 46 }
- }
- },
-
- '(function () { \'use\\nstrict\'; with (i); }())': {
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use\nstrict',
- raw: '\'use\\nstrict\'',
- range: [15, 28],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 28 }
- }
- },
- range: [15, 29],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 29 }
- }
- }, {
- type: 'WithStatement',
- object: {
- type: 'Identifier',
- name: 'i',
- range: [36, 37],
- loc: {
- start: { line: 1, column: 36 },
- end: { line: 1, column: 37 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [38, 39],
- loc: {
- start: { line: 1, column: 38 },
- end: { line: 1, column: 39 }
- }
- },
- range: [30, 39],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 39 }
- }
- }],
- range: [13, 41],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 41 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 41],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 41 }
- }
- },
- 'arguments': [],
- range: [1, 43],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 43 }
- }
- },
- range: [0, 44],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 44 }
- }
- }
-
- },
-
- 'Whitespace': {
-
- 'new\x20\x09\x0B\x0C\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\uFEFFa': {
- type: 'ExpressionStatement',
- expression: {
- type: 'NewExpression',
- callee: {
- type: 'Identifier',
- name: 'a',
- range: [25, 26],
- loc: {
- start: {line: 1, column: 25},
- end: {line: 1, column: 26}
- }
- },
- arguments: [],
- range: [0, 26],
- loc: {
- start: {line: 1, column: 0},
- end: {line: 1, column: 26}
- }
- },
- range: [0, 26],
- loc: {
- start: {line: 1, column: 0},
- end: {line: 1, column: 26}
- }
- },
-
- '{0\x0A1\x0D2\u20283\u20294}': {
- type: 'BlockStatement',
- body: [
- {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [1, 2],
- loc: {
- start: {line: 1, column: 1},
- end: {line: 1, column: 2}
- }
- },
- range: [1, 2],
- loc: {
- start: {line: 1, column: 1},
- end: {line: 1, column: 2}
- }
- },
- {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [3, 4],
- loc: {
- start: {line: 2, column: 0},
- end: {line: 2, column: 1}
- }
- },
- range: [3, 4],
- loc: {
- start: {line: 2, column: 0},
- end: {line: 2, column: 1}
- }
- },
- {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [5, 6],
- loc: {
- start: {line: 3, column: 0},
- end: {line: 3, column: 1}
- }
- },
- range: [5, 6],
- loc: {
- start: {line: 3, column: 0},
- end: {line: 3, column: 1}
- }
- },
- {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [7, 8],
- loc: {
- start: {line: 4, column: 0},
- end: {line: 4, column: 1}
- }
- },
- range: [7, 8],
- loc: {
- start: {line: 4, column: 0},
- end: {line: 4, column: 1}
- }
- },
- {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 4,
- raw: '4',
- range: [9, 10],
- loc: {
- start: {line: 5, column: 0},
- end: {line: 5, column: 1}
- }
- },
- range: [9, 10],
- loc: {
- start: {line: 5, column: 0},
- end: {line: 5, column: 1}
- }
- }
- ],
- range: [0, 11],
- loc: {
- start: {line: 1, column: 0},
- end: {line: 5, column: 2}
- }
- }
-
- },
-
- 'Source elements': {
-
- '': {
- type: 'Program',
- body: [],
- range: [0, 0],
- loc: {
- start: { line: 0, column: 0 },
- end: { line: 0, column: 0 }
- },
- tokens: []
- }
- },
-
- 'Source option': {
- 'x + y - z': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '-',
- left: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 },
- source: '42.js'
- }
- },
- right: {
- type: 'Identifier',
- name: 'y',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 },
- source: '42.js'
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 },
- source: '42.js'
- }
- },
- right: {
- type: 'Identifier',
- name: 'z',
- range: [8, 9],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 9 },
- source: '42.js'
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 },
- source: '42.js'
- }
- },
- range: [0, 9],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 9 },
- source: '42.js'
- }
- },
-
- 'a + (b < (c * d)) + e': {
- type: 'ExpressionStatement',
- expression: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'BinaryExpression',
- operator: '+',
- left: {
- type: 'Identifier',
- name: 'a',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 },
- source: '42.js'
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '<',
- left: {
- type: 'Identifier',
- name: 'b',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 },
- source: '42.js'
- }
- },
- right: {
- type: 'BinaryExpression',
- operator: '*',
- left: {
- type: 'Identifier',
- name: 'c',
- range: [10, 11],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 11 },
- source: '42.js'
- }
- },
- right: {
- type: 'Identifier',
- name: 'd',
- range: [14, 15],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 15 },
- source: '42.js'
- }
- },
- range: [10, 15],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 15 },
- source: '42.js'
- }
- },
- range: [5, 16],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 16 },
- source: '42.js'
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 },
- source: '42.js'
- }
- },
- right: {
- type: 'Identifier',
- name: 'e',
- range: [20, 21],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 21 },
- source: '42.js'
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 },
- source: '42.js'
- }
- },
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 },
- source: '42.js'
- }
- }
-
- },
-
-
- 'Invalid syntax': {
-
- '{': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- '}': {
- index: 0,
- lineNumber: 1,
- column: 1,
- message: 'Error: Line 1: Unexpected token }'
- },
-
- '3ea': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '3in []': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '3e': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '3e+': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '3e-': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '3x': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '3x0': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '0x': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '01a': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '3in[]': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '0x3in[]': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '"Hello\nWorld"': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'x\\': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'x\\u005c': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'x\\u002a': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'var x = /(s/g': {
- index: 13,
- lineNumber: 1,
- column: 14,
- message: 'Error: Line 1: Invalid regular expression'
- },
-
- 'a\\u': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '\\ua': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '/': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Invalid regular expression: missing /'
- },
-
- '/test': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Invalid regular expression: missing /'
- },
-
- '/test\n/': {
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Invalid regular expression: missing /'
- },
-
- 'var x = /[a-z]/\\ux': {
- index: 17,
- lineNumber: 1,
- column: 18,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'var x = /[a-z\n]/\\ux': {
- index: 14,
- lineNumber: 1,
- column: 15,
- message: 'Error: Line 1: Invalid regular expression: missing /'
- },
-
- 'var x = /[a-z]/\\\\ux': {
- index: 16,
- lineNumber: 1,
- column: 17,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'var x = /[P QR]/\\\\u0067': {
- index: 17,
- lineNumber: 1,
- column: 18,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '3 = 4': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- 'func() = 4': {
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- '(1 + 1) = 10': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- '1++': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- '1--': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- '++1': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- '--1': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- 'for((1 + 1) in list) process(x);': {
- index: 11,
- lineNumber: 1,
- column: 12,
- message: 'Error: Line 1: Invalid left-hand side in for-in'
- },
-
- '[': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- '[,': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- '1 + {': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- '1 + { t:t ': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- '1 + { t:t,': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'var x = /\n/': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Invalid regular expression: missing /'
- },
-
- 'var x = "\n': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'var if = 42': {
- index: 4,
- lineNumber: 1,
- column: 5,
- message: 'Error: Line 1: Unexpected token if'
- },
-
- 'i #= 42': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'i + 2 = 42': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- '+i = 42': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- },
-
- '1 + (': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- '\n\n\n{': {
- index: 4,
- lineNumber: 4,
- column: 2,
- message: 'Error: Line 4: Unexpected end of input'
- },
-
- '\n/* Some multiline\ncomment */\n)': {
- index: 30,
- lineNumber: 4,
- column: 1,
- message: 'Error: Line 4: Unexpected token )'
- },
-
- '{ set 1 }': {
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Unexpected number'
- },
-
- '{ get 2 }': {
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Unexpected number'
- },
-
- '({ set: s(if) { } })': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Unexpected token if'
- },
-
- '({ set s(.) { } })': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token .'
- },
-
- '({ set s() { } })': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token )'
- },
-
- '({ set: s() { } })': {
- index: 12,
- lineNumber: 1,
- column: 13,
- message: 'Error: Line 1: Unexpected token {'
- },
-
- '({ set: s(a, b) { } })': {
- index: 16,
- lineNumber: 1,
- column: 17,
- message: 'Error: Line 1: Unexpected token {'
- },
-
- '({ get: g(d) { } })': {
- index: 13,
- lineNumber: 1,
- column: 14,
- message: 'Error: Line 1: Unexpected token {'
- },
-
- '({ get i() { }, i: 42 })': {
- index: 21,
- lineNumber: 1,
- column: 22,
- message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
- },
-
- '({ i: 42, get i() { } })': {
- index: 21,
- lineNumber: 1,
- column: 22,
- message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
- },
-
- '({ set i(x) { }, i: 42 })': {
- index: 22,
- lineNumber: 1,
- column: 23,
- message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
- },
-
- '({ i: 42, set i(x) { } })': {
- index: 22,
- lineNumber: 1,
- column: 23,
- message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
- },
-
- '({ get i() { }, get i() { } })': {
- index: 27,
- lineNumber: 1,
- column: 28,
- message: 'Error: Line 1: Object literal may not have multiple get/set accessors with the same name'
- },
-
- '({ set i(x) { }, set i(x) { } })': {
- index: 29,
- lineNumber: 1,
- column: 30,
- message: 'Error: Line 1: Object literal may not have multiple get/set accessors with the same name'
- },
-
- 'function t(if) { }': {
- index: 11,
- lineNumber: 1,
- column: 12,
- message: 'Error: Line 1: Unexpected token if'
- },
-
- 'function t(true) { }': {
- index: 11,
- lineNumber: 1,
- column: 12,
- message: 'Error: Line 1: Unexpected token true'
- },
-
- 'function t(false) { }': {
- index: 11,
- lineNumber: 1,
- column: 12,
- message: 'Error: Line 1: Unexpected token false'
- },
-
- 'function t(null) { }': {
- index: 11,
- lineNumber: 1,
- column: 12,
- message: 'Error: Line 1: Unexpected token null'
- },
-
- 'function null() { }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token null'
- },
-
- 'function true() { }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token true'
- },
-
- 'function false() { }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token false'
- },
-
- 'function if() { }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token if'
- },
-
- 'a b;': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected identifier'
- },
-
- 'if.a;': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token .'
- },
-
- 'a if;': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token if'
- },
-
- 'a class;': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected reserved word'
- },
-
- 'break\n': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Illegal break statement'
- },
-
- 'break 1;': {
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Unexpected number'
- },
-
- 'continue\n': {
- index: 8,
- lineNumber: 1,
- column: 9,
- message: 'Error: Line 1: Illegal continue statement'
- },
-
- 'continue 2;': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected number'
- },
-
- 'throw': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'throw;': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Unexpected token ;'
- },
-
- 'throw\n': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Illegal newline after throw'
- },
-
- 'for (var i, i2 in {});': {
- index: 15,
- lineNumber: 1,
- column: 16,
- message: 'Error: Line 1: Unexpected token in'
- },
-
- 'for ((i in {}));': {
- index: 14,
- lineNumber: 1,
- column: 15,
- message: 'Error: Line 1: Unexpected token )'
- },
-
- 'for (i + 1 in {});': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Invalid left-hand side in for-in'
- },
-
- 'for (+i in {});': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Invalid left-hand side in for-in'
- },
-
- 'if(false)': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'if(false) doThis(); else': {
- index: 24,
- lineNumber: 1,
- column: 25,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'do': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'while(false)': {
- index: 12,
- lineNumber: 1,
- column: 13,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'for(;;)': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'with(x)': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'try { }': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Missing catch or finally after try'
- },
-
- 'try {} catch (42) {} ': {
- index: 14,
- lineNumber: 1,
- column: 15,
- message: 'Error: Line 1: Unexpected number'
- },
-
- 'try {} catch (answer()) {} ': {
- index: 20,
- lineNumber: 1,
- column: 21,
- message: 'Error: Line 1: Unexpected token ('
- },
-
- 'try {} catch (-x) {} ': {
- index: 14,
- lineNumber: 1,
- column: 15,
- message: 'Error: Line 1: Unexpected token -'
- },
-
-
- '\u203F = 10': {
- index: 0,
- lineNumber: 1,
- column: 1,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'const x = 12, y;': {
- index: 15,
- lineNumber: 1,
- column: 16,
- message: 'Error: Line 1: Unexpected token ;'
- },
-
- 'const x, y = 12;': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Unexpected token ,'
- },
-
- 'const x;': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Unexpected token ;'
- },
-
- 'if(true) let a = 1;': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token let'
- },
-
- 'if(true) const a = 1;': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token const'
- },
-
- 'switch (c) { default: default: }': {
- index: 30,
- lineNumber: 1,
- column: 31,
- message: 'Error: Line 1: More than one default clause in switch statement'
- },
-
- 'new X()."s"': {
- index: 8,
- lineNumber: 1,
- column: 9,
- message: 'Error: Line 1: Unexpected string'
- },
-
- '/*': {
- index: 2,
- lineNumber: 1,
- column: 3,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '/*\n\n\n': {
- index: 5,
- lineNumber: 4,
- column: 1,
- message: 'Error: Line 4: Unexpected token ILLEGAL'
- },
-
- '/**': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '/*\n\n*': {
- index: 5,
- lineNumber: 3,
- column: 2,
- message: 'Error: Line 3: Unexpected token ILLEGAL'
- },
-
- '/*hello': {
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '/*hello *': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '\n]': {
- index: 1,
- lineNumber: 2,
- column: 1,
- message: 'Error: Line 2: Unexpected token ]'
- },
-
- '\r]': {
- index: 1,
- lineNumber: 2,
- column: 1,
- message: 'Error: Line 2: Unexpected token ]'
- },
-
- '\r\n]': {
- index: 2,
- lineNumber: 2,
- column: 1,
- message: 'Error: Line 2: Unexpected token ]'
- },
-
- '\n\r]': {
- index: 2,
- lineNumber: 3,
- column: 1,
- message: 'Error: Line 3: Unexpected token ]'
- },
-
- '//\r\n]': {
- index: 4,
- lineNumber: 2,
- column: 1,
- message: 'Error: Line 2: Unexpected token ]'
- },
-
- '//\n\r]': {
- index: 4,
- lineNumber: 3,
- column: 1,
- message: 'Error: Line 3: Unexpected token ]'
- },
-
- '/a\\\n/': {
- index: 4,
- lineNumber: 1,
- column: 5,
- message: 'Error: Line 1: Invalid regular expression: missing /'
- },
-
- '//\r \n]': {
- index: 5,
- lineNumber: 3,
- column: 1,
- message: 'Error: Line 3: Unexpected token ]'
- },
-
- '/*\r\n*/]': {
- index: 6,
- lineNumber: 2,
- column: 3,
- message: 'Error: Line 2: Unexpected token ]'
- },
-
- '/*\n\r*/]': {
- index: 6,
- lineNumber: 3,
- column: 3,
- message: 'Error: Line 3: Unexpected token ]'
- },
-
- '/*\r \n*/]': {
- index: 7,
- lineNumber: 3,
- column: 3,
- message: 'Error: Line 3: Unexpected token ]'
- },
-
- '\\\\': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '\\u005c': {
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
-
- '\\x': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '\\u0000': {
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '\u200C = []': {
- index: 0,
- lineNumber: 1,
- column: 1,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '\u200D = []': {
- index: 0,
- lineNumber: 1,
- column: 1,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '"\\': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- '"\\u': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected token ILLEGAL'
- },
-
- 'try { } catch() {}': {
- index: 14,
- lineNumber: 1,
- column: 15,
- message: 'Error: Line 1: Unexpected token )'
- },
-
- 'return': {
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Illegal return statement'
- },
-
- 'break': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Illegal break statement'
- },
-
- 'continue': {
- index: 8,
- lineNumber: 1,
- column: 9,
- message: 'Error: Line 1: Illegal continue statement'
- },
-
- 'switch (x) { default: continue; }': {
- index: 31,
- lineNumber: 1,
- column: 32,
- message: 'Error: Line 1: Illegal continue statement'
- },
-
- 'do { x } *': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token *'
- },
-
- 'while (true) { break x; }': {
- index: 22,
- lineNumber: 1,
- column: 23,
- message: 'Error: Line 1: Undefined label \'x\''
- },
-
- 'while (true) { continue x; }': {
- index: 25,
- lineNumber: 1,
- column: 26,
- message: 'Error: Line 1: Undefined label \'x\''
- },
-
- 'x: while (true) { (function () { break x; }); }': {
- index: 40,
- lineNumber: 1,
- column: 41,
- message: 'Error: Line 1: Undefined label \'x\''
- },
-
- 'x: while (true) { (function () { continue x; }); }': {
- index: 43,
- lineNumber: 1,
- column: 44,
- message: 'Error: Line 1: Undefined label \'x\''
- },
-
- 'x: while (true) { (function () { break; }); }': {
- index: 39,
- lineNumber: 1,
- column: 40,
- message: 'Error: Line 1: Illegal break statement'
- },
-
- 'x: while (true) { (function () { continue; }); }': {
- index: 42,
- lineNumber: 1,
- column: 43,
- message: 'Error: Line 1: Illegal continue statement'
- },
-
- 'x: while (true) { x: while (true) { } }': {
- index: 20,
- lineNumber: 1,
- column: 21,
- message: 'Error: Line 1: Label \'x\' has already been declared'
- },
-
- '(function () { \'use strict\'; delete i; }())': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Delete of an unqualified identifier in strict mode.'
- },
-
- '(function () { \'use strict\'; with (i); }())': {
- index: 29,
- lineNumber: 1,
- column: 30,
- message: 'Error: Line 1: Strict mode code may not include a with statement'
- },
-
- 'function hello() {\'use strict\'; ({ i: 42, i: 42 }) }': {
- index: 47,
- lineNumber: 1,
- column: 48,
- message: 'Error: Line 1: Duplicate data property in object literal not allowed in strict mode'
- },
-
- 'function hello() {\'use strict\'; ({ hasOwnProperty: 42, hasOwnProperty: 42 }) }': {
- index: 73,
- lineNumber: 1,
- column: 74,
- message: 'Error: Line 1: Duplicate data property in object literal not allowed in strict mode'
- },
-
- 'function hello() {\'use strict\'; var eval = 10; }': {
- index: 40,
- lineNumber: 1,
- column: 41,
- message: 'Error: Line 1: Variable name may not be eval or arguments in strict mode'
- },
-
- 'function hello() {\'use strict\'; var arguments = 10; }': {
- index: 45,
- lineNumber: 1,
- column: 46,
- message: 'Error: Line 1: Variable name may not be eval or arguments in strict mode'
- },
-
- 'function hello() {\'use strict\'; try { } catch (eval) { } }': {
- index: 51,
- lineNumber: 1,
- column: 52,
- message: 'Error: Line 1: Catch variable may not be eval or arguments in strict mode'
- },
-
- 'function hello() {\'use strict\'; try { } catch (arguments) { } }': {
- index: 56,
- lineNumber: 1,
- column: 57,
- message: 'Error: Line 1: Catch variable may not be eval or arguments in strict mode'
- },
-
- 'function hello() {\'use strict\'; eval = 10; }': {
- index: 32,
- lineNumber: 1,
- column: 33,
- message: 'Error: Line 1: Assignment to eval or arguments is not allowed in strict mode'
- },
-
- 'function hello() {\'use strict\'; arguments = 10; }': {
- index: 32,
- lineNumber: 1,
- column: 33,
- message: 'Error: Line 1: Assignment to eval or arguments is not allowed in strict mode'
- },
-
- 'function hello() {\'use strict\'; ++eval; }': {
- index: 38,
- lineNumber: 1,
- column: 39,
- message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
- },
-
- 'function hello() {\'use strict\'; --eval; }': {
- index: 38,
- lineNumber: 1,
- column: 39,
- message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
- },
-
- 'function hello() {\'use strict\'; ++arguments; }': {
- index: 43,
- lineNumber: 1,
- column: 44,
- message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
- },
-
- 'function hello() {\'use strict\'; --arguments; }': {
- index: 43,
- lineNumber: 1,
- column: 44,
- message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
- },
-
- 'function hello() {\'use strict\'; eval++; }': {
- index: 36,
- lineNumber: 1,
- column: 37,
- message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
- },
-
- 'function hello() {\'use strict\'; eval--; }': {
- index: 36,
- lineNumber: 1,
- column: 37,
- message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
- },
-
- 'function hello() {\'use strict\'; arguments++; }': {
- index: 41,
- lineNumber: 1,
- column: 42,
- message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
- },
-
- 'function hello() {\'use strict\'; arguments--; }': {
- index: 41,
- lineNumber: 1,
- column: 42,
- message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
- },
-
- 'function hello() {\'use strict\'; function eval() { } }': {
- index: 41,
- lineNumber: 1,
- column: 42,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- 'function hello() {\'use strict\'; function arguments() { } }': {
- index: 41,
- lineNumber: 1,
- column: 42,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- 'function eval() {\'use strict\'; }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- 'function arguments() {\'use strict\'; }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- 'function hello() {\'use strict\'; (function eval() { }()) }': {
- index: 42,
- lineNumber: 1,
- column: 43,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- 'function hello() {\'use strict\'; (function arguments() { }()) }': {
- index: 42,
- lineNumber: 1,
- column: 43,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- '(function eval() {\'use strict\'; })()': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- '(function arguments() {\'use strict\'; })()': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- 'function hello() {\'use strict\'; ({ s: function eval() { } }); }': {
- index: 47,
- lineNumber: 1,
- column: 48,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- '(function package() {\'use strict\'; })()': {
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() {\'use strict\'; ({ i: 10, set s(eval) { } }); }': {
- index: 48,
- lineNumber: 1,
- column: 49,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- 'function hello() {\'use strict\'; ({ set s(eval) { } }); }': {
- index: 41,
- lineNumber: 1,
- column: 42,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- 'function hello() {\'use strict\'; ({ s: function s(eval) { } }); }': {
- index: 49,
- lineNumber: 1,
- column: 50,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- 'function hello(eval) {\'use strict\';}': {
- index: 15,
- lineNumber: 1,
- column: 16,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- 'function hello(arguments) {\'use strict\';}': {
- index: 15,
- lineNumber: 1,
- column: 16,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- 'function hello() { \'use strict\'; function inner(eval) {} }': {
- index: 48,
- lineNumber: 1,
- column: 49,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- 'function hello() { \'use strict\'; function inner(arguments) {} }': {
- index: 48,
- lineNumber: 1,
- column: 49,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- ' "\\1"; \'use strict\';': {
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- },
-
- 'function hello() { \'use strict\'; "\\1"; }': {
- index: 33,
- lineNumber: 1,
- column: 34,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- },
-
- 'function hello() { \'use strict\'; 021; }': {
- index: 33,
- lineNumber: 1,
- column: 34,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- },
-
- 'function hello() { \'use strict\'; ({ "\\1": 42 }); }': {
- index: 36,
- lineNumber: 1,
- column: 37,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- },
-
- 'function hello() { \'use strict\'; ({ 021: 42 }); }': {
- index: 36,
- lineNumber: 1,
- column: 37,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- },
-
- 'function hello() { "octal directive\\1"; "use strict"; }': {
- index: 19,
- lineNumber: 1,
- column: 20,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- },
-
- 'function hello() { "octal directive\\1"; "octal directive\\2"; "use strict"; }': {
- index: 19,
- lineNumber: 1,
- column: 20,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- },
-
- 'function hello() { "use strict"; function inner() { "octal directive\\1"; } }': {
- index: 52,
- lineNumber: 1,
- column: 53,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- },
-
- 'function hello() { "use strict"; var implements; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() { "use strict"; var interface; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() { "use strict"; var package; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() { "use strict"; var private; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() { "use strict"; var protected; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() { "use strict"; var public; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() { "use strict"; var static; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() { "use strict"; var yield; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello() { "use strict"; var let; }': {
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function hello(static) { "use strict"; }': {
- index: 15,
- lineNumber: 1,
- column: 16,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function static() { "use strict"; }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function eval(a) { "use strict"; }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- 'function arguments(a) { "use strict"; }': {
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- },
-
- 'var yield': {
- index: 4,
- lineNumber: 1,
- column: 5,
- message: 'Error: Line 1: Unexpected token yield'
- },
-
- 'var let': {
- index: 4,
- lineNumber: 1,
- column: 5,
- message: 'Error: Line 1: Unexpected token let'
- },
-
- '"use strict"; function static() { }': {
- index: 23,
- lineNumber: 1,
- column: 24,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function a(t, t) { "use strict"; }': {
- index: 14,
- lineNumber: 1,
- column: 15,
- message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
- },
-
- 'function a(eval) { "use strict"; }': {
- index: 11,
- lineNumber: 1,
- column: 12,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- 'function a(package) { "use strict"; }': {
- index: 11,
- lineNumber: 1,
- column: 12,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- 'function a() { "use strict"; function b(t, t) { }; }': {
- index: 43,
- lineNumber: 1,
- column: 44,
- message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
- },
-
- '(function a(t, t) { "use strict"; })': {
- index: 15,
- lineNumber: 1,
- column: 16,
- message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
- },
-
- 'function a() { "use strict"; (function b(t, t) { }); }': {
- index: 44,
- lineNumber: 1,
- column: 45,
- message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
- },
-
- '(function a(eval) { "use strict"; })': {
- index: 12,
- lineNumber: 1,
- column: 13,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- },
-
- '(function a(package) { "use strict"; })': {
- index: 12,
- lineNumber: 1,
- column: 13,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- },
-
- '__proto__: __proto__: 42;': {
- index: 21,
- lineNumber: 1,
- column: 22,
- message: 'Error: Line 1: Label \'__proto__\' has already been declared'
- },
-
- '"use strict"; function t(__proto__, __proto__) { }': {
- index: 36,
- lineNumber: 1,
- column: 37,
- message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
- },
-
- '"use strict"; x = { __proto__: 42, __proto__: 43 }': {
- index: 48,
- lineNumber: 1,
- column: 49,
- message: 'Error: Line 1: Duplicate data property in object literal not allowed in strict mode'
- },
-
- '"use strict"; x = { get __proto__() { }, __proto__: 43 }': {
- index: 54,
- lineNumber: 1,
- column: 55,
- message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
- },
-
- 'var': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'let': {
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'const': {
- index: 5,
- lineNumber: 1,
- column: 6,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- '{ ; ; ': {
- index: 8,
- lineNumber: 1,
- column: 9,
- message: 'Error: Line 1: Unexpected end of input'
- },
-
- 'function t() { ; ; ': {
- index: 21,
- lineNumber: 1,
- column: 22,
- message: 'Error: Line 1: Unexpected end of input'
- }
-
- },
-
- 'Tokenize': {
- 'tokenize(/42/)': [
- {
- "type": "Identifier",
- "value": "tokenize",
- "range": [
- 0,
- 8
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 8
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "(",
- "range": [
- 8,
- 9
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 8
- },
- "end": {
- "line": 1,
- "column": 9
- }
- }
- },
- {
- "type": "RegularExpression",
- "value": "/42/",
- "range": [
- 9,
- 13
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 9
- },
- "end": {
- "line": 1,
- "column": 13
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ")",
- "range": [
- 13,
- 14
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 13
- },
- "end": {
- "line": 1,
- "column": 14
- }
- }
- }
- ],
-
- 'if (false) { /42/ }': [
- {
- "type": "Keyword",
- "value": "if",
- "range": [
- 0,
- 2
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 2
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "(",
- "range": [
- 3,
- 4
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 3
- },
- "end": {
- "line": 1,
- "column": 4
- }
- }
- },
- {
- "type": "Boolean",
- "value": "false",
- "range": [
- 4,
- 9
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 4
- },
- "end": {
- "line": 1,
- "column": 9
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ")",
- "range": [
- 9,
- 10
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 9
- },
- "end": {
- "line": 1,
- "column": 10
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "{",
- "range": [
- 11,
- 12
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 11
- },
- "end": {
- "line": 1,
- "column": 12
- }
- }
- },
- {
- "type": "RegularExpression",
- "value": "/42/",
- "range": [
- 13,
- 17
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 13
- },
- "end": {
- "line": 1,
- "column": 17
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "}",
- "range": [
- 18,
- 19
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 18
- },
- "end": {
- "line": 1,
- "column": 19
- }
- }
- }
- ],
-
- 'with (false) /42/': [
- {
- "type": "Keyword",
- "value": "with",
- "range": [
- 0,
- 4
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 4
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "(",
- "range": [
- 5,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 5
- },
- "end": {
- "line": 1,
- "column": 6
- }
- }
- },
- {
- "type": "Boolean",
- "value": "false",
- "range": [
- 6,
- 11
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 6
- },
- "end": {
- "line": 1,
- "column": 11
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ")",
- "range": [
- 11,
- 12
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 11
- },
- "end": {
- "line": 1,
- "column": 12
- }
- }
- },
- {
- "type": "RegularExpression",
- "value": "/42/",
- "range": [
- 13,
- 17
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 13
- },
- "end": {
- "line": 1,
- "column": 17
- }
- }
- }
- ],
-
- '(false) /42/': [
- {
- "type": "Punctuator",
- "value": "(",
- "range": [
- 0,
- 1
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 1
- }
- }
- },
- {
- "type": "Boolean",
- "value": "false",
- "range": [
- 1,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 1
- },
- "end": {
- "line": 1,
- "column": 6
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ")",
- "range": [
- 6,
- 7
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 6
- },
- "end": {
- "line": 1,
- "column": 7
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "/",
- "range": [
- 8,
- 9
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 8
- },
- "end": {
- "line": 1,
- "column": 9
- }
- }
- },
- {
- "type": "Numeric",
- "value": "42",
- "range": [
- 9,
- 11
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 9
- },
- "end": {
- "line": 1,
- "column": 11
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "/",
- "range": [
- 11,
- 12
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 11
- },
- "end": {
- "line": 1,
- "column": 12
- }
- }
- }
- ],
-
- 'function f(){} /42/': [
- {
- "type": "Keyword",
- "value": "function",
- "range": [
- 0,
- 8
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 8
- }
- }
- },
- {
- "type": "Identifier",
- "value": "f",
- "range": [
- 9,
- 10
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 9
- },
- "end": {
- "line": 1,
- "column": 10
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "(",
- "range": [
- 10,
- 11
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 10
- },
- "end": {
- "line": 1,
- "column": 11
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ")",
- "range": [
- 11,
- 12
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 11
- },
- "end": {
- "line": 1,
- "column": 12
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "{",
- "range": [
- 12,
- 13
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 12
- },
- "end": {
- "line": 1,
- "column": 13
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "}",
- "range": [
- 13,
- 14
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 13
- },
- "end": {
- "line": 1,
- "column": 14
- }
- }
- },
- {
- "type": "RegularExpression",
- "value": "/42/",
- "range": [
- 15,
- 19
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 15
- },
- "end": {
- "line": 1,
- "column": 19
- }
- }
- }
- ],
-
- 'function(){} /42': [
- {
- "type": "Keyword",
- "value": "function",
- "range": [
- 0,
- 8
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 8
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "(",
- "range": [
- 8,
- 9
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 8
- },
- "end": {
- "line": 1,
- "column": 9
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ")",
- "range": [
- 9,
- 10
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 9
- },
- "end": {
- "line": 1,
- "column": 10
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "{",
- "range": [
- 10,
- 11
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 10
- },
- "end": {
- "line": 1,
- "column": 11
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "}",
- "range": [
- 11,
- 12
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 11
- },
- "end": {
- "line": 1,
- "column": 12
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "/",
- "range": [
- 13,
- 14
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 13
- },
- "end": {
- "line": 1,
- "column": 14
- }
- }
- },
- {
- "type": "Numeric",
- "value": "42",
- "range": [
- 14,
- 16
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 14
- },
- "end": {
- "line": 1,
- "column": 16
- }
- }
- }
- ],
-
- '{} /42': [
- {
- "type": "Punctuator",
- "value": "{",
- "range": [
- 0,
- 1
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 1
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "}",
- "range": [
- 1,
- 2
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 1
- },
- "end": {
- "line": 1,
- "column": 2
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "/",
- "range": [
- 3,
- 4
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 3
- },
- "end": {
- "line": 1,
- "column": 4
- }
- }
- },
- {
- "type": "Numeric",
- "value": "42",
- "range": [
- 4,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 4
- },
- "end": {
- "line": 1,
- "column": 6
- }
- }
- }
- ],
-
- '[function(){} /42]': [
- {
- "type": "Punctuator",
- "value": "[",
- "range": [
- 0,
- 1
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 1
- }
- }
- },
- {
- "type": "Keyword",
- "value": "function",
- "range": [
- 1,
- 9
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 1
- },
- "end": {
- "line": 1,
- "column": 9
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "(",
- "range": [
- 9,
- 10
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 9
- },
- "end": {
- "line": 1,
- "column": 10
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ")",
- "range": [
- 10,
- 11
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 10
- },
- "end": {
- "line": 1,
- "column": 11
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "{",
- "range": [
- 11,
- 12
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 11
- },
- "end": {
- "line": 1,
- "column": 12
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "}",
- "range": [
- 12,
- 13
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 12
- },
- "end": {
- "line": 1,
- "column": 13
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "/",
- "range": [
- 14,
- 15
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 14
- },
- "end": {
- "line": 1,
- "column": 15
- }
- }
- },
- {
- "type": "Numeric",
- "value": "42",
- "range": [
- 15,
- 17
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 15
- },
- "end": {
- "line": 1,
- "column": 17
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "]",
- "range": [
- 17,
- 18
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 17
- },
- "end": {
- "line": 1,
- "column": 18
- }
- }
- }
- ],
-
- ';function f(){} /42/': [
- {
- "type": "Punctuator",
- "value": ";",
- "range": [
- 0,
- 1
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 1
- }
- }
- },
- {
- "type": "Keyword",
- "value": "function",
- "range": [
- 1,
- 9
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 1
- },
- "end": {
- "line": 1,
- "column": 9
- }
- }
- },
- {
- "type": "Identifier",
- "value": "f",
- "range": [
- 10,
- 11
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 10
- },
- "end": {
- "line": 1,
- "column": 11
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "(",
- "range": [
- 11,
- 12
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 11
- },
- "end": {
- "line": 1,
- "column": 12
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ")",
- "range": [
- 12,
- 13
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 12
- },
- "end": {
- "line": 1,
- "column": 13
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "{",
- "range": [
- 13,
- 14
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 13
- },
- "end": {
- "line": 1,
- "column": 14
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "}",
- "range": [
- 14,
- 15
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 14
- },
- "end": {
- "line": 1,
- "column": 15
- }
- }
- },
- {
- "type": "RegularExpression",
- "value": "/42/",
- "range": [
- 16,
- 20
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 16
- },
- "end": {
- "line": 1,
- "column": 20
- }
- }
- }
- ],
-
- 'void /42/': [
- {
- "type": "Keyword",
- "value": "void",
- "range": [
- 0,
- 4
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 4
- }
- }
- },
- {
- "type": "RegularExpression",
- "value": "/42/",
- "range": [
- 5,
- 9
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 5
- },
- "end": {
- "line": 1,
- "column": 9
- }
- }
- }
- ],
-
- '/42/': [
- {
- "type": "RegularExpression",
- "value": "/42/",
- "range": [
- 0,
- 4
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 4
- }
- }
- }
- ],
-
- 'foo[/42]': [
- {
- "type": "Identifier",
- "value": "foo",
- "range": [
- 0,
- 3
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 3
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "[",
- "range": [
- 3,
- 4
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 3
- },
- "end": {
- "line": 1,
- "column": 4
- }
- }
- }
- ],
-
- '[a] / b': [
- {
- "type": "Punctuator",
- "value": "[",
- "range": [
- 0,
- 1
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 1
- }
- }
- },
- {
- "type": "Identifier",
- "value": "a",
- "range": [
- 1,
- 2
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 1
- },
- "end": {
- "line": 1,
- "column": 2
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "]",
- "range": [
- 2,
- 3
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 2
- },
- "end": {
- "line": 1,
- "column": 3
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "/",
- "range": [
- 4,
- 5
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 4
- },
- "end": {
- "line": 1,
- "column": 5
- }
- }
- },
- {
- "type": "Identifier",
- "value": "b",
- "range": [
- 6,
- 7
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 6
- },
- "end": {
- "line": 1,
- "column": 7
- }
- }
- }
- ],
-
- '': [],
-
- '/42': {
- tokenize: true,
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Invalid regular expression: missing /'
- },
-
- 'foo[/42': {
- tokenize: true,
- index: 7,
- lineNumber: 1,
- column: 8,
- message: 'Error: Line 1: Invalid regular expression: missing /'
- },
-
- 'this / 100;': [
- {
- "type": "Keyword",
- "value": "this",
- "range": [
- 0,
- 4
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 0
- },
- "end": {
- "line": 1,
- "column": 4
- }
- }
- },
- {
- "type": "Punctuator",
- "value": "/",
- "range": [
- 5,
- 6
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 5
- },
- "end": {
- "line": 1,
- "column": 6
- }
- }
- },
- {
- "type": "Numeric",
- "value": "100",
- "range": [
- 7,
- 10
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 7
- },
- "end": {
- "line": 1,
- "column": 10
- }
- }
- },
- {
- "type": "Punctuator",
- "value": ";",
- "range": [
- 10,
- 11
- ],
- "loc": {
- "start": {
- "line": 1,
- "column": 10
- },
- "end": {
- "line": 1,
- "column": 11
- }
- }
- }
- ]
- },
-
- 'API': {
- 'parse()': {
- call: 'parse',
- args: [],
- result: {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'undefined'
- }
- }]
- }
- },
-
- 'parse(null)': {
- call: 'parse',
- args: [null],
- result: {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: null,
- raw: 'null'
- }
- }]
- }
- },
-
- 'parse(42)': {
- call: 'parse',
- args: [42],
- result: {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42'
- }
- }]
- }
- },
-
- 'parse(true)': {
- call: 'parse',
- args: [true],
- result: {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: true,
- raw: 'true'
- }
- }]
- }
- },
-
- 'parse(undefined)': {
- call: 'parse',
- args: [void 0],
- result: {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'undefined'
- }
- }]
- }
- },
-
- 'parse(new String("test"))': {
- call: 'parse',
- args: [new String('test')],
- result: {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Identifier',
- name: 'test'
- }
- }]
- }
- },
-
- 'parse(new Number(42))': {
- call: 'parse',
- args: [new Number(42)],
- result: {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 42,
- raw: '42'
- }
- }]
- }
- },
-
- 'parse(new Boolean(true))': {
- call: 'parse',
- args: [new Boolean(true)],
- result: {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: true,
- raw: 'true'
- }
- }]
- }
- },
-
- 'Syntax': {
- property: 'Syntax',
- result: {
- AssignmentExpression: 'AssignmentExpression',
- ArrayExpression: 'ArrayExpression',
- BlockStatement: 'BlockStatement',
- BinaryExpression: 'BinaryExpression',
- BreakStatement: 'BreakStatement',
- CallExpression: 'CallExpression',
- CatchClause: 'CatchClause',
- ConditionalExpression: 'ConditionalExpression',
- ContinueStatement: 'ContinueStatement',
- DoWhileStatement: 'DoWhileStatement',
- DebuggerStatement: 'DebuggerStatement',
- EmptyStatement: 'EmptyStatement',
- ExpressionStatement: 'ExpressionStatement',
- ForStatement: 'ForStatement',
- ForInStatement: 'ForInStatement',
- FunctionDeclaration: 'FunctionDeclaration',
- FunctionExpression: 'FunctionExpression',
- Identifier: 'Identifier',
- IfStatement: 'IfStatement',
- Literal: 'Literal',
- LabeledStatement: 'LabeledStatement',
- LogicalExpression: 'LogicalExpression',
- MemberExpression: 'MemberExpression',
- NewExpression: 'NewExpression',
- ObjectExpression: 'ObjectExpression',
- Program: 'Program',
- Property: 'Property',
- ReturnStatement: 'ReturnStatement',
- SequenceExpression: 'SequenceExpression',
- SwitchStatement: 'SwitchStatement',
- SwitchCase: 'SwitchCase',
- ThisExpression: 'ThisExpression',
- ThrowStatement: 'ThrowStatement',
- TryStatement: 'TryStatement',
- UnaryExpression: 'UnaryExpression',
- UpdateExpression: 'UpdateExpression',
- VariableDeclaration: 'VariableDeclaration',
- VariableDeclarator: 'VariableDeclarator',
- WhileStatement: 'WhileStatement',
- WithStatement: 'WithStatement'
- }
- },
-
- 'tokenize()': {
- call: 'tokenize',
- args: [],
- result: [{
- type: 'Identifier',
- value: 'undefined'
- }]
- },
-
- 'tokenize(null)': {
- call: 'tokenize',
- args: [null],
- result: [{
- type: 'Null',
- value: 'null'
- }]
- },
-
- 'tokenize(42)': {
- call: 'tokenize',
- args: [42],
- result: [{
- type: 'Numeric',
- value: '42'
- }]
- },
-
- 'tokenize(true)': {
- call: 'tokenize',
- args: [true],
- result: [{
- type: 'Boolean',
- value: 'true'
- }]
- },
-
- 'tokenize(undefined)': {
- call: 'tokenize',
- args: [void 0],
- result: [{
- type: 'Identifier',
- value: 'undefined'
- }]
- },
-
- 'tokenize(new String("test"))': {
- call: 'tokenize',
- args: [new String('test')],
- result: [{
- type: 'Identifier',
- value: 'test'
- }]
- },
-
- 'tokenize(new Number(42))': {
- call: 'tokenize',
- args: [new Number(42)],
- result: [{
- type: 'Numeric',
- value: '42'
- }]
- },
-
- 'tokenize(new Boolean(true))': {
- call: 'tokenize',
- args: [new Boolean(true)],
- result: [{
- type: 'Boolean',
- value: 'true'
- }]
- }
- },
-
- 'Tolerant parse': {
- 'return': {
- type: 'Program',
- body: [{
- type: 'ReturnStatement',
- 'argument': null,
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- }
- }],
- range: [0, 6],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 6 }
- },
- errors: [{
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Illegal return statement'
- }]
- },
-
- '(function () { \'use strict\'; with (i); }())': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '\'use strict\'',
- range: [15, 27],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 27 }
- }
- },
- range: [15, 28],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 28 }
- }
- }, {
- type: 'WithStatement',
- object: {
- type: 'Identifier',
- name: 'i',
- range: [35, 36],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 36 }
- }
- },
- body: {
- type: 'EmptyStatement',
- range: [37, 38],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 38 }
- }
- },
- range: [29, 38],
- loc: {
- start: { line: 1, column: 29 },
- end: { line: 1, column: 38 }
- }
- }],
- range: [13, 40],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 40 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 40],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 40 }
- }
- },
- 'arguments': [],
- range: [1, 42],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 42 }
- }
- },
- range: [0, 43],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 43 }
- }
- }],
- range: [0, 43],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 43 }
- },
- errors: [{
- index: 29,
- lineNumber: 1,
- column: 30,
- message: 'Error: Line 1: Strict mode code may not include a with statement'
- }]
- },
-
- '(function () { \'use strict\'; 021 }())': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'CallExpression',
- callee: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '\'use strict\'',
- range: [15, 27],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 27 }
- }
- },
- range: [15, 28],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 28 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 17,
- raw: "021",
- range: [29, 32],
- loc: {
- start: { line: 1, column: 29 },
- end: { line: 1, column: 32 }
- }
- },
- range: [29, 33],
- loc: {
- start: { line: 1, column: 29 },
- end: { line: 1, column: 33 }
- }
- }],
- range: [13, 34],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 34 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [1, 34],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 34 }
- }
- },
- 'arguments': [],
- range: [1, 36],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 36 }
- }
- },
- range: [0, 37],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 37 }
- }
- }],
- range: [0, 37],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 37 }
- },
- errors: [{
- index: 29,
- lineNumber: 1,
- column: 30,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- }]
- },
-
- '"use strict"; delete x': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UnaryExpression',
- operator: 'delete',
- argument: {
- type: 'Identifier',
- name: 'x',
- range: [21, 22],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 22 }
- }
- },
- prefix: true,
- range: [14, 22],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 22 }
- }
- },
- range: [14, 22],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 22 }
- }
- }],
- range: [0, 22],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 22 }
- },
- errors: [{
- index: 22,
- lineNumber: 1,
- column: 23,
- message: 'Error: Line 1: Delete of an unqualified identifier in strict mode.'
- }]
- },
-
- '"use strict"; try {} catch (eval) {}': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [],
- range: [18, 20],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 20 }
- }
- },
- guardedHandlers: [],
- handlers: [{
- type: 'CatchClause',
- param: {
- type: 'Identifier',
- name: 'eval',
- range: [28, 32],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 32 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [],
- range: [34, 36],
- loc: {
- start: { line: 1, column: 34 },
- end: { line: 1, column: 36 }
- }
- },
- range: [21, 36],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 36 }
- }
- }],
- finalizer: null,
- range: [14, 36],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 36 }
- }
- }],
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- },
- errors: [{
- index: 32,
- lineNumber: 1,
- column: 33,
- message: 'Error: Line 1: Catch variable may not be eval or arguments in strict mode'
- }]
- },
-
- '"use strict"; try {} catch (arguments) {}': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'TryStatement',
- block: {
- type: 'BlockStatement',
- body: [],
- range: [18, 20],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 20 }
- }
- },
- guardedHandlers: [],
- handlers: [{
- type: 'CatchClause',
- param: {
- type: 'Identifier',
- name: 'arguments',
- range: [28, 37],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 37 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [],
- range: [39, 41],
- loc: {
- start: { line: 1, column: 39 },
- end: { line: 1, column: 41 }
- }
- },
- range: [21, 41],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 41 }
- }
- }],
- finalizer: null,
- range: [14, 41],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 41 }
- }
- }],
- range: [0, 41],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 41 }
- },
- errors: [{
- index: 37,
- lineNumber: 1,
- column: 38,
- message: 'Error: Line 1: Catch variable may not be eval or arguments in strict mode'
- }]
- },
-
- '"use strict"; var eval;': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'eval',
- range: [18, 22],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 22 }
- }
- },
- init: null,
- range: [18, 22],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 22 }
- }
- }],
- kind: 'var',
- range: [14, 23],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 23 }
- }
- }],
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- },
- errors: [{
- index: 22,
- lineNumber: 1,
- column: 23,
- message: 'Error: Line 1: Variable name may not be eval or arguments in strict mode'
- }]
- },
-
- '"use strict"; var arguments;': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'arguments',
- range: [18, 27],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 27 }
- }
- },
- init: null,
- range: [18, 27],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 27 }
- }
- }],
- kind: 'var',
- range: [14, 28],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 28 }
- }
- }],
- range: [0, 28],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 28 }
- },
- errors: [{
- index: 27,
- lineNumber: 1,
- column: 28,
- message: 'Error: Line 1: Variable name may not be eval or arguments in strict mode'
- }]
- },
-
- '"use strict"; eval = 0;': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'eval',
- range: [14, 18],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 18 }
- }
- },
- right: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [21, 22],
- loc: {
- start: { line: 1, column: 21 },
- end: { line: 1, column: 22 }
- }
- },
- range: [14, 22],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 22 }
- }
- },
- range: [14, 23],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 23 }
- }
- }],
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- },
- errors: [{
- index: 14,
- lineNumber: 1,
- column: 15,
- message: 'Error: Line 1: Assignment to eval or arguments is not allowed in strict mode'
- }]
- },
-
- '"use strict"; eval++;': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'eval',
- range: [14, 18],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 18 }
- }
- },
- prefix: false,
- range: [14, 20],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 20 }
- }
- },
- range: [14, 21],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 21 }
- }
- }],
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- },
- errors: [{
- index: 18,
- lineNumber: 1,
- column: 19,
- message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
- }]
- },
-
- '"use strict"; --eval;': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'eval',
- range: [16, 20],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 20 }
- }
- },
- prefix: true,
- range: [14, 20],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 20 }
- }
- },
- range: [14, 21],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 21 }
- }
- }],
- range: [0, 21],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 21 }
- },
- errors: [{
- index: 20,
- lineNumber: 1,
- column: 21,
- message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
- }]
- },
-
- '"use strict"; arguments = 0;': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'arguments',
- range: [14, 23],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 23 }
- }
- },
- right: {
- type: 'Literal',
- value: 0,
- raw: '0',
- range: [26, 27],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 27 }
- }
- },
- range: [14, 27],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 27 }
- }
- },
- range: [14, 28],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 28 }
- }
- }],
- range: [0, 28],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 28 }
- },
- errors: [{
- index: 14,
- lineNumber: 1,
- column: 15,
- message: 'Error: Line 1: Assignment to eval or arguments is not allowed in strict mode'
- }]
- },
-
- '"use strict"; arguments--;': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Identifier',
- name: 'arguments',
- range: [14, 23],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 23 }
- }
- },
- prefix: false,
- range: [14, 25],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 25 }
- }
- },
- range: [14, 26],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 26 }
- }
- }],
- range: [0, 26],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 26 }
- },
- errors: [{
- index: 23,
- lineNumber: 1,
- column: 24,
- message: 'Error: Line 1: Postfix increment/decrement may not have eval or arguments operand in strict mode'
- }]
- },
-
- '"use strict"; ++arguments;': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Identifier',
- name: 'arguments',
- range: [16, 25],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 25 }
- }
- },
- prefix: true,
- range: [14, 25],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 25 }
- }
- },
- range: [14, 26],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 26 }
- }
- }],
- range: [0, 26],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 26 }
- },
- errors: [{
- index: 25,
- lineNumber: 1,
- column: 26,
- message: 'Error: Line 1: Prefix increment/decrement may not have eval or arguments operand in strict mode'
- }]
- },
-
-
- '"use strict";x={y:1,y:1}': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [13, 14],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 14 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'y',
- range: [16, 17],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 17 }
- }
- },
- value: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- kind: 'init',
- range: [16, 19],
- loc: {
- start: { line: 1, column: 16 },
- end: { line: 1, column: 19 }
- }
- }, {
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'y',
- range: [20, 21],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 21 }
- }
- },
- value: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [22, 23],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 23 }
- }
- },
- kind: 'init',
- range: [20, 23],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 23 }
- }
- }],
- range: [15, 24],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 24 }
- }
- },
- range: [13, 24],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 24 }
- }
- },
- range: [13, 24],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 24 }
- }
- }],
- range: [0, 24],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 24 }
- },
- errors: [{
- index: 23,
- lineNumber: 1,
- column: 24,
- message: 'Error: Line 1: Duplicate data property in object literal not allowed in strict mode'
- }]
- },
-
- '"use strict"; function eval() {};': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'eval',
- range: [23, 27],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 27 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [30, 32],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 32 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [14, 32],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 32 }
- }
- }, {
- type: 'EmptyStatement',
- range: [32, 33],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 33 }
- }
- }],
- range: [0, 33],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 33 }
- },
- errors: [{
- index: 23,
- lineNumber: 1,
- column: 24,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- }]
- },
-
- '"use strict"; function arguments() {};': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'arguments',
- range: [23, 32],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 32 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [35, 37],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 37 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [14, 37],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 37 }
- }
- }, {
- type: 'EmptyStatement',
- range: [37, 38],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 38 }
- }
- }],
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- },
- errors: [{
- index: 23,
- lineNumber: 1,
- column: 24,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- }]
- },
-
- '"use strict"; function interface() {};': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'interface',
- range: [23, 32],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 32 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [35, 37],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 37 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [14, 37],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 37 }
- }
- }, {
- type: 'EmptyStatement',
- range: [37, 38],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 38 }
- }
- }],
- range: [0, 38],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 38 }
- },
- errors: [{
- index: 23,
- lineNumber: 1,
- column: 24,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- }]
- },
-
- '"use strict"; (function eval() {});': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'eval',
- range: [24, 28],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 28 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [31, 33],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 33 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [15, 33],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 33 }
- }
- },
- range: [14, 35],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 35 }
- }
- }],
- range: [0, 35],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 35 }
- },
- errors: [{
- index: 24,
- lineNumber: 1,
- column: 25,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- }]
- },
-
- '"use strict"; (function arguments() {});': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'arguments',
- range: [24, 33],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 33 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [36, 38],
- loc: {
- start: { line: 1, column: 36 },
- end: { line: 1, column: 38 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [15, 38],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 38 }
- }
- },
- range: [14, 40],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 40 }
- }
- }],
- range: [0, 40],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 40 }
- },
- errors: [{
- index: 24,
- lineNumber: 1,
- column: 25,
- message: 'Error: Line 1: Function name may not be eval or arguments in strict mode'
- }]
- },
-
- '"use strict"; (function interface() {});': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'interface',
- range: [24, 33],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 33 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [36, 38],
- loc: {
- start: { line: 1, column: 36 },
- end: { line: 1, column: 38 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [15, 38],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 38 }
- }
- },
- range: [14, 40],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 40 }
- }
- }],
- range: [0, 40],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 40 }
- },
- errors: [{
- index: 24,
- lineNumber: 1,
- column: 25,
- message: 'Error: Line 1: Use of future reserved word in strict mode'
- }]
- },
-
- '"use strict"; function f(eval) {};': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'f',
- range: [23, 24],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 24 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 'eval',
- range: [25, 29],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 29 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [31, 33],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 33 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [14, 33],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 33 }
- }
- }, {
- type: 'EmptyStatement',
- range: [33, 34],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 34 }
- }
- }],
- range: [0, 34],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 34 }
- },
- errors: [{
- index: 25,
- lineNumber: 1,
- column: 26,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- }]
- },
-
- '"use strict"; function f(arguments) {};': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'f',
- range: [23, 24],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 24 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 'arguments',
- range: [25, 34],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 34 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [36, 38],
- loc: {
- start: { line: 1, column: 36 },
- end: { line: 1, column: 38 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [14, 38],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 38 }
- }
- }, {
- type: 'EmptyStatement',
- range: [38, 39],
- loc: {
- start: { line: 1, column: 38 },
- end: { line: 1, column: 39 }
- }
- }],
- range: [0, 39],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 39 }
- },
- errors: [{
- index: 25,
- lineNumber: 1,
- column: 26,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- }]
- },
-
- '"use strict"; function f(foo, foo) {};': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'f',
- range: [23, 24],
- loc: {
- start: { line: 1, column: 23 },
- end: { line: 1, column: 24 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 'foo',
- range: [25, 28],
- loc: {
- start: { line: 1, column: 25 },
- end: { line: 1, column: 28 }
- }
- }, {
- type: 'Identifier',
- name: 'foo',
- range: [31, 34],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 34 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [36, 38],
- loc: {
- start: { line: 1, column: 36 },
- end: { line: 1, column: 38 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [14, 38],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 38 }
- }
- }, {
- type: 'EmptyStatement',
- range: [38, 39],
- loc: {
- start: { line: 1, column: 38 },
- end: { line: 1, column: 39 }
- }
- }],
- range: [0, 39],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 39 }
- },
- errors: [{
- index: 31,
- lineNumber: 1,
- column: 32,
- message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
- }]
- },
-
- '"use strict"; (function f(eval) {});': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'f',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 'eval',
- range: [26, 30],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 30 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [32, 34],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 34 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [15, 34],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 34 }
- }
- },
- range: [14, 36],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 36 }
- }
- }],
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- },
- errors: [{
- index: 26,
- lineNumber: 1,
- column: 27,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- }]
- },
-
-
- '"use strict"; (function f(arguments) {});': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'f',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 'arguments',
- range: [26, 35],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 35 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [37, 39],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 39 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [15, 39],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 39 }
- }
- },
- range: [14, 41],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 41 }
- }
- }],
- range: [0, 41],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 41 }
- },
- errors: [{
- index: 26,
- lineNumber: 1,
- column: 27,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- }]
- },
-
- '"use strict"; (function f(foo, foo) {});': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'FunctionExpression',
- id: {
- type: 'Identifier',
- name: 'f',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- },
- params: [{
- type: 'Identifier',
- name: 'foo',
- range: [26, 29],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 29 }
- }
- }, {
- type: 'Identifier',
- name: 'foo',
- range: [32, 35],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 35 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [37, 39],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 39 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [15, 39],
- loc: {
- start: { line: 1, column: 15 },
- end: { line: 1, column: 39 }
- }
- },
- range: [14, 41],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 41 }
- }
- }],
- range: [0, 41],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 41 }
- },
- errors: [{
- index: 32,
- lineNumber: 1,
- column: 33,
- message: 'Error: Line 1: Strict mode function may not have duplicate parameter names'
- }]
- },
-
- '"use strict"; x = { set f(eval) {} }' : {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Identifier',
- name: 'x',
- range: [14, 15],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 15 }
- }
- },
- right: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'f',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- },
- value : {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'eval',
- range: [26, 30],
- loc: {
- start: { line: 1, column: 26 },
- end: { line: 1, column: 30 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [32, 34],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 34 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [32, 34],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 34 }
- }
- },
- kind: 'set',
- range: [20, 34],
- loc: {
- start: { line: 1, column: 20 },
- end: { line: 1, column: 34 }
- }
- }],
- range: [18, 36],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 36 }
- }
- },
- range: [14, 36],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 36 }
- }
- },
- range: [14, 36],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 36 }
- }
- }],
- range: [0, 36],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 36 }
- },
- errors: [{
- index: 26,
- lineNumber: 1,
- column: 27,
- message: 'Error: Line 1: Parameter name eval or arguments is not allowed in strict mode'
- }]
- },
-
- 'function hello() { "octal directive\\1"; "use strict"; }': {
- type: 'Program',
- body: [{
- type: 'FunctionDeclaration',
- id: {
- type: 'Identifier',
- name: 'hello',
- range: [9, 14],
- loc: {
- start: { line: 1, column: 9 },
- end: { line: 1, column: 14 }
- }
- },
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'octal directive\u0001',
- raw: '"octal directive\\1"',
- range: [19, 38],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 38 }
- }
- },
- range: [19, 39],
- loc: {
- start: { line: 1, column: 19 },
- end: { line: 1, column: 39 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [40, 52],
- loc: {
- start: { line: 1, column: 40 },
- end: { line: 1, column: 52 }
- }
- },
- range: [40, 53],
- loc: {
- start: { line: 1, column: 40 },
- end: { line: 1, column: 53 }
- }
- }],
- range: [17, 55],
- loc: {
- start: { line: 1, column: 17 },
- end: { line: 1, column: 55 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [0, 55],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 55 }
- }
- }],
- range: [0, 55],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 55 }
- },
- errors: [{
- index: 19,
- lineNumber: 1,
- column: 20,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- }]
- },
-
- '"\\1"; \'use strict\';': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: '\u0001',
- raw: '"\\1"',
- range: [0, 4],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 4 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- }, {
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '\'use strict\'',
- range: [6, 18],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 18 }
- }
- },
- range: [6, 19],
- loc: {
- start: { line: 1, column: 6 },
- end: { line: 1, column: 19 }
- }
- }],
- range: [0, 19],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 19 }
- },
- errors: [{
- index: 0,
- lineNumber: 1,
- column: 1,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- }]
- },
-
- '"use strict"; var x = { 014: 3}': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- init: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Literal',
- value: 12,
- raw: '014',
- range: [24, 27],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 27 }
- }
- },
- value: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [29, 30],
- loc: {
- start: { line: 1, column: 29 },
- end: { line: 1, column: 30 }
- }
- },
- kind: 'init',
- range: [24, 30],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 30 }
- }
- }],
- range: [22, 31],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 31 }
- }
- },
- range: [18, 31],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 31 }
- }
- }],
- kind: 'var',
- range: [14, 31],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 31 }
- }
- }],
- range: [0, 31],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 31 }
- },
- errors: [{
- index: 24,
- lineNumber: 1,
- column: 25,
- message: 'Error: Line 1: Octal literals are not allowed in strict mode.'
- }]
- },
-
- '"use strict"; var x = { get i() {}, get i() {} }': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- init: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'i',
- range: [28, 29],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 29 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [32, 34],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 34 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [32, 34],
- loc: {
- start: { line: 1, column: 32 },
- end: { line: 1, column: 34 }
- }
- },
- kind: 'get',
- range: [24, 34],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 34 }
- }
- }, {
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'i',
- range: [40, 41],
- loc: {
- start: { line: 1, column: 40 },
- end: { line: 1, column: 41 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [44, 46],
- loc: {
- start: { line: 1, column: 44 },
- end: { line: 1, column: 46 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [44, 46],
- loc: {
- start: { line: 1, column: 44 },
- end: { line: 1, column: 46 }
- }
- },
- kind: 'get',
- range: [36, 46],
- loc: {
- start: { line: 1, column: 36 },
- end: { line: 1, column: 46 }
- }
- }],
- range: [22, 48],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 48 }
- }
- },
- range: [18, 48],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 48 }
- }
- }],
- kind: 'var',
- range: [14, 48],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 48 }
- }
- }],
- range: [0, 48],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 48 }
- },
- errors: [{
- index: 46,
- lineNumber: 1,
- column: 47,
- message: 'Error: Line 1: Object literal may not have multiple get/set accessors with the same name'
- }]
- },
-
- '"use strict"; var x = { i: 42, get i() {} }': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- init: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'i',
- range: [24, 25],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 25 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [27, 29],
- loc: {
- start: { line: 1, column: 27 },
- end: { line: 1, column: 29 }
- }
- },
- kind: 'init',
- range: [24, 29],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 29 }
- }
- }, {
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'i',
- range: [35, 36],
- loc: {
- start: { line: 1, column: 35 },
- end: { line: 1, column: 36 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [39, 41],
- loc: {
- start: { line: 1, column: 39 },
- end: { line: 1, column: 41 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [39, 41],
- loc: {
- start: { line: 1, column: 39 },
- end: { line: 1, column: 41 }
- }
- },
- kind: 'get',
- range: [31, 41],
- loc: {
- start: { line: 1, column: 31 },
- end: { line: 1, column: 41 }
- }
- }],
- range: [22, 43],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 43 }
- }
- },
- range: [18, 43],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 43 }
- }
- }],
- kind: 'var',
- range: [14, 43],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 43 }
- }
- }],
- range: [0, 43],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 43 }
- },
- errors: [{
- index: 41,
- lineNumber: 1,
- column: 42,
- message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
- }]
- },
-
- '"use strict"; var x = { set i(x) {}, i: 42 }': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'Literal',
- value: 'use strict',
- raw: '"use strict"',
- range: [0, 12],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 12 }
- }
- },
- range: [0, 13],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 13 }
- }
- }, {
- type: 'VariableDeclaration',
- declarations: [{
- type: 'VariableDeclarator',
- id: {
- type: 'Identifier',
- name: 'x',
- range: [18, 19],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 19 }
- }
- },
- init: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'i',
- range: [28, 29],
- loc: {
- start: { line: 1, column: 28 },
- end: { line: 1, column: 29 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [{
- type: 'Identifier',
- name: 'x',
- range: [30, 31],
- loc: {
- start: { line: 1, column: 30 },
- end: { line: 1, column: 31 }
- }
- }],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [33, 35],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 35 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [33, 35],
- loc: {
- start: { line: 1, column: 33 },
- end: { line: 1, column: 35 }
- }
- },
- kind: 'set',
- range: [24, 35],
- loc: {
- start: { line: 1, column: 24 },
- end: { line: 1, column: 35 }
- }
- }, {
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 'i',
- range: [37, 38],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 38 }
- }
- },
- value: {
- type: 'Literal',
- value: 42,
- raw: '42',
- range: [40, 42],
- loc: {
- start: { line: 1, column: 40 },
- end: { line: 1, column: 42 }
- }
- },
- kind: 'init',
- range: [37, 42],
- loc: {
- start: { line: 1, column: 37 },
- end: { line: 1, column: 42 }
- }
- }],
- range: [22, 44],
- loc: {
- start: { line: 1, column: 22 },
- end: { line: 1, column: 44 }
- }
- },
- range: [18, 44],
- loc: {
- start: { line: 1, column: 18 },
- end: { line: 1, column: 44 }
- }
- }],
- kind: 'var',
- range: [14, 44],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 44 }
- }
- }],
- range: [0, 44],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 44 }
- },
- errors: [{
- index: 42,
- lineNumber: 1,
- column: 43,
- message: 'Error: Line 1: Object literal may not have data and accessor property with the same name'
- }]
-
-
- },
-
- '({ set s() { } })': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'ObjectExpression',
- properties: [{
- type: 'Property',
- key: {
- type: 'Identifier',
- name: 's',
- range: [7, 8],
- loc: {
- start: { line: 1, column: 7 },
- end: { line: 1, column: 8 }
- }
- },
- value: {
- type: 'FunctionExpression',
- id: null,
- params: [],
- defaults: [],
- body: {
- type: 'BlockStatement',
- body: [],
- range: [11, 14],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 14 }
- }
- },
- rest: null,
- generator: false,
- expression: false,
- range: [11, 14],
- loc: {
- start: { line: 1, column: 11 },
- end: { line: 1, column: 14 }
- }
- },
- kind: 'set',
- range: [3, 14],
- loc: {
- start: { line: 1, column: 3 },
- end: { line: 1, column: 14 }
- }
- }],
- range: [1, 16],
- loc: {
- start: { line: 1, column: 1 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- }
- }],
- range: [0, 17],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 17 }
- },
- errors: [{
- index: 9,
- lineNumber: 1,
- column: 10,
- message: 'Error: Line 1: Unexpected token )'
- }]
- },
-
- 'foo("bar") = baz': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'CallExpression',
- callee: {
- type: 'Identifier',
- name: 'foo',
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- 'arguments': [{
- type: 'Literal',
- value: 'bar',
- raw: '"bar"',
- range: [4, 9],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 9 }
- }
- }],
- range: [0, 10],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 10 }
- }
- },
- right: {
- type: 'Identifier',
- name: 'baz',
- range: [13, 16],
- loc: {
- start: { line: 1, column: 13 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- },
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }],
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- },
- errors: [{
- index: 10,
- lineNumber: 1,
- column: 11,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- }]
- },
-
- '1 = 2': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'AssignmentExpression',
- operator: '=',
- left: {
- type: 'Literal',
- value: 1,
- raw: '1',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- right: {
- type: 'Literal',
- value: 2,
- raw: '2',
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- },
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- }
- }],
- range: [0, 5],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 5 }
- },
- errors: [{
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- }]
- },
-
- '3++': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '++',
- argument: {
- type: 'Literal',
- value: 3,
- raw: '3',
- range: [0, 1],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 1 }
- }
- },
- prefix: false,
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- }],
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- },
- errors: [{
- index: 1,
- lineNumber: 1,
- column: 2,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- }]
- },
-
- '--4': {
- type: 'Program',
- body: [{
- type: 'ExpressionStatement',
- expression: {
- type: 'UpdateExpression',
- operator: '--',
- argument: {
- type: 'Literal',
- value: 4,
- raw: '4',
- range: [2, 3],
- loc: {
- start: { line: 1, column: 2 },
- end: { line: 1, column: 3 }
- }
- },
- prefix: true,
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- },
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- }
- }],
- range: [0, 3],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 3 }
- },
- errors: [{
- index: 3,
- lineNumber: 1,
- column: 4,
- message: 'Error: Line 1: Invalid left-hand side in assignment'
- }]
- },
-
- 'for (5 in []) {}': {
- type: 'Program',
- body: [{
- type: 'ForInStatement',
- left: {
- type: 'Literal',
- value: 5,
- raw: '5',
- range: [5, 6],
- loc: {
- start: { line: 1, column: 5 },
- end: { line: 1, column: 6 }
- }
- },
- right: {
- type: 'ArrayExpression',
- elements: [],
- range: [10, 12],
- loc: {
- start: { line: 1, column: 10 },
- end: { line: 1, column: 12 }
- }
- },
- body: {
- type: 'BlockStatement',
- body: [],
- range: [14, 16],
- loc: {
- start: { line: 1, column: 14 },
- end: { line: 1, column: 16 }
- }
- },
- each: false,
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- }
- }],
- range: [0, 16],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 16 }
- },
- errors: [{
- index: 6,
- lineNumber: 1,
- column: 7,
- message: 'Error: Line 1: Invalid left-hand side in for-in'
- }]
- },
-
- 'var x = /[P QR]/\\g': {
- type: "Program",
- body: [{
- type: "VariableDeclaration",
- declarations: [{
- type: "VariableDeclarator",
- id: {
- type: "Identifier",
- name: "x",
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: "Literal",
- value: "/[P QR]/g",
- raw: "/[P QR]/\\g",
- range: [8, 18],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 18 }
- }
- },
- range: [4, 18],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 18 }
- }
- }],
- kind: "var",
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- }
- }],
- range: [0, 18],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 18 }
- },
- errors: [{
- index: 17,
- lineNumber: 1,
- column: 18,
- message: "Error: Line 1: Unexpected token ILLEGAL"
- }]
- },
-
- 'var x = /[P QR]/\\\\u0067': {
- type: "Program",
- body: [{
- type: "VariableDeclaration",
- declarations: [{
- type: "VariableDeclarator",
- id: {
- type: "Identifier",
- name: "x",
- range: [4, 5],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 5 }
- }
- },
- init: {
- type: "Literal",
- value: "/[P QR]/g",
- raw: "/[P QR]/\\\\u0067",
- range: [8, 23],
- loc: {
- start: { line: 1, column: 8 },
- end: { line: 1, column: 23 }
- }
- },
- range: [4, 23],
- loc: {
- start: { line: 1, column: 4 },
- end: { line: 1, column: 23 }
- }
- }],
- kind: "var",
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- }
- }],
- range: [0, 23],
- loc: {
- start: { line: 1, column: 0 },
- end: { line: 1, column: 23 }
- },
- errors: [{
- index: 17,
- lineNumber: 1,
- column: 18,
- message: "Error: Line 1: Unexpected token ILLEGAL"
- }, {
- index: 23,
- lineNumber: 1,
- column: 24,
- message: "Error: Line 1: Unexpected token ILLEGAL"
- }]
- }
-
- }
-};
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/.npmignore b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/.npmignore
deleted file mode 100644
index 0fa279c03d5..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.glsl
-node_modules/
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/LICENSE b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/LICENSE
deleted file mode 100644
index afbb4fb7c65..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014 Chris Dickinson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/README.md b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/README.md
deleted file mode 100644
index ba634cd2a1b..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/README.md
+++ /dev/null
@@ -1,212 +0,0 @@
-# glslify
-
-a module system for GLSL and a transform enabling easy access to GLSL Shaders in JavaScript.
-
-## As a Browserify transform:
-
-```bash
-$ npm install --save glslify
-$ browserify entry.js -t glslify > bundle.js
-```
-
-glslify will find and replace all instances of `glslify({vertex: path, fragment: path})`
-with a function that takes a webgl context and returns a [shader instance](http://npm.im/gl-shader-core).
-
-Recommended usage:
-
-```javascript
-var glslify = require('glslify') // requiring `glslify` is safe in this context.
- // if the program is run without the transform,
- // it'll output a helpful error message.
-var shell = require('gl-now')()
-
-var createShader = glslify({
- vertex: './vertex.glsl'
- , fragment: './fragment.glsl'
-})
-
-var program
-
-shell.on('gl-init', function() {
- program = createShader(shell.gl)
-})
-```
-
-As part of the transform, the program will be analyzed for its **uniforms** and **attributes**,
-so once you have a `program` instance, the following will work:
-
-```javascript
-
-// given a glsl program containing:
-//
-// uniform vec2 color;
-// uniform mat4 view;
-
-program.bind()
-program.uniforms.color = [0.5, 1.0]
-program.uniforms.view = [
- 1, 0, 0, 0
-, 0, 1, 0, 0
-, 0, 0, 1, 0
-, 0, 0, 0, 1
-]
-
-```
-
-The following options may be passed into glslify's transformed constructor:
-
-* `fragment`: the fragment shader to use.
-* `vertex`: the vertex shader to use.
-* `inline`: instead of loading the vertex/fragment shaders from a file path,
- use the string values of these options directly to generate the shaders.
-* `transform`: a string or array of strings naming browserify-transform stream
- modules you would like to use to transform these shaders.
-
-## As a GLSL module system:
-
-glslify can be run as a standalone command as well:
-
-
-```bash
-$ glslify my-module.glsl > output.glsl
-```
-
-glslify allows you to write GLSL modules that export a local function, variable, or type,
-and `require` those modules to bring that export into another module.
-
-Lookups work like node's `require` -- that is, it'll work relatively to the file first,
-and then work from the file's directory on up to the root directory looking for a package
-in `node_modules/`.
-
-## example files
-
-| [`main.glsl`](#mainglsl) | [`file1.glsl`](#file1glsl) | [`file2.glsl`](#file2glsl) |
-|---------------------------|-----------------------------|-----------------------------|
-
-### main.glsl
-
-[back to file list](#example-files)
-
-```c
-// main.glsl
-precision highp float;
-uniform float time;
-uniform vec2 mouse;
-uniform vec2 resolution;
-
-// require a function from another file!
-#pragma glslify: program_one = require(./file1)
-
-// require a function from another file, and replace
-// `local_value` in that file with `resolution.x` from
-// this scope.
-#pragma glslify: program_two = require(./file2, local_value=resolution.x)
-
-int modulo(float x, float y) {
- return int(x - y * floor(x / y));
-}
-
-void main(void) {
- ivec2 m = ivec2(modulo(gl_FragCoord.x, 2.), modulo(gl_FragCoord.y, 2.));
-
- if(m.x == 0 || m.y == 0) {
- program_one();
- } else {
- program_two();
- }
-}
-```
-
-
-### file1.glsl
-
-[back to file list](#example-files)
-
-```c
-// file1.glsl
-void main(void) {
- gl_FragColor = vec4(1., 0., 0., 1.);
-}
-
-#pragma glslify: export(main)
-```
-
-### file2.glsl
-
-[back to file list](#example-files)
-
-```c
-// file2.glsl
-
-uniform float local_value;
-
-void main(void) {
- gl_FragColor = vec4(0., 0., local_value, 1.);
-}
-
-#pragma glslify: export(main)
-```
-# GLSL API
-
-GLSLify works by mangling top-level identities in non-root modules.
-
-Exported variables will be aliased on requirement.
-
-### \#pragma glslify: VARIABLE = require(MODULE[, NAME=EXPR])
-
-Import a module and assign it the name `VARIABLE` in the local program.
-
-`MODULE` may be located within `node_modules/` or relative to the current file.
-
-**Quotes are not allowed.**
-
-If the target module defines `attribute`, `varying`, or `uniform` global variables,
-you may map those to a local definition or expression:
-
-```c
-
-attribute vec4 position;
-#pragma glslify: x = require(./takes_vec2, module_variable=position.xy)
-
-```
-
-If a mapping is not defined, those requirements are forwarded on to the module requiring
-the current module -- if no mappings are found for a definition, an error is raised.
-
-### \#pragma glslify: export(NAME)
-
-Exports a local name from the current module. If the current module is the root, this is
-a no-op. There may be only one exported `NAME` per module. The `NAME` may represent a
-type, function, or variable.
-
-
-# With ThreeJS
-
-You can use the `sourceOnly` option to integrate glslfiy with ThreeJS and other WebGL frameworks. This will return an object with `vertex` and `fragment` shader source, which you can then compile yourself.
-
-In ThreeJS it might look like this:
-
-```js
-var myShader = glslify({
- vertex: './vertex.glsl',
- fragment: './fragment.glsl',
- sourceOnly: true
-});
-
-//optionally do something with our uniforms/attribs
-console.log( myShader.uniforms, myShader.attributes );
-
-//setup custom ThreeJS material...
-var mat = new THREE.ShaderMaterial({
- vertexShader: myShader.vertex,
- fragmentShader: myShader.fragment
- uniforms: {
- // setup your uniforms..
- }
-});
-
-```
-
-# License
-
-MIT
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/adapter.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/adapter.js
deleted file mode 100644
index 6273c82ea4b..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/adapter.js
+++ /dev/null
@@ -1,9 +0,0 @@
-module.exports = programify
-
-var shader = require('gl-shader-core')
-
-function programify(vertex, fragment, uniforms, attributes) {
- return function(gl) {
- return shader(gl, vertex, fragment, uniforms, attributes)
- }
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/bin/glslify b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/bin/glslify
deleted file mode 100755
index 86eb9469fdd..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/bin/glslify
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env node
-require('../cli')()
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/browser.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/browser.js
deleted file mode 100644
index c3c020c68a1..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/browser.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = noop
-
-function noop() {
- throw new Error(
- 'You should bundle your code ' +
- 'using `glslify` as a transform.'
- )
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/cli.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/cli.js
deleted file mode 100644
index dbae39416a3..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/cli.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var tty = require('tty')
- , nopt = require('nopt')
- , path = require('path')
- , fs = require('fs')
- , shorthand
- , options
-
-var glslify = require('glslify-stream')
- , deparser = require('glsl-deparser')
- , minify = require('glsl-min-stream')
-
-options = {
- 'minify': Boolean
- , 'output': path
- , 'help': Boolean
-}
-
-shorthand = {
- 'h': ['--help']
- , 'm': ['--minify']
- , 'o': ['--output']
-}
-
-module.exports = run
-
-function help() {
-/*
-glslify [-o|--output file] [-h|--help] file
-
- compile multiple glsl modules with #pragma: glslify directives into a single
- glsl output.
-
- if no output option is defined, output will be written to stdout.
-
- arguments:
-
- --help, -h this help message.
-
- --output path, -o path output result of minification to file represented by `path`.
- by default, output will be written to stdout.
-
-*/
-
- var str = help+''
-
- process.stdout.write(str.slice(str.indexOf('/*')+3, str.indexOf('*/')))
-}
-
-function run() {
- var parsed = nopt(options, shorthand)
-
- if(parsed.help || !parsed.argv.remain.length) {
- return help(), process.exit(1)
- }
-
- var should_minify = parsed.minify
- , output = parsed.output ? fs.createWriteStream(parsed.output) : process.stdout
- , input = path.resolve(parsed.argv.remain[0])
- , stream
-
- stream = glslify(input)
-
- if(should_minify)
- stream = stream.pipe(minify())
-
- stream.pipe(deparser(!should_minify))
- .pipe(output)
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/example.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/example.js
deleted file mode 100644
index 71042ec80f9..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/example.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var glslify = require('glslify')
-
-var program = glslify({vertex: "./balls.glsl", fragment: "./sauron.glsl"})
-
-
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/index.js
deleted file mode 100644
index d09c1c972dd..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/index.js
+++ /dev/null
@@ -1,192 +0,0 @@
-module.exports = transform
-
-var glslify = require('glslify-stream')
- , deparser = require('glsl-deparser')
- , replace = require('replace-method')
- , concat = require('concat-stream')
- , evaluate = require('static-eval')
- , extract = require('glsl-extract')
- , emit = require('emit-function')
- , through = require('through')
- , resolve = require('resolve')
- , esprima = require('esprima')
- , sleuth = require('sleuth')
- , from = require('new-from')
- , path = require('path')
-
-var usageRegex = /['"]glslify['"]/
-
-function transform(filename) {
- var stream = through(write, end)
- , accum = []
- , len = 0
-
- return stream
-
- function write(buf) {
- accum[accum.length] = buf
- len += buf.length
- }
-
- function end() {
- var buf = Buffer.concat(accum).toString('utf8')
-
- // break out early if it doesn't look like
- // we're going to find any shaders here,
- // parsing and transforming the AST is expensive!
- if(!usageRegex.test(buf)) {
- return bail(buf)
- }
-
- var ast = esprima.parse(buf)
- , name = glslifyname(ast)
- , src = replace(ast)
- , loading = 0
- , map = {}
- , id = 0
-
- // bail early if glslify isn't required at all
- if(!name) {
- return bail(buf)
- }
-
- src.replace([name], function(node) {
- var fragment
- , current
- , vertex
- , config
-
- current = ++id
-
- if(!node.arguments.length) {
- return
- }
-
- var cwd = path.dirname(filename)
- config = evaluate(node.arguments[0], {
- __filename: filename
- , __dirname: cwd
- })
-
- if(typeof config !== 'object') {
- return
- }
-
- var sourceOnly = !!config.sourceOnly
- var frag = config.fragment || config.frag
- var vert = config.vertex || config.vert
- var inline = !!config.inline
-
- var streamOpts = {
- input: inline
- , transform: config.transform
- }
-
- ++loading
- var vert_stream = glslify(
- inline ? filename : path.resolve(cwd, vert)
- , streamOpts)
-
- var frag_stream = glslify(
- inline ? filename : path.resolve(cwd, frag)
- , streamOpts)
-
- if(inline) {
- from([vert]).pipe(vert_stream)
- from([frag]).pipe(frag_stream)
- }
-
- vert_stream
- .on('file', emit(stream, 'file'))
- .on('error', emit(stream, 'error'))
- .pipe(deparser())
- .pipe(concat(onvertex))
-
- frag_stream
- .on('file', emit(stream, 'file'))
- .on('error', emit(stream, 'error'))
- .pipe(deparser())
- .pipe(concat(onfragment))
-
- return {
- type: 'CallExpression'
- , callee: {
- type: 'CallExpression'
- , callee: {
- type: 'Identifier'
- , name: 'require'
- }
- , arguments: [
- {type: 'Literal', value: sourceOnly ? 'glslify/simple-adapter.js' : 'glslify/adapter.js'}
- ]
- }
- , arguments: [
- {type: 'Identifier', name: '__glslify_' + current + '_vert'}
- , {type: 'Identifier', name: '__glslify_' + current + '_frag'}
- , {type: 'Identifier', name: '__glslify_' + current + '_unis'}
- , {type: 'Identifier', name: '__glslify_' + current + '_attrs'}
- ]
- }
-
- function onvertex(data) {
- vertex = data
- vertex && fragment && done()
- }
-
- function onfragment(data) {
- fragment = data
- vertex && fragment && done()
- }
-
- function done() {
- extract(vertex + '\n' + fragment)(function(err, info) {
- if(err) {
- return stream.emit('error', err)
- }
-
- --loading
-
- map[current] = [vertex, fragment, info.uniforms, info.attributes]
-
- if(!loading) {
- finish()
- }
- })
- }
- })
-
- if(!loading) {
- finish()
- }
-
- function finish() {
- var code = src.code()
- , unmap
-
- unmap = {vert: 0, frag: 1, unis: 2, attrs: 3}
-
- code = code.replace(/__glslify_(\d+)_(vert|frag|unis|attrs)/g, function(all, num, type) {
- return JSON.stringify(map[num][unmap[type]])
- })
-
- stream.queue(code)
- stream.queue(null)
- }
-
- function bail(code) {
- stream.queue(code)
- stream.queue(null)
- }
- }
-}
-
-function glslifyname(ast) {
- var required = sleuth(ast)
- var name
-
- Object.keys(required).some(function(key) {
- return name = (required[key] === 'glslify' ? key : null)
- })
-
- return name
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/package.json b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/package.json
deleted file mode 100644
index e70816bd5fd..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/package.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "_from": "glslify@^1.6.0",
- "_id": "glslify@1.6.1",
- "_inBundle": false,
- "_integrity": "sha1-WqtSNgXx1pGrhfU262wbQl/c0Q8=",
- "_location": "/gl-vignette-background/glslify",
- "_phantomChildren": {},
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "glslify@^1.6.0",
- "name": "glslify",
- "escapedName": "glslify",
- "rawSpec": "^1.6.0",
- "saveSpec": null,
- "fetchSpec": "^1.6.0"
- },
- "_requiredBy": [
- "/gl-vignette-background"
- ],
- "_resolved": "http://registry.npmjs.org/glslify/-/glslify-1.6.1.tgz",
- "_shasum": "5aab523605f1d691ab85f536eb6c1b425fdcd10f",
- "_spec": "glslify@^1.6.0",
- "_where": "/Users/forrest/Audius/vis-test/node_modules/gl-vignette-background",
- "authors": [
- "Hugh Kennedy (http://hughsk.io/)",
- "Mikola Lysenko (http://0fps.net)",
- "Chris Dickinson (http://neversaw.us)"
- ],
- "bin": {
- "glslify": "./bin/glslify"
- },
- "browser": {
- "index.js": "browser.js"
- },
- "bugs": {
- "url": "https://github.com/gl-modules/glslify/issues"
- },
- "bundleDependencies": false,
- "dependencies": {
- "concat-stream": "^1.4.1",
- "cssauron": "0.0.2",
- "cssauron-glsl": "0.0.0",
- "emit-function": "0.0.2",
- "esprima": "^1.0.4",
- "gl-shader-core": "^2.0.0",
- "glsl-deparser": "0.0.2",
- "glsl-extract": "0.0.2",
- "glsl-min-stream": "0.0.2",
- "glslify-stream": "^0.4.0",
- "new-from": "^0.0.3",
- "nopt": "^2.0.0",
- "replace-method": "0.0.0",
- "resolve": "^0.6.1",
- "shortest": "0.0.0",
- "sleuth": "^0.1.1",
- "static-eval": "^0.2.2",
- "through": "^2.3.4"
- },
- "deprecated": false,
- "description": "command line glsl module system builder",
- "homepage": "https://github.com/gl-modules/glslify#readme",
- "keywords": [
- "glslify",
- "glsl",
- "module",
- "system",
- "cli"
- ],
- "license": "MIT",
- "main": "index.js",
- "name": "glslify",
- "preferGlobal": "true",
- "repository": {
- "type": "git",
- "url": "git://github.com/gl-modules/glslify.git"
- },
- "scripts": {
- "test": "node test/index.js"
- },
- "version": "1.6.1"
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/simple-adapter.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/simple-adapter.js
deleted file mode 100644
index f202180a657..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/glslify/simple-adapter.js
+++ /dev/null
@@ -1,10 +0,0 @@
-module.exports = programify
-
-function programify(vertex, fragment, uniforms, attributes) {
- return {
- vertex: vertex,
- fragment: fragment,
- uniforms: uniforms,
- attributes: attributes
- };
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/.travis.yml b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/.travis.yml
deleted file mode 100644
index 895dbd36234..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
- - 0.6
- - 0.8
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/LICENSE b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/LICENSE
deleted file mode 100644
index ee27ba4b441..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/example/async.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/example/async.js
deleted file mode 100644
index 6624ff7268f..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/example/async.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var resolve = require('../');
-resolve('tap', { basedir: __dirname }, function (err, res) {
- if (err) console.error(err)
- else console.log(res)
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/example/sync.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/example/sync.js
deleted file mode 100644
index 54b2cc10042..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/example/sync.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var resolve = require('../');
-var res = resolve.sync('tap', { basedir: __dirname });
-console.log(res);
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/index.js
deleted file mode 100644
index 51f194b4ca7..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var core = require('./lib/core');
-exports = module.exports = require('./lib/async');
-exports.core = core;
-exports.isCore = function (x) { return core[x] };
-exports.sync = require('./lib/sync');
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/async.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/async.js
deleted file mode 100644
index dc998134cbc..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/async.js
+++ /dev/null
@@ -1,127 +0,0 @@
-var core = require('./core');
-var fs = require('fs');
-var path = require('path');
-var caller = require('./caller.js');
-var nodeModulesPaths = require('./node-modules-paths.js');
-
-module.exports = function resolve (x, opts, cb) {
- if (typeof opts === 'function') {
- cb = opts;
- opts = {};
- }
- if (!opts) opts = {};
-
- var isFile = opts.isFile || function (file, cb) {
- fs.stat(file, function (err, stat) {
- if (err && err.code === 'ENOENT') cb(null, false)
- else if (err) cb(err)
- else cb(null, stat.isFile() || stat.isFIFO())
- });
- };
- var readFile = opts.readFile || fs.readFile;
-
- var extensions = opts.extensions || [ '.js' ];
- var y = opts.basedir || path.dirname(caller());
- var modules = opts.moduleDirectory || 'node_modules';
-
- opts.paths = opts.paths || [];
-
- if (x.match(/^(?:\.\.?\/|\/|([A-Za-z]:)?\\)/)) {
- loadAsFile(path.resolve(y, x), function (err, m, pkg) {
- if (err) cb(err)
- else if (m) cb(null, m, pkg)
- else loadAsDirectory(path.resolve(y, x), function (err, d, pkg) {
- if (err) cb(err)
- else if (d) cb(null, d, pkg)
- else cb(new Error("Cannot find module '" + x + "' from '" + y + "'"))
- })
- });
- }
- else loadNodeModules(x, y, function (err, n, pkg) {
- if (err) cb(err)
- else if (n) cb(null, n, pkg)
- else if (core[x]) return cb(null, x);
- else cb(new Error("Cannot find module '" + x + "' from '" + y + "'"))
- });
-
- function loadAsFile (x, pkg, cb) {
- if (typeof pkg === 'function') {
- cb = pkg;
- pkg = opts.package;
- }
-
- (function load (exts) {
- if (exts.length === 0) return cb(null, undefined, pkg);
- var file = x + exts[0];
-
- isFile(file, function (err, ex) {
- if (err) cb(err)
- else if (ex) cb(null, file, pkg)
- else load(exts.slice(1))
- });
- })([''].concat(extensions));
- }
-
- function loadAsDirectory (x, fpkg, cb) {
- if (typeof fpkg === 'function') {
- cb = fpkg;
- fpkg = opts.package;
- }
-
- var pkgfile = path.join(x, '/package.json');
- isFile(pkgfile, function (err, ex) {
- if (err) return cb(err);
- if (!ex) return loadAsFile(path.join(x, '/index'), fpkg, cb);
-
- readFile(pkgfile, function (err, body) {
- if (err) return cb(err);
- try {
- var pkg = JSON.parse(body);
- }
- catch (err) {}
-
- if (opts.packageFilter) {
- pkg = opts.packageFilter(pkg, x);
- }
-
- if (pkg.main) {
- if (pkg.main === '.' || pkg.main === './'){
- pkg.main = 'index'
- }
- loadAsFile(path.resolve(x, pkg.main), pkg, function (err, m, pkg) {
- if (err) return cb(err);
- if (m) return cb(null, m, pkg);
- if (!pkg) return loadAsFile(path.join(x, '/index'), pkg, cb);
-
- var dir = path.resolve(x, pkg.main);
- loadAsDirectory(dir, pkg, function (err, n, pkg) {
- if (err) return cb(err);
- if (n) return cb(null, n, pkg);
- loadAsFile(path.join(x, '/index'), pkg, cb);
- });
- });
- return;
- }
-
- loadAsFile(path.join(x, '/index'), pkg, cb);
- });
- });
- }
-
- function loadNodeModules (x, start, cb) {
- (function process (dirs) {
- if (dirs.length === 0) return cb(null, undefined);
- var dir = dirs[0];
-
- loadAsFile(path.join(dir, '/', x), undefined, function (err, m, pkg) {
- if (err) return cb(err);
- if (m) return cb(null, m, pkg);
- loadAsDirectory(path.join(dir, '/', x), undefined, function (err, n, pkg) {
- if (err) return cb(err);
- if (n) return cb(null, n, pkg);
- process(dirs.slice(1));
- });
- });
- })(nodeModulesPaths(start, opts));
- }
-};
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/caller.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/caller.js
deleted file mode 100644
index 5536549b046..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/caller.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = function () {
- // see https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
- var origPrepareStackTrace = Error.prepareStackTrace;
- Error.prepareStackTrace = function (_, stack) { return stack };
- var stack = (new Error()).stack;
- Error.prepareStackTrace = origPrepareStackTrace;
- return stack[2].getFileName();
-};
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/core.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/core.js
deleted file mode 100644
index ea4a6c87eff..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/core.js
+++ /dev/null
@@ -1,4 +0,0 @@
-module.exports = require('./core.json').reduce(function (acc, x) {
- acc[x] = true;
- return acc;
-}, {});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/core.json b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/core.json
deleted file mode 100644
index 28560f7ef74..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/core.json
+++ /dev/null
@@ -1,38 +0,0 @@
-[
- "assert",
- "buffer_ieee754",
- "buffer",
- "child_process",
- "cluster",
- "console",
- "constants",
- "crypto",
- "_debugger",
- "dgram",
- "dns",
- "domain",
- "events",
- "freelist",
- "fs",
- "http",
- "https",
- "_linklist",
- "module",
- "net",
- "os",
- "path",
- "punycode",
- "querystring",
- "readline",
- "repl",
- "stream",
- "string_decoder",
- "sys",
- "timers",
- "tls",
- "tty",
- "url",
- "util",
- "vm",
- "zlib"
-]
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/node-modules-paths.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/node-modules-paths.js
deleted file mode 100644
index c31efcd0a1b..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/node-modules-paths.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var path = require('path');
-
-
-module.exports = function (start, opts) {
- var modules = opts.moduleDirectory || 'node_modules';
- var prefix = '/';
- if (/^([A-Za-z]:)/.test(start)) {
- prefix = '';
- } else if (/^\\\\/.test(start)) {
- prefix = '\\\\';
- }
- var splitRe = process.platform === 'win32' ? /[\/\\]/ : /\/+/;
- var parts = start.split(splitRe);
-
- var dirs = [];
- for (var i = parts.length - 1; i >= 0; i--) {
- if (parts[i] === modules) continue;
- var dir = path.join(
- path.join.apply(path, parts.slice(0, i + 1)),
- modules
- );
- dirs.push(prefix + dir);
- }
- if(process.platform === 'win32'){
- dirs[dirs.length-1] = dirs[dirs.length-1].replace(":", ":\\");
- }
- return dirs.concat(opts.paths);
-}
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/sync.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/sync.js
deleted file mode 100644
index 49c262571a8..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/lib/sync.js
+++ /dev/null
@@ -1,80 +0,0 @@
-var core = require('./core');
-var fs = require('fs');
-var path = require('path');
-var caller = require('./caller.js');
-var nodeModulesPaths = require('./node-modules-paths.js');
-
-module.exports = function (x, opts) {
- if (!opts) opts = {};
- var isFile = opts.isFile || function (file) {
- try { var stat = fs.statSync(file) }
- catch (err) { if (err && err.code === 'ENOENT') return false }
- return stat.isFile() || stat.isFIFO();
- };
- var readFileSync = opts.readFileSync || fs.readFileSync;
-
- var extensions = opts.extensions || [ '.js' ];
- var y = opts.basedir || path.dirname(caller());
-
- opts.paths = opts.paths || [];
-
- if (x.match(/^(?:\.\.?\/|\/|([A-Za-z]:)?\\)/)) {
- var m = loadAsFileSync(path.resolve(y, x))
- || loadAsDirectorySync(path.resolve(y, x));
- if (m) return m;
- } else {
- var n = loadNodeModulesSync(x, y);
- if (n) return n;
- }
-
- if (core[x]) return x;
-
- throw new Error("Cannot find module '" + x + "' from '" + y + "'");
-
- function loadAsFileSync (x) {
- if (isFile(x)) {
- return x;
- }
-
- for (var i = 0; i < extensions.length; i++) {
- var file = x + extensions[i];
- if (isFile(file)) {
- return file;
- }
- }
- }
-
- function loadAsDirectorySync (x) {
- var pkgfile = path.join(x, '/package.json');
- if (isFile(pkgfile)) {
- var body = readFileSync(pkgfile, 'utf8');
- try {
- var pkg = JSON.parse(body);
- if (opts.packageFilter) {
- pkg = opts.packageFilter(pkg, x);
- }
-
- if (pkg.main) {
- var m = loadAsFileSync(path.resolve(x, pkg.main));
- if (m) return m;
- var n = loadAsDirectorySync(path.resolve(x, pkg.main));
- if (n) return n;
- }
- }
- catch (err) {}
- }
-
- return loadAsFileSync(path.join( x, '/index'));
- }
-
- function loadNodeModulesSync (x, start) {
- var dirs = nodeModulesPaths(start, opts);
- for (var i = 0; i < dirs.length; i++) {
- var dir = dirs[i];
- var m = loadAsFileSync(path.join( dir, '/', x));
- if (m) return m;
- var n = loadAsDirectorySync(path.join( dir, '/', x ));
- if (n) return n;
- }
- }
-};
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/package.json b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/package.json
deleted file mode 100644
index 712c0252c1b..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/package.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "_from": "resolve@^0.6.1",
- "_id": "resolve@0.6.3",
- "_inBundle": false,
- "_integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=",
- "_location": "/gl-vignette-background/resolve",
- "_phantomChildren": {},
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "resolve@^0.6.1",
- "name": "resolve",
- "escapedName": "resolve",
- "rawSpec": "^0.6.1",
- "saveSpec": null,
- "fetchSpec": "^0.6.1"
- },
- "_requiredBy": [
- "/gl-vignette-background/glslify"
- ],
- "_resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz",
- "_shasum": "dd957982e7e736debdf53b58a4dd91754575dd46",
- "_spec": "resolve@^0.6.1",
- "_where": "/Users/forrest/Audius/vis-test/node_modules/gl-vignette-background/node_modules/glslify",
- "author": {
- "name": "James Halliday",
- "email": "mail@substack.net",
- "url": "http://substack.net"
- },
- "bugs": {
- "url": "https://github.com/substack/node-resolve/issues"
- },
- "bundleDependencies": false,
- "deprecated": false,
- "description": "resolve like require.resolve() on behalf of files asynchronously and synchronously",
- "devDependencies": {
- "tap": "~0.4.0"
- },
- "homepage": "https://github.com/substack/node-resolve#readme",
- "keywords": [
- "resolve",
- "require",
- "node",
- "module"
- ],
- "license": "MIT",
- "main": "index.js",
- "name": "resolve",
- "repository": {
- "type": "git",
- "url": "git://github.com/substack/node-resolve.git"
- },
- "scripts": {
- "test": "tap test/*.js"
- },
- "version": "0.6.3"
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/readme.markdown b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/readme.markdown
deleted file mode 100644
index 9a9955b95e6..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/readme.markdown
+++ /dev/null
@@ -1,144 +0,0 @@
-# resolve
-
-implements the [node `require.resolve()`
-algorithm](http://nodejs.org/docs/v0.4.8/api/all.html#all_Together...)
-such that you can `require.resolve()` on behalf of a file asynchronously and
-synchronously
-
-[](http://travis-ci.org/substack/node-resolve)
-
-# example
-
-asynchronously resolve:
-
-``` js
-var resolve = require('resolve');
-resolve('tap', { basedir: __dirname }, function (err, res) {
- if (err) console.error(err)
- else console.log(res)
-});
-```
-
-```
-$ node example/async.js
-/home/substack/projects/node-resolve/node_modules/tap/lib/main.js
-```
-
-synchronously resolve:
-
-``` js
-var resolve = require('resolve');
-var res = resolve.sync('tap', { basedir: __dirname });
-console.log(res);
-```
-
-```
-$ node example/sync.js
-/home/substack/projects/node-resolve/node_modules/tap/lib/main.js
-```
-
-# methods
-
-``` js
-var resolve = require('resolve')
-```
-
-## resolve(pkg, opts={}, cb)
-
-Asynchronously resolve the module path string `pkg` into `cb(err, res)`.
-
-options are:
-
-* opts.basedir - directory to begin resolving from
-
-* opts.package - package from which module is being loaded
-
-* opts.extensions - array of file extensions to search in order
-
-* opts.readFile - how to read files asynchronously
-
-* opts.isFile - function to asynchronously test whether a file exists
-
-* opts.packageFilter - transform the parsed package.json contents before looking
-at the "main" field
-
-* opts.paths - require.paths array to use if nothing is found on the normal
-node_modules recursive walk (probably don't use this)
-
-* opts.moduleDirectory - directory to recursively look for modules in. default:
-`"node_modules"`
-
-default `opts` values:
-
-``` javascript
-{
- paths: [],
- basedir: __dirname,
- extensions: [ '.js' ],
- readFile: fs.readFile,
- isFile: function (file, cb) {
- fs.stat(file, function (err, stat) {
- if (err && err.code === 'ENOENT') cb(null, false)
- else if (err) cb(err)
- else cb(null, stat.isFile())
- });
- },
- moduleDirectory: 'node_modules'
-}
-```
-
-## resolve.sync(pkg, opts)
-
-Synchronously resolve the module path string `pkg`, returning the result and
-throwing an error when `pkg` can't be resolved.
-
-options are:
-
-* opts.basedir - directory to begin resolving from
-
-* opts.extensions - array of file extensions to search in order
-
-* opts.readFile - how to read files synchronously
-
-* opts.isFile - function to synchronously test whether a file exists
-
-* opts.packageFilter - transform the parsed package.json contents before looking
-at the "main" field
-
-* opts.paths - require.paths array to use if nothing is found on the normal
-node_modules recursive walk (probably don't use this)
-
-* opts.moduleDirectory - directory to recursively look for modules in. default:
-`"node_modules"`
-
-default `opts` values:
-
-``` javascript
-{
- paths: [],
- basedir: __dirname,
- extensions: [ '.js' ],
- readFileSync: fs.readFileSync,
- isFile: function (file) {
- try { return fs.statSync(file).isFile() }
- catch (e) { return false }
- },
- moduleDirectory: 'node_modules'
-}
-````
-
-## resolve.isCore(pkg)
-
-Return whether a package is in core.
-
-# install
-
-With [npm](https://npmjs.org) do:
-
-```
-npm install resolve
-```
-
-# license
-
-MIT
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/core.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/core.js
deleted file mode 100644
index 88a510cd112..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/core.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var test = require('tap').test;
-var resolve = require('../');
-
-test('core modules', function (t) {
- t.ok(resolve.isCore('fs'));
- t.ok(resolve.isCore('net'));
- t.ok(resolve.isCore('http'));
-
- t.ok(!resolve.isCore('seq'));
- t.ok(!resolve.isCore('../'));
- t.end();
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/faulty_basedir.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/faulty_basedir.js
deleted file mode 100644
index 9932e602941..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/faulty_basedir.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var path = require('path');
-var test = require('tap').test;
-var resolve = require('../');
-
-test('faulty basedir must produce error in windows', function (t) {
- t.plan(1);
-
- var resolverDir = 'C:\\a\\b\\c\\d';
-
- resolve('tap/lib/main.js', { basedir : resolverDir }, function (err, res, pkg) {
- t.equal(true, !!err);
- });
-
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/filter.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/filter.js
deleted file mode 100644
index a65e59a8c78..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/filter.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var test = require('tap').test;
-var resolve = require('../');
-
-test('filter', function (t) {
- t.plan(2);
- var dir = __dirname + '/resolver';
- resolve('./baz', {
- basedir : dir,
- packageFilter : function (pkg) {
- pkg.main = 'doom';
- return pkg;
- }
- }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/baz/doom.js');
- t.equal(pkg.main, 'doom');
- });
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/filter_sync.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/filter_sync.js
deleted file mode 100644
index 8856c01a880..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/filter_sync.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var test = require('tap').test;
-var resolve = require('../');
-
-test('filter', function (t) {
- var dir = __dirname + '/resolver';
- var res = resolve.sync('./baz', {
- basedir : dir,
- packageFilter : function (pkg) {
- pkg.main = 'doom'
- return pkg;
- }
- });
- t.equal(res, dir + '/baz/doom.js');
- t.end();
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/mock.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/mock.js
deleted file mode 100644
index e284f987fe4..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/mock.js
+++ /dev/null
@@ -1,142 +0,0 @@
-var test = require('tap').test;
-var resolve = require('../');
-
-test('mock', function (t) {
- t.plan(6);
-
- var files = {
- '/foo/bar/baz.js' : 'beep'
- };
-
- function opts (basedir) {
- return {
- basedir : basedir,
- isFile : function (file, cb) {
- cb(null, files.hasOwnProperty(file));
- },
- readFile : function (file, cb) {
- cb(null, files[file]);
- }
- }
- }
-
- resolve('./baz', opts('/foo/bar'), function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, '/foo/bar/baz.js');
- t.equal(pkg, undefined);
- });
-
- resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, '/foo/bar/baz.js');
- t.equal(pkg, undefined);
- });
-
- resolve('baz', opts('/foo/bar'), function (err, res) {
- t.equal(err.message, "Cannot find module 'baz' from '/foo/bar'");
- });
-
- resolve('../baz', opts('/foo/bar'), function (err, res) {
- t.equal(err.message, "Cannot find module '../baz' from '/foo/bar'");
- });
-});
-
-test('mock from package', function (t) {
- t.plan(6);
-
- var files = {
- '/foo/bar/baz.js' : 'beep'
- };
-
- function opts (basedir) {
- return {
- basedir : basedir,
- package : { main: 'bar' },
- isFile : function (file, cb) {
- cb(null, files.hasOwnProperty(file));
- },
- readFile : function (file, cb) {
- cb(null, files[file]);
- }
- }
- }
-
- resolve('./baz', opts('/foo/bar'), function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, '/foo/bar/baz.js');
- t.equal(pkg.main, 'bar');
- });
-
- resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, '/foo/bar/baz.js');
- t.equal(pkg.main, 'bar');
- });
-
- resolve('baz', opts('/foo/bar'), function (err, res) {
- t.equal(err.message, "Cannot find module 'baz' from '/foo/bar'");
- });
-
- resolve('../baz', opts('/foo/bar'), function (err, res) {
- t.equal(err.message, "Cannot find module '../baz' from '/foo/bar'");
- });
-});
-
-test('mock package', function (t) {
- t.plan(2);
-
- var files = {
- '/foo/node_modules/bar/baz.js' : 'beep',
- '/foo/node_modules/bar/package.json' : JSON.stringify({
- main : './baz.js'
- })
- };
-
- function opts (basedir) {
- return {
- basedir : basedir,
- isFile : function (file, cb) {
- cb(null, files.hasOwnProperty(file));
- },
- readFile : function (file, cb) {
- cb(null, files[file]);
- }
- }
- }
-
- resolve('bar', opts('/foo'), function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, '/foo/node_modules/bar/baz.js');
- t.equal(pkg.main, './baz.js');
- });
-});
-
-test('mock package from package', function (t) {
- t.plan(2);
-
- var files = {
- '/foo/node_modules/bar/baz.js' : 'beep',
- '/foo/node_modules/bar/package.json' : JSON.stringify({
- main : './baz.js'
- })
- };
-
- function opts (basedir) {
- return {
- basedir : basedir,
- package : { main: 'bar' },
- isFile : function (file, cb) {
- cb(null, files.hasOwnProperty(file));
- },
- readFile : function (file, cb) {
- cb(null, files[file]);
- }
- }
- }
-
- resolve('bar', opts('/foo'), function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, '/foo/node_modules/bar/baz.js');
- t.equal(pkg.main, './baz.js');
- });
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/mock_sync.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/mock_sync.js
deleted file mode 100644
index 963afa536d9..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/mock_sync.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var test = require('tap').test;
-var resolve = require('../');
-
-test('mock', function (t) {
- t.plan(4);
-
- var files = {
- '/foo/bar/baz.js' : 'beep'
- };
-
- function opts (basedir) {
- return {
- basedir : basedir,
- isFile : function (file) {
- return files.hasOwnProperty(file)
- },
- readFileSync : function (file) {
- return files[file]
- }
- }
- }
-
- t.equal(
- resolve.sync('./baz', opts('/foo/bar')),
- '/foo/bar/baz.js'
- );
-
- t.equal(
- resolve.sync('./baz.js', opts('/foo/bar')),
- '/foo/bar/baz.js'
- );
-
- t.throws(function () {
- resolve.sync('baz', opts('/foo/bar'));
- });
-
- t.throws(function () {
- resolve.sync('../baz', opts('/foo/bar'));
- });
-});
-
-test('mock package', function (t) {
- t.plan(1);
-
- var files = {
- '/foo/node_modules/bar/baz.js' : 'beep',
- '/foo/node_modules/bar/package.json' : JSON.stringify({
- main : './baz.js'
- })
- };
-
- function opts (basedir) {
- return {
- basedir : basedir,
- isFile : function (file) {
- return files.hasOwnProperty(file)
- },
- readFileSync : function (file) {
- return files[file]
- }
- }
- }
-
- t.equal(
- resolve.sync('bar', opts('/foo')),
- '/foo/node_modules/bar/baz.js'
- );
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path.js
deleted file mode 100644
index c74ac395762..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var test = require('tap').test;
-var resolve = require('../');
-
-test('$NODE_PATH', function (t) {
- t.plan(3);
-
- resolve('aaa', {
- paths: [
- __dirname + '/node_path/x',
- __dirname + '/node_path/y'
- ],
- basedir: __dirname,
- }, function (err, res) {
- t.equal(res, __dirname + '/node_path/x/aaa/index.js');
- });
-
- resolve('bbb', {
- paths: [
- __dirname + '/node_path/x',
- __dirname + '/node_path/y'
- ],
- basedir: __dirname,
- }, function (err, res) {
- t.equal(res, __dirname + '/node_path/y/bbb/index.js');
- });
-
- resolve('ccc', {
- paths: [
- __dirname + '/node_path/x',
- __dirname + '/node_path/y'
- ],
- basedir: __dirname,
- }, function (err, res) {
- t.equal(res, __dirname + '/node_path/x/ccc/index.js');
- });
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/x/aaa/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/x/aaa/index.js
deleted file mode 100644
index 1ea591380df..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/x/aaa/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 'A'
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/x/ccc/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/x/ccc/index.js
deleted file mode 100644
index f186fa7574f..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/x/ccc/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 'C'
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/y/bbb/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/y/bbb/index.js
deleted file mode 100644
index e22dd83c0ca..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/y/bbb/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 'B'
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/y/ccc/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/y/ccc/index.js
deleted file mode 100644
index d0043d1ec4a..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/node_path/y/ccc/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 'CY'
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver.js
deleted file mode 100644
index 1301e55a32c..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver.js
+++ /dev/null
@@ -1,281 +0,0 @@
-var path = require('path');
-var test = require('tap').test;
-var resolve = require('../');
-
-test('async foo', function (t) {
- t.plan(9);
- var dir = __dirname + '/resolver';
-
- resolve('./foo', { basedir : dir }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/foo.js');
- t.equal(pkg, undefined);
- });
-
- resolve('./foo.js', { basedir : dir }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/foo.js');
- t.equal(pkg, undefined);
- });
-
- resolve('./foo', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/foo.js');
- t.equal(pkg.main, 'resolver');
- });
-
- resolve('./foo.js', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/foo.js');
- t.equal(pkg.main, 'resolver');
- });
-
- resolve('foo', { basedir : dir }, function (err) {
- t.equal(err.message, "Cannot find module 'foo' from '" + path.resolve(dir) + "'");
- });
-});
-
-test('bar', function (t) {
- t.plan(6);
- var dir = __dirname + '/resolver';
-
- resolve('foo', { basedir : dir + '/bar' }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/bar/node_modules/foo/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('foo', { basedir : dir + '/bar' }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/bar/node_modules/foo/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('foo', { basedir : dir + '/bar', package: { main: 'bar' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/bar/node_modules/foo/index.js');
- t.equal(pkg, undefined);
- });
-});
-
-test('baz', function (t) {
- t.plan(4);
- var dir = __dirname + '/resolver';
-
- resolve('./baz', { basedir : dir }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/baz/quux.js');
- t.equal(pkg.main, 'quux.js');
- });
-
- resolve('./baz', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/baz/quux.js');
- t.equal(pkg.main, 'quux.js');
- });
-});
-
-test('biz', function (t) {
- t.plan(24);
- var dir = __dirname + '/resolver/biz/node_modules';
-
- resolve('./grux', { basedir : dir }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/grux/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('./grux', { basedir : dir, package: { main: 'biz' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/grux/index.js');
- t.equal(pkg.main, 'biz');
- });
-
- resolve('./garply', { basedir : dir }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/garply/lib/index.js');
- t.equal(pkg.main, './lib');
- });
-
- resolve('./garply', { basedir : dir, package: { main: 'biz' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/garply/lib/index.js');
- t.equal(pkg.main, './lib');
- });
-
- resolve('tiv', { basedir : dir + '/grux' }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/tiv/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('tiv', { basedir : dir + '/grux', package: { main: 'grux' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/tiv/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('tiv', { basedir : dir + '/garply' }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/tiv/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('tiv', { basedir : dir + '/garply', package: { main: './lib' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/tiv/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('grux', { basedir : dir + '/tiv' }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/grux/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('grux', { basedir : dir + '/tiv', package: { main: 'tiv' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/grux/index.js');
- t.equal(pkg, undefined);
- });
-
- resolve('garply', { basedir : dir + '/tiv' }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/garply/lib/index.js');
- t.equal(pkg.main, './lib');
- });
-
- resolve('garply', { basedir : dir + '/tiv', package: { main: 'tiv' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/garply/lib/index.js');
- t.equal(pkg.main, './lib');
- });
-});
-
-test('quux', function (t) {
- t.plan(2);
- var dir = __dirname + '/resolver/quux';
-
- resolve('./foo', { basedir : dir, package: { main: 'quux' } }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/foo/index.js');
- t.equal(pkg.main, 'quux');
- });
-});
-
-test('normalize', function (t) {
- t.plan(2);
- var dir = __dirname + '/resolver/biz/node_modules/grux';
-
- resolve('../grux', { basedir : dir }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/index.js');
- t.equal(pkg, undefined);
- });
-});
-
-test('cup', function (t) {
- t.plan(3);
- var dir = __dirname + '/resolver';
-
- resolve('./cup', { basedir : dir, extensions : [ '.js', '.coffee' ] },
- function (err, res) {
- if (err) t.fail(err);
- t.equal(res, dir + '/cup.coffee');
- });
-
- resolve('./cup.coffee', { basedir : dir }, function (err, res) {
- if (err) t.fail(err);
- t.equal(res, dir + '/cup.coffee');
- });
-
- resolve('./cup', { basedir : dir, extensions : [ '.js' ] },
- function (err, res) {
- t.equal(err.message, "Cannot find module './cup' from '" + path.resolve(dir) + "'");
- });
-});
-
-test('mug', function (t) {
- t.plan(3);
- var dir = __dirname + '/resolver';
-
- resolve('./mug', { basedir : dir }, function (err, res) {
- if (err) t.fail(err);
- t.equal(res, dir + '/mug.js');
- });
-
- resolve('./mug', { basedir : dir, extensions : [ '.coffee', '.js' ] },
- function (err, res) {
- if (err) t.fail(err);
- t.equal(res, dir + '/mug.coffee');
- });
-
- resolve('./mug', { basedir : dir, extensions : [ '.js', '.coffee' ] },
- function (err, res) {
- t.equal(res, dir + '/mug.js');
- });
-});
-
-test('other path', function (t) {
- t.plan(4);
- var resolverDir = __dirname + '/resolver';
- var dir = resolverDir + '/bar';
- var otherDir = resolverDir + '/other_path';
-
- resolve('root', { basedir : dir, paths: [otherDir] }, function (err, res) {
- if (err) t.fail(err);
- t.equal(res, resolverDir + '/other_path/root.js');
- });
-
- resolve('lib/other-lib', { basedir : dir, paths: [otherDir] },
- function (err, res) {
- if (err) t.fail(err);
- t.equal(res, resolverDir + '/other_path/lib/other-lib.js');
- });
-
- resolve('root', { basedir : dir, }, function (err, res) {
- t.equal(err.message, "Cannot find module 'root' from '" + path.resolve(dir) + "'");
- });
-
- resolve('zzz', { basedir : dir, paths: [otherDir] }, function (err, res) {
- t.equal(err.message, "Cannot find module 'zzz' from '" + path.resolve(dir) + "'");
- });
-});
-
-test('incorrect main', function (t) {
- t.plan(1)
-
- var resolverDir = __dirname + '/resolver';
- var dir = resolverDir + '/incorrect_main';
-
- resolve('./incorrect_main', { basedir : resolverDir }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, dir + '/index.js');
- });
-});
-
-test('without basedir', function (t) {
- t.plan(1);
-
- var dir = __dirname + '/resolver/without_basedir';
- var tester = require(dir + '/main.js');
-
- tester(t, function (err, res, pkg){
- if (err) {
- t.fail(err);
- } else {
- t.equal(res, dir + '/node_modules/mymodule.js');
- }
- });
-});
-
-test('#25: node modules with the same name as node stdlib modules', function (t) {
- t.plan(1);
-
- var resolverDir = __dirname + '/resolver/punycode';
-
- resolve('punycode', { basedir : resolverDir }, function (err, res, pkg) {
- if (err) t.fail(err);
- t.equal(res, resolverDir + '/node_modules/punycode/index.js');
- });
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js
deleted file mode 100644
index bd816eaba4c..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 1;
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/baz/doom.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/baz/doom.js
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/baz/package.json b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/baz/package.json
deleted file mode 100644
index 6b81dcddfc4..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/baz/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "main" : "quux.js"
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/baz/quux.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/baz/quux.js
deleted file mode 100644
index bd816eaba4c..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/baz/quux.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 1;
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js
deleted file mode 100644
index 0379e29f701..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 'hello garply';
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json
deleted file mode 100644
index babaac58fdd..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "main" : "./lib"
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js
deleted file mode 100644
index 49960555ab4..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('tiv') * 100;
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js
deleted file mode 100644
index 690aad34a46..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 3;
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/cup.coffee b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/cup.coffee
deleted file mode 100644
index 8b137891791..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/cup.coffee
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/foo.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/foo.js
deleted file mode 100644
index bd816eaba4c..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/foo.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 1;
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/incorrect_main/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/incorrect_main/index.js
deleted file mode 100644
index bc1fb0a6f4e..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/incorrect_main/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// this is the actual main file 'index.js', not 'wrong.js' like the package.json would indicate
-module.exports = 1;
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/incorrect_main/package.json b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/incorrect_main/package.json
deleted file mode 100644
index 1592ed39371..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/incorrect_main/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "main" : "wrong.js"
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/mug.coffee b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/mug.coffee
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/mug.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/mug.js
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/other_path/lib/other-lib.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/other_path/lib/other-lib.js
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/other_path/root.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/other_path/root.js
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/quux/foo/index.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/quux/foo/index.js
deleted file mode 100644
index bd816eaba4c..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/quux/foo/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 1;
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/without_basedir/main.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/without_basedir/main.js
deleted file mode 100644
index 5f211e9ca0d..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/without_basedir/main.js
+++ /dev/null
@@ -1,6 +0,0 @@
-resolve = require('../../../');
-
-module.exports = function(t, cb) {
- resolve('mymodule', null, cb);
-}
-
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js
deleted file mode 100644
index 2b58aa4087d..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = "The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.- E. Dijkstra"
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver_sync.js b/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver_sync.js
deleted file mode 100644
index 5f808f34464..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/node_modules/resolve/test/resolver_sync.js
+++ /dev/null
@@ -1,180 +0,0 @@
-var test = require('tap').test;
-var resolve = require('../');
-
-test('foo', function (t) {
- var dir = __dirname + '/resolver';
-
- t.equal(
- resolve.sync('./foo', { basedir : dir }),
- dir + '/foo.js'
- );
-
- t.equal(
- resolve.sync('./foo.js', { basedir : dir }),
- dir + '/foo.js'
- );
-
- t.throws(function () {
- resolve.sync('foo', { basedir : dir });
- });
-
- t.end();
-});
-
-test('bar', function (t) {
- var dir = __dirname + '/resolver';
-
- t.equal(
- resolve.sync('foo', { basedir : dir + '/bar' }),
- dir + '/bar/node_modules/foo/index.js'
- );
- t.end();
-});
-
-test('baz', function (t) {
- var dir = __dirname + '/resolver';
-
- t.equal(
- resolve.sync('./baz', { basedir : dir }),
- dir + '/baz/quux.js'
- );
- t.end();
-});
-
-test('biz', function (t) {
- var dir = __dirname + '/resolver/biz/node_modules';
- t.equal(
- resolve.sync('./grux', { basedir : dir }),
- dir + '/grux/index.js'
- );
-
- t.equal(
- resolve.sync('tiv', { basedir : dir + '/grux' }),
- dir + '/tiv/index.js'
- );
-
- t.equal(
- resolve.sync('grux', { basedir : dir + '/tiv' }),
- dir + '/grux/index.js'
- );
- t.end();
-});
-
-test('normalize', function (t) {
- var dir = __dirname + '/resolver/biz/node_modules/grux';
- t.equal(
- resolve.sync('../grux', { basedir : dir }),
- dir + '/index.js'
- );
- t.end();
-});
-
-test('cup', function (t) {
- var dir = __dirname + '/resolver';
- t.equal(
- resolve.sync('./cup', {
- basedir : dir,
- extensions : [ '.js', '.coffee' ]
- }),
- dir + '/cup.coffee'
- );
-
- t.equal(
- resolve.sync('./cup.coffee', {
- basedir : dir
- }),
- dir + '/cup.coffee'
- );
-
- t.throws(function () {
- resolve.sync('./cup', {
- basedir : dir,
- extensions : [ '.js' ]
- })
- });
-
- t.end();
-});
-
-test('mug', function (t) {
- var dir = __dirname + '/resolver';
- t.equal(
- resolve.sync('./mug', { basedir : dir }),
- dir + '/mug.js'
- );
-
- t.equal(
- resolve.sync('./mug', {
- basedir : dir,
- extensions : [ '.coffee', '.js' ]
- }),
- dir + '/mug.coffee'
- );
-
- t.equal(
- resolve.sync('./mug', {
- basedir : dir,
- extensions : [ '.js', '.coffee' ]
- }),
- dir + '/mug.js'
- );
-
- t.end();
-});
-
-test('other path', function (t) {
- var resolverDir = __dirname + '/resolver';
- var dir = resolverDir + '/bar';
- var otherDir = resolverDir + '/other_path';
-
- var path = require('path');
-
- t.equal(
- resolve.sync('root', {
- basedir : dir,
- paths: [otherDir] }),
- resolverDir + '/other_path/root.js'
- );
-
- t.equal(
- resolve.sync('lib/other-lib', {
- basedir : dir,
- paths: [otherDir] }),
- resolverDir + '/other_path/lib/other-lib.js'
- );
-
- t.throws(function () {
- resolve.sync('root', { basedir : dir, });
- });
-
- t.throws(function () {
- resolve.sync('zzz', {
- basedir : dir,
- paths: [otherDir] });
- });
-
- t.end();
-});
-
-test('incorrect main', function (t) {
- var resolverDir = __dirname + '/resolver';
- var dir = resolverDir + '/incorrect_main';
-
- t.equal(
- resolve.sync('./incorrect_main', { basedir : resolverDir }),
- dir + '/index.js'
- )
-
- t.end()
-});
-
-test('#25: node modules with the same name as node stdlib modules', function (t) {
- var resolverDir = __dirname + '/resolver/punycode';
-
- t.equal(
- resolve.sync('punycode', { basedir : resolverDir }),
- resolverDir + '/node_modules/punycode/index.js'
- )
-
- t.end()
-});
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/package.json b/packages/web/src/utils/visualizer/gl-vignette-background/package.json
deleted file mode 100644
index 66ab053fdfc..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/package.json
+++ /dev/null
@@ -1,109 +0,0 @@
-{
- "_from": "gl-vignette-background@^1.0.4",
- "_id": "gl-vignette-background@1.0.4",
- "_inBundle": false,
- "_integrity": "sha1-ixMetk2lcp6xT5oUxHgt7Smq9Z0=",
- "_location": "/gl-vignette-background",
- "_phantomChildren": {
- "concat-stream": "1.6.2",
- "cssauron": "0.0.2",
- "cssauron-glsl": "0.0.0",
- "emit-function": "0.0.2",
- "gl-shader-core": "2.2.0",
- "glsl-deparser": "0.0.2",
- "glsl-extract": "0.0.2",
- "glsl-min-stream": "0.0.2",
- "glslify-stream": "0.4.1",
- "new-from": "0.0.3",
- "nopt": "2.2.1",
- "replace-method": "0.0.0",
- "shortest": "0.0.0",
- "sleuth": "0.1.1",
- "static-eval": "0.2.4",
- "through": "2.3.8"
- },
- "_requested": {
- "type": "range",
- "registry": true,
- "raw": "gl-vignette-background@^1.0.4",
- "name": "gl-vignette-background",
- "escapedName": "gl-vignette-background",
- "rawSpec": "^1.0.4",
- "saveSpec": null,
- "fetchSpec": "^1.0.4"
- },
- "_requiredBy": [
- "#USER",
- "/"
- ],
- "_resolved": "https://registry.npmjs.org/gl-vignette-background/-/gl-vignette-background-1.0.4.tgz",
- "_shasum": "8b131eb64da5729eb14f9a14c4782ded29aaf59d",
- "_spec": "gl-vignette-background@^1.0.4",
- "_where": "/Users/forrest/Audius/vis-test",
- "author": {
- "name": "Matt DesLauriers",
- "email": "dave.des@gmail.com"
- },
- "browserify": {
- "transform": [
- "glslify"
- ]
- },
- "bugs": {
- "url": "https://github.com/mattdesl/gl-vignette-background/issues"
- },
- "bundleDependencies": false,
- "dependencies": {
- "deepcopy": "^0.6.3",
- "gl-mat4": "^1.0.0",
- "gl-quad": "^1.0.0",
- "gl-shader-core": "^2.2.0",
- "glsl-random": "0.0.5",
- "glslify": "^1.6.0",
- "inherits": "^2.0.1"
- },
- "deprecated": false,
- "description": "a soft gradient background in WebGL",
- "devDependencies": {
- "canvas-testbed": "^1.0.0",
- "color-string": "^0.2.1",
- "tape": "~2.13.2"
- },
- "homepage": "https://github.com/mattdesl/gl-vignette-background",
- "keywords": [
- "glsl",
- "gl",
- "webgl",
- "gl-modules",
- "stackgl",
- "texture",
- "image",
- "background",
- "vignette",
- "gradient"
- ],
- "license": "MIT",
- "main": "index.js",
- "name": "gl-vignette-background",
- "repository": {
- "type": "git",
- "url": "git://github.com/mattdesl/gl-vignette-background.git"
- },
- "scripts": {
- "test": "tape test.js"
- },
- "testling": {
- "files": "test.js",
- "browsers": [
- "ie/6..latest",
- "chrome/22..latest",
- "firefox/16..latest",
- "safari/latest",
- "opera/11.0..latest",
- "iphone/6",
- "ipad/6",
- "android-browser/latest"
- ]
- },
- "version": "1.0.4"
-}
diff --git a/packages/web/src/utils/visualizer/gl-vignette-background/vert.glsl b/packages/web/src/utils/visualizer/gl-vignette-background/vert.glsl
deleted file mode 100644
index e2d412a6018..00000000000
--- a/packages/web/src/utils/visualizer/gl-vignette-background/vert.glsl
+++ /dev/null
@@ -1,12 +0,0 @@
-attribute vec4 position;
-attribute vec2 uv;
-uniform mat4 projection;
-uniform mat4 view;
-uniform mat4 model;
-
-varying vec2 vUv;
-
-void main() {
- gl_Position = projection * view * model * position;
- vUv = uv;
-}
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/presets.ts b/packages/web/src/utils/visualizer/presets.ts
new file mode 100644
index 00000000000..2afcb0c63a5
--- /dev/null
+++ b/packages/web/src/utils/visualizer/presets.ts
@@ -0,0 +1,61 @@
+// Presets: dynamic `import('butterchurn-presets')` (main export only).
+
+type PresetMap = Record
+
+let cachedPresets: PresetMap | null = null
+
+/** Favorites shown first in the cycle list when those keys exist in the pack. */
+const CURATED_PRESET_NAMES = [
+ 'Flexi - mindblob [shiny mix]',
+ 'martin - liquid crystal spiral',
+ 'Geiss - Cosmic Dust 2 - Resonant Freq',
+ 'Rovastar - Fractopia (Blueprint of a Snowflake)',
+ 'Zylot - Color Twist / Colour Organ',
+ 'Aderrasi - Airhandler (Sunset Remix)',
+ 'Geiss - Swirl 1',
+ 'Flexi - smouldering',
+ 'martin - neon worms',
+ 'Geiss - Cruzin'
+]
+
+function mergePresetModule(m: Record): PresetMap {
+ const raw =
+ typeof m.getPresets === 'function'
+ ? (m.getPresets as () => PresetMap)()
+ : (m as { default?: { getPresets?: () => PresetMap } }).default
+ ?.getPresets?.() ??
+ (m as { default?: PresetMap }).default ??
+ m
+ return raw as PresetMap
+}
+
+export async function loadPresets(): Promise {
+ if (cachedPresets) return cachedPresets
+
+ const mainMod = await import('butterchurn-presets')
+ cachedPresets = mergePresetModule(mainMod as Record)
+ return cachedPresets
+}
+
+export function getPresetKeys(presets: PresetMap): string[] {
+ const allKeys = Object.keys(presets)
+ const curatedMatches = CURATED_PRESET_NAMES.filter((name) =>
+ allKeys.includes(name)
+ )
+ const curatedSet = new Set(curatedMatches)
+ const remainder = allKeys.filter((k) => !curatedSet.has(k))
+ return [...curatedMatches, ...remainder]
+}
+
+export function getRandomPresetKey(
+ presets: PresetMap,
+ currentKey?: string | null
+): string {
+ const keys = getPresetKeys(presets)
+ if (keys.length <= 1) return keys[0] ?? ''
+ let next: string
+ do {
+ next = keys[Math.floor(Math.random() * keys.length)]
+ } while (next === currentKey)
+ return next
+}
diff --git a/packages/web/src/utils/visualizer/shaders/visualizer-1.frag b/packages/web/src/utils/visualizer/shaders/visualizer-1.frag
deleted file mode 100644
index 8fd82fad44e..00000000000
--- a/packages/web/src/utils/visualizer/shaders/visualizer-1.frag
+++ /dev/null
@@ -1,43 +0,0 @@
-precision highp float;
-
-uniform vec3 color;
-uniform float opacity;
-varying float vAngle;
-
-// Colors
-uniform float r1;
-uniform float g1;
-uniform float b1;
-
-uniform float r2;
-uniform float g2;
-uniform float b2;
-
-uniform float r3;
-uniform float g3;
-uniform float b3;
-
-#define PI 3.14
-
-void main() {
- vec3 tCol = color;
-
- float interp = sin(vAngle * 1.0);
- float finalR;
- float finalG;
- float finalB;
- if (interp > 0.0) {
- finalR = mix(r1, r2, interp);
- finalG = mix(g1, g2, interp);
- finalB = mix(b1, b2, interp);
- } else {
- finalR = mix(r1, r3, -1.0 * interp);
- finalG = mix(g1, g3, -1.0 * interp);
- finalB = mix(b1, b3, -1.0 * interp);
- }
-
- tCol = vec3(finalR, finalG, finalB);
-
- gl_FragColor = vec4(tCol, opacity);
- gl_FragColor.rgb *= gl_FragColor.a;
-}
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/shaders/visualizer-1.vert b/packages/web/src/utils/visualizer/shaders/visualizer-1.vert
deleted file mode 100644
index cb4749621c3..00000000000
--- a/packages/web/src/utils/visualizer/shaders/visualizer-1.vert
+++ /dev/null
@@ -1,122 +0,0 @@
-attribute vec3 position;
-attribute float direction;
-attribute vec3 next;
-attribute vec3 previous;
-
-uniform sampler2D audioTexture;
-uniform mat4 projection;
-uniform mat4 model;
-uniform mat4 view;
-uniform float aspect;
-uniform float radius;
-uniform float index;
-
-uniform float thickness;
-uniform float iGlobalTime;
-uniform int miter;
-
-varying float vAngle;
-varying vec2 uvCoords;
-
-#define HAS_VERTEX_SAMPLER
-#define PI 3.14
-
-#pragma glslify: analyse = require('gl-audio-analyser')
-#pragma glslify: noise4d = require('glsl-noise/simplex/4d')
-#pragma glslify: noise3d = require('glsl-noise/simplex/3d')
-
-vec4 line3D (vec3 positionOffset, float computedThickness) {
- vec2 aspectVec = vec2(aspect, 1.0);
- mat4 projViewModel = projection * view * model;
- vec4 previousProjected = projViewModel * vec4(previous + positionOffset, 1.0);
- vec4 currentProjected = projViewModel * vec4(position + positionOffset, 1.0);
- vec4 nextProjected = projViewModel * vec4(next + positionOffset, 1.0);
-
- //get 2D screen space with W divide and aspect correction
- vec2 currentScreen = currentProjected.xy / currentProjected.w * aspectVec;
- vec2 previousScreen = previousProjected.xy / previousProjected.w * aspectVec;
- vec2 nextScreen = nextProjected.xy / nextProjected.w * aspectVec;
-
- float len = computedThickness;
- float orientation = direction;
-
- //starting point uses (next - current)
- vec2 dir = vec2(0.0);
- if (currentScreen == previousScreen) {
- dir = normalize(nextScreen - currentScreen);
- }
- //ending point uses (current - previous)
- else if (currentScreen == nextScreen) {
- dir = normalize(currentScreen - previousScreen);
- }
- //somewhere in middle, needs a join
- else {
- //get directions from (C - B) and (B - A)
- vec2 dirA = normalize((currentScreen - previousScreen));
- if (miter == 1) {
- vec2 dirB = normalize((nextScreen - currentScreen));
- //now compute the miter join normal and length
- vec2 tangent = normalize(dirA + dirB);
- vec2 perp = vec2(-dirA.y, dirA.x);
- vec2 miter = vec2(-tangent.y, tangent.x);
- dir = tangent;
- len = computedThickness / dot(miter, perp);
- } else {
- dir = dirA;
- }
- }
- vec2 normal = vec2(-dir.y, dir.x);
- normal *= len/2.0;
- normal.x /= aspect;
-
- vec4 offset = vec4(normal * orientation, 0.0, 1.0);
- return currentProjected + offset;
-}
-
-float turb (float angle, float alpha, float scale, float offset) {
- return alpha * noise3d(vec3(position.x * scale, angle, offset));
-}
-
-void main() {
- #ifdef HAS_VERTEX_SAMPLER
- float frequencies = analyse(audioTexture, position.x * 0.5 + 0.5);
- #endif
-
- float pinch = smoothstep(0.0, 0.5, 1.0 - abs(position.x));
- float computedThickness = thickness;
- computedThickness *= pinch;
-
- vec3 offset = vec3(0.0);
-
- // we will wrap the lines around like a finger trap
- float angleOffset = index * PI; // separate each line a bit
- float twists = 0.5; // twisting factor
- float radialOffset = 2.0 * PI * position.x;
-
- #ifdef HAS_VERTEX_SAMPLER
- angleOffset *= mix(0.5, 1.5, frequencies);
- #endif
-
- float angle = radialOffset * twists + angleOffset;
- angle += iGlobalTime;
-
-
- float computedRadius = radius;
- #ifdef HAS_VERTEX_SAMPLER
- computedRadius += turb(angle, frequencies * 0.5, 1.0, iGlobalTime * 0.2);
- #endif
- computedRadius += turb(angle, 0.1, 6.0, iGlobalTime * 0.25);
- computedRadius += turb(angle, 0.1, 2.5, iGlobalTime * 0.5);
- computedRadius *= pinch;
- #ifdef HAS_VERTEX_SAMPLER
- computedRadius *= mix(0.65, 1.0, frequencies);
- #endif
-
- vAngle = angle;
- offset.y = cos(angle) * computedRadius;
- offset.z = sin(angle) * computedRadius;
-
- uvCoords = vec2(position.x * 0.5 + 0.5, sign(direction));
- gl_Position = line3D(offset, computedThickness);
- gl_PointSize = 1.0;
-}
\ No newline at end of file
diff --git a/packages/web/src/utils/visualizer/visualizer-1.js b/packages/web/src/utils/visualizer/visualizer-1.js
deleted file mode 100644
index fef10ccce8d..00000000000
--- a/packages/web/src/utils/visualizer/visualizer-1.js
+++ /dev/null
@@ -1,218 +0,0 @@
-import vertexShader from './shaders/visualizer-1.vert'
-import fragmentShader from './shaders/visualizer-1.frag'
-
-import createLine from './gl-line-3d'
-import vignette from './gl-vignette-background'
-import GLAudioAnalyser from 'utils/visualizer/GLAudioAnalyser'
-import { webglSupported } from 'pages/visualizer/utils'
-
-import createOrbit from 'orbit-controls'
-import createCamera from 'perspective-camera'
-import createShader from 'gl-shader'
-
-import setIdentity from 'gl-mat4/identity'
-import newArray from 'array-range'
-import lerp from 'lerp'
-import hexRgbByte from 'hex-rgb'
-import getWebGLContext from 'webgl-context'
-import canvasLoop from 'canvas-loop'
-import canvasFit from 'canvas-fit'
-
-const hexRgb = (str) => hexRgbByte(str).map((x) => x / 255)
-
-let settings = {
- opacity: 0.5,
- additive: false,
- gradient: ['#FFFFFF', '#4F4F4F'],
- color: '#000',
- useHue: true
-}
-
-const webglExists = webglSupported()
-const gl = getWebGLContext()
-
-let Visualizer1 = (function () {
- if (!webglExists) return null
- const steps = 200
- const segments = 100
- const radius = 0.1
- const thickness = 0.01
-
- const colorVec = hexRgb(settings.color)
-
- const canvas = gl.canvas
-
- const app = canvasLoop(canvas, {
- scale: window.devicePixelRatio
- })
-
- const background = vignette(gl)
- background.style({
- aspect: 1,
- smoothing: [-0.5, 1.0],
- noiseAlpha: 0.1,
- offset: [-0.05, -0.15]
- })
-
- const identity = setIdentity([])
- const shader = createShader(gl, vertexShader, fragmentShader)
-
- const camera = createCamera({
- fov: (50 * Math.PI) / 180,
- position: [0, 0, 1],
- near: 0.0001,
- far: 10000
- })
-
- const controls = createOrbit({
- element: canvas,
- distanceBounds: [0.4, 3],
- distance: 0.4
- })
-
- const paths = newArray(segments).map(createSegment)
- const lines = paths.map((path) => {
- return createLine(gl, shader, path)
- })
-
- let time = 0
- app.on('tick', (dt) => {
- time += Math.min(30, dt) / 1000
-
- const width = gl.drawingBufferWidth
- const height = gl.drawingBufferHeight
-
- // set up our camera
- camera.viewport[2] = width
- camera.viewport[3] = height
- controls.update(camera.position, camera.direction, camera.up)
- camera.update()
-
- gl.viewport(0, 0, width, height)
- gl.clearColor(0, 0, 0, 1)
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
-
- const size = Math.min(width, height) * 1.5
- gl.disable(gl.DEPTH_TEST)
- background.style({
- color1: hexRgb(settings.gradient[0]),
- color2: hexRgb(settings.gradient[1]),
- scale: [(1 / width) * size, (1 / height) * size]
- })
- background.draw()
-
- gl.disable(gl.DEPTH_TEST)
- gl.enable(gl.BLEND)
- if (settings.additive) gl.blendFunc(gl.ONE, gl.ONE)
- else gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA)
- gl.disable(gl.CULL_FACE)
-
- shader.bind()
- shader.uniforms.iGlobalTime = time
- shader.uniforms.radius = radius
- shader.uniforms.audioTexture = 0
- shader.uniforms.opacity = settings.opacity
- shader.uniforms.useHue = settings.useHue
-
- if (analyser) {
- analyser.bindFrequencies(0)
- }
-
- lines.forEach((line, i, list) => {
- line.color = colorVec
- line.thickness = thickness
- line.model = identity
- line.view = camera.view
- line.projection = camera.projection
- line.aspect = width / height
- line.miter = 0
- shader.uniforms.index = i / (list.length - 1)
- line.draw()
- })
- })
-
- function createSegment() {
- return newArray(steps).map((i, _, list) => {
- const x = lerp(-1, 1, i / (list.length - 1))
- return [x, 0, 0]
- })
- }
-
- let analyser = null
- setDominantColors()
-
- function show(darkMode) {
- if (darkMode) {
- settings.gradient = ['#323232', '#111111']
- settings.color = '#FFF'
- } else {
- settings.gradient = ['#FFFFFF', '#4F4F4F']
- settings.color = '#000'
- }
- window.addEventListener('resize', canvasFit(canvas, window), false)
- const visWrapper = document.querySelector('.visualizer')
- if (visWrapper && !visWrapper.hasChildNodes()) {
- visWrapper.appendChild(canvas)
- }
- app.start()
- }
-
- /** Binds the visualizer to an AudioStream element. */
- function bind(audio) {
- analyser = new GLAudioAnalyser(gl, audio.source, audio.audioCtx)
- }
-
- function hide() {
- const visWrapper = document.querySelector('.visualizer')
- if (visWrapper && visWrapper.hasChildNodes()) {
- visWrapper.removeChild(canvas)
- }
- }
-
- function stop() {
- app.stop()
- }
-
- function setDominantColors(colors) {
- const defaultDominantColors = [
- { r: 82, g: 224, b: 224 },
- { r: 110, g: 82, b: 224 },
- { r: 224, g: 82, b: 167 }
- ]
-
- if (!colors || !colors[0]) {
- colors = defaultDominantColors
- }
-
- // Pull out 3 colors
- const color1 = colors[0]
- const color2 = colors[1] || color1
- const color3 = colors[2] || color2
-
- shader.uniforms.r1 = calcuateColorPixel(color1.r)
- shader.uniforms.g1 = calcuateColorPixel(color1.g)
- shader.uniforms.b1 = calcuateColorPixel(color1.b)
-
- shader.uniforms.r2 = calcuateColorPixel(color2.r)
- shader.uniforms.g2 = calcuateColorPixel(color2.g)
- shader.uniforms.b2 = calcuateColorPixel(color2.b)
-
- shader.uniforms.r3 = calcuateColorPixel(color3.r)
- shader.uniforms.g3 = calcuateColorPixel(color3.g)
- shader.uniforms.b3 = calcuateColorPixel(color3.b)
- }
-
- function calcuateColorPixel(colorPixel) {
- return colorPixel > 0 ? colorPixel / 255.0 : 0.0
- }
-
- return {
- bind,
- stop,
- show,
- hide,
- setDominantColors
- }
-})()
-
-export default Visualizer1
diff --git a/packages/web/vite.config.ts b/packages/web/vite.config.ts
index 0d4b773c942..c930c3c7a87 100644
--- a/packages/web/vite.config.ts
+++ b/packages/web/vite.config.ts
@@ -71,6 +71,8 @@ export default defineConfig(async ({ mode }) => {
include: [
'react',
'react-dom',
+ 'butterchurn',
+ 'butterchurn-presets',
...(env.VITE_ENV === 'production' ? ['@audius/sdk'] : [])
],
dedupe: ['react', 'react-dom'],