Bring in the Nim implementation.

This commit is contained in:
Simon Forman 2022-01-15 15:30:38 -08:00
parent b05f13fc90
commit 564417c985
25 changed files with 5429 additions and 0 deletions

View File

@ -0,0 +1,51 @@
# Joy interpreter in Nim
This interpreter written in Nim is part of the Thun project, which
includes interpreters written in Python and Prolog, and some explorations
towards compilers for Joy written in Prolog.
## Building
To build an executable just run:
nim c joy.nim
To build and immediately run an executable use:
nim c -r joy.nim
To build a smaller binary do:
nim c -d:release joy.nim
strip --strip-debug joy.exe
## Dependencies
- Nim functional programming library https://github.com/vegansk/nimfp
- Pure Nim (i.e. not GMP) BigInts library https://github.com/def-/nim-bigints
- ...
## TODOs:
- link to other Thun sub-projects & info on Joy in general
- ctrl-c should exit cleanly
- graphics?
- `words` and `help`?
- How to integrate docs?
nim cc \
-d:release \
--stackTrace:off \
--lineTrace:off \
--checks:off \
--assertions:off \
--debugger:native \
joy.nim
nim doc --project --index:on --git.url:"https://git.sr.ht/~sforman/Bliss" --git.commit:10b5651ed242fb16c29f2c1f7340d77f65926ca4 --outdir:htmldocs joy.nim
https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/item/types.nim#L26

View File

@ -0,0 +1,45 @@
#[
Copyright © 2021 Simon Forman
This file is part of Bliss
Bliss is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bliss is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bliss. If not see <http://www.gnu.org/licenses/>.
]#
import streams, strutils, fp, reader, types
proc add_def(def: string, dictionary: var JoyMapType) =
let d = read_str(def)
let sym = d.head
case sym.kind:
of joyAtom:
dictionary = dictionary + (sym.atomVal, d.tail)
else:
raise newException(ValueError, def)
proc defs_file2dict(defs_filename: string = "defs.txt"): JoyMapType =
var strm = newFileStream(defs_filename, fmRead)
var dictionary = newMap[string, JoyListType]()
var line = ""
if not isNil(strm):
while strm.readLine(line):
if line.isEmptyOrWhitespace:
continue
add_def(line, dictionary)
strm.close()
return dictionary
var dictionary* = defs_file2dict()

View File

@ -0,0 +1,115 @@
-- 1 -
? dup bool
&& nulco [nullary [false]] dip branch
++ 1 +
|| nulco [nullary] dip [true] branch
!- 0 >=
<{} [] swap
<<{} [] rolldown
abs dup 0 < [] [neg] branch
anamorphism [pop []] swap [dip swons] genrec
app1 grba infrst
app2 [grba swap grba swap] dip [infrst] cons ii
app3 3 appN
appN [grabN] codi map disenstacken
at drop first
average [sum] [size] cleave /
b [i] dip i
binary unary popd
ccccons ccons ccons
ccons cons cons
clear stack bool [pop stack bool] loop
cleave fork popdd
clop cleave popdd
codi cons dip
codireco codi reco
dinfrirst dip infrst
dipd [dip] codi
disenstacken ? [uncons ?] loop pop
down_to_zero [0 >] [dup --] while
drop [rest] times
dupd [dup] dip
dupdd [dup] dipd
dupdip dupd dip
dupdipd dup dipd
enstacken stack [clear] dip
flatten <{} [concat] step
fork [i] app2
fourth rest third
gcd true [tuck mod dup 0 >] loop pop
genrec [[genrec] ccccons] nullary swons concat ifte
grabN <{} [cons] times
grba [stack popd] dip
hypot [sqr] ii + sqrt
ifte [nullary] dipd swap branch
ii [dip] dupdip i
infra swons swaack [i] dip swaack
infrst infra first
make_generator [codireco] ccons
mod %
neg 0 swap -
not [true] [false] branch
nulco [nullary] cons
nullary [stack] dinfrirst
of swap at
pam [i] map
pm [+] [-] clop
popd [pop] dip
popdd [pop] dipd
popop pop pop
popopop pop popop
popopd [popop] dip
popopdd [popop] dipd
product 1 swap [*] step
quoted [unit] dip
range [0 <=] [1 - dup] anamorphism
range_to_zero unit [down_to_zero] infra
reco rest cons
rest [pop] infra
reverse <{} shunt
roll> swap swapd
roll< swapd swap
rollup roll>
rolldown roll<
rrest rest rest
run <{} infra
second rest first
shift uncons [swons] dip
shunt [swons] step
size [pop ++] step_zero
spiral_next [[[abs] ii <=] [[<>] [pop !-] ||] &&] [[!-] [[++]] [[--]] ifte dip] [[pop !-] [--] [++] ifte] ifte
split_at [drop] [take] clop
split_list [take reverse] [drop] clop
sqr dup *
stackd [stack] dip
step_zero 0 roll> step
sum [+] step_zero
swapd [swap] dip
swons swap cons
swoncat swap concat
tailrec [i] genrec
take [] roll> [shift] times pop
ternary binary popd
third rest second
tuck dup swapd
unary nullary popd
uncons [first] [rest] cleave
unit [] cons
unquoted [i] dip
unswons uncons swap
while swap nulco dupdipd concat loop
x dup i
step [_step0] x
_step0 _step1 [popopop] [_stept] branch
_step1 [?] dipd roll<
_stept [uncons] dipd [dupdipd] dip x
times [_times0] x
_times0 _times1 [popopop] [_timest] branch
_times1 [dup 0 >] dipd roll<
_timest [[--] dip dupdipd] dip x
map [_map0] cons [[] [_map?] [_mape]] dip tailrec
_map? pop bool not
_mape popd reverse
_map0 [_map1] dipd _map2
_map1 stackd shift
_map2 [infrst] cons dipd roll< swons

View File

