From 23aae45787950446ebe3dd6e368fac1e41dcf4a1 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 22 Jul 2024 07:52:24 -0700 Subject: [PATCH] Clean up T and fix GC'ing of consants --- images/apple/DRAWL.po | Bin 143360 -> 143360 bytes src/lisp/drawl.pla | 6 ++---- src/lisp/s-expr.pla | 33 +++++++++++++++++---------------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/images/apple/DRAWL.po b/images/apple/DRAWL.po index 0b0bd4e3d5495afea46e46e1a6841e332bccf256..3ef18f9aacd8ca881d1faae8e116860f8d06bd84 100644 GIT binary patch delta 7956 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 delta 3252 zcmb8x3s6+&6$kKhzP(Ep6?$2oyVxoZ7g)>%#1wp_y27F)%d*0?AvQQlbSI&PX`N=Z z+uG%h&X|X>v(fe@CN;51lQywKd^DTH#1{rZ1dNYSGgd8`rrObp@0mQL|GO+EIvHoe z@VnnR-~ArvK4y1Y&sbW|Sl($gOV^4^Q&uc6M;4g*^jmV?I5Ikj+9?|7zIWI@@wTqx zG_JDF^^k{d{oVYM;>c;aW9EkMm}&D=*Q*K+zM;vIiJ3O?9W&2=$IOhG6_wwbNRk;d z*9{fXRo^nm%$1@6~&@aBf1M+?*$?I2Pil-`v6_f|B%-t(;j(NzL7|ier%+Am2RlQ+a%o zCt;{Xzpu&&&9N?X6T0-@Y~}HVl=S+w!GI|CQ&Rv#yc-7}dqDPN5{_%=Rhe3Z<3afY z5uI>oE9bwljfH7xf~tT05B{LkV-1dzgE>ZB%>}ZGv_K9bE|i<^ji&d?!9w{F^@6Or zlhkciTGpfg_g&63_sFXej)?G#SU5YvvxdURh6pcZZqw7==SMS-GU^udr~abuk3*5? z9&)NaiJVoD_3yKVLyJ?LV^t!5cDV>-zkYr&;4D_S5k07JjTp zc221Dm`UxAtZ(P3V!WS%-Ljw5XT}6*D4Z)AB;5Z^BaGKb%y-JuJu8g;v0h3CXY*OT ztb?7nh$f@4>(6!Y1Z!*dT&Y14eo<~}!dk6rtNuv`_j9YhZ6D{NIe}(WY}C+V@tvHN zWVgoVc_zp9n9|9asknZ;!b_s>G2T_-JvOM?^`Ce0L>V_i3Q%(yiXOVNZJnIqynTXk z^=Gr9190JS4HiMT)xu-kNBt63LG_Ljm{IJYWSvEU*r)aqJqtm|N|5?AT2s`eVS8)Iw^#q6r9 zb3Gi(Z#Yoq&{Z3!r{*c|!9?LCQ=*oJ_(w1WTu=oMfDcrRX~399#Eal5SOaT8hd;qajQI=3 zyk(+tZ3~iilQnFU62lWEDLhR|3Rg;rT9-tc%}imZIZ-PzlU9b{v-EQz#}&<|h1AY@xftASAHzvVN=5mp6rP=G3%8_7S^)8{Q%%|t^#2EL zz&&ZCje|+BD2>9a(}b2#&%zxCm^=O9?*!E2P61D1aZsB$y5r z@E~}h4(7w7&;q}NAS{QK5L$)9@8NlP8D4?E!6s;fE$|-ff)40~Bk)i749>%4_!2mi zGz%m`8jOZqa6$=`!E~sCdU!aK>a~Rkn&DRvgca~Ktc4e0BfJTlAp*N$AN0XdI1T@X zi*OAFGxZzC`1A4o*4~egoo?^zt+xzB!>(S{QkHCVb{y#2ty)$_ARou;moo4srt>&iWcK**=&3*car) - set_assoc(symptr, eval_expr(expr=>cdr=>car)) - return symptr + return set_assoc(symptr, eval_expr(expr=>cdr=>car))=>cdr end def natv_setq(symptr, expr) symptr = expr=>car - set_assoc(symptr, eval_expr(expr=>cdr=>car)) - return symptr + return set_assoc(symptr, eval_expr(expr=>cdr=>car))=>cdr end // diff --git a/src/lisp/s-expr.pla b/src/lisp/s-expr.pla index d52fc53..2811331 100644 --- a/src/lisp/s-expr.pla +++ b/src/lisp/s-expr.pla @@ -85,8 +85,6 @@ const SWEEPSTACK_MAX = 64 byte sweep_stack_top = 0 var sweep_stack[SWEEPSTACK_MAX] // In-flight expressions -var eval_last = NULL - const GC_TRIGGER = 50 byte gc_pull = 0 @@ -120,19 +118,18 @@ def sweep_used#0 var symptr, i, memptr, size sweep_expr(assoc_list) - sweep_expr(eval_last) symptr = sym_list while symptr // // Sweep symbol properties // if symptr=>apval - sweep_expr(symptr=>apval) + sweep_expr(symptr=>apval ^ NULL_HACK) elsif symptr=>lambda sweep_expr(symptr=>lambda) elsif symptr=>array memptr = symptr=>array=>arraymem - size = symptr=>array=>arraysize -1 + size = symptr=>array=>arraysize - 1 for i = 0 to size sweep_expr(memptr=>[i]) next @@ -149,7 +146,7 @@ def sweep_used#0 fin end -def push_sweep_stack(expr) +def push_sweep_stack(expr)#1 if sweep_stack_top == SWEEPSTACK_MAX - 1 puts("Sweep stack overflow\n") return NULL @@ -159,7 +156,7 @@ def push_sweep_stack(expr) return expr end -def pop_sweep_stack +def pop_sweep_stack#1 if sweep_stack_top == 0 puts("Sweep stack underflow\n") return NULL @@ -360,7 +357,7 @@ def print_atom(atom)#0 else when atom->type & TYPE_MASK is NIL - putc(atom->type ?? 'T' :: 'F') + puts(atom->type ?? "*T*" :: "NIL") break is NUM_TYPE when atom->type @@ -956,9 +953,12 @@ export def eval_expr(expr)#1 end export def eval_quote(expr)#1 - eval_last = expr - expr = eval_expr(expr) - eval_last = NULL + push_sweep_stack(assoc_list) + assoc_list = NULL + push_sweep_stack(expr) // Keep expr from being GC'ed + expr = eval_expr(expr) + pop_sweep_stack + assoc_list = pop_sweep_stack return expr end @@ -1210,8 +1210,9 @@ def natv_cset(symptr, expr) puts("CSET: Not a SYM\n") return NULL fin - symptr=>apval = eval_expr(expr=>cdr=>car) ^ NULL_HACK - return symptr + expr = eval_expr(expr=>cdr=>car) + symptr=>apval = expr ^ NULL_HACK + return expr end def natv_csetq(symptr, expr) @@ -1220,8 +1221,9 @@ def natv_csetq(symptr, expr) puts("CSETQ: Not a SYM\n") return NULL fin - symptr=>apval = eval_expr(expr=>cdr=>car) ^ NULL_HACK - return symptr + expr = eval_expr(expr=>cdr=>car) + symptr=>apval = expr ^ NULL_HACK + return expr end def natv_pri(symptr, expr) @@ -1389,7 +1391,6 @@ new_sym("AND")=>natv = @natv_and new_sym("OR")=>natv = @natv_or new_sym("NULL")=>natv = @natv_null new_sym("FUNCTION")=>natv = @natv_function -//new_sym("LABEL")=>natv = @natv_label new_sym("DEFINE")=>natv = @natv_define new_sym("ARRAY")=>natv = @natv_array new_sym("CSET")=>natv = @natv_cset