From 3b323c76ee27af9d83fe088ab92d4443ff73b803 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 1 Aug 2024 21:13:53 -0700 Subject: [PATCH] Throw "Out of memory" exception --- images/apple/DRAWL.po | Bin 143360 -> 143360 bytes src/lisp/drawl.pla | 8 ++++++-- src/lisp/s-expr.pla | 8 ++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/images/apple/DRAWL.po b/images/apple/DRAWL.po index 1770b9932e6aefdd53fbbf9c79cba066cc18ad87..843c569c4f6ef27bfab3312c0a63855ac3a54a57 100644 GIT binary patch delta 8557 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 delta 8336 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 diff --git a/src/lisp/drawl.pla b/src/lisp/drawl.pla index 3423e0c..ec7146f 100644 --- a/src/lisp/drawl.pla +++ b/src/lisp/drawl.pla @@ -47,6 +47,7 @@ import sexpr byte stringstr[1] end + var exception var hook_eval var assoc_list byte trace @@ -308,7 +309,7 @@ def hookfn(expr) fileio:close(fileref) readfn = @read_keybd fin - throw(@break_repl, FALSE) + throw(@break_repl, 0) fin return expr end @@ -337,7 +338,10 @@ new_sym("READFILE")=>natv = @natv_readfile parse_cmdline hook_eval = @hookfn -except(@break_repl) +exception = @break_repl +if except(@break_repl) == -1 + puts("Out of memory!\n") +fin while not quit putln; print_expr(eval_quote(readfn())) loop diff --git a/src/lisp/s-expr.pla b/src/lisp/s-expr.pla index 7538e91..36afd5d 100644 --- a/src/lisp/s-expr.pla +++ b/src/lisp/s-expr.pla @@ -1,6 +1,7 @@ include "inc/cmdsys.plh" include "inc/int32.plh" include "inc/fpstr.plh" +include "inc/longjmp.plh" const TYPE_MASK = $70 const NIL = $00 @@ -58,6 +59,7 @@ const fmt_fp = FPSTR_FIXED|FPSTR_STRIP|FPSTR_FLEX export var fmt_fpint = 6 export var fmt_fpfrac = 4 export byte trace = FALSE +export var exception = NULL export var hook_eval = NULL // Installable hook for eval_expr() export var assoc_list = NULL // SYM->value association list var cons_list = NULL @@ -234,6 +236,7 @@ export def new_cons#1 else gc_pull++ consptr = heapalloc(t_cons) + if !consptr; throw(exception, -1); fin fin consptr=>link = cons_list cons_list = consptr @@ -252,6 +255,7 @@ export def new_int(intlo, inthi)#1 else gc_pull++ intptr = heapalloc(t_numint) + if !intptr; throw(exception, -1); fin fin intptr=>link = int_list int_list = intptr @@ -270,6 +274,7 @@ export def new_float(extptr)#1 else gc_pull++ floatptr = heapalloc(t_numfloat) + if !floatptr; throw(exception, -1); fin fin floatptr=>link = float_list float_list = floatptr @@ -305,6 +310,7 @@ def new_array(dim0, dim1, dim2, dim3) fin memset(memptr, NULL, size) aptr = heapalloc(t_array) + if !aptr; throw(exception, -1); fin aptr=>link = NULL aptr->type = ARRAY_TYPE aptr=>dimension[0] = dim0 @@ -366,6 +372,7 @@ export def new_string(strptr)#1 if !stringptr // Nothing free gc_pull++ stringptr = heapalloc(t_string + alloclen) + if !stringptr; throw(exception, -1); fin fin stringptr=>link = string_list string_list = stringptr @@ -403,6 +410,7 @@ export def new_sym(symstr)#1 symptr = match_sym(symstr, hashtbl[index]) if symptr; return symptr; fin // Return already existing symbol symptr = heapalloc(t_sym + ^symstr) + if !symptr; throw(exception, -1); fin symptr=>link = hashtbl[index] hashtbl[index] = symptr symptr->type = ^symstr | SYM_TYPE