@ -0,0 +1,152 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>defs</title>
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">defs</h1>
<div class="row">
<div class="three columns">
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
&nbsp;&nbsp;&nbsp; <em>Dark Mode</em>
</div>
<div id="global-links">
<ul class="simple">
<li>
<a href="theindex.html">Index</a>
</li>
</ul>
</div>
<div id="searchInputDiv">
Search: <input type="text" id="searchInput"
onkeyup="search()" />
</div>
<div>
Group by:
<select onchange="groupBy(this.value)">
<option value="section">Section</option>
<option value="type">Type</option>
</select>
</div>
<ul class="simple simple-toc" id="toc-list">
<li>
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
<ul class="simple simple-toc-section">
</ul>
</li>
<li>
<a class="reference reference-toplevel" href="#8" id="58">Vars</a>
<ul class="simple simple-toc-section">
<li><a class="reference" href="#dictionary"
title="dictionary = defs_file2dict(&quot;defs.txt&quot;)">dictionary</a></li>
</ul>
</li>
</ul>
</div>
<div class="nine columns" id="content">
<div id="tocRoot"></div>
<p class="module-desc"></p>
<div class="section" id="6">
<h1><a class="toc-backref" href="#6">Imports</a></h1>
<dl class="item">
<a class="reference external" href="reader.html">reader</a>, <a class="reference external" href="types.html">types</a>
</dl></div>
<div class="section" id="8">
<h1><a class="toc-backref" href="#8">Vars</a></h1>
<dl class="item">
<a id="dictionary"></a>
<dt><pre><a href="defs.html#dictionary"><span class="Identifier">dictionary</span></a> <span class="Other">=</span> <span class="Identifier">defs_file2dict</span><span class="Other">(</span><span class="StringLit">&quot;defs.txt&quot;</span><span class="Other">)</span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/defs.nim#L45"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/defs.nim#L45" class="link-seesrc" target="_blank" >Edit</a>
</dd>
</dl></div>
</div>
</div>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small style="color: var(--hint);">Made with Nim. Generated: 2021-02-20 03:26:16 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1 @@
dictionary defs.html#dictionary defs: dictionary

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>joy</title>
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">joy</h1>
<div class="row">
<div class="three columns">
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
&nbsp;&nbsp;&nbsp; <em>Dark Mode</em>
</div>
<div id="global-links">
<ul class="simple">
<li>
<a href="theindex.html">Index</a>
</li>
</ul>
</div>
<div id="searchInputDiv">
Search: <input type="text" id="searchInput"
onkeyup="search()" />
</div>
<div>
Group by:
<select onchange="groupBy(this.value)">
<option value="section">Section</option>
<option value="type">Type</option>
</select>
</div>
<ul class="simple simple-toc" id="toc-list">
<li>
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
<ul class="simple simple-toc-section">
</ul>
</li>
</ul>
</div>
<div class="nine columns" id="content">
<div id="tocRoot"></div>
<p class="module-desc"></p>
<div class="section" id="6">
<h1><a class="toc-backref" href="#6">Imports</a></h1>
<dl class="item">
<a class="reference external" href="printer.html">printer</a>, <a class="reference external" href="reader.html">reader</a>, <a class="reference external" href="types.html">types</a>, <a class="reference external" href="joylib.html">joylib</a>, <a class="reference external" href="utils.html">utils</a>, <a class="reference external" href="defs.html">defs</a>
</dl></div>
</div>
</div>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small style="color: var(--hint);">Made with Nim. Generated: 2021-02-20 03:26:16 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,379 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>joylib</title>
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">joylib</h1>
<div class="row">
<div class="three columns">
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
&nbsp;&nbsp;&nbsp; <em>Dark Mode</em>
</div>
<div id="global-links">
<ul class="simple">
<li>
<a href="theindex.html">Index</a>
</li>
</ul>
</div>
<div id="searchInputDiv">
Search: <input type="text" id="searchInput"
onkeyup="search()" />
</div>
<div>
Group by:
<select onchange="groupBy(this.value)">
<option value="section">Section</option>
<option value="type">Type</option>
</select>
</div>
<ul class="simple simple-toc" id="toc-list">
<li>
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
<ul class="simple simple-toc-section">
</ul>
</li>
<li>
<a class="reference reference-toplevel" href="#12" id="62">Procs</a>
<ul class="simple simple-toc-section">
<ul class="simple nested-toc-section">cons
<li><a class="reference" href="#cons%2CJoyState"
title="cons(state: var JoyState)">cons,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">dip
<li><a class="reference" href="#dip%2CJoyState"
title="dip(state: var JoyState)">dip,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">stack
<li><a class="reference" href="#stack%2CJoyState"
title="stack(state: var JoyState)">stack,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">first
<li><a class="reference" href="#first%2CJoyState"
title="first(state: var JoyState)">first,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">swap
<li><a class="reference" href="#swap%2CJoyState"
title="swap(state: var JoyState)">swap,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">dup
<li><a class="reference" href="#dup%2CJoyState"
title="dup(state: var JoyState)">dup,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">swaack
<li><a class="reference" href="#swaack%2CJoyState"
title="swaack(state: var JoyState)">swaack,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">concat
<li><a class="reference" href="#concat%2CJoyState"
title="concat(state: var JoyState)">concat,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">i
<li><a class="reference" href="#i%2CJoyState"
title="i(state: var JoyState)">i,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">clear
<li><a class="reference" href="#clear%2CJoyState"
title="clear(state: var JoyState)">clear,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">loop
<li><a class="reference" href="#loop%2CJoyState"
title="loop(state: var JoyState)">loop,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">branch
<li><a class="reference" href="#branch%2CJoyState"
title="branch(state: var JoyState)">branch,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">rest
<li><a class="reference" href="#rest%2CJoyState"
title="rest(state: var JoyState)">rest,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">truthy
<li><a class="reference" href="#truthy%2CJoyState"
title="truthy(state: var JoyState)">truthy,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">pop
<li><a class="reference" href="#pop%2CJoyState"
title="pop(state: var JoyState)">pop,<wbr>JoyState</a></li>
</ul>
</ul>
</li>
</ul>
</div>
<div class="nine columns" id="content">
<div id="tocRoot"></div>
<p class="module-desc"></p>
<div class="section" id="6">
<h1><a class="toc-backref" href="#6">Imports</a></h1>
<dl class="item">
<a class="reference external" href="types.html">types</a>, <a class="reference external" href="utils.html">utils</a>
</dl></div>
<div class="section" id="12">
<h1><a class="toc-backref" href="#12">Procs</a></h1>
<dl class="item">
<a id="swap,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#swap%2CJoyState"><span class="Identifier">swap</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L24"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L24" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="dup,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#dup%2CJoyState"><span class="Identifier">dup</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L29"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L29" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="pop,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#pop%2CJoyState"><span class="Identifier">pop</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L34"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L34" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="cons,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#cons%2CJoyState"><span class="Identifier">cons</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L39"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L39" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="concat,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#concat%2CJoyState"><span class="Identifier">concat</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L44"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L44" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="stack,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#stack%2CJoyState"><span class="Identifier">stack</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L49"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L49" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="swaack,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#swaack%2CJoyState"><span class="Identifier">swaack</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L52"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L52" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="clear,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#clear%2CJoyState"><span class="Identifier">clear</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L58"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L58" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="first,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#first%2CJoyState"><span class="Identifier">first</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L61"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L61" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="rest,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#rest%2CJoyState"><span class="Identifier">rest</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L67"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L67" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="branch,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#branch%2CJoyState"><span class="Identifier">branch</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L73"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L73" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="loop,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#loop%2CJoyState"><span class="Identifier">loop</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L81"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L81" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="i,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#i%2CJoyState"><span class="Identifier">i</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L90"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L90" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="dip,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#dip%2CJoyState"><span class="Identifier">dip</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L94"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L94" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="truthy,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#truthy%2CJoyState"><span class="Identifier">truthy</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/joylib.nim#L99"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/joylib.nim#L99" class="link-seesrc" target="_blank" >Edit</a>
</dd>
</dl></div>
</div>
</div>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small style="color: var(--hint);">Made with Nim. Generated: 2021-02-20 03:26:16 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,15 @@
swap joylib.html#swap,JoyState joylib: swap(state: var JoyState)
dup joylib.html#dup,JoyState joylib: dup(state: var JoyState)
pop joylib.html#pop,JoyState joylib: pop(state: var JoyState)
cons joylib.html#cons,JoyState joylib: cons(state: var JoyState)
concat joylib.html#concat,JoyState joylib: concat(state: var JoyState)
stack joylib.html#stack,JoyState joylib: stack(state: var JoyState)
swaack joylib.html#swaack,JoyState joylib: swaack(state: var JoyState)
clear joylib.html#clear,JoyState joylib: clear(state: var JoyState)
first joylib.html#first,JoyState joylib: first(state: var JoyState)
rest joylib.html#rest,JoyState joylib: rest(state: var JoyState)
branch joylib.html#branch,JoyState joylib: branch(state: var JoyState)
loop joylib.html#loop,JoyState joylib: loop(state: var JoyState)
i joylib.html#i,JoyState joylib: i(state: var JoyState)
dip joylib.html#dip,JoyState joylib: dip(state: var JoyState)
truthy joylib.html#truthy,JoyState joylib: truthy(state: var JoyState)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,173 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>printer</title>
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">printer</h1>
<div class="row">
<div class="three columns">
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
&nbsp;&nbsp;&nbsp; <em>Dark Mode</em>
</div>
<div id="global-links">
<ul class="simple">
<li>
<a href="theindex.html">Index</a>
</li>
</ul>
</div>
<div id="searchInputDiv">
Search: <input type="text" id="searchInput"
onkeyup="search()" />
</div>
<div>
Group by:
<select onchange="groupBy(this.value)">
<option value="section">Section</option>
<option value="type">Type</option>
</select>
</div>
<ul class="simple simple-toc" id="toc-list">
<li>
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
<ul class="simple simple-toc-section">
</ul>
</li>
<li>
<a class="reference reference-toplevel" href="#12" id="62">Procs</a>
<ul class="simple simple-toc-section">
<ul class="simple nested-toc-section">print_stack
<li><a class="reference" href="#print_stack%2CJoyListType"
title="print_stack(stack: JoyListType): string">print_stack,<wbr>JoyListType</a></li>
</ul>
<ul class="simple nested-toc-section">print_expression
<li><a class="reference" href="#print_expression%2CJoyListType"
title="print_expression(stack: JoyListType): string">print_expression,<wbr>JoyListType</a></li>
</ul>
</ul>
</li>
</ul>
</div>
<div class="nine columns" id="content">
<div id="tocRoot"></div>
<p class="module-desc"></p>
<div class="section" id="6">
<h1><a class="toc-backref" href="#6">Imports</a></h1>
<dl class="item">
<a class="reference external" href="types.html">types</a>
</dl></div>
<div class="section" id="12">
<h1><a class="toc-backref" href="#12">Procs</a></h1>
<dl class="item">
<a id="print_expression,JoyListType"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#print_expression%2CJoyListType"><span class="Identifier">print_expression</span></a><span class="Other">(</span><span class="Identifier">stack</span><span class="Other">:</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">]</span><span class="Other">,</span>
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/printer.nim#L38"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/printer.nim#L38" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="print_stack,JoyListType"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#print_stack%2CJoyListType"><span class="Identifier">print_stack</span></a><span class="Other">(</span><span class="Identifier">stack</span><span class="Other">:</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">]</span><span class="Other">,</span>
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/printer.nim#L41"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/printer.nim#L41" class="link-seesrc" target="_blank" >Edit</a>
</dd>
</dl></div>
</div>
</div>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small style="color: var(--hint);">Made with Nim. Generated: 2021-02-20 03:26:16 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,2 @@
print_expression printer.html#print_expression,JoyListType printer: print_expression(stack: JoyListType): string
print_stack printer.html#print_stack,JoyListType printer: print_stack(stack: JoyListType): string

