|
1 |
| -/* uLisp ESP Version 2.9 - www.ulisp.com |
2 |
| - David Johnson-Davies - www.technoblogy.com - 25th September 2019 |
| 1 | +/* uLisp ESP Version 3.0 - www.ulisp.com |
| 2 | + David Johnson-Davies - www.technoblogy.com - 28th November 2019 |
3 | 3 |
|
4 | 4 | Licensed under the MIT license: https://opensource.org/licenses/MIT
|
5 | 5 | */
|
@@ -172,7 +172,7 @@ char LastPrint = 0;
|
172 | 172 |
|
173 | 173 | // Flags
|
174 | 174 | enum flag { PRINTREADABLY, RETURNFLAG, ESCAPE, EXITEDITOR, LIBRARYLOADED };
|
175 |
| -volatile char Flags; |
| 175 | +volatile char Flags = 0b00001; // PRINTREADABLY set by default |
176 | 176 |
|
177 | 177 | // Forward references
|
178 | 178 | object *tee;
|
@@ -2775,8 +2775,8 @@ object *fn_locals (object *args, object *env) {
|
2775 | 2775 | object *fn_makunbound (object *args, object *env) {
|
2776 | 2776 | (void) env;
|
2777 | 2777 | object *key = first(args);
|
2778 |
| - deletesymbol(key->name); |
2779 |
| - return (delassoc(key, &GlobalEnv) != NULL) ? tee : nil; |
| 2778 | + delassoc(key, &GlobalEnv); |
| 2779 | + return key; |
2780 | 2780 | }
|
2781 | 2781 |
|
2782 | 2782 | object *fn_break (object *args, object *env) {
|
@@ -4059,13 +4059,15 @@ object *nextitem (gfun_t gfun) {
|
4059 | 4059 | if (ch == ' ') return (object *)DOT;
|
4060 | 4060 | isfloat = true;
|
4061 | 4061 | } else if (ch == '#') {
|
4062 |
| - ch = gfun() & ~0x20; |
| 4062 | + ch = gfun(); |
| 4063 | + char ch2 = ch & ~0x20; // force to upper case |
4063 | 4064 | if (ch == '\\') base = 0; // character
|
4064 |
| - else if (ch == 'B') base = 2; |
4065 |
| - else if (ch == 'O') base = 8; |
4066 |
| - else if (ch == 'X') base = 16; |
4067 |
| - else if (ch == 0x07) return nextitem(gfun); |
4068 |
| - else error2(0, PSTR("Illegal character after #")); |
| 4065 | + else if (ch2 == 'B') base = 2; |
| 4066 | + else if (ch2 == 'O') base = 8; |
| 4067 | + else if (ch2 == 'X') base = 16; |
| 4068 | + else if (ch == '\'') return nextitem(gfun); |
| 4069 | + else if (ch == '.') return eval(read(gfun), NULL); |
| 4070 | + else error2(0, PSTR("illegal character after #")); |
4069 | 4071 | ch = gfun();
|
4070 | 4072 | }
|
4071 | 4073 | int valid; // 0=undecided, -1=invalid, +1=valid
|
@@ -4174,7 +4176,7 @@ void setup () {
|
4174 | 4176 | initworkspace();
|
4175 | 4177 | initenv();
|
4176 | 4178 | initsleep();
|
4177 |
| - pfstring(PSTR("uLisp 2.9 "), pserial); pln(pserial); |
| 4179 | + pfstring(PSTR("uLisp 3.0 "), pserial); pln(pserial); |
4178 | 4180 | }
|
4179 | 4181 |
|
4180 | 4182 | // Read/Evaluate/Print loop
|
|
0 commit comments