{"_id":"@dhconnelly/parents","_rev":"6-b2827b146b3337f485afd16b854f3434","name":"@dhconnelly/parents","dist-tags":{"latest":"2.0.1"},"versions":{"1.0.0":{"name":"@dhconnelly/parents","version":"1.0.0","description":"a small interpreter for a lisp-like language","type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"node --loader ts-node/esm ./src/cli.ts","build":"rm -r dist && npx tsc && chmod +x dist/cli.js"},"bin":{"parents":"dist/cli.js"},"repository":{"type":"git","url":"git+https://github.com/dhconnelly/parents.git"},"keywords":["lisp","typescript","interpreter"],"author":{"name":"Daniel Connelly","email":"dhconnelly@gmail.com","url":"https://dhconnelly.com"},"license":"MIT","bugs":{"url":"https://github.com/dhconnelly/parents/issues"},"homepage":"https://github.com/dhconnelly/parents#readme","devDependencies":{"@types/node":"^14.14.41","ts-node":"^9.1.1","typescript":"^4.2.4"},"gitHead":"a4ed121708625c65a3d65f977a87d95c90372554","_id":"@dhconnelly/parents@1.0.0","_nodeVersion":"14.16.0","_npmVersion":"7.8.0","dist":{"integrity":"sha512-eBfsIZA257Vh7Dx84cVzmXh8U/VwopOdum1sz13ZvxQ+ED/ElevcJUyHZ8tATK/D4olCUXCxtW/WTCijBYobLg==","shasum":"254e1b5e29a5d299316ed12b32d24f086a84d269","tarball":"https://registry.npmjs.org/@dhconnelly/parents/-/parents-1.0.0.tgz","fileCount":25,"unpackedSize":40074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghwQ8CRA9TVsSAnZWagAAb8UP/RonjpmWgfhoNP8jmi29\nNiZnQPiKsxV60KTdi9ufujgInSionMvYP6X+7qF87DKgNng6f294eE+Fqz/g\n6E43N5I13QUXJ1gOSYyA50WxqQ7n5mt4dvHtddow/Kd1bttrCxgqQGD5hUhZ\nPgcohPjLpzFIBiqsWEWnVhy2AlKid6ol1+1bzkiY4W0yYhPWSx2DKOWhRxyM\nhE6d2QJ3CbhUrDwhF8kvQH2E3iSbaIUGs+Eo5tmf01JbNQm5YfqJG9AIJQcF\n6GLCK/YuSgwlsN5M+J8PWNjXAI1Xo4RzHZBezcjetFlI7O3PQRfJDSA25dbX\nO9DAQGcdP8I7yUfXSe1ZR0KxafZl050FQ9y0NOH7EmBUEccGGtzsz1BIiIUJ\nGemZJ/JsEEIKzz8P8iuQCyFwjylLl+irokEF30vDFXkM86mYWtzFLGgF3EDQ\nfbH49Kr6U/SXczcA0rI7k1fRJ15DW4JONyG+ZIL3rQIBufCe1RS0Rmbw4vg2\nFqdq7u1yClX75luqRjr6OoulHI7KalhVa+QrtH5+nOj+DQAsYcqVvFcvrcZ/\nEBL5k/kptCcwYHtFFRdFqNOwEPn/4DH4wh7sqE1YAiPpHjUExLwpQ66shpYr\nfmFayVllnR0Lbb/rIopYOQQr10grUlJ1xHu0DFir8Yndd+i5sj7RTM1Cc4ou\nLMZr\r\n=0XCw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBfASXOgNicCr3NTilnC0P+AY8Xd4v+ZI9RdxpudS/aFAiAwfAvgDERPR9y5nOSgJOFiYPno9E9L8BI0UEKkfSDTfg=="}]},"_npmUser":{"name":"dhconnelly","email":"dhconnelly@gmail.com"},"directories":{},"maintainers":[{"name":"dhconnelly","email":"dhconnelly@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/parents_1.0.0_1619461179574_0.8451336694358582"},"_hasShrinkwrap":false},"1.1.0":{"name":"@dhconnelly/parents","version":"1.1.0","description":"a small interpreter for a lisp-like language","type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"node --loader ts-node/esm ./src/cli.ts","build":"rm -r dist && npx tsc && chmod +x dist/cli.js"},"bin":{"parents":"dist/cli.js"},"repository":{"type":"git","url":"git+https://github.com/dhconnelly/parents.git"},"keywords":["lisp","typescript","interpreter"],"author":{"name":"Daniel Connelly","email":"dhconnelly@gmail.com","url":"https://dhconnelly.com"},"license":"MIT","bugs":{"url":"https://github.com/dhconnelly/parents/issues"},"homepage":"https://github.com/dhconnelly/parents#readme","devDependencies":{"@types/node":"^14.14.41","ts-node":"^9.1.1","typescript":"^4.2.4"},"gitHead":"6fb3bcb78d98d28847ea31961d1b9ab2080afbf6","_id":"@dhconnelly/parents@1.1.0","_nodeVersion":"14.16.0","_npmVersion":"7.8.0","dist":{"integrity":"sha512-hmqdOKtkZZiF2SA2J4hukTYLkzkXiPMVxWsFDyU3g88XEGR2Tvi/3UBfhCB/I5frONkg8kOlGlgvKNVfulFIsg==","shasum":"2612916de12afa580c1cd3b14d03a72ea1798e75","tarball":"https://registry.npmjs.org/@dhconnelly/parents/-/parents-1.1.0.tgz","fileCount":30,"unpackedSize":44326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiBbFCRA9TVsSAnZWagAABKkQAJEt/vakzvEDRbnTUF8e\nHXMea0oNYKfJ+LjY0SFgwJhYnZu454oKS5gx4z8Vn/R5YCnctENCg05S5O31\nHt5QsNby/ztkmVk0Rt2hFqYKsVZOEYDLtjI4tPqHsal4pBnY97eRoySutsnp\n0R823+mEM9zXT5Ypu+Rt/K46tWjxcGS56WDKbjpDCU61Jw2Y0c+BjkswjVil\nlzPFlr4Wz7P632AgzE93/QyUfEuHhM7yC9TViZWtgUgysxPR3MicZb25sPTV\nhqY1ABMOIFleTt2FmhyelWP51OAem++9ezCGDqpJL5KUK4tdbJjhuiVaOJFC\n9s8b8NChYMciAMy8EcCXX6DIz89KkOQS/aJ3ZEzjTMF1kGJkbj8hYWgzh4aX\nzWiC6xMgiEdS8gs0HhMqbfWLHW4BQMU5fKgxB1dpZDYy3wIjiW7LVHZOYU00\nRv+f9PWipWVXfs4w0ojX5UzfyLKoTy+AEXgaP8NMrIfy2Ds/WlNmwxBupUxH\nR//GvKHz+lmPaIQhS3/YHw61GLUjonPzzUz89mak0bIZhoBW0YUnK/VYH3hb\n7k4tjiG/PYF+AfgDaS0TLjGGm/1X2sTUBaJsf1kI6cBeoqpqw4PQFxDbjoG/\n+mPUDBYw9wBUQKOcPRoCiIO1Ued1VATDt6HRSK5lSwx3JSHa4ZWIApKaHbdj\nWsIj\r\n=8S2C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB4OA0SPucaTId2IFyAboNGMOPi0XXsIK+iCKZN9jHxxAiBZ2Qkexa+5JF1CG6Zkt2Cglzp1aO+eCjA11ceXLF+yEQ=="}]},"_npmUser":{"name":"dhconnelly","email":"dhconnelly@gmail.com"},"directories":{},"maintainers":[{"name":"dhconnelly","email":"dhconnelly@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/parents_1.1.0_1619531461224_0.8204578980960262"},"_hasShrinkwrap":false},"1.1.1":{"name":"@dhconnelly/parents","version":"1.1.1","description":"a small interpreter for a lisp-like language","type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"node --loader ts-node/esm ./src/cli.ts","build":"rm -r dist && npx tsc && chmod +x dist/cli.js"},"bin":{"parents":"dist/cli.js"},"repository":{"type":"git","url":"git+https://github.com/dhconnelly/parents.git"},"keywords":["lisp","typescript","interpreter"],"author":{"name":"Daniel Connelly","email":"dhconnelly@gmail.com","url":"https://dhconnelly.com"},"license":"MIT","bugs":{"url":"https://github.com/dhconnelly/parents/issues"},"homepage":"https://github.com/dhconnelly/parents#readme","devDependencies":{"@types/node":"^14.14.41","ts-node":"^9.1.1","typescript":"^4.2.4"},"gitHead":"f6b9262744f80c500748542f536e0380d407a9f2","_id":"@dhconnelly/parents@1.1.1","_nodeVersion":"14.16.0","_npmVersion":"7.8.0","dist":{"integrity":"sha512-GrYqtFyatnoL0DNofPdmV4XmP1a7H9xj/AhsyR5Mjf9DI0agMlZBsgAxm51r4oqNGtJYcwwcEzKJ1fwS0s4k5w==","shasum":"ac0c3c475940783e8f66cf6b67cb1f1041a14954","tarball":"https://registry.npmjs.org/@dhconnelly/parents/-/parents-1.1.1.tgz","fileCount":30,"unpackedSize":47512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiWn3CRA9TVsSAnZWagAAHScP/0ox992amSfJvU7959/9\nQy1o2BZS2irkC7OokNbuW/QFrOSVxntARnWpXS5frpyHRqu62q55IrKQshsS\nusiwU/zFtItMnLRDOJV4rAfrf18mB+nnHhmnDgKA8zgkLaAtD+jUlzzRsDUs\nmmawkbDPUEcReUkpJkuVA307stCxCk9+OdBxVLZZFgH6XuDE+Tb/wqMB/kL5\nLaht+QmpO5wF57FX14IyCuyayZH6MdB2o6gPHf7pDH/Xtnmxr2X+pES5c16s\n8l32QzKq4cJdZYux504QpskOA+pLX+DL4NdfckTSt/yC2L044DFZ/ipUvuk/\nrMAyhDaJAiTWN5GqxEGugwc1b0wYgE97XV1o7FCYIvZJkak1w5dz9tDEB9wq\nCaRVou0zbzKiM4Fr5a6WyiN9YWkEca/gmU9GIMBdBxl9+iIJto1BixZQJoWT\n89YVBEZyPCkivRYrj4JfVozjiV8jYasTc/CbEoVckuueYYfHn38EhmrCoaRI\nyD2W/5/L263pMFxOxBUc2ftKg9QnS6AakKDY6DwEMDrYl5BwnCU/cGqM8WdX\nP87G6jkY/U9EfegXmdAxC77cRgJAFSUKpuQHNXHpwlbR01rwn4LWH3psGhU+\nBPMQSX8fAjhbX83ORVqXcJ2seidZqb87X4H7zPOqkPF9NGWXc9srtyd9kGaj\nBaXn\r\n=OODH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDlpKT4ss9AvacYz4HzmaeC5Ux9GWx/sBMB1S0+kPbaeAiBaAQCoVV3+jZKdZGcIfEhad8rLDgt59J07Fom3kMX8cg=="}]},"_npmUser":{"name":"dhconnelly","email":"dhconnelly@gmail.com"},"directories":{},"maintainers":[{"name":"dhconnelly","email":"dhconnelly@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/parents_1.1.1_1619618295413_0.026492478836788402"},"_hasShrinkwrap":false},"1.2.0":{"name":"@dhconnelly/parents","version":"1.2.0","description":"a small interpreter for a lisp-like language","type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1","dev":"node --loader ts-node/esm ./src/cli.ts","build":"rm -r dist && npx tsc && chmod +x dist/cli.js"},"bin":{"parents":"dist/cli.js"},"repository":{"type":"git","url":"git+https://github.com/dhconnelly/parents.git"},"keywords":["lisp","typescript","interpreter"],"author":{"name":"Daniel Connelly","email":"dhconnelly@gmail.com","url":"https://dhconnelly.com"},"license":"MIT","bugs":{"url":"https://github.com/dhconnelly/parents/issues"},"homepage":"https://github.com/dhconnelly/parents#readme","devDependencies":{"@types/node":"^14.14.41","ts-node":"^9.1.1","typescript":"^4.2.4"},"gitHead":"bd61047814d617f37dcd7322fe8f0aa96cda896e","_id":"@dhconnelly/parents@1.2.0","_nodeVersion":"14.16.0","_npmVersion":"7.8.0","dist":{"integrity":"sha512-RySsv4K/ZFyN1w7girUnqHIYUJ6ynZHHIEGKKoZpWN2ApCca4IFLJPq9Z6qHm/3Rl8m3PXTu12gVA6TZdF7hIQ==","shasum":"caa7f51d9e6fcba6e1554a2c74cb31d3570a6622","tarball":"https://registry.npmjs.org/@dhconnelly/parents/-/parents-1.2.0.tgz","fileCount":31,"unpackedSize":52376,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglJfYCRA9TVsSAnZWagAAOGIP/15UVLqpCyz3JRls9cgH\nWXD3Oc9XbmsdtyRAY8rlTYpQHLMPonoJkb1OvFjqTT2DG3PnX59oKNf8TD7C\nb+N6G4BCpw1PVFHIp17WB5ev/vCd3smhtFiKHXapoEqlEtYe4gy5bkrVJsEv\n0O60Z9dEfn3tm5O8p7cxIrC5Wh5G7wydYopCCe2obvp456L8z7aseV7zHk6u\ndS11jMfW9QE6EHHu0vh7m0kHb8kLPb6tvXlb8ANcCTqDoRFNA8jwjdmQ2eXI\nUrbfASvFiULHvfpd7v10Mofp7xJ5GV218oUQRcuWg2qA6Mas5016Oj4R1JHF\nENKKqaUEGLVENi8hqeojHWsXEpNOHepMr+sHIA6CvumoVldrT75BLpACSLB2\nDCrRH+ZVgpYX+1vymF/IehZpA/dvCo0x/P+PVZ38wzlLiwpFNKTsBpX1oy+I\nw1EIhwx0R+C47tukvSYzgT1dNLbSifL1oSTvyke3NGMvKl3PcX0Qd/25YVht\n3G2On+LucGZPmlbiSjSbmBc6X2F6DPoCwaACFp6ybI21CoDMfpBnJvhjj/gN\nELnTRsmRTb3cL6RwcwFSYkNekaRkORJepkw7VZxYvEoh10/Mzg415e4l4aVi\nxowJFN7fKsla7FwTxZhdTM7khI5P5agbWwfe/P/POn8e7bNiHeQ2gEO9xLZz\njySk\r\n=/b6d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHWvb0GLMG+pI4CzxHczTR02OH9Lsla55MrWem78m9twIhANPf7ryBkZu1mFSAmv+S3iez/de2Bucp3kxAFWDO7TTp"}]},"_npmUser":{"name":"dhconnelly","email":"dhconnelly@gmail.com"},"directories":{},"maintainers":[{"name":"dhconnelly","email":"dhconnelly@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/parents_1.2.0_1620350935609_0.413316575025682"},"_hasShrinkwrap":false},"2.0.0":{"name":"@dhconnelly/parents","version":"2.0.0","description":"a bytecode vm and compiler for a minimal lisp","scripts":{"test":"mocha -r ts-node/register test/test_*.ts","dev":"node --loader ts-node/esm ./src/bin/cli.ts","build":"rm -rf dist && npx tsc && chmod +x dist/src/bin/cli.js","clean":"rm -rf dist"},"bin":{"parents":"dist/src/bin/cli.js"},"repository":{"type":"git","url":"git+https://github.com/dhconnelly/parents.git"},"keywords":["lisp","typescript","interpreter"],"author":{"name":"Daniel Connelly","email":"dhconnelly@gmail.com","url":"https://dhconnelly.com"},"license":"MIT","bugs":{"url":"https://github.com/dhconnelly/parents/issues"},"homepage":"https://github.com/dhconnelly/parents#readme","devDependencies":{"@types/mocha":"^8.2.2","@types/node":"^14.14.41","mocha":"^8.4.0","ts-node":"^9.1.1","typescript":"^4.2.4"},"gitHead":"06acf4f16d903067dfbceef2c764a08d01d5f2d1","_id":"@dhconnelly/parents@2.0.0","_nodeVersion":"14.16.0","_npmVersion":"7.8.0","dist":{"integrity":"sha512-DeRaHdGW4Beg1mQzax5/j2b4mukF9lZAns3cgqQKfE9+jjWd8GzxeW3tL7kW8m37eOIghC1JDaMyG380t6yRDA==","shasum":"13135149d466cf919dfabab9af06d36d4b81f192","tarball":"https://registry.npmjs.org/@dhconnelly/parents/-/parents-2.0.0.tgz","fileCount":64,"unpackedSize":163428,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpcvsCRA9TVsSAnZWagAAeUsP/1c6kTjKQSMfbmmgtgqw\na2/Or/9eU2NrrUdYC7fDKGR3xlSerIevn+paebseHlSOsXuic0SvFIwBvhnl\nA8saYWBkHfgB5MerVSpyvpphuSqbdk1lVEu/Lc5ehqvxfKMpnPMQk5mtE3fg\nEVvNSAlajafQsfLhulMj17cIMCR0kfggsTtBIsjcF5xeg+B/kd0wcIyO+Rq/\nIvbeGJ/6AzKZomo5rgB0D7LacO0rIJqf3w38vkmO9MZkisIOvVjVzrac3ktF\nER7BzgUn2MMr1hXdqZCA0fCiPy21Wij/WYrNaWp/Rzo371n8Gk/Q0AVD8jbE\npG2jQMSrv1NGTkX8U5y8uwVXSGmiuukX7C6AI7a9th+K3kDBXK4nMSPyTthd\n25iN8UdEiIpbbThMmTbZ/5x0YeTuwmGPXyWKWo54/ylFmcvx6g1p/J0ElAk1\nLpE8Fkhpv2yx8eDHF9pL1nActwaTEusgFhWBvRfYcE5RMdwoJnLF076XlnH7\n8U2kJhYvT317tHaonIrImRgiaNvBltfQJYhoyJ2eM7H0gnKGWlKp279Pqpz+\nfm4EZmSZ9RnOS5R3yrUIL58it4XiE5M8C7ROkGJeYD/7CGHpDEEvMd2RvuIH\nJrK5+QzWmIMEmS5JQdM47IkLCRzf16BtWgO/KEl45n+sqcU0vANVL5EI8MyG\npH1w\r\n=MMVt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFUsosiSYzwlvX9eIUFM32SkhOK5xtvSCLtm08EAwt78AiB2A4sOPphBgKGiI6qdamDHv1jpL8IheTnqDP9qUM6APg=="}]},"_npmUser":{"name":"dhconnelly","email":"dhconnelly@gmail.com"},"directories":{},"maintainers":[{"name":"dhconnelly","email":"dhconnelly@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/parents_2.0.0_1621478380354_0.10436541449399428"},"_hasShrinkwrap":false},"2.0.1":{"name":"@dhconnelly/parents","version":"2.0.1","description":"a bytecode vm and compiler for a minimal lisp","scripts":{"test":"npx mocha -r ts-node/register test/test_*.ts","build":"npx tsc","prepare":"npm run build"},"bin":{"parents":"dist/src/bin/cli.js"},"repository":{"type":"git","url":"git+https://github.com/dhconnelly/parents.git"},"keywords":["lisp","typescript","interpreter","compiler","virtual machine","scheme"],"author":{"name":"Daniel Connelly","email":"dhconnelly@gmail.com","url":"https://dhconnelly.com"},"license":"MIT","bugs":{"url":"https://github.com/dhconnelly/parents/issues"},"homepage":"https://github.com/dhconnelly/parents#readme","devDependencies":{"@types/mocha":"^8.2.2","@types/node":"^14.14.41","mocha":"^8.4.0","ts-node":"^9.1.1","typescript":"^4.2.4"},"gitHead":"2e50a87e0bcbab227daa7aa41dceed2f53d36525","_id":"@dhconnelly/parents@2.0.1","_nodeVersion":"14.16.0","_npmVersion":"7.8.0","dist":{"integrity":"sha512-M47WzHQcQNMyxyXDZM1Nl+ubxjIWPv8nXQMWFH4pFoc7PQuaGwYHJKmjKxP5CHz913/5MuRNB70NHla68E2eyQ==","shasum":"fba833e74e2cad3efb64007712b25dd83d49c5fd","tarball":"https://registry.npmjs.org/@dhconnelly/parents/-/parents-2.0.1.tgz","fileCount":64,"unpackedSize":163857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpu3RCRA9TVsSAnZWagAA/FcP/R+dEz0JUbsIsKycSzSP\nNvNftyIAB/BqikfAPcP8b8ScElYDle+yFesSmnsF/z8eNjaquZzVj/2i5Lmi\nojPpGh6XyHNGHq0ccmztMWlUZhNkODUWr8A1ZHoWevEJqlmRV6mNQZy/wSvk\nnMkxq8bXwrZiOhPcMToQGJha4sglUlDBW2LHdihuwf7BX8aSz/hbTY3rnxHC\no1Fk0r9dv23H7bHmbGdEyDtgMW+9wa+6UPqHc34YiSt84y0hhZeXVf1l7/PY\nyFUApXU+PM5ZU5b7/jpJ1yknSTeMwIT6j75p+zs6pDDZ11cxa0KmaoemGwl4\nLlQNWBpF2YYKi7MZxy6UrI4NzJUihP6opVR5v54qZWdcd1JRgKoJQKC5RP/E\nbQuPx+EjzsM9LZPifjTeZZfLNcmN/vzEuPmI0i1F1S0c31T+vbt/oT12o4n7\naM6rHPwKPxMtQe8/p09iFlZfPWgWzR+Eq1MhAYdj3fR2o5j31eMgtm13heYB\nbzbI+MHXtl+wrphazZvjemFIT5mf/Jxku2Do15zKjmQFTywxwls3G5MGTVwl\ntgHKLRsqjerrdAT/dZB2iGu3V3u4VprW6EP3oAG6exFjaGme7qHgas/IEWbc\nTQNsNS1+F8YgOikUeErnneLpPxDAhQIA7YQDdoojNpHmsRxpOg3wcEr0cOxk\nIjsa\r\n=ssdH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpduqsPA7yrPtV+kYtGqM31yaGKzYcl560h2acsNBbHgIhANXy2eITe4NcBFClP1hHmjm1/ix7tGxCYQ3+U7IDT8iw"}]},"_npmUser":{"name":"dhconnelly","email":"dhconnelly@gmail.com"},"directories":{},"maintainers":[{"name":"dhconnelly","email":"dhconnelly@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/parents_2.0.1_1621552592533_0.4189418400140299"},"_hasShrinkwrap":false}},"time":{"created":"2021-04-26T18:19:39.515Z","1.0.0":"2021-04-26T18:19:39.978Z","modified":"2022-04-05T04:19:20.857Z","1.1.0":"2021-04-27T13:51:01.372Z","1.1.1":"2021-04-28T13:58:15.551Z","1.2.0":"2021-05-07T01:28:55.739Z","2.0.0":"2021-05-20T02:39:40.502Z","2.0.1":"2021-05-20T23:16:32.707Z"},"maintainers":[{"name":"dhconnelly","email":"dhconnelly@gmail.com"}],"description":"a bytecode vm and compiler for a minimal lisp","homepage":"https://github.com/dhconnelly/parents#readme","keywords":["lisp","typescript","interpreter","compiler","virtual machine","scheme"],"repository":{"type":"git","url":"git+https://github.com/dhconnelly/parents.git"},"author":{"name":"Daniel Connelly","email":"dhconnelly@gmail.com","url":"https://dhconnelly.com"},"bugs":{"url":"https://github.com/dhconnelly/parents/issues"},"license":"MIT","readme":"# parents\n\na bytecode vm and compiler for a minimal lisp\n\n## Why\n\nto practice typescript: \"paren\" + \"ts\" === \"parents\"\n\n## Features\n\nThe minimal set needed for implementing cons lists (see examples/list.lisp) and\nthe Church encoding (see examples/church.lisp) in user space using lambda\ncaclulus. Plus console output and assertions.\n\n-   simple types: integers, booleans (#t and #f), and nil\n-   first-class functions with lexical scope and closures\n-   special forms: if, lambda, define, seq, let\n-   built-ins: +, -, \\*, <, =, nil, isnil, display, assert\n\nFor example, here's fibonacci:\n\n    (define (fib n)\n        (if (< n 2)\n            n\n            (+ (rec (- n 1)) (rec (- n 2)))))\n\nSee the examples/ directory for more.\n\n## Status\n\nEssentially complete. All the example programs compile and run correctly. There\nare closures and recursion and cons lists in user space and garbage collection.\n\nPossible future work:\n\n-   more unit tests\n-   string support\n-   add built-ins for list operations\n-   better command-line interface\n-   additional refactoring as I learn more TypeScript\n\n## Usage\n\nTo install globally:\n\n    npm install -g @dhconnelly/parents\n\nFor development, you can check out the code, build, run the tests, and link your\nlocal build:\n\n    git clone git@github.com:dhconnelly/parents.git\n    cd parents\n    npm install\n    npm test\n    npm link\n\nOr, to install nothing, you can use `npx @dhconnelly/parents` in place of\nthe `parents` command.\n\nTo compile some programs:\n\n    parents compile [file ...]\n\nThis will write `file.bytecode` in the same directory as each `file` passed as\nan argument. To run the generated bytecode:\n\n    parents vm [bytecode_file ...]\n\nFor example, to build and run all the examples from the examples/ directory:\n\n    parents compile examples/*.lisp\n    parents vm examples/*.lisp.bytecode\n\nTo disassemble the bytecode and see the VM instructions:\n\n    parents disasm [bytecode_file ...]\n\nThere's also a tree-walking interpreter, in case you don't want to compile:\n\n    parents run [file ...]\n\n## Implementation Details\n\nThere are two implementations:\n\n-   a tree-walking interpreter that relies on the JavaScript VM to handle\n    garbage collection (in `src/interpreter`)\n\n-   a compiler (in `src/compiler`) that targets a stack-based virtual machine\n    (see `src/vm`) which uses a naive mark-and-sweep garbage collection scheme\n    (in `src/vm/heap.ts`).\n\nBoth implementations use a hand-written recursive-descent parser (see\n`src/lexer.ts` and `src/parser.ts`).\n\nBoth `seq` and `let` are implemented by desugaring to immediately-invoked\nlambda expressions. For simplicity, cons lists are not provided and can be\nimplemented in user space using lambdas; see `examples/list.lisp` for an\nexample.\n\n## Virtual Machine\n\nContains a stack, heap, and globals table. For simplicity, garbage collection\n(mark and sweep, with the stack and globals forming the root set) is potentially\ntriggered only at instruction step time.\n\nThe supported instruction set is as follows:\n\n-   `Push <type> <value>`: Push a literal value onto the stack\n-   `Pop`: Pop the topmost value off the stack and discard it\n-   `Get <index>`: Get a value from the stack and push it on top\n-   `DefGlobal`: Pop the topmost stack element and add it as a global\n-   `GetGlobal <index>`: Get the specified global and push it on the stack\n-   `Jmp <pc>`: Jump to the given byte offset in the program and continue\n-   `JmpIf <pc>`: Pop the topmost stack value and jump if it is `true`\n\n-   `MakeLambda <pc> <arity> <captures>`: Allocate a lambda object representing\n    a function that begins at byte offset `<pc>` with `<arity>` parameters onto\n    the heap, with `<captures>` values popped off the stack and copied into the\n    lambda. Pushes a pointer to the lambda on top of the stack.\n\n-   `Call <arity>`: Pops a lambda pointer (as pushed by `MakeLambda`) from the\n    stack and invokes it with `<arity>` values. Assumes the argument values are\n    on the stack just below the lambda pointer. Pushes a pointer to the invoked\n    lambda (to support recursive calls) and all the captures, then jumps to the\n    byte offset `<pc>` in the lambda. The stack will therefore contain, once\n    execution continues, [...args, fn_ptr, ...captures] and the top of the stack\n    will point just after the captures. Saves the return address (one instr\n    past the offset at which `Call` was executed).\n\n-   `Return`: Pops and saves the top of the stack (the return value), pops all\n    of the captures and recursive lambda pointer and arguments from the stack,\n    pushes the return value back on top, updates the `<pc>` to the return\n    address saved by `Call`, and continues execution.\n\nFor more details, see `src/instr.ts` (for the instruction definitions and\nserialization/deserialization to/from bytecode) and `src/vm.ts` for more\nimplementation details. Runtime types and values support is found in\n`src/values.ts` (for types common to both the vm and the interpreter) and\n`src/vm/values.ts`.\n\n## Questions\n\n### Is this a good idea?\n\nNo. In particular, since the VM and garbage collector are implemented in\nTypeScript and run on Node.js, the V8 garbage collector can interrupt our own\ngarbage collector to collect garbage. Also, since this is essentially\nJavaScript, a stray reference to a heap object can prevent cleanup.\n\n### Why is the code style all over the place?\n\nThis is my first TypeScript project. I was playing with the features and\npatterns. Exceptions and monadic error handling are intermingled, and in some\nplaces types vs. interfaces vs. classes are not used consistently or coherently.\nSometimes there's more imperative looping, sometimes more forEach/map/etc. Not\nquite sure how to consistently structure discriminated unions. And so on.\n\n## Who\n\nDaniel Connelly <dhconnelly@gmail.com> (https://dhconnelly.com)\n\n## License\n\nMIT License. Copyright (c) 2021 Daniel Connelly\n","readmeFilename":"README.md"}