Version 3.0 - 28th November 2019

fixes #4, fixes #17
This commit is contained in:
David Johnson-Davies 2019-11-28 14:13:23 +00:00 committed by GitHub
parent acfd01a419
commit 6a7fe00f74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 12 deletions

View File

@ -1,5 +1,5 @@
/* uLisp ARM 2.9b - www.ulisp.com /* uLisp ARM 3.0 - www.ulisp.com
David Johnson-Davies - www.technoblogy.com - 25th September 2019 David Johnson-Davies - www.technoblogy.com - 28th November 2019
Licensed under the MIT license: https://opensource.org/licenses/MIT Licensed under the MIT license: https://opensource.org/licenses/MIT
*/ */
@ -215,7 +215,7 @@ char LastPrint = 0;
// Flags // Flags
enum flag { PRINTREADABLY, RETURNFLAG, ESCAPE, EXITEDITOR, LIBRARYLOADED }; enum flag { PRINTREADABLY, RETURNFLAG, ESCAPE, EXITEDITOR, LIBRARYLOADED };
volatile char Flags; volatile char Flags = 0b00001; // PRINTREADABLY set by default
// Forward references // Forward references
object *tee; object *tee;
@ -2981,8 +2981,8 @@ object *fn_locals (object *args, object *env) {
object *fn_makunbound (object *args, object *env) { object *fn_makunbound (object *args, object *env) {
(void) env; (void) env;
object *key = first(args); object *key = first(args);
deletesymbol(key->name); delassoc(key, &GlobalEnv);
return (delassoc(key, &GlobalEnv) != NULL) ? tee : nil; return key;
} }
object *fn_break (object *args, object *env) { object *fn_break (object *args, object *env) {
@ -4191,13 +4191,15 @@ object *nextitem (gfun_t gfun) {
if (ch == ' ') return (object *)DOT; if (ch == ' ') return (object *)DOT;
isfloat = true; isfloat = true;
} else if (ch == '#') { } else if (ch == '#') {
ch = gfun() & ~0x20; ch = gfun();
char ch2 = ch & ~0x20; // force to upper case
if (ch == '\\') base = 0; // character if (ch == '\\') base = 0; // character
else if (ch == 'B') base = 2; else if (ch2 == 'B') base = 2;
else if (ch == 'O') base = 8; else if (ch2 == 'O') base = 8;
else if (ch == 'X') base = 16; else if (ch2 == 'X') base = 16;
else if (ch == 0x07) return nextitem(gfun); else if (ch == '\'') return nextitem(gfun);
else error2(0, PSTR("Illegal character after #")); else if (ch == '.') return eval(read(gfun), NULL);
else error2(0, PSTR("illegal character after #"));
ch = gfun(); ch = gfun();
} }
int valid; // 0=undecided, -1=invalid, +1=valid int valid; // 0=undecided, -1=invalid, +1=valid
@ -4306,7 +4308,7 @@ void setup () {
initworkspace(); initworkspace();
initenv(); initenv();
initsleep(); initsleep();
pfstring(PSTR("uLisp 2.9 "), pserial); pln(pserial); pfstring(PSTR("uLisp 3.0 "), pserial); pln(pserial);
} }
// Read/Evaluate/Print loop // Read/Evaluate/Print loop