View File

@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>reader</title>
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">reader</h1>
<div class="row">
<div class="three columns">
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
&nbsp;&nbsp;&nbsp; <em>Dark Mode</em>
</div>
<div id="global-links">
<ul class="simple">
<li>
<a href="theindex.html">Index</a>
</li>
</ul>
</div>
<div id="searchInputDiv">
Search: <input type="text" id="searchInput"
onkeyup="search()" />
</div>
<div>
Group by:
<select onchange="groupBy(this.value)">
<option value="section">Section</option>
<option value="type">Type</option>
</select>
</div>
<ul class="simple simple-toc" id="toc-list">
<li>
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
<ul class="simple simple-toc-section">
</ul>
</li>
<li>
<a class="reference reference-toplevel" href="#12" id="62">Procs</a>
<ul class="simple simple-toc-section">
<ul class="simple nested-toc-section">read_str
<li><a class="reference" href="#read_str%2Cstring"
title="read_str(str: string): JoyListType">read_str,<wbr>string</a></li>
</ul>
</ul>
</li>
</ul>
</div>
<div class="nine columns" id="content">
<div id="tocRoot"></div>
<p class="module-desc"></p>
<div class="section" id="6">
<h1><a class="toc-backref" href="#6">Imports</a></h1>
<dl class="item">
<a class="reference external" href="types.html">types</a>
</dl></div>
<div class="section" id="12">
<h1><a class="toc-backref" href="#12">Procs</a></h1>
<dl class="item">
<a id="read_str,string"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#read_str%2Cstring"><span class="Identifier">read_str</span></a><span class="Other">(</span><span class="Identifier">str</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma">
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">EInvalidPeg</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/reader.nim#L99"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/reader.nim#L99" class="link-seesrc" target="_blank" >Edit</a>
</dd>
</dl></div>
</div>
</div>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small style="color: var(--hint);">Made with Nim. Generated: 2021-02-20 03:26:16 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1 @@
read_str reader.html#read_str,string reader: read_str(str: string): JoyListType

View File

