From bdbf2093ea76291ef4cae7336af5f46b6d129317 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sun, 15 Nov 2020 21:45:20 -0800 Subject: 7245 - tile: right-align functions --- apps/tile/data.mu | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) (limited to 'apps/tile/data.mu') diff --git a/apps/tile/data.mu b/apps/tile/data.mu index 9bf08502..ead9948e 100644 --- a/apps/tile/data.mu +++ b/apps/tile/data.mu @@ -385,11 +385,11 @@ fn body-length functions: (addr handle function), function-name: (addr handle wo var body-ah/edi: (addr handle line) <- address body-storage function-body functions, function-name, body-ah var body/eax: (addr line) <- lookup *body-ah - var result/eax: int <- line-length body + var result/eax: int <- num-words-in-line body return result } -fn line-length _in: (addr line) -> _/eax: int { +fn num-words-in-line _in: (addr line) -> _/eax: int { var in/esi: (addr line) <- copy _in var curr-ah/ecx: (addr handle word) <- get in, data var result/edi: int <- copy 0 @@ -699,3 +699,63 @@ fn dump-call-paths screen: (addr screen), _x-ah: (addr handle call-path) { dump-call-paths screen, next-ah } } + +fn function-width _self: (addr function) -> _/eax: int { + var self/esi: (addr function) <- copy _self + var args/ecx: (addr handle word) <- get self, args + var arg-width/eax: int <- word-list-length args + var result/edi: int <- copy arg-width + result <- add 4 # function-header-indent + body-indent + var body-ah/eax: (addr handle line) <- get self, body + var body-width/eax: int <- body-width body-ah + body-width <- add 1 # right margin + body-width <- add 2 # body-indent for "≡ " + compare result, body-width + { + break-if->= + result <- copy body-width + } + return result +} + +fn body-width lines: (addr handle line) -> _/eax: int { + var curr-ah/esi: (addr handle line) <- copy lines + var result/edi: int <- copy 0 + { + var curr/eax: (addr line) <- lookup *curr-ah + compare curr, 0 + break-if-= + { + var words/ecx: (addr handle word) <- get curr, data + var curr-len/eax: int <- word-list-length words + compare curr-len, result + break-if-<= + result <- copy curr-len + } + curr-ah <- get curr, next + loop + } + return result +} + +fn function-height _self: (addr function) -> _/eax: int { + var self/esi: (addr function) <- copy _self + var body-ah/eax: (addr handle line) <- get self, body + var result/eax: int <- line-list-length body-ah + result <- increment # for function header + return result +} + +fn line-list-length lines: (addr handle line) -> _/eax: int { + var curr-ah/esi: (addr handle line) <- copy lines + var result/edi: int <- copy 0 + { + var curr/eax: (addr line) <- lookup *curr-ah + compare curr, 0 + break-if-= + curr-ah <- get curr, next + result <- increment + loop + } + return result +} -- cgit 1.4.1-2-gfad0