author | Alan Dipert
<alan@dipert.org> 2019-08-28 12:56:29 UTC |
committer | Alan Dipert
<alan@dipert.org> 2019-08-28 12:56:29 UTC |
parent | 8c41c77f2ed40098e72b21303d1771d0dda4c5cc |
jacl-tests.js | +4 | -0 |
jacl.js | +17 | -16 |
diff --git a/jacl-tests.js b/jacl-tests.js index 56bee98..b7dffe1 100644 --- a/jacl-tests.js +++ b/jacl-tests.js @@ -56,6 +56,10 @@ QUnit.test('Symbols', async is => { is.strictEqual(sym.name, 'SOME-LIL-KW', 'kw name'); is.strictEqual(sym.packageName, 'KEYWORD', 'kw package'); + //sym = await read1('#:foop '); + //is.strictEqual(sym.name, 'FOOP', 'uninterned sym has a name'); + //is.strictEqual(sym.packageName, null, 'uninterned packageName is null'); + }); QUnit.test('Conses', async is => { diff --git a/jacl.js b/jacl.js index 6dc1a78..3ea7850 100644 --- a/jacl.js +++ b/jacl.js @@ -237,9 +237,22 @@ class Token extends String { } } +const safeRead = async rdr => { + var x; + try { + x = await rdr.read(); + } catch (e) { + if (e instanceof DotError || e instanceof CloseParenError) { + return e; + } + throw e; + } + return x; +} + const readList = async stream => { const rdr = new Reader(stream), - x = await rdr.safeRead(); + x = await safeRead(rdr); if (x instanceof DotError) throw new Error(`Nothing before . in list`); @@ -248,14 +261,14 @@ const readList = async stream => { return new Values(null); const car = x, - after = await rdr.safeRead(); + after = await safeRead(rdr); if (after instanceof DotError) { - const y = await rdr.safeRead(); + const y = await safeRead(rdr); if (y instanceof Error) throw new Error(`Nothing after . in list`); const cons = new Cons(car, y); - if ((await rdr.safeRead()) instanceof CloseParenError) { + if ((await safeRead(rdr)) instanceof CloseParenError) { return new Values(cons); } else { throw new Error(`More than one object after . in list`); @@ -362,18 +375,6 @@ class Reader { static of(stream) { return new Reader(stream); } - async safeRead() { - var x; - try { - x = await this.read(); - } catch (e) { - if (e instanceof DotError || e instanceof CloseParenError) { - return e; - } - throw e; - } - return x; - } async read() { let macroFun; for await(const x of this.stream) {