@ -0,0 +1,239 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>Index</title>
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">Index</h1>
Modules: <a href="defs.html">defs</a>, <a href="joylib.html">joylib</a>, <a href="printer.html">printer</a>, <a href="reader.html">reader</a>, <a href="types.html">types</a>, <a href="utils.html">utils</a>.<br/><p /><h2>API symbols</h2>
<dl><dt><a name="branch" href="#branch"><span>branch:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: branch(state: var JoyState)" href="joylib.html#branch%2CJoyState">joylib: branch(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="clear" href="#clear"><span>clear:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: clear(state: var JoyState)" href="joylib.html#clear%2CJoyState">joylib: clear(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="concat" href="#concat"><span>concat:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: concat(state: var JoyState)" href="joylib.html#concat%2CJoyState">joylib: concat(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="cons" href="#cons"><span>cons:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: cons(state: var JoyState)" href="joylib.html#cons%2CJoyState">joylib: cons(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="dictionary" href="#dictionary"><span>dictionary:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="defs: dictionary" href="defs.html#dictionary">defs: dictionary</a></li>
</ul></dd>
<dt><a name="dip" href="#dip"><span>dip:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: dip(state: var JoyState)" href="joylib.html#dip%2CJoyState">joylib: dip(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="dup" href="#dup"><span>dup:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: dup(state: var JoyState)" href="joylib.html#dup%2CJoyState">joylib: dup(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="first" href="#first"><span>first:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: first(state: var JoyState)" href="joylib.html#first%2CJoyState">joylib: first(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="i" href="#i"><span>i:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: i(state: var JoyState)" href="joylib.html#i%2CJoyState">joylib: i(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="j_false" href="#j_false"><span>j_false:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="types: j_false" href="types.html#j_false">types: j_false</a></li>
</ul></dd>
<dt><a name="j_loop" href="#j_loop"><span>j_loop:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="types: j_loop" href="types.html#j_loop">types: j_loop</a></li>
</ul></dd>
<dt><a name="joyAtom" href="#joyAtom"><span>joyAtom:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="JoyTypeType.joyAtom" href="types.html#joyAtom">JoyTypeType.joyAtom</a></li>
</ul></dd>
<dt><a name="joyFalse" href="#joyFalse"><span>joyFalse:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="JoyTypeType.joyFalse" href="types.html#joyFalse">JoyTypeType.joyFalse</a></li>
</ul></dd>
<dt><a name="joyInt" href="#joyInt"><span>joyInt:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="JoyTypeType.joyInt" href="types.html#joyInt">JoyTypeType.joyInt</a></li>
</ul></dd>
<dt><a name="joyList" href="#joyList"><span>joyList:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="JoyTypeType.joyList" href="types.html#joyList">JoyTypeType.joyList</a></li>
</ul></dd>
<dt><a name="JoyListType" href="#JoyListType"><span>JoyListType:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="types: JoyListType" href="types.html#JoyListType">types: JoyListType</a></li>
</ul></dd>
<dt><a name="JoyMapType" href="#JoyMapType"><span>JoyMapType:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="types: JoyMapType" href="types.html#JoyMapType">types: JoyMapType</a></li>
</ul></dd>
<dt><a name="joyParseError" href="#joyParseError"><span>joyParseError:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="JoyTypeType.joyParseError" href="types.html#joyParseError">JoyTypeType.joyParseError</a></li>
</ul></dd>
<dt><a name="JoyState" href="#JoyState"><span>JoyState:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="types: JoyState" href="types.html#JoyState">types: JoyState</a></li>
</ul></dd>
<dt><a name="joyTrue" href="#joyTrue"><span>joyTrue:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="JoyTypeType.joyTrue" href="types.html#joyTrue">JoyTypeType.joyTrue</a></li>
</ul></dd>
<dt><a name="JoyType" href="#JoyType"><span>JoyType:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="types: JoyType" href="types.html#JoyType">types: JoyType</a></li>
</ul></dd>
<dt><a name="JoyTypeType" href="#JoyTypeType"><span>JoyTypeType:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="types: JoyTypeType" href="types.html#JoyTypeType">types: JoyTypeType</a></li>
</ul></dd>
<dt><a name="j_true" href="#j_true"><span>j_true:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="types: j_true" href="types.html#j_true">types: j_true</a></li>
</ul></dd>
<dt><a name="loop" href="#loop"><span>loop:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: loop(state: var JoyState)" href="joylib.html#loop%2CJoyState">joylib: loop(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="pop" href="#pop"><span>pop:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: pop(state: var JoyState)" href="joylib.html#pop%2CJoyState">joylib: pop(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="pop_any" href="#pop_any"><span>pop_any:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="utils: pop_any(state: var JoyState): JoyType" href="utils.html#pop_any%2CJoyState">utils: pop_any(state: var JoyState): JoyType</a></li>
</ul></dd>
<dt><a name="pop_bool" href="#pop_bool"><span>pop_bool:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="utils: pop_bool(state: var JoyState): bool" href="utils.html#pop_bool%2CJoyState">utils: pop_bool(state: var JoyState): bool</a></li>
</ul></dd>
<dt><a name="pop_int" href="#pop_int"><span>pop_int:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="utils: pop_int(state: var JoyState): BigInt" href="utils.html#pop_int%2CJoyState">utils: pop_int(state: var JoyState): BigInt</a></li>
</ul></dd>
<dt><a name="pop_list" href="#pop_list"><span>pop_list:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="utils: pop_list(state: var JoyState): JoyListType" href="utils.html#pop_list%2CJoyState">utils: pop_list(state: var JoyState): JoyListType</a></li>
</ul></dd>
<dt><a name="print_expression" href="#print_expression"><span>print_expression:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="printer: print_expression(stack: JoyListType): string" href="printer.html#print_expression%2CJoyListType">printer: print_expression(stack: JoyListType): string</a></li>
</ul></dd>
<dt><a name="print_stack" href="#print_stack"><span>print_stack:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="printer: print_stack(stack: JoyListType): string" href="printer.html#print_stack%2CJoyListType">printer: print_stack(stack: JoyListType): string</a></li>
</ul></dd>
<dt><a name="push_bool" href="#push_bool"><span>push_bool:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="utils: push_bool(a: bool; state: var JoyState)" href="utils.html#push_bool%2Cbool%2CJoyState">utils: push_bool(a: bool; state: var JoyState)</a></li>
</ul></dd>
<dt><a name="push_int" href="#push_int"><span>push_int:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="utils: push_int(a: BigInt; state: var JoyState)" href="utils.html#push_int%2CBigInt%2CJoyState">utils: push_int(a: BigInt; state: var JoyState)</a></li>
</ul></dd>
<dt><a name="push_list" href="#push_list"><span>push_list:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="utils: push_list(a: JoyListType; state: var JoyState)" href="utils.html#push_list%2CJoyListType%2CJoyState">utils: push_list(a: JoyListType; state: var JoyState)</a></li>
</ul></dd>
<dt><a name="read_str" href="#read_str"><span>read_str:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="reader: read_str(str: string): JoyListType" href="reader.html#read_str%2Cstring">reader: read_str(str: string): JoyListType</a></li>
</ul></dd>
<dt><a name="rest" href="#rest"><span>rest:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: rest(state: var JoyState)" href="joylib.html#rest%2CJoyState">joylib: rest(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="stack" href="#stack"><span>stack:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: stack(state: var JoyState)" href="joylib.html#stack%2CJoyState">joylib: stack(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="swaack" href="#swaack"><span>swaack:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: swaack(state: var JoyState)" href="joylib.html#swaack%2CJoyState">joylib: swaack(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="swap" href="#swap"><span>swap:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: swap(state: var JoyState)" href="joylib.html#swap%2CJoyState">joylib: swap(state: var JoyState)</a></li>
</ul></dd>
<dt><a name="truthy" href="#truthy"><span>truthy:</span></a></dt><dd><ul class="simple">
<li><a class="reference external"
data-doc-search-tag="joylib: truthy(state: var JoyState)" href="joylib.html#truthy%2CJoyState">joylib: truthy(state: var JoyState)</a></li>
</ul></dd>
</dl>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small style="color: var(--hint);">Made with Nim. Generated: 2021-02-20 03:26:17 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,268 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>types</title>
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">types</h1>
<div class="row">
<div class="three columns">
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
&nbsp;&nbsp;&nbsp; <em>Dark Mode</em>
</div>
<div id="global-links">
<ul class="simple">
<li>
<a href="theindex.html">Index</a>
</li>
</ul>
</div>
<div id="searchInputDiv">
Search: <input type="text" id="searchInput"
onkeyup="search()" />
</div>
<div>
Group by:
<select onchange="groupBy(this.value)">
<option value="section">Section</option>
<option value="type">Type</option>
</select>
</div>
<ul class="simple simple-toc" id="toc-list">
<li>
<a class="reference reference-toplevel" href="#7" id="57">Types</a>
<ul class="simple simple-toc-section">
<li><a class="reference" href="#JoyListType"
title="JoyListType = List[JoyType]">JoyListType</a></li>
<li><a class="reference" href="#JoyMapType"
title="JoyMapType = Map[string, JoyListType]">JoyMapType</a></li>
<li><a class="reference" href="#JoyState"
title="JoyState = tuple[stack: JoyListType, expression: JoyListType]">JoyState</a></li>
<li><a class="reference" href="#JoyTypeType"
title="JoyTypeType = enum
joyAtom, joyFalse, joyInt, joyList, joyParseError, joyTrue">JoyTypeType</a></li>
<li><a class="reference" href="#JoyType"
title="JoyType = ref object
case kind*: JoyTypeType
of joyAtom:
atomVal*: string
of joyFalse, joyTrue:
nil
of joyInt:
intVal*: BigInt
of joyList:
listVal*: JoyListType
of joyParseError:
errorMessage*: string">JoyType</a></li>
</ul>
</li>
<li>
<a class="reference reference-toplevel" href="#9" id="59">Lets</a>
<ul class="simple simple-toc-section">
<li><a class="reference" href="#j_true"
title="j_true = JoyType(kind: joyTrue)">j_true</a></li>
<li><a class="reference" href="#j_false"
title="j_false = JoyType(kind: joyFalse)">j_false</a></li>
<li><a class="reference" href="#j_loop"
title="j_loop = JoyType(kind: joyAtom, atomVal: &quot;loop&quot;)">j_loop</a></li>
</ul>
</li>
</ul>
</div>
<div class="nine columns" id="content">
<div id="tocRoot"></div>
<p class="module-desc"></p>
<div class="section" id="7">
<h1><a class="toc-backref" href="#7">Types</a></h1>
<dl class="item">
<a id="JoyListType"></a>
<dt><pre><a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a> <span class="Other">=</span> <span class="Identifier">List</span><span class="Other">[</span><a href="types.html#JoyType"><span class="Identifier">JoyType</span></a><span class="Other">]</span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/types.nim#L26"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/types.nim#L26" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="JoyMapType"></a>
<dt><pre><a href="types.html#JoyMapType"><span class="Identifier">JoyMapType</span></a> <span class="Other">=</span> <span class="Identifier">Map</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">,</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a><span class="Other">]</span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/types.nim#L27"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/types.nim#L27" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="JoyState"></a>
<dt><pre><a href="types.html#JoyState"><span class="Identifier">JoyState</span></a> <span class="Other">=</span> <span class="Keyword">tuple</span><span class="Other">[</span><span class="Identifier">stack</span><span class="Other">:</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a><span class="Other">,</span> <span class="Identifier">expression</span><span class="Other">:</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a><span class="Other">]</span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/types.nim#L29"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/types.nim#L29" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="JoyTypeType"></a>
<dt><pre><a href="types.html#JoyTypeType"><span class="Identifier">JoyTypeType</span></a> <span class="Other">=</span> <span class="Keyword">enum</span>
<span class="Identifier">joyAtom</span><span class="Other">,</span> <span class="Identifier">joyFalse</span><span class="Other">,</span> <span class="Identifier">joyInt</span><span class="Other">,</span> <span class="Identifier">joyList</span><span class="Other">,</span> <span class="Identifier">joyParseError</span><span class="Other">,</span> <span class="Identifier">joyTrue</span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/types.nim#L33"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/types.nim#L33" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="JoyType"></a>
<dt><pre><a href="types.html#JoyType"><span class="Identifier">JoyType</span></a> <span class="Other">=</span> <span class="Keyword">ref</span> <span class="Keyword">object</span>
<span class="Keyword">case</span> <span class="Identifier">kind</span><span class="Operator">*</span><span class="Other">:</span> <a href="types.html#JoyTypeType"><span class="Identifier">JoyTypeType</span></a>
<span class="Keyword">of</span> <span class="Identifier">joyAtom</span><span class="Other">:</span>
<span class="Identifier">atomVal</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
<span class="Keyword">of</span> <span class="Identifier">joyFalse</span><span class="Other">,</span> <span class="Identifier">joyTrue</span><span class="Other">:</span>
<span class="Keyword">nil</span>
<span class="Keyword">of</span> <span class="Identifier">joyInt</span><span class="Other">:</span>
<span class="Identifier">intVal</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">BigInt</span>
<span class="Keyword">of</span> <span class="Identifier">joyList</span><span class="Other">:</span>
<span class="Identifier">listVal</span><span class="Operator">*</span><span class="Other">:</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a>
<span class="Keyword">of</span> <span class="Identifier">joyParseError</span><span class="Other">:</span>
<span class="Identifier">errorMessage</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
</pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/types.nim#L41"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/types.nim#L41" class="link-seesrc" target="_blank" >Edit</a>
</dd>
</dl></div>
<div class="section" id="9">
<h1><a class="toc-backref" href="#9">Lets</a></h1>
<dl class="item">
<a id="j_true"></a>
<dt><pre><a href="types.html#j_true"><span class="Identifier">j_true</span></a> <span class="Other">=</span> <a href="types.html#JoyType"><span class="Identifier">JoyType</span></a><span class="Other">(</span><span class="Identifier">kind</span><span class="Other">:</span> <span class="DecNumber">joyTrue</span><span class="Other">)</span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/types.nim#L52"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/types.nim#L52" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="j_false"></a>
<dt><pre><a href="types.html#j_false"><span class="Identifier">j_false</span></a> <span class="Other">=</span> <a href="types.html#JoyType"><span class="Identifier">JoyType</span></a><span class="Other">(</span><span class="Identifier">kind</span><span class="Other">:</span> <span class="DecNumber">joyFalse</span><span class="Other">)</span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/types.nim#L53"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/types.nim#L53" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="j_loop"></a>
<dt><pre><a href="types.html#j_loop"><span class="Identifier">j_loop</span></a> <span class="Other">=</span> <a href="types.html#JoyType"><span class="Identifier">JoyType</span></a><span class="Other">(</span><span class="Identifier">kind</span><span class="Other">:</span> <span class="DecNumber">joyAtom</span><span class="Other">,</span> <span class="Identifier">atomVal</span><span class="Other">:</span> <span class="StringLit">&quot;loop&quot;</span><span class="Other">)</span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/types.nim#L57"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/types.nim#L57" class="link-seesrc" target="_blank" >Edit</a>
</dd>
</dl></div>
</div>
</div>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small style="color: var(--hint);">Made with Nim. Generated: 2021-02-20 03:26:16 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,14 @@
JoyListType types.html#JoyListType types: JoyListType
JoyMapType types.html#JoyMapType types: JoyMapType
JoyState types.html#JoyState types: JoyState
joyAtom types.html#joyAtom JoyTypeType.joyAtom
joyFalse types.html#joyFalse JoyTypeType.joyFalse
joyInt types.html#joyInt JoyTypeType.joyInt
joyList types.html#joyList JoyTypeType.joyList
joyParseError types.html#joyParseError JoyTypeType.joyParseError
joyTrue types.html#joyTrue JoyTypeType.joyTrue
JoyTypeType types.html#JoyTypeType types: JoyTypeType
JoyType types.html#JoyType types: JoyType
j_true types.html#j_true types: j_true
j_false types.html#j_false types: j_false
j_loop types.html#j_loop types: j_loop

