mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-08-09 16:25:01 +00:00
Clean up T and fix GC'ing of consants
This commit is contained in:
Binary file not shown.
@@ -147,14 +147,12 @@ end
|
|||||||
|
|
||||||
def natv_set(symptr, expr)
|
def natv_set(symptr, expr)
|
||||||
symptr = eval_expr(expr=>car)
|
symptr = eval_expr(expr=>car)
|
||||||
set_assoc(symptr, eval_expr(expr=>cdr=>car))
|
return set_assoc(symptr, eval_expr(expr=>cdr=>car))=>cdr
|
||||||
return symptr
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def natv_setq(symptr, expr)
|
def natv_setq(symptr, expr)
|
||||||
symptr = expr=>car
|
symptr = expr=>car
|
||||||
set_assoc(symptr, eval_expr(expr=>cdr=>car))
|
return set_assoc(symptr, eval_expr(expr=>cdr=>car))=>cdr
|
||||||
return symptr
|
|
||||||
end
|
end
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@@ -85,8 +85,6 @@ const SWEEPSTACK_MAX = 64
|
|||||||
byte sweep_stack_top = 0
|
byte sweep_stack_top = 0
|
||||||
var sweep_stack[SWEEPSTACK_MAX] // In-flight expressions
|
var sweep_stack[SWEEPSTACK_MAX] // In-flight expressions
|
||||||
|
|
||||||
var eval_last = NULL
|
|
||||||
|
|
||||||
const GC_TRIGGER = 50
|
const GC_TRIGGER = 50
|
||||||
byte gc_pull = 0
|
byte gc_pull = 0
|
||||||
|
|
||||||
@@ -120,19 +118,18 @@ def sweep_used#0
|
|||||||
var symptr, i, memptr, size
|
var symptr, i, memptr, size
|
||||||
|
|
||||||
sweep_expr(assoc_list)
|
sweep_expr(assoc_list)
|
||||||
sweep_expr(eval_last)
|
|
||||||
symptr = sym_list
|
symptr = sym_list
|
||||||
while symptr
|
while symptr
|
||||||
//
|
//
|
||||||
// Sweep symbol properties
|
// Sweep symbol properties
|
||||||
//
|
//
|
||||||
if symptr=>apval
|
if symptr=>apval
|
||||||
sweep_expr(symptr=>apval)
|
sweep_expr(symptr=>apval ^ NULL_HACK)
|
||||||
elsif symptr=>lambda
|
elsif symptr=>lambda
|
||||||
sweep_expr(symptr=>lambda)
|
sweep_expr(symptr=>lambda)
|
||||||
elsif symptr=>array
|
elsif symptr=>array
|
||||||
memptr = symptr=>array=>arraymem
|
memptr = symptr=>array=>arraymem
|
||||||
size = symptr=>array=>arraysize -1
|
size = symptr=>array=>arraysize - 1
|
||||||
for i = 0 to size
|
for i = 0 to size
|
||||||
sweep_expr(memptr=>[i])
|
sweep_expr(memptr=>[i])
|
||||||
next
|
next
|
||||||
@@ -149,7 +146,7 @@ def sweep_used#0
|
|||||||
fin
|
fin
|
||||||
end
|
end
|
||||||
|
|
||||||
def push_sweep_stack(expr)
|
def push_sweep_stack(expr)#1
|
||||||
if sweep_stack_top == SWEEPSTACK_MAX - 1
|
if sweep_stack_top == SWEEPSTACK_MAX - 1
|
||||||
puts("Sweep stack overflow\n")
|
puts("Sweep stack overflow\n")
|
||||||
return NULL
|
return NULL
|
||||||
@@ -159,7 +156,7 @@ def push_sweep_stack(expr)
|
|||||||
return expr
|
return expr
|
||||||
end
|
end
|
||||||
|
|
||||||
def pop_sweep_stack
|
def pop_sweep_stack#1
|
||||||
if sweep_stack_top == 0
|
if sweep_stack_top == 0
|
||||||
puts("Sweep stack underflow\n")
|
puts("Sweep stack underflow\n")
|
||||||
return NULL
|
return NULL
|
||||||
@@ -360,7 +357,7 @@ def print_atom(atom)#0
|
|||||||
else
|
else
|
||||||
when atom->type & TYPE_MASK
|
when atom->type & TYPE_MASK
|
||||||
is NIL
|
is NIL
|
||||||
putc(atom->type ?? 'T' :: 'F')
|
puts(atom->type ?? "*T*" :: "NIL")
|
||||||
break
|
break
|
||||||
is NUM_TYPE
|
is NUM_TYPE
|
||||||
when atom->type
|
when atom->type
|
||||||
@@ -956,9 +953,12 @@ export def eval_expr(expr)#1
|
|||||||
end
|
end
|
||||||
|
|
||||||
export def eval_quote(expr)#1
|
export def eval_quote(expr)#1
|
||||||
eval_last = expr
|
push_sweep_stack(assoc_list)
|
||||||
expr = eval_expr(expr)
|
assoc_list = NULL
|
||||||
eval_last = 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
|
return expr
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1210,8 +1210,9 @@ def natv_cset(symptr, expr)
|
|||||||
puts("CSET: Not a SYM\n")
|
puts("CSET: Not a SYM\n")
|
||||||
return NULL
|
return NULL
|
||||||
fin
|
fin
|
||||||
symptr=>apval = eval_expr(expr=>cdr=>car) ^ NULL_HACK
|
expr = eval_expr(expr=>cdr=>car)
|
||||||
return symptr
|
symptr=>apval = expr ^ NULL_HACK
|
||||||
|
return expr
|
||||||
end
|
end
|
||||||
|
|
||||||
def natv_csetq(symptr, expr)
|
def natv_csetq(symptr, expr)
|
||||||
@@ -1220,8 +1221,9 @@ def natv_csetq(symptr, expr)
|
|||||||
puts("CSETQ: Not a SYM\n")
|
puts("CSETQ: Not a SYM\n")
|
||||||
return NULL
|
return NULL
|
||||||
fin
|
fin
|
||||||
symptr=>apval = eval_expr(expr=>cdr=>car) ^ NULL_HACK
|
expr = eval_expr(expr=>cdr=>car)
|
||||||
return symptr
|
symptr=>apval = expr ^ NULL_HACK
|
||||||
|
return expr
|
||||||
end
|
end
|
||||||
|
|
||||||
def natv_pri(symptr, expr)
|
def natv_pri(symptr, expr)
|
||||||
@@ -1389,7 +1391,6 @@ new_sym("AND")=>natv = @natv_and
|
|||||||
new_sym("OR")=>natv = @natv_or
|
new_sym("OR")=>natv = @natv_or
|
||||||
new_sym("NULL")=>natv = @natv_null
|
new_sym("NULL")=>natv = @natv_null
|
||||||
new_sym("FUNCTION")=>natv = @natv_function
|
new_sym("FUNCTION")=>natv = @natv_function
|
||||||
//new_sym("LABEL")=>natv = @natv_label
|
|
||||||
new_sym("DEFINE")=>natv = @natv_define
|
new_sym("DEFINE")=>natv = @natv_define
|
||||||
new_sym("ARRAY")=>natv = @natv_array
|
new_sym("ARRAY")=>natv = @natv_array
|
||||||
new_sym("CSET")=>natv = @natv_cset
|
new_sym("CSET")=>natv = @natv_cset
|
||||||
|
Reference in New Issue
Block a user