From 6a7fe00f7440ba17f748ab723c8909d88602b153 Mon Sep 17 00:00:00 2001 From: David Johnson-Davies Date: Thu, 28 Nov 2019 14:13:23 +0000 Subject: [PATCH] Version 3.0 - 28th November 2019 fixes #4, fixes #17 --- ulisp-arm.ino | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/ulisp-arm.ino b/ulisp-arm.ino index 8c24504..c54a6d0 100644 --- a/ulisp-arm.ino +++ b/ulisp-arm.ino @@ -1,5 +1,5 @@ -/* uLisp ARM 2.9b - www.ulisp.com - David Johnson-Davies - www.technoblogy.com - 25th September 2019 +/* uLisp ARM 3.0 - www.ulisp.com + David Johnson-Davies - www.technoblogy.com - 28th November 2019 Licensed under the MIT license: https://opensource.org/licenses/MIT */ @@ -215,7 +215,7 @@ char LastPrint = 0; // Flags enum flag { PRINTREADABLY, RETURNFLAG, ESCAPE, EXITEDITOR, LIBRARYLOADED }; -volatile char Flags; +volatile char Flags = 0b00001; // PRINTREADABLY set by default // Forward references object *tee; @@ -2981,8 +2981,8 @@ object *fn_locals (object *args, object *env) { object *fn_makunbound (object *args, object *env) { (void) env; object *key = first(args); - deletesymbol(key->name); - return (delassoc(key, &GlobalEnv) != NULL) ? tee : nil; + delassoc(key, &GlobalEnv); + return key; } object *fn_break (object *args, object *env) { @@ -4191,13 +4191,15 @@ object *nextitem (gfun_t gfun) { if (ch == ' ') return (object *)DOT; isfloat = true; } else if (ch == '#') { - ch = gfun() & ~0x20; + ch = gfun(); + char ch2 = ch & ~0x20; // force to upper case if (ch == '\\') base = 0; // character - else if (ch == 'B') base = 2; - else if (ch == 'O') base = 8; - else if (ch == 'X') base = 16; - else if (ch == 0x07) return nextitem(gfun); - else error2(0, PSTR("Illegal character after #")); + else if (ch2 == 'B') base = 2; + 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 #")); ch = gfun(); } int valid; // 0=undecided, -1=invalid, +1=valid @@ -4306,7 +4308,7 @@ void setup () { initworkspace(); initenv(); initsleep(); - pfstring(PSTR("uLisp 2.9 "), pserial); pln(pserial); + pfstring(PSTR("uLisp 3.0 "), pserial); pln(pserial); } // Read/Evaluate/Print loop