View File

@ -0,0 +1,251 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>utils</title>
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
function switchTheme(e) {
if (e.target.checked) {
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('theme', 'dark');
} else {
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('theme', 'light');
}
}
toggleSwitch.addEventListener('change', switchTheme, false);
const currentTheme = localStorage.getItem('theme') ? localStorage.getItem('theme') : null;
if (currentTheme) {
document.documentElement.setAttribute('data-theme', currentTheme);
if (currentTheme === 'dark') {
toggleSwitch.checked = true;
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">utils</h1>
<div class="row">
<div class="three columns">
<div class="theme-switch-wrapper">
<label class="theme-switch" for="checkbox">
<input type="checkbox" id="checkbox" />
<div class="slider round"></div>
</label>
&nbsp;&nbsp;&nbsp; <em>Dark Mode</em>
</div>
<div id="global-links">
<ul class="simple">
<li>
<a href="theindex.html">Index</a>
</li>
</ul>
</div>
<div id="searchInputDiv">
Search: <input type="text" id="searchInput"
onkeyup="search()" />
</div>
<div>
Group by:
<select onchange="groupBy(this.value)">
<option value="section">Section</option>
<option value="type">Type</option>
</select>
</div>
<ul class="simple simple-toc" id="toc-list">
<li>
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
<ul class="simple simple-toc-section">
</ul>
</li>
<li>
<a class="reference reference-toplevel" href="#12" id="62">Procs</a>
<ul class="simple simple-toc-section">
<ul class="simple nested-toc-section">pop_any
<li><a class="reference" href="#pop_any%2CJoyState"
title="pop_any(state: var JoyState): JoyType">pop_any,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">pop_bool
<li><a class="reference" href="#pop_bool%2CJoyState"
title="pop_bool(state: var JoyState): bool">pop_bool,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">push_int
<li><a class="reference" href="#push_int%2CBigInt%2CJoyState"
title="push_int(a: BigInt; state: var JoyState)">push_int,<wbr>BigInt,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">pop_int
<li><a class="reference" href="#pop_int%2CJoyState"
title="pop_int(state: var JoyState): BigInt">pop_int,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">push_list
<li><a class="reference" href="#push_list%2CJoyListType%2CJoyState"
title="push_list(a: JoyListType; state: var JoyState)">push_list,<wbr>JoyListType,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">push_bool
<li><a class="reference" href="#push_bool%2Cbool%2CJoyState"
title="push_bool(a: bool; state: var JoyState)">push_bool,<wbr>bool,<wbr>JoyState</a></li>
</ul>
<ul class="simple nested-toc-section">pop_list
<li><a class="reference" href="#pop_list%2CJoyState"
title="pop_list(state: var JoyState): JoyListType">pop_list,<wbr>JoyState</a></li>
</ul>
</ul>
</li>
</ul>
</div>
<div class="nine columns" id="content">
<div id="tocRoot"></div>
<p class="module-desc"></p>
<div class="section" id="6">
<h1><a class="toc-backref" href="#6">Imports</a></h1>
<dl class="item">
<a class="reference external" href="types.html">types</a>
</dl></div>
<div class="section" id="12">
<h1><a class="toc-backref" href="#12">Procs</a></h1>
<dl class="item">
<a id="pop_any,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#pop_any%2CJoyState"><span class="Identifier">pop_any</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span><span class="Other">:</span> <a href="types.html#JoyType"><span class="Identifier">JoyType</span></a> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/utils.nim#L25"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/utils.nim#L25" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="pop_bool,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#pop_bool%2CJoyState"><span class="Identifier">pop_bool</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">bool</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/utils.nim#L33"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/utils.nim#L33" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="pop_int,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#pop_int%2CJoyState"><span class="Identifier">pop_int</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">BigInt</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/utils.nim#L41"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/utils.nim#L41" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="pop_list,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#pop_list%2CJoyState"><span class="Identifier">pop_list</span></a><span class="Other">(</span><span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span><span class="Other">:</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/utils.nim#L49"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/utils.nim#L49" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="push_int,BigInt,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#push_int%2CBigInt%2CJoyState"><span class="Identifier">push_int</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <span class="Identifier">BigInt</span><span class="Other">;</span> <span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/utils.nim#L58"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/utils.nim#L58" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="push_list,JoyListType,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#push_list%2CJoyListType%2CJoyState"><span class="Identifier">push_list</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <a href="types.html#JoyListType"><span class="Identifier">JoyListType</span></a><span class="Other">;</span> <span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/utils.nim#L61"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/utils.nim#L61" class="link-seesrc" target="_blank" >Edit</a>
</dd>
<a id="push_bool,bool,JoyState"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#push_bool%2Cbool%2CJoyState"><span class="Identifier">push_bool</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">:</span> <span class="Identifier">bool</span><span class="Other">;</span> <span class="Identifier">state</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="types.html#JoyState"><span class="Identifier">JoyState</span></a><span class="Other">)</span> <span><span class="Other">{</span><span class="Other pragmadots">...</span><span class="Other">}</span></span><span class="pragmawrap"><span class="Other">{.</span><span class="pragma"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span><span class="Other">.}</span></span></pre></dt>
<dd>
&nbsp;&nbsp;<a
href="https://git.sr.ht/~sforman/Bliss/tree/10b5651ed242fb16c29f2c1f7340d77f65926ca4/utils.nim#L64"
class="link-seesrc" target="_blank">Source</a>
<a href="https://git.sr.ht/~sforman/Bliss/edit/devel/utils.nim#L64" class="link-seesrc" target="_blank" >Edit</a>
</dd>
</dl></div>
</div>
</div>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small style="color: var(--hint);">Made with Nim. Generated: 2021-02-20 03:26:16 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,7 @@
pop_any utils.html#pop_any,JoyState utils: pop_any(state: var JoyState): JoyType
pop_bool utils.html#pop_bool,JoyState utils: pop_bool(state: var JoyState): bool
pop_int utils.html#pop_int,JoyState utils: pop_int(state: var JoyState): BigInt
pop_list utils.html#pop_list,JoyState utils: pop_list(state: var JoyState): JoyListType
push_int utils.html#push_int,BigInt,JoyState utils: push_int(a: BigInt; state: var JoyState)
push_list utils.html#push_list,JoyListType,JoyState utils: push_list(a: JoyListType; state: var JoyState)
push_bool utils.html#push_bool,bool,JoyState utils: push_bool(a: bool; state: var JoyState)

145
implementations/nim/joy.nim Normal file
View File

@ -0,0 +1,145 @@
#[
Copyright © 2021 Simon Forman
This file is part of Bliss
Bliss is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bliss is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bliss. If not see <http://www.gnu.org/licenses/>.
]#
import rdstdin, bigints, fp, printer, reader, types, joylib, utils, defs
# Handle Ctrl-C by raising an IOError to break out of the mainloop
# without waiting for the user to press enter.
proc ctrlc() {.noconv.} =
raise newException(IOError, "Got Ctrl-C, bye!")
setControlCHook(ctrlc)
proc joy_eval(sym: string, state: var JoyState): JoyState =
case sym
# Integer Math
of "+": push_int(pop_int(state) + pop_int(state), state)
of "*": push_int(pop_int(state) * pop_int(state), state)
of "-":
let tos = pop_int(state)
push_int(pop_int(state) - tos, state)
of "/":
let tos = pop_int(state)
push_int(pop_int(state) div tos, state)
of "%":
let tos = pop_int(state)
push_int(pop_int(state) mod tos, state)
# Comparision
of "<":
let tos = pop_int(state)
let second = pop_int(state)
push_bool(second < tos, state)
of ">":
let tos = pop_int(state)
let second = pop_int(state)
push_bool(second > tos, state)
of "<=":
let tos = pop_int(state)
let second = pop_int(state)
push_bool(second <= tos, state)
of ">=":
let tos = pop_int(state)
let second = pop_int(state)
push_bool(second >= tos, state)
of "=":
let tos = pop_int(state)
let second = pop_int(state)
push_bool(second == tos, state)
of "<>":
let tos = pop_int(state)
let second = pop_int(state)
push_bool(second != tos, state)
# Boolean logic
of "and": # Have to pop, Nim `and` short-circuits.
let tos = pop_bool(state)
let second = pop_bool(state)
push_bool(tos and second, state)
of "or": # Have to pop, Nim `or` short-circuits.
let tos = pop_bool(state)
let second = pop_bool(state)
push_bool(tos or second, state)
# Built-in Functions and Combinators
of "bool": truthy(state)
of "branch": branch(state)
of "clear": clear(state)
of "concat": concat(state)
of "cons": cons(state)
of "dip": dip(state)
of "dup": dup(state)
of "first": first(state)
of "i": i(state)
of "loop": loop(state)
of "pop": pop(state)
of "rest": rest(state)
of "stack": stack(state)
of "swaack": swaack(state)
of "swap": swap(state)
else:
let def = dictionary.get(sym)
if def.isEmpty:
raise newException(ValueError, "Unknown: " & sym)
state.expression = def.get() ++ state.expression
state
proc joy(state: var JoyState) =
while not state.expression.isEmpty:
# echo print_stack(state.stack), " . ", print_expression(state.expression)
let term = state.expression.head
state.expression = state.expression.tail
case term.kind
of joyInt, joyList, joyTrue, joyFalse:
state.stack = term ^^ state.stack
of joyAtom:
state = joy_eval(term.atomVal, state)
of joyParseError:
echo term.errorMessage
break
var state0: JoyState = (stack: Nil[JoyType](), expression: Nil[JoyType]())
var state: JoyState
while true:
try:
let e = read_str(readLineFromStdin("joy? "))
state = (stack: state0.stack, expression: e)
except IOError:
break
try:
joy(state)
except:
echo getCurrentExceptionMsg()
echo print_stack(state0.stack)
continue
echo print_stack(state.stack)
state0 = state

View File

@ -0,0 +1,110 @@
#[
Copyright © 2021 Simon Forman
This file is part of Bliss
Bliss is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bliss is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bliss. If not see <http://www.gnu.org/licenses/>.
]#
import bigints, fp, types, utils
proc branch*(state: var JoyState) =
let true_body = pop_list(state)
let false_body = pop_list(state)
if pop_bool(state):
state.expression = true_body ++ state.expression
else:
state.expression = false_body ++ state.expression
proc clear*(state: var JoyState) =
state.stack = Nil[JoyType]()
proc concat*(state: var JoyState) =
let tos = pop_list(state)
let second = pop_list(state)
push_list((second ++ tos), state)
proc cons*(state: var JoyState) =
let tos = pop_list(state)
let second = pop_any(state)
push_list((second ^^ tos), state)
proc dip*(state: var JoyState) =
let body = pop_list(state)
let tos = pop_any(state)
state.expression = body ++ tos ^^ state.expression
proc dup*(state: var JoyState) =
if state.stack.isEmpty:
raise newException(ValueError, "Cannot dup empty stack.")
state.stack = state.stack.head ^^ state.stack
proc first*(state: var JoyState) =
let tos = pop_list(state)
if tos.isEmpty:
raise newException(ValueError, "Cannot take first of empty list.")
state.stack = tos.head ^^ state.stack
proc i*(state: var JoyState) =
let body = pop_list(state)
state.expression = body ++ state.expression
proc loop*(state: var JoyState) =
let tos = pop_any(state)
case tos.kind:
of joyList:
if pop_bool(state):
state.expression = tos.listVal ++ tos ^^ j_loop ^^ state.expression
else:
raise newException(ValueError, "Loop body not a list.")
proc pop*(state: var JoyState) =
if state.stack.isEmpty:
raise newException(ValueError, "Cannot pop empty stack.")
state.stack = state.stack.tail
proc rest*(state: var JoyState) =
let tos = pop_list(state)
if tos.isEmpty:
raise newException(ValueError, "Cannot take rest of empty list.")
push_list(tos.tail, state)
proc stack*(state: var JoyState) =
push_list(state.stack, state)
proc swaack*(state: var JoyState) =
let tos = pop_list(state)
let stack = state.stack
state.stack = tos
push_list(stack, state)
proc swap*(state: var JoyState) =
let tos = pop_any(state)
let second = pop_any(state)
state.stack = second ^^ tos ^^ state.stack
proc truthy*(state: var JoyState) =
let tos = pop_any(state)
case tos.kind:
of joyTrue, joyFalse:
state.stack = tos ^^ state.stack
of joyInt:
push_bool(tos.intVal != zero, state)
of joyList:
push_bool(not tos.listVal.isEmpty, state)
else:
raise newException(ValueError, "Cannot Boolify.")

