all apps working again after null get check

This commit is contained in:
Kartik K. Agaram 2021-05-07 20:40:42 -07:00
parent 19dd573a92
commit 61a68452ae
2 changed files with 34 additions and 2 deletions

View File

@ -200,7 +200,9 @@ fn evaluate _in-ah: (addr handle cell), _out-ah: (addr handle cell), env-h: (han
break-if-=
#
trace-text trace, "eval", "backquote"
debug-print "`(", 7/fg, 0/bg
evaluate-backquote rest-ah, _out-ah, env-h, globals, trace, screen-cell, keyboard-cell, call-number
debug-print ")", 7/fg, 0/bg
trace-higher trace
return
}
@ -1413,6 +1415,7 @@ fn test-evaluate-backquote {
fn evaluate-backquote _in-ah: (addr handle cell), _out-ah: (addr handle cell), env-h: (handle cell), globals: (addr global-table), trace: (addr trace), screen-cell: (addr handle cell), keyboard-cell: (addr handle cell), call-number: int {
# stack overflow? # disable when enabling Really-debug-print
#? dump-cell-from-cursor-over-full-screen _in-ah
check-stack
{
var screen-cell/eax: (addr handle cell) <- copy screen-cell
@ -1457,12 +1460,14 @@ fn evaluate-backquote _in-ah: (addr handle cell), _out-ah: (addr handle cell), e
return
}
# 'in' is a pair
debug-print "()", 4/fg, 0/bg
var in-ah/esi: (addr handle cell) <- copy _in-ah
var _in/eax: (addr cell) <- lookup *in-ah
var in/ebx: (addr cell) <- copy _in
var in-left-ah/ecx: (addr handle cell) <- get in, left
debug-print "10", 4/fg, 0/bg
# check for unquote
{
$macroexpand-iter:unquote: {
var in-left/eax: (addr cell) <- lookup *in-left-ah
var unquote?/eax: boolean <- symbol-equal? in-left, ","
compare unquote?, 0/false
@ -1470,20 +1475,39 @@ fn evaluate-backquote _in-ah: (addr handle cell), _out-ah: (addr handle cell), e
trace-text trace, "eval", "unquote"
var rest-ah/eax: (addr handle cell) <- get in, right
increment call-number
debug-print ",", 3/fg, 0/bg
evaluate rest-ah, _out-ah, env-h, globals, trace, screen-cell, keyboard-cell, call-number
debug-print ",)", 3/fg, 0/bg
return
}
# check for unquote-splice in in-left
debug-print "11", 4/fg, 0/bg
var out-ah/edi: (addr handle cell) <- copy _out-ah
{
$macroexpand-iter:unquote-splice: {
#? dump-cell-from-cursor-over-full-screen in-left-ah
var in-left/eax: (addr cell) <- lookup *in-left-ah
{
debug-print "12", 4/fg, 0/bg
{
var in-left-is-nil?/eax: boolean <- nil? in-left
compare in-left-is-nil?, 0/false
}
break-if-!= $macroexpand-iter:unquote-splice
var in-left-type/ecx: (addr int) <- get in-left, type
debug-print "13", 4/fg, 0/bg
compare *in-left-type, 0/pair
break-if-!= $macroexpand-iter:unquote-splice
var in-left-left-ah/eax: (addr handle cell) <- get in-left, left
debug-print "14", 4/fg, 0/bg
var in-left-left/eax: (addr cell) <- lookup *in-left-left-ah
debug-print "15", 4/fg, 0/bg
var in-left-left-type/ecx: (addr int) <- get in-left-left, type
var left-is-unquote-splice?/eax: boolean <- symbol-equal? in-left-left, ",@"
debug-print "16", 4/fg, 0/bg
compare left-is-unquote-splice?, 0/false
}
break-if-=
debug-print "17", 4/fg, 0/bg
trace-text trace, "eval", "unquote-splice"
var in-unquote-payload-ah/eax: (addr handle cell) <- get in-left, right
increment call-number
@ -1504,16 +1528,23 @@ fn evaluate-backquote _in-ah: (addr handle cell), _out-ah: (addr handle cell), e
evaluate-backquote in-right-ah, out-ah, env-h, globals, trace, screen-cell, keyboard-cell, call-number
return
}
debug-print "19", 4/fg, 0/bg
# otherwise continue copying
trace-text trace, "eval", "backquote: copy"
var out-ah/edi: (addr handle cell) <- copy _out-ah
allocate-pair out-ah
debug-print "20", 7/fg, 0/bg
#? dump-cell-from-cursor-over-full-screen out-ah
var out/eax: (addr cell) <- lookup *out-ah
var out-left-ah/edx: (addr handle cell) <- get out, left
debug-print "`(l", 3/fg, 0/bg
evaluate-backquote in-left-ah, out-left-ah, env-h, globals, trace, screen-cell, keyboard-cell, call-number
debug-print "`r)", 3/fg, 0/bg
var in-right-ah/ecx: (addr handle cell) <- get in, right
var out-right-ah/edx: (addr handle cell) <- get out, right
debug-print "`r(", 3/fg, 0/bg
evaluate-backquote in-right-ah, out-right-ah, env-h, globals, trace, screen-cell, keyboard-cell, call-number
debug-print "`r)", 3/fg, 0/bg
}
fn test-evaluate-backquote-list {

View File

@ -191,6 +191,7 @@ fn macroexpand-iter _expr-ah: (addr handle cell), globals: (addr global-table),
# definition is a macro
var macro-definition-ah/eax: (addr handle cell) <- get definition, right
# TODO: check car(macro-definition) is litfn
#? turn-on-debug-print
apply macro-definition-ah, rest-ah, expr-ah, globals, trace, 0/no-screen, 0/no-keyboard, 0/call-number
return 1/true
}