diff options
author | Kartik Agaram <vc@akkartik.com> | 2018-06-17 00:05:38 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2018-06-17 00:29:22 -0700 |
commit | dd66068298b0a11f2a1f195376cba98e0c8570b5 (patch) | |
tree | 06696728fd65cdf38a2ac571943e130e9d60c333 /edit/003-shortcuts.mu | |
parent | b89b822439f47a490a1b764e14a1ed1b73059cba (diff) | |
download | mu-dd66068298b0a11f2a1f195376cba98e0c8570b5.tar.gz |
4261 - start using literals for 'true' and 'false'
They uncovered one bug: in edit/003-shortcuts.mu <scroll-down> was returning 0 for an address in one place where I thought it was returning 0 for a boolean. Now we've eliminated this bad interaction between tangling and punning literals.
Diffstat (limited to 'edit/003-shortcuts.mu')
-rw-r--r-- | edit/003-shortcuts.mu | 91 |
1 files changed, 52 insertions, 39 deletions
diff --git a/edit/003-shortcuts.mu b/edit/003-shortcuts.mu index 02ea77d0..b8f49731 100644 --- a/edit/003-shortcuts.mu +++ b/edit/003-shortcuts.mu @@ -113,7 +113,7 @@ def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, ba data:&:duplex-list:char <- get *editor, data:offset # if at start of text (before-cursor at § sentinel), return prev:&:duplex-list:char <- prev before-cursor - return-unless prev, 0/no-more-render, 0/nothing-deleted + return-unless prev, false/no-more-render, 0/nothing-deleted trace 10, [app], [delete-before-cursor] original-row:num <- get *editor, cursor-row:offset scroll?:bool <- move-cursor-coordinates-left editor @@ -121,13 +121,13 @@ def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, ba data <- remove before-cursor, data # will also neatly trim next/prev pointers in backspaced-cell/before-cursor before-cursor <- copy prev *editor <- put *editor, before-cursor:offset, before-cursor - return-if scroll?, 1/go-render + return-if scroll?, true/go-render screen-width:num <- screen-width screen cursor-row:num <- get *editor, cursor-row:offset cursor-column:num <- get *editor, cursor-column:offset # did we just backspace over a newline? same-row?:bool <- equal cursor-row, original-row - return-unless same-row?, 1/go-render + return-unless same-row?, true/go-render left:num <- get *editor, left:offset right:num <- get *editor, right:offset curr:&:duplex-list:char <- next before-cursor @@ -136,7 +136,7 @@ def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, ba { # hit right margin? give up and let caller render at-right?:bool <- greater-or-equal curr-column, right - return-if at-right?, 1/go-render + return-if at-right?, true/go-render break-unless curr # newline? done. currc:char <- get *curr, value:offset @@ -150,13 +150,13 @@ def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, ba # we're guaranteed not to be at the right margin space:char <- copy 32/space screen <- print screen, space - go-render? <- copy 0/false + go-render? <- copy false ] def move-cursor-coordinates-left editor:&:editor -> go-render?:bool, editor:&:editor [ local-scope load-inputs - go-render?:bool <- copy 0/false + go-render?:bool <- copy false before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset cursor-row:num <- get *editor, cursor-row:offset cursor-column:num <- get *editor, cursor-column:offset @@ -180,7 +180,7 @@ def move-cursor-coordinates-left editor:&:editor -> go-render?:bool, editor:&:ed { break-unless top-of-screen? <scroll-up> - go-render? <- copy 1/true + go-render? <- copy true } { # case 1: if previous character was newline, figure out how long the previous line is @@ -376,11 +376,11 @@ def delete-at-cursor editor:&:editor, screen:&:screen -> go-render?:bool, delete before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset data:&:duplex-list:char <- get *editor, data:offset deleted-cell:&:duplex-list:char <- next before-cursor - return-unless deleted-cell, 0/don't-render + return-unless deleted-cell, false/don't-render currc:char <- get *deleted-cell, value:offset data <- remove deleted-cell, data deleted-newline?:bool <- equal currc, 10/newline - return-if deleted-newline?, 1/go-render + return-if deleted-newline?, true/go-render # wasn't a newline? render rest of line curr:&:duplex-list:char <- next before-cursor # refresh after remove above cursor-row:num <- get *editor, cursor-row:offset @@ -391,7 +391,7 @@ def delete-at-cursor editor:&:editor, screen:&:screen -> go-render?:bool, delete { # hit right margin? give up and let caller render at-right?:bool <- greater-or-equal curr-column, screen-width - return-if at-right?, 1/go-render + return-if at-right?, true/go-render break-unless curr currc:char <- get *curr, value:offset at-newline?:bool <- equal currc, 10/newline @@ -404,7 +404,7 @@ def delete-at-cursor editor:&:editor, screen:&:screen -> go-render?:bool, delete # we're guaranteed not to be at the right margin space:char <- copy 32/space screen <- print screen, space - go-render? <- copy 0/false + go-render? <- copy false ] # right arrow @@ -468,11 +468,11 @@ def move-cursor-coordinates-right editor:&:editor, screen-height:num -> go-rende cursor-column <- copy left *editor <- put *editor, cursor-column:offset, cursor-column below-screen?:bool <- greater-or-equal cursor-row, screen-height # must be equal - return-unless below-screen?, 0/don't-render + return-unless below-screen?, false/don't-render <scroll-down> cursor-row <- subtract cursor-row, 1 # bring back into screen range *editor <- put *editor, cursor-row:offset, cursor-row - return 1/go-render + return true/go-render } # if the line wraps, move cursor to start of next row { @@ -491,16 +491,16 @@ def move-cursor-coordinates-right editor:&:editor, screen-height:num -> go-rende cursor-column <- copy left *editor <- put *editor, cursor-column:offset, cursor-column below-screen?:bool <- greater-or-equal cursor-row, screen-height # must be equal - return-unless below-screen?, 0/no-more-render + return-unless below-screen?, false/no-more-render <scroll-down> cursor-row <- subtract cursor-row, 1 # bring back into screen range *editor <- put *editor, cursor-row:offset, cursor-row - return 1/go-render + return true/go-render } # otherwise move cursor one character right cursor-column <- add cursor-column, 1 *editor <- put *editor, cursor-column:offset, cursor-column - go-render? <- copy 0/false + go-render? <- copy false ] scenario editor-moves-cursor-to-next-line-with-right-arrow [ @@ -722,7 +722,7 @@ after <handle-special-key> [ trace 10, [app], [left arrow] # if not at start of text (before-cursor at § sentinel) prev:&:duplex-list:char <- prev before-cursor - return-unless prev, 0/don't-render + return-unless prev, false/don't-render <begin-move-cursor> go-render? <- move-cursor-coordinates-left editor before-cursor <- copy prev @@ -1000,7 +1000,7 @@ after <handle-special-key> [ def move-to-previous-line editor:&:editor -> go-render?:bool, editor:&:editor [ local-scope load-inputs - go-render?:bool <- copy 0/false + go-render?:bool <- copy false cursor-row:num <- get *editor, cursor-row:offset cursor-column:num <- get *editor, cursor-column:offset before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset @@ -1056,7 +1056,7 @@ def move-to-previous-line editor:&:editor -> go-render?:bool, editor:&:editor [ # if cursor already at top, scroll up break-unless already-at-top? <scroll-up> - return 1/go-render + return true/go-render } ] @@ -1411,7 +1411,7 @@ def move-to-next-line editor:&:editor, screen-height:num -> go-render?:bool, edi break-if before-cursor { break-if at-bottom-of-screen? - return 0/don't-render + return false/don't-render } { break-unless at-bottom-of-screen? @@ -1423,7 +1423,7 @@ def move-to-next-line editor:&:editor, screen-height:num -> go-render?:bool, edi break-if next { break-if at-bottom-of-screen? - return 0/don't-render + return false/don't-render } { break-unless at-bottom-of-screen? @@ -1452,7 +1452,7 @@ def move-to-next-line editor:&:editor, screen-height:num -> go-render?:bool, edi break-if next { break-if at-bottom-of-screen? - return 0/don't-render + return false/don't-render } { break-unless at-bottom-of-screen? @@ -1476,11 +1476,11 @@ def move-to-next-line editor:&:editor, screen-height:num -> go-render?:bool, edi *editor <- put *editor, before-cursor:offset, before-cursor *editor <- put *editor, cursor-column:offset, cursor-column *editor <- put *editor, cursor-row:offset, cursor-row - return 0/don't-render + return false/don't-render } +try-to-scroll <scroll-down> - go-render? <- copy 1/true + go-render? <- copy true ] scenario editor-adjusts-column-at-next-line [ @@ -1589,7 +1589,7 @@ after <handle-special-character> [ move-to-start-of-screen-line editor undo-coalesce-tag:num <- copy 0/never <end-move-cursor> - return 0/don't-render + return false/don't-render } ] @@ -1601,7 +1601,7 @@ after <handle-special-key> [ move-to-start-of-screen-line editor undo-coalesce-tag:num <- copy 0/never <end-move-cursor> - return 0/don't-render + return false/don't-render } ] @@ -1814,7 +1814,7 @@ after <handle-special-character> [ move-to-end-of-line editor undo-coalesce-tag:num <- copy 0/never <end-move-cursor> - return 0/don't-render + return false/don't-render } ] @@ -1826,7 +1826,7 @@ after <handle-special-key> [ move-to-end-of-line editor undo-coalesce-tag:num <- copy 0/never <end-move-cursor> - return 0/don't-render + return false/don't-render } ] @@ -2025,7 +2025,7 @@ def minimal-render-for-ctrl-u screen:&:screen, editor:&:editor, deleted-cells:&: { # if we have a wrapped line, give up and render the whole screen wrap?:bool <- greater-or-equal i, right - return-if wrap?, 1/go-render + return-if wrap?, true/go-render curr <- next curr break-unless curr c:char <- get *curr, value:offset @@ -2041,11 +2041,11 @@ def minimal-render-for-ctrl-u screen:&:screen, editor:&:editor, deleted-cells:&: left:num <- get *editor, left:offset end:num <- subtract right, left wrap?:bool <- greater-or-equal old-row-len, end - return-if wrap?, 1/go-render + return-if wrap?, true/go-render curr-line:text <- buffer-to-array buf curr-row:num <- get *editor, cursor-row:offset render-code screen, curr-line, curr-column, right, curr-row - return 0/dont-render + return false/dont-render ] def delete-to-start-of-line editor:&:editor -> result:&:duplex-list:char, editor:&:editor [ @@ -2054,7 +2054,7 @@ def delete-to-start-of-line editor:&:editor -> result:&:duplex-list:char, editor # compute range to delete init:&:duplex-list:char <- get *editor, data:offset top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset - update-top-of-screen?:bool <- copy 0/false + update-top-of-screen?:bool <- copy false before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset start:&:duplex-list:char <- copy before-cursor end:&:duplex-list:char <- next before-cursor @@ -2595,7 +2595,7 @@ def minimal-render-for-ctrl-k screen:&:screen, editor:&:editor, deleted-cells:&: local-scope load-inputs # if we deleted nothing, there's nothing to render - return-unless deleted-cells, 0/dont-render + return-unless deleted-cells, false/dont-render # if the line used to wrap before, give up and render the whole screen curr-column:num <- get *editor, cursor-column:offset num-deleted-cells:num <- length deleted-cells @@ -2604,9 +2604,9 @@ def minimal-render-for-ctrl-k screen:&:screen, editor:&:editor, deleted-cells:&: right:num <- get *editor, right:offset end:num <- subtract right, left wrap?:bool <- greater-or-equal old-row-len, end - return-if wrap?, 1/go-render + return-if wrap?, true/go-render clear-line-until screen, right - return 0/dont-render + return false/dont-render ] def delete-to-end-of-line editor:&:editor -> result:&:duplex-list:char, editor:&:editor [ @@ -2839,7 +2839,20 @@ after <scroll-down> [ top-of-screen <- before-start-of-next-line top-of-screen, max *editor <- put *editor, top-of-screen:offset, top-of-screen no-movement?:bool <- equal old-top, top-of-screen - return-if no-movement?, 0/don't-render + return-if no-movement?, false/don't-render +] + +after <scroll-down2> [ + trace 10, [app], [scroll down] + top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset + left:num <- get *editor, left:offset + right:num <- get *editor, right:offset + max:num <- subtract right, left + old-top:&:duplex-list:char <- copy top-of-screen + top-of-screen <- before-start-of-next-line top-of-screen, max + *editor <- put *editor, top-of-screen:offset, top-of-screen + no-movement?:bool <- equal old-top, top-of-screen + return-if no-movement? ] # Takes a pointer into the doubly-linked list, scans ahead at most 'max' @@ -3210,7 +3223,7 @@ after <scroll-up> [ top-of-screen <- before-previous-screen-line top-of-screen, editor *editor <- put *editor, top-of-screen:offset, top-of-screen no-movement?:bool <- equal old-top, top-of-screen - return-if no-movement?, 0/don't-render + return-if no-movement?, false/don't-render ] scenario editor-scrolls-up-past-wrapped-line-using-arrow-keys [ @@ -4262,7 +4275,7 @@ def render-line-from-start screen:&:screen, editor:&:editor, right-margin:num -> curr:&:duplex-list:char <- copy line-start { render-all?:bool <- greater-or-equal i, end - return-if render-all?, 1/go-render + return-if render-all?, true/go-render break-unless curr c:char <- get *curr, value:offset newline?:bool <- equal c, 10/newline @@ -4274,7 +4287,7 @@ def render-line-from-start screen:&:screen, editor:&:editor, right-margin:num -> loop } clear-line-until screen, right - return 0/dont-render + return false/dont-render ] def before-start-of-screen-line editor:&:editor -> result:&:duplex-list:char [ |