View File

@ -0,0 +1,43 @@
#[
Copyright © 2021 Simon Forman
This file is part of Bliss
Bliss is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bliss is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bliss. If not see <http://www.gnu.org/licenses/>.
]#
import strutils, bigints, fp, types
proc pr_str(thing: JoyType): string
proc joystr(s: JoyListType): string =
s.map(pr_str).asSeq.join(" ")
proc pr_str(thing: JoyType): string =
case thing.kind
of joyAtom: thing.atomVal
of joyInt: thing.intVal.toString
of joyList: "[" & joystr(thing.listVal) & "]"
of joyParseError: thing.errorMessage
of joyTrue: "true"
of joyFalse: "false"
proc print_expression*(stack: JoyListType): string =
joystr(stack)
proc print_stack*(stack: JoyListType): string =
joystr(stack.reverse)

View File

@ -0,0 +1,107 @@
#[
Copyright © 2021 Simon Forman
This file is part of Bliss
Bliss is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bliss is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bliss. If not see <http://www.gnu.org/licenses/>.
]#
import pegs, bigints, fp, types
type
Token = string
Reader = tuple
tokens : seq[Token]
position: int
eof: bool
let token_pattern = peg"""
Token <- Bracket / Symbol
Bracket <- '[' / ']'
Symbol <- (!Bracket \S)+
"""
# TODO: Maybe use PEG eventParser?
proc peek(reader: Reader): Token =
reader.tokens[reader.position]
proc next(reader: var Reader): Token =
if reader.eof:
raise newException(ValueError, "EOF")
result = peek(reader)
inc reader.position
reader.eof = reader.position >= reader.tokens.len
proc read_atom(reader: var Reader): JoyType =
let tok = next(reader)
if tok =~ peg"^('+' / '-' )? \d+$":
JoyType(kind: joyInt, intVal: tok.initBigInt)
elif tok == "true": j_true
elif tok == "false": j_false
else: JoyType(kind: joyAtom, atomVal: tok)
proc read_form(reader: var Reader): JoyType
proc read_list(reader: var Reader): JoyType =
var items : seq[JoyType] = @[]
discard next(reader) # Skip the '['.
while true:
if reader.eof:
return JoyType(kind: joyParseError, errorMessage: "EOF while scanning list.")
if peek(reader) == "]":
discard next(reader) # Skip the ']'.
break
items.add(read_form(reader))
JoyType(kind: joyList, listVal: items.asList)
proc read_form(reader: var Reader): JoyType =
if reader.eof:
# Blank or empty input, not really an error.
JoyType(kind: joyParseError, errorMessage: "")
elif peek(reader) == "[":
read_list(reader)
else:
read_atom(reader)
proc tokens_to_reader(tokens: seq[Token]): Reader =
var reader: Reader = (
tokens: tokens,
position: 0,
eof: tokens.len == 0
)
reader
proc read_str*(str: string): JoyListType =
var items : seq[JoyType] = @[]
var reader = tokens_to_reader(findAll(str, token_pattern))
while not reader.eof:
items.add(read_form(reader))
items.asList

View File

@ -0,0 +1,58 @@
#[
Copyright © 2021 Simon Forman
This file is part of Bliss
Bliss is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bliss is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bliss. If not see <http://www.gnu.org/licenses/>.
]#
import bigints, fp
type
JoyListType* = List[JoyType]
JoyMapType* = Map[string, JoyListType]
JoyState* = tuple
stack: JoyListType
expression: JoyListType
JoyTypeType* = enum
joyAtom,
joyFalse,
joyInt,
joyList,
joyParseError,
joyTrue
JoyType* = ref object
case kind*: JoyTypeType
of joyAtom: atomVal*: string
of joyFalse, joyTrue: nil
of joyInt: intVal*: BigInt
of joyList: listVal*: JoyListType
of joyParseError: errorMessage*: string
# Singleton values for Boolean type.
let j_true* = JoyType(kind: joyTrue)
let j_false* = JoyType(kind: joyFalse)
# Singleton values for Symbols.
let j_loop* = JoyType(kind: joyAtom, atomVal: "loop")

View File

@ -0,0 +1,69 @@
#[
Copyright © 2021 Simon Forman
This file is part of Bliss
Bliss is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bliss is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bliss. If not see <http://www.gnu.org/licenses/>.
]#
import bigints, fp, types
proc pop_any*(state: var JoyState): JoyType =
# TODO: detect and report nils.
if state.stack.isEmpty:
raise newException(ValueError, "Not enough values on stack.")
let a = state.stack.head
state.stack = state.stack.tail
return a
proc pop_bool*(state: var JoyState): bool =
let a = pop_any(state)
case a.kind:
of joyTrue: result = true
of joyFalse: result = false
else:
raise newException(ValueError, "Not a Boolean value.")
proc pop_int*(state: var JoyState): BigInt =
let a = pop_any(state)
case a.kind:
of joyInt:
return a.intVal
else:
raise newException(ValueError, "Not an integer.")
proc pop_list*(state: var JoyState): JoyListType =
let a = pop_any(state)
case a.kind:
of joyList:
return a.listVal
else:
raise newException(ValueError, "Not a list.")
proc push_int*(a: BigInt, state: var JoyState) =
state.stack = JoyType(kind: joyInt, intVal: a) ^^ state.stack
proc push_list*(a: JoyListType, state: var JoyState) =
state.stack = JoyType(kind: joyList, listVal: a) ^^ state.stack
proc push_bool*(a: bool, state: var JoyState) =
if a:
state.stack = j_true ^^ state.stack
else:
state.stack = j_false ^^ state.stack