From d3636bb55952e9e9ea6c6b8ce6e9f9bb5d31cf79 Mon Sep 17 00:00:00 2001 From: David Johnson-Davies Date: Fri, 6 Dec 2019 10:19:21 +0000 Subject: [PATCH] Version 3.0a - 6th December 2019 --- ulisp-arm.ino | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/ulisp-arm.ino b/ulisp-arm.ino index c54a6d0..eb5901d 100644 --- a/ulisp-arm.ino +++ b/ulisp-arm.ino @@ -1,5 +1,5 @@ -/* uLisp ARM 3.0 - www.ulisp.com - David Johnson-Davies - www.technoblogy.com - 28th November 2019 +/* uLisp ARM 3.0a - www.ulisp.com + David Johnson-Davies - www.technoblogy.com - 6th December 2019 Licensed under the MIT license: https://opensource.org/licenses/MIT */ @@ -214,7 +214,7 @@ char LastChar = 0; char LastPrint = 0; // Flags -enum flag { PRINTREADABLY, RETURNFLAG, ESCAPE, EXITEDITOR, LIBRARYLOADED }; +enum flag { PRINTREADABLY, RETURNFLAG, ESCAPE, EXITEDITOR, LIBRARYLOADED, NOESC }; volatile char Flags = 0b00001; // PRINTREADABLY set by default // Forward references @@ -3824,7 +3824,7 @@ object *eval (object *form, object *env) { // Escape if (tstflag(ESCAPE)) { clrflag(ESCAPE); error2(0, PSTR("Escape!"));} #if defined (serialmonitor) - testescape(); + if (!tstflag(NOESC)) testescape(); #endif if (form == NULL) return nil; @@ -4198,8 +4198,12 @@ object *nextitem (gfun_t gfun) { else if (ch2 == 'O') base = 8; else if (ch2 == 'X') base = 16; else if (ch == '\'') return nextitem(gfun); - else if (ch == '.') return eval(read(gfun), NULL); - else error2(0, PSTR("illegal character after #")); + else if (ch == '.') { + setflag(NOESC); + object *result = eval(read(gfun), NULL); + clrflag(NOESC); + return result; + } else error2(0, PSTR("illegal character after #")); ch = gfun(); } int valid; // 0=undecided, -1=invalid, +1=valid