about summary refs log tree commit diff stats
path: root/shell/gap-buffer.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-06-06 12:39:03 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-06-06 12:39:03 -0700
commit8014210316809c9d59adc015ecc181337b42cf19 (patch)
treecec2c2a98bc5f4277ce8aa63b30774e7bfc7e29b /shell/gap-buffer.mu
parent3bdf3b1a7f146998078975e2f7c1d5e887f84e9f (diff)
downloadmu-8014210316809c9d59adc015ecc181337b42cf19.tar.gz
shell: support negative integer literals
We still don't support _any_ fractional literals, positive or negative.
Diffstat (limited to 'shell/gap-buffer.mu')
-rw-r--r--shell/gap-buffer.mu19
1 files changed, 19 insertions, 0 deletions
diff --git a/shell/gap-buffer.mu b/shell/gap-buffer.mu
index 409089cf..88285a43 100644
--- a/shell/gap-buffer.mu
+++ b/shell/gap-buffer.mu
@@ -1115,6 +1115,25 @@ fn read-from-gap-buffer _self: (addr gap-buffer) -> _/eax: grapheme {
   return 0/nul
 }
 
+fn put-back-from-gap-buffer _self: (addr gap-buffer) {
+  var self/esi: (addr gap-buffer) <- copy _self
+  # more in right?
+  var right/eax: (addr grapheme-stack) <- get self, right
+  var right-size/eax: int <- grapheme-stack-length right
+  var right-read-index-a/eax: (addr int) <- get self, right-read-index
+  compare *right-read-index-a, 0
+  {
+    break-if-<=
+    decrement *right-read-index-a
+    return
+  }
+  # more in left?
+  var left/eax: (addr grapheme-stack) <- get self, left
+  var left-size/eax: int <- grapheme-stack-length left
+  var left-read-index-a/eax: (addr int) <- get self, left-read-index
+  decrement *left-read-index-a
+}
+
 fn test-read-from-gap-buffer {
   var gap-storage: gap-buffer
   var gap/esi: (addr gap-buffer) <- address gap-storage