├── favicon
├── favicon.ico
├── favicon-16x16.png
├── favicon-32x32.png
├── mstile-70x70.png
├── mstile-144x144.png
├── mstile-150x150.png
├── mstile-310x150.png
├── mstile-310x310.png
├── apple-touch-icon.png
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── browserconfig.xml
├── manifest.json
└── safari-pinned-tab.svg
├── fira
├── eot
│ ├── FiraSans-Two.eot
│ ├── FiraMono-Bold.eot
│ ├── FiraSans-Bold.eot
│ ├── FiraSans-Book.eot
│ ├── FiraSans-Eight.eot
│ ├── FiraSans-Four.eot
│ ├── FiraSans-Hair.eot
│ ├── FiraSans-Heavy.eot
│ ├── FiraSans-Light.eot
│ ├── FiraSans-Thin.eot
│ ├── FiraSans-Ultra.eot
│ ├── FiraMono-Medium.eot
│ ├── FiraMono-Regular.eot
│ ├── FiraSans-Italic.eot
│ ├── FiraSans-Medium.eot
│ ├── FiraSans-Regular.eot
│ ├── FiraSans-SemiBold.eot
│ ├── FiraSans-BoldItalic.eot
│ ├── FiraSans-BookItalic.eot
│ ├── FiraSans-ExtraBold.eot
│ ├── FiraSans-ExtraLight.eot
│ ├── FiraSans-FourItalic.eot
│ ├── FiraSans-HairItalic.eot
│ ├── FiraSans-ThinItalic.eot
│ ├── FiraSans-TwoItalic.eot
│ ├── FiraSans-UltraLight.eot
│ ├── FiraSans-EightItalic.eot
│ ├── FiraSans-HeavyItalic.eot
│ ├── FiraSans-LightItalic.eot
│ ├── FiraSans-MediumItalic.eot
│ ├── FiraSans-UltraItalic.eot
│ ├── FiraSans-ExtraBoldItalic.eot
│ ├── FiraSans-SemiBoldItalic.eot
│ ├── FiraSans-ExtraLightItalic.eot
│ └── FiraSans-UltraLightItalic.eot
├── ttf
│ ├── FiraSans-Two.ttf
│ ├── FiraMono-Bold.ttf
│ ├── FiraSans-Bold.ttf
│ ├── FiraSans-Book.ttf
│ ├── FiraSans-Eight.ttf
│ ├── FiraSans-Four.ttf
│ ├── FiraSans-Hair.ttf
│ ├── FiraSans-Heavy.ttf
│ ├── FiraSans-Light.ttf
│ ├── FiraSans-Thin.ttf
│ ├── FiraSans-Ultra.ttf
│ ├── FiraMono-Medium.ttf
│ ├── FiraMono-Regular.ttf
│ ├── FiraSans-Italic.ttf
│ ├── FiraSans-Medium.ttf
│ ├── FiraSans-Regular.ttf
│ ├── FiraSans-SemiBold.ttf
│ ├── FiraSans-BoldItalic.ttf
│ ├── FiraSans-BookItalic.ttf
│ ├── FiraSans-ExtraBold.ttf
│ ├── FiraSans-ExtraLight.ttf
│ ├── FiraSans-FourItalic.ttf
│ ├── FiraSans-HairItalic.ttf
│ ├── FiraSans-ThinItalic.ttf
│ ├── FiraSans-TwoItalic.ttf
│ ├── FiraSans-UltraLight.ttf
│ ├── FiraSans-EightItalic.ttf
│ ├── FiraSans-HeavyItalic.ttf
│ ├── FiraSans-LightItalic.ttf
│ ├── FiraSans-MediumItalic.ttf
│ ├── FiraSans-UltraItalic.ttf
│ ├── FiraSans-ExtraBoldItalic.ttf
│ ├── FiraSans-SemiBoldItalic.ttf
│ ├── FiraSans-ExtraLightItalic.ttf
│ └── FiraSans-UltraLightItalic.ttf
├── woff
│ ├── FiraSans-Two.woff
│ ├── FiraMono-Bold.woff
│ ├── FiraMono-Medium.woff
│ ├── FiraSans-Bold.woff
│ ├── FiraSans-Book.woff
│ ├── FiraSans-Eight.woff
│ ├── FiraSans-Four.woff
│ ├── FiraSans-Hair.woff
│ ├── FiraSans-Heavy.woff
│ ├── FiraSans-Italic.woff
│ ├── FiraSans-Light.woff
│ ├── FiraSans-Medium.woff
│ ├── FiraSans-Thin.woff
│ ├── FiraSans-Ultra.woff
│ ├── FiraMono-Regular.woff
│ ├── FiraSans-Regular.woff
│ ├── FiraSans-SemiBold.woff
│ ├── FiraSans-BoldItalic.woff
│ ├── FiraSans-BookItalic.woff
│ ├── FiraSans-EightItalic.woff
│ ├── FiraSans-ExtraBold.woff
│ ├── FiraSans-ExtraLight.woff
│ ├── FiraSans-FourItalic.woff
│ ├── FiraSans-HairItalic.woff
│ ├── FiraSans-HeavyItalic.woff
│ ├── FiraSans-LightItalic.woff
│ ├── FiraSans-ThinItalic.woff
│ ├── FiraSans-TwoItalic.woff
│ ├── FiraSans-UltraItalic.woff
│ ├── FiraSans-UltraLight.woff
│ ├── FiraSans-MediumItalic.woff
│ ├── FiraSans-ExtraBoldItalic.woff
│ ├── FiraSans-ExtraLightItalic.woff
│ ├── FiraSans-SemiBoldItalic.woff
│ └── FiraSans-UltraLightItalic.woff
├── woff2
│ ├── FiraMono-Bold.woff2
│ ├── FiraSans-Bold.woff2
│ ├── FiraSans-Book.woff2
│ ├── FiraSans-Four.woff2
│ ├── FiraSans-Hair.woff2
│ ├── FiraSans-Thin.woff2
│ ├── FiraSans-Two.woff2
│ ├── FiraMono-Medium.woff2
│ ├── FiraSans-Eight.woff2
│ ├── FiraSans-Heavy.woff2
│ ├── FiraSans-Italic.woff2
│ ├── FiraSans-Light.woff2
│ ├── FiraSans-Medium.woff2
│ ├── FiraSans-Ultra.woff2
│ ├── FiraMono-Regular.woff2
│ ├── FiraSans-ExtraBold.woff2
│ ├── FiraSans-Regular.woff2
│ ├── FiraSans-SemiBold.woff2
│ ├── FiraSans-TwoItalic.woff2
│ ├── FiraSans-BoldItalic.woff2
│ ├── FiraSans-BookItalic.woff2
│ ├── FiraSans-EightItalic.woff2
│ ├── FiraSans-ExtraLight.woff2
│ ├── FiraSans-FourItalic.woff2
│ ├── FiraSans-HairItalic.woff2
│ ├── FiraSans-HeavyItalic.woff2
│ ├── FiraSans-LightItalic.woff2
│ ├── FiraSans-ThinItalic.woff2
│ ├── FiraSans-UltraItalic.woff2
│ ├── FiraSans-UltraLight.woff2
│ ├── FiraSans-MediumItalic.woff2
│ ├── FiraSans-SemiBoldItalic.woff2
│ ├── FiraSans-ExtraBoldItalic.woff2
│ ├── FiraSans-ExtraLightItalic.woff2
│ └── FiraSans-UltraLightItalic.woff2
├── LICENSE
└── fira.css
├── setup.js
├── lang
├── BlockClosure.js
├── Method.js
├── SourceLoc.js
├── Interpreter.js
├── Obj.js
├── builtins.js
├── Class.js
├── syntaxHighlight.js
├── instructions.js
├── grammar.js
├── asts.js
├── parse.js
├── prelude.js
└── activations.js
├── seymour.css
├── syntaxHighlight.css
├── README.md
├── lib.js
├── viz
├── macroViz.css
├── Env.js
├── MicroVizEvents.js
├── macroViz.js
├── EventRecorder.js
├── microViz.css
├── events.js
└── microViz.js
├── LICENSE
├── pathmatcher.js
├── style.css
├── notes
├── index.js
├── index.html
├── highlighting.css
├── seymour.js
├── 3rdparty
└── codemirror.css
└── highlighting.js
/favicon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/favicon.ico
--------------------------------------------------------------------------------
/favicon/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/favicon-16x16.png
--------------------------------------------------------------------------------
/favicon/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/favicon-32x32.png
--------------------------------------------------------------------------------
/favicon/mstile-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/mstile-70x70.png
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Two.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Two.eot
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Two.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Two.ttf
--------------------------------------------------------------------------------
/favicon/mstile-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/mstile-144x144.png
--------------------------------------------------------------------------------
/favicon/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/mstile-150x150.png
--------------------------------------------------------------------------------
/favicon/mstile-310x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/mstile-310x150.png
--------------------------------------------------------------------------------
/favicon/mstile-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/mstile-310x310.png
--------------------------------------------------------------------------------
/fira/eot/FiraMono-Bold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraMono-Bold.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Bold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Bold.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Book.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Book.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Eight.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Eight.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Four.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Four.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Hair.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Hair.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Heavy.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Heavy.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Light.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Light.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Thin.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Thin.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Ultra.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Ultra.eot
--------------------------------------------------------------------------------
/fira/ttf/FiraMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraMono-Bold.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Bold.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Book.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Book.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Eight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Eight.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Four.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Four.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Hair.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Hair.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Heavy.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Heavy.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Light.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Thin.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Ultra.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Ultra.ttf
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Two.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Two.woff
--------------------------------------------------------------------------------
/favicon/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/apple-touch-icon.png
--------------------------------------------------------------------------------
/fira/eot/FiraMono-Medium.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraMono-Medium.eot
--------------------------------------------------------------------------------
/fira/eot/FiraMono-Regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraMono-Regular.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Italic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Italic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Medium.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Medium.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-Regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-Regular.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-SemiBold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-SemiBold.eot
--------------------------------------------------------------------------------
/fira/ttf/FiraMono-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraMono-Medium.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraMono-Regular.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Italic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Medium.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-Regular.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-SemiBold.ttf
--------------------------------------------------------------------------------
/fira/woff/FiraMono-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraMono-Bold.woff
--------------------------------------------------------------------------------
/fira/woff/FiraMono-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraMono-Medium.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Bold.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Book.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Book.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Eight.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Eight.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Four.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Four.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Hair.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Hair.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Heavy.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Heavy.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Italic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Light.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Medium.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Thin.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Thin.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Ultra.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Ultra.woff
--------------------------------------------------------------------------------
/fira/woff2/FiraMono-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraMono-Bold.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Bold.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Book.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Book.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Four.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Four.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Hair.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Hair.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Thin.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Two.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Two.woff2
--------------------------------------------------------------------------------
/fira/eot/FiraSans-BoldItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-BoldItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-BookItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-BookItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-ExtraBold.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-ExtraBold.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-ExtraLight.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-ExtraLight.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-FourItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-FourItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-HairItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-HairItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-ThinItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-ThinItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-TwoItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-TwoItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-UltraLight.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-UltraLight.eot
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-BoldItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-BookItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-BookItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-ExtraBold.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-ExtraLight.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-FourItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-FourItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-HairItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-HairItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-ThinItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-TwoItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-TwoItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-UltraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-UltraLight.ttf
--------------------------------------------------------------------------------
/fira/woff/FiraMono-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraMono-Regular.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-Regular.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-SemiBold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-SemiBold.woff
--------------------------------------------------------------------------------
/fira/woff2/FiraMono-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraMono-Medium.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Eight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Eight.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Heavy.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Heavy.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Italic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Light.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Medium.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Ultra.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Ultra.woff2
--------------------------------------------------------------------------------
/favicon/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/android-chrome-192x192.png
--------------------------------------------------------------------------------
/favicon/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/favicon/android-chrome-512x512.png
--------------------------------------------------------------------------------
/fira/eot/FiraSans-EightItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-EightItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-HeavyItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-HeavyItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-LightItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-LightItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-MediumItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-MediumItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-UltraItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-UltraItalic.eot
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-EightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-EightItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-HeavyItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-HeavyItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-LightItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-MediumItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-UltraItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-UltraItalic.ttf
--------------------------------------------------------------------------------
/fira/woff/FiraSans-BoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-BoldItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-BookItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-BookItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-EightItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-EightItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-ExtraBold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-ExtraBold.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-ExtraLight.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-ExtraLight.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-FourItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-FourItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-HairItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-HairItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-HeavyItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-HeavyItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-LightItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-LightItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-ThinItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-ThinItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-TwoItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-TwoItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-UltraItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-UltraItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-UltraLight.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-UltraLight.woff
--------------------------------------------------------------------------------
/fira/woff2/FiraMono-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraMono-Regular.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-ExtraBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-ExtraBold.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-Regular.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-SemiBold.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-TwoItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-TwoItalic.woff2
--------------------------------------------------------------------------------
/fira/eot/FiraSans-ExtraBoldItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-ExtraBoldItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-SemiBoldItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-SemiBoldItalic.eot
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/fira/woff/FiraSans-MediumItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-MediumItalic.woff
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-BoldItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-BookItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-BookItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-EightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-EightItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-ExtraLight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-ExtraLight.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-FourItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-FourItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-HairItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-HairItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-HeavyItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-HeavyItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-LightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-LightItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-ThinItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-ThinItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-UltraItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-UltraItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-UltraLight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-UltraLight.woff2
--------------------------------------------------------------------------------
/fira/eot/FiraSans-ExtraLightItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-ExtraLightItalic.eot
--------------------------------------------------------------------------------
/fira/eot/FiraSans-UltraLightItalic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/eot/FiraSans-UltraLightItalic.eot
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/fira/ttf/FiraSans-UltraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/ttf/FiraSans-UltraLightItalic.ttf
--------------------------------------------------------------------------------
/fira/woff/FiraSans-ExtraBoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-ExtraBoldItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-ExtraLightItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-ExtraLightItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-SemiBoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-SemiBoldItalic.woff
--------------------------------------------------------------------------------
/fira/woff/FiraSans-UltraLightItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff/FiraSans-UltraLightItalic.woff
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-MediumItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-MediumItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-SemiBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-SemiBoldItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-ExtraBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-ExtraBoldItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-ExtraLightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-ExtraLightItalic.woff2
--------------------------------------------------------------------------------
/fira/woff2/FiraSans-UltraLightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harc/seymour/HEAD/fira/woff2/FiraSans-UltraLightItalic.woff2
--------------------------------------------------------------------------------
/setup.js:
--------------------------------------------------------------------------------
1 | // APPLICATION STATE. THIS STUFF IS GLOBAL
2 |
3 | window.microViz = new MicroViz(microVizContainer);
4 | window.editor = microViz.editor;
5 | editor.setOption('lineNumbers', true);
6 |
7 | window.macroViz = new MacroViz(macroVizContainer);
8 |
9 | window.pathMatchers = null;
--------------------------------------------------------------------------------
/lang/BlockClosure.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | class BlockClosure extends Obj {
4 | constructor(sourceLoc, formals, code, parent) {
5 | super(null);
6 | this.sourceLoc = sourceLoc;
7 | this.formals = formals;
8 | this.code = code;
9 | this.parent = parent;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/favicon/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #2b5797
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/lang/Method.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | class Method {
4 | constructor(sourceLoc, _class, selector, className, formals, code) {
5 | this.sourceLoc = sourceLoc;
6 | this.class = _class;
7 | this.selector = selector;
8 | this.className = className;
9 | this.formals = formals;
10 | this.code = code;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/seymour.css:
--------------------------------------------------------------------------------
1 | .CodeMirror {
2 | font-family: inherit;
3 | }
4 |
5 | parseError {
6 | display: block;
7 | white-space: pre-wrap;
8 | color: maroon;
9 | background: yellow;
10 | padding: 0 4px;
11 | padding: 4px;
12 | opacity: 1;
13 | max-height: 100pt;
14 |
15 | -webkit-user-select: none;
16 | -moz-user-select: none;
17 | user-select: none;
18 | }
--------------------------------------------------------------------------------
/favicon/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "icons": [
4 | {
5 | "src": "favicon/android-chrome-192x192.png",
6 | "sizes": "192x192",
7 | "type": "image/png"
8 | },
9 | {
10 | "src": "favicon/android-chrome-512x512.png",
11 | "sizes": "512x512",
12 | "type": "image/png"
13 | }
14 | ],
15 | "theme_color": "#ffffff",
16 | "background_color": "#ffffff",
17 | "display": "standalone"
18 | }
--------------------------------------------------------------------------------
/syntaxHighlight.css:
--------------------------------------------------------------------------------
1 | .sh_keyword {
2 | color: #5F136F;
3 | }
4 |
5 | .sh_number,
6 | .sh_string,
7 | .sh_true,
8 | .sh_false,
9 | .sh_null {
10 | color: #2F19AB;
11 | }
12 |
13 | .sh_varName,
14 | .sh_className {
15 | color: #333;
16 | }
17 |
18 | .sh_className {
19 | font-weight: bold;
20 | }
21 |
22 | .sh_binSelector {
23 | color: #0B1010;
24 | }
25 |
26 | .sh_selector {
27 | color: #2F1988;
28 | }
29 |
30 | .sh_instVarName {
31 | color: maroon;
32 | }
33 |
34 | .sh_comment {
35 | color: #638b61;
36 | }
37 |
--------------------------------------------------------------------------------
/lang/SourceLoc.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | class SourceLoc {
4 | constructor(startPos, endPos, startLineNumber, endLineNumber) {
5 | this.startPos = startPos;
6 | this.endPos = endPos;
7 | this.startLineNumber = startLineNumber;
8 | this.endLineNumber = endLineNumber;
9 | }
10 |
11 | equals(sourceLoc) {
12 | return this.startPos === sourceLoc.startPos && this.endPos === sourceLoc.endPos;
13 | }
14 |
15 | contains(sourceLoc) {
16 | return this.startPos <= sourceLoc.startPos && sourceLoc.endPos <= this.endPos;
17 | }
18 |
19 | strictlyContains(sourceLoc) {
20 | return this.contains(sourceLoc) && !this.equals(sourceLoc);
21 | }
22 |
23 | containsIdx(pos) {
24 | return this.startPos <= pos && pos < this.endPos;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Seymour
2 | =======
3 |
4 | Seymour is a live programming environment that visualizes program execution as the user types. It features a micro visualization that shows details of the program’s execution, and a macro visualization that puts the micro visualization in context, letting the user focus on different parts of the program execution. These visualizations come together to give the user a helpful live programming experience.
5 |
6 | We are excited about the prospect of using this environment in the classroom and learning from student feedback. In doing so, we hope to make Seymour a valuable learning aid for students, and ultimately, create a better user experience for all programmers.
7 |
8 | For more details, see our LIVE '17 paper:
9 | https://harc.github.io/seymour-live2017/
10 |
11 | -- Alex and Saketh
12 |
--------------------------------------------------------------------------------
/lib.js:
--------------------------------------------------------------------------------
1 | function range(from, to) {
2 | const ans = [];
3 | for (let x = from; x <= to; x++) {
4 | ans.push(x);
5 | }
6 | return ans;
7 | }
8 |
9 | function d(elementType, attributes, ...children) {
10 | const node = document.createElement(elementType);
11 | if (attributes == null && children.length === 0) {
12 | return node;
13 | }
14 |
15 | Object.keys(attributes).forEach(name => node.setAttribute(name, attributes[name]));
16 | for (let child of children) {
17 | node.appendChild(typeof child === 'string' ? document.createTextNode(child) : child);
18 | }
19 | return node;
20 | }
21 |
22 | function spaces(n) {
23 | let str = '';
24 | while (n-- > 0) {
25 | str += ' ';
26 | }
27 | return str;
28 | }
29 |
30 | function flatten(arrs) {
31 | return [].concat.apply([], arrs);
32 | }
33 |
--------------------------------------------------------------------------------
/lang/Interpreter.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | class Interpreter {
4 | constructor(sourceLoc, code, R) {
5 | this.R = R;
6 | this.global = new TopLevelActivation(sourceLoc, code, R);
7 | this.currentActivation = this.global;
8 | }
9 |
10 | step() {
11 | this.currentActivation = this.currentActivation.step();
12 | return this.currentActivation === null;
13 | }
14 |
15 | runForMillis(timeLimit) {
16 | const t0 = performance.now();
17 | while (true) {
18 | let done;
19 | // try {
20 | done = this.step();
21 | // } catch(e) {
22 | // console.error('system error', e);
23 | // return true;
24 | // }
25 | if (done) {
26 | return true;
27 | }
28 | if (performance.now() - t0 >= timeLimit) {
29 | return false;
30 | }
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/lang/Obj.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | class Obj {
4 | constructor(_class) {
5 | this.id = Obj.nextId++;
6 | this.class = _class;
7 | this.instVars = Object.create(null);
8 | if (this.class) {
9 | this.class.instVarNames.forEach(name => this.instVars[name] = null);
10 | }
11 | }
12 |
13 | lookup(selector) {
14 | return this.class.getMethod(selector);
15 | }
16 |
17 | setInstVar(name, value) {
18 | this.assertIsInstVarName(name);
19 | this.instVars[name] = value;
20 | }
21 |
22 | getInstVar(name) {
23 | this.assertIsInstVarName(name);
24 | return this.instVars[name];
25 | }
26 |
27 | assertIsInstVarName(name) {
28 | if (!Object.prototype.hasOwnProperty.call(this.instVars, name)) {
29 | throw new Error(name + ' is not an instance variable');
30 | }
31 | }
32 |
33 | toString() {
34 | return this.class.name + '@' + this.id;
35 | }
36 | }
37 |
38 | Obj.nextId = 0;
39 |
--------------------------------------------------------------------------------
/viz/macroViz.css:
--------------------------------------------------------------------------------
1 | .macroViz {
2 | white-space: nowrap;
3 | padding-bottom: 5px;
4 | }
5 |
6 | .macroViz macroViz {
7 | display: block;
8 | }
9 |
10 | .macroViz macroVizNode {
11 | display: inline-block;
12 | white-space: nowrap;
13 | vertical-align: top;
14 | }
15 |
16 | .macroViz macroVizNode.collapsed > label {
17 | padding: 0.5px;
18 | box-shadow: 1px 1px 0px hsla(0, 0%, 0%, 0.2);
19 | }
20 |
21 | .macroViz macroVizNode > label {
22 | display: block;
23 | color: #555;
24 | box-shadow: 1px 1px 0px hsl(0, 0%, 0%);
25 | padding: 4px;
26 | background: hsl(0, 0%, 90%);
27 | margin: 0;
28 | margin-left: 1px;
29 | margin-right: 1px;
30 | }
31 |
32 | .macroViz macroVizNode.error > label {
33 | background: HSL(352, 52%, 59%);
34 | }
35 |
36 | .macroViz macroVizNode[isFocusable="false"] > label {
37 | display: none;
38 | background: hsl(0, 0%, 97%);
39 | }
40 |
41 | .macroViz macroVizNode > label > text {
42 | display: none;
43 | }
44 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 HARC
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/lang/builtins.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | TopLevelActivation.prototype.installBuiltins = function() {
4 | const declClass = (name, superClass, instVarNames) => {
5 | const _class = new Class(name, superClass, instVarNames);
6 | this.declVar(null, name, _class);
7 | return _class;
8 | }
9 |
10 | const _Object = declClass('Object', null, []);
11 |
12 | const Block = declClass('Block', _Object, []);
13 | {
14 | let loop, callCond, callBody;
15 | Block.declMethod(null, 'while_do:', new Ident(null, 'Block'), [new Ident(null, 'body')],
16 | new IPush(0,
17 | new IDeclVar('activationPathToken', null,
18 | loop = new IPushThis(
19 | new IPrim(
20 | function() { callCond.operands[3] = this.varValues.activationPathToken++; },
21 | null,
22 | callCond = new ISend('call', 0, null, undefined,
23 | new ICond(
24 | new IPushFromVar('body',
25 | new IPrim(
26 | function() { callBody.operands[3] = this.varValues.activationPathToken++; },
27 | null,
28 | callBody = new ISend('call', 0, null, undefined, null))),
29 | new IPush(null, new INonLocalReturn(null)))))))));
30 | callBody.operands[4] = loop;
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/lang/Class.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | class Class extends Obj {
4 | constructor(name, superClass = null, instVarNames = new Set()) {
5 | super(null);
6 | this.name = name;
7 | this.superClass = superClass;
8 | if (superClass === null) {
9 | this.instVarNames = new Set();
10 | this.methods = Object.create(null);
11 | } else {
12 | this.instVarNames = new Set(superClass.instVarNames);
13 | this.methods = Object.create(superClass.methods);
14 | }
15 | instVarNames.forEach(name => {
16 | if (this.instVarNames.has(name)) {
17 | throw new Error('duplicate instance variable ' + name + ' in class ' + this.name);
18 | }
19 | this.instVarNames.add(name);
20 | });
21 | }
22 |
23 | makeNewInstance() {
24 | return new Obj(this);
25 | }
26 |
27 | declMethod(sourceLoc, selector, className, formals, code) {
28 | if (Object.prototype.hasOwnProperty.call(this.methods, selector)) {
29 | throw new Error('duplicate declaration of method ' + selector + ' in class ' + this.name);
30 | }
31 | this.methods[selector] = new Method(sourceLoc, this, selector, className, formals, code);
32 | }
33 |
34 | getMethod(selector) {
35 | const m = this.methods[selector];
36 | if (m === undefined) {
37 | throw new Error('class ' + this.name + ' does not understand ' + selector);
38 | }
39 | return m;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/pathmatcher.js:
--------------------------------------------------------------------------------
1 | class PathMatcher {
2 | constructor(path, env = null) {
3 | this.path = path;
4 | this.idx = env ? path.length : 0;
5 | this.envAtIdx = env;
6 | }
7 |
8 | reset(globalEnv) {
9 | this.idx = 0;
10 | this.envAtIdx = globalEnv;
11 | }
12 |
13 | get env() {
14 | return this.idx === this.path.length ? this.envAtIdx : null;
15 | }
16 |
17 | processEvent(child, parent) {
18 | console.assert(this.idx < this.path.length);
19 | if (this.envAtIdx === parent.activationEnv &&
20 | child.activationPathToken === this.path[this.idx]) {
21 | this.idx++;
22 | this.envAtIdx = child.activationEnv;
23 | }
24 | }
25 | }
26 |
27 | function getPathMatchers(activationEnv) {
28 | const pathMatchers = [];
29 | let env = activationEnv;
30 | while (env) {
31 | pathMatchers.unshift(getPathMatcher(env));
32 | env = env.parentEnv;
33 | }
34 | return pathMatchers;
35 | }
36 |
37 | function getPathMatcher(activationEnv) {
38 | return new PathMatcher(getPath(activationEnv), activationEnv);
39 | }
40 |
41 | function getPath(activationEnv) {
42 | const path = [];
43 | while (true) {
44 | const callerEnv = activationEnv.callerEnv;
45 | if (callerEnv) {
46 | path.push(activationEnv.programOrSendEvent.activationPathToken);
47 | activationEnv = callerEnv.programOrSendEvent.activationEnv;
48 | } else {
49 | break;
50 | }
51 | }
52 | path.reverse();
53 | return path;
54 | }
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | @import url("fira/fira.css");
2 |
3 | html {
4 | font-size: 13px;
5 | line-height: 1.4rem;
6 | }
7 |
8 | body {
9 | margin: 0;
10 | font-family: "Fira Sans";
11 | font-size: inherit;
12 | }
13 |
14 | #topHalf {
15 | height: 50vh;
16 | width: 100vw;
17 | overflow-y: auto;
18 | border-bottom: 1px solid #ddd;
19 | font-family: "Fira Mono";
20 | font-feature-settings: "liga" 0;
21 | }
22 |
23 | .CodeMirror {
24 | font-family: inherit;
25 | }
26 |
27 | #microVizContainer {
28 | padding: 0;
29 | width: 100vw;
30 | }
31 |
32 | #macroVizScroller {
33 | overflow: auto;
34 | height: 100%;
35 | }
36 |
37 | #bottomHalf {
38 | height: 50vh;
39 | position: relative;
40 | overflow: hidden;
41 | }
42 |
43 | #legend {
44 | position: absolute;
45 | bottom: 0px;
46 | left: 0px;
47 | border: 1px solid black;
48 | }
49 |
50 | parseError {
51 | display: block;
52 | white-space: pre-wrap;
53 | color: maroon;
54 | background: yellow;
55 | padding: 0 4px;
56 | padding: 4px;
57 | opacity: 1;
58 | max-height: 100pt;
59 |
60 | -webkit-user-select: none;
61 | -moz-user-select: none;
62 | user-select: none;
63 | }
64 |
65 | /* errors */
66 |
67 | #errorDiv {
68 | color: hsl(0, 50%, 70%);
69 | padding: 5px;
70 | border-bottom: 1px solid #ddd;
71 | background: hsl(0, 0%, 95%);
72 | cursor: row-resize;
73 | }
74 |
75 | /*#errorDiv:empty {
76 | padding: 0px !important;
77 | }*/
78 |
79 | /** DEMO CHANGES **/
80 |
81 | #legend {
82 | display: none;
83 | }
84 |
85 | .macroViz macroVizNode.collapsed > label {
86 | display: none;
87 | }
--------------------------------------------------------------------------------
/favicon/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lang/syntaxHighlight.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const syntaxHighlight = (function() {
4 |
5 | const semantics = seymourGrammar.createSemantics();
6 | let doc;
7 |
8 | function syntaxHighlight(cm, matcher) {
9 | doc = cm.doc;
10 | doc.getAllMarks().forEach(mark => mark.clear());
11 | const matchResult = matcher.match('tokens');
12 | semantics(matchResult).syntaxHighlight();
13 | }
14 |
15 | function mark(startIdx, endIdx, className) {
16 | const startPos = doc.posFromIndex(startIdx);
17 | const endPos = doc.posFromIndex(endIdx);
18 | const marke = doc.markText(startPos, endPos, { className: 'sh_' + className });
19 | }
20 |
21 | semantics.addOperation('syntaxHighlight()', {
22 |
23 | tokens(children) {
24 | children.syntaxHighlight();
25 | },
26 |
27 | token(children) {
28 | if (this.numChildren !== 1) {
29 | throw new Error('token cst nodes should only have one child');
30 | }
31 | this.child(0).syntaxHighlight();
32 | },
33 |
34 | valueToken(t) {
35 | return t.syntaxHighlight();
36 | },
37 |
38 | instVarAccess(_dot, _spaces, name) {
39 | mark(name.source.startIdx, name.source.endIdx, 'instVarName');
40 | },
41 |
42 | javaStyleSelector(_dot, _spaces1, selector, _spaces2, _open) {
43 | mark(selector.source.startIdx, selector.source.endIdx, 'selector');
44 | },
45 |
46 | kwSelectorPrefix(prefix, _spaces, _receiverToken) {
47 | mark(prefix.source.startIdx, prefix.source.endIdx, 'selector');
48 | },
49 |
50 | kwSelectorPart(selector, colon) {
51 | mark(selector.source.startIdx, colon.source.endIdx, 'selector');
52 | },
53 |
54 | _nonterminal(children) {
55 | if (this.ctorName !== 'any') {
56 | mark(this.source.startIdx, this.source.endIdx, this.ctorName);
57 | }
58 | }
59 |
60 | });
61 |
62 | return syntaxHighlight;
63 |
64 | })();
65 |
--------------------------------------------------------------------------------
/notes:
--------------------------------------------------------------------------------
1 | Evaluator
2 | * globalActivation : Activation
3 | * currentActivation : Activation
4 | + step() : Boolean
5 | + run() : Void
6 |
7 | Activation
8 | * args : Array