first attempt doesn't work
I was aware of some complications. The various indexes and y coordinates in the trace's cache would be unstable and need to be recomputed. But it's surprising that the trace _completely disappears_.
This commit is contained in:
parent
1496548287
commit
158b53eb8f
|
@ -574,6 +574,15 @@ fn edit-sandbox _self: (addr sandbox), key: byte, globals: (addr global-table),
|
||||||
break-if-=
|
break-if-=
|
||||||
var trace-ah/eax: (addr handle trace) <- get self, trace
|
var trace-ah/eax: (addr handle trace) <- get self, trace
|
||||||
var trace/eax: (addr trace) <- lookup *trace-ah
|
var trace/eax: (addr trace) <- lookup *trace-ah
|
||||||
|
# if expanding the trace, first check if we need to run the sandbox again
|
||||||
|
{
|
||||||
|
compare g, 0xa/newline
|
||||||
|
break-if-!=
|
||||||
|
var need-rerun?/eax: boolean <- cursor-too-deep? trace
|
||||||
|
compare need-rerun?, 0/false
|
||||||
|
break-if-=
|
||||||
|
run-sandbox self, globals, real-screen, tweak-real-screen?
|
||||||
|
}
|
||||||
edit-trace trace, g
|
edit-trace trace, g
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -1107,6 +1107,35 @@ fn hide-trace-line _self: (addr trace), line: (addr trace-line) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn cursor-too-deep? _self: (addr trace) -> _/eax: boolean {
|
||||||
|
var self/esi: (addr trace) <- copy _self
|
||||||
|
var trace-ah/eax: (addr handle array trace-line) <- get self, data
|
||||||
|
var _trace/eax: (addr array trace-line) <- lookup *trace-ah
|
||||||
|
var trace/edi: (addr array trace-line) <- copy _trace
|
||||||
|
var cursor-line-index-addr/ecx: (addr int) <- get self, cursor-line-index
|
||||||
|
var cursor-line-index/ecx: int <- copy *cursor-line-index-addr
|
||||||
|
var cursor-line-offset/eax: (offset trace-line) <- compute-offset trace, cursor-line-index
|
||||||
|
var cursor-line/edx: (addr trace-line) <- index trace, cursor-line-offset
|
||||||
|
var cursor-line-visible?/eax: (addr boolean) <- get cursor-line, visible?
|
||||||
|
var cursor-line-depth/ebx: (addr int) <- get cursor-line, depth
|
||||||
|
var target-depth/ebx: int <- copy *cursor-line-depth
|
||||||
|
# if cursor-line is visible, return false
|
||||||
|
compare *cursor-line-visible?, 0/false
|
||||||
|
{
|
||||||
|
break-if-=
|
||||||
|
return 0/false
|
||||||
|
}
|
||||||
|
# return cursor-line-depth >= max-depth-1
|
||||||
|
target-depth <- increment
|
||||||
|
var max-depth-addr/eax: (addr int) <- get self, max-depth
|
||||||
|
compare target-depth, *max-depth-addr
|
||||||
|
{
|
||||||
|
break-if-<
|
||||||
|
return 1/true
|
||||||
|
}
|
||||||
|
return 0/false
|
||||||
|
}
|
||||||
|
|
||||||
fn test-cursor-down-and-up-within-trace {
|
fn test-cursor-down-and-up-within-trace {
|
||||||
var t-storage: trace
|
var t-storage: trace
|
||||||
var t/esi: (addr trace) <- address t-storage
|
var t/esi: (addr trace) <- address t-storage
|
||||||
|
|
Loading…
Reference in New Issue