From e0b8eddb5b2463a6a2890fd2a089cc3cc1a0f711 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Wed, 23 Jun 2021 13:19:20 -0700 Subject: . --- html/shell/int-stack.mu.html | 135 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 html/shell/int-stack.mu.html (limited to 'html/shell/int-stack.mu.html') diff --git a/html/shell/int-stack.mu.html b/html/shell/int-stack.mu.html new file mode 100644 index 00000000..0333dc5d --- /dev/null +++ b/html/shell/int-stack.mu.html @@ -0,0 +1,135 @@ + + + + +Mu - shell/int-stack.mu + + + + + + + + + + +https://github.com/akkartik/mu/blob/main/shell/int-stack.mu +
+ 1 type int-stack {
+ 2   data: (handle array int)
+ 3   top: int
+ 4 }
+ 5 
+ 6 fn initialize-int-stack _self: (addr int-stack), n: int {
+ 7   var self/esi: (addr int-stack) <- copy _self
+ 8   var d/edi: (addr handle array int) <- get self, data
+ 9   populate d, n
+10   var top/eax: (addr int) <- get self, top
+11   copy-to *top, 0
+12 }
+13 
+14 fn push-int-stack _self: (addr int-stack), _val: int {
+15   var self/esi: (addr int-stack) <- copy _self
+16   var top-addr/ecx: (addr int) <- get self, top
+17   var data-ah/edx: (addr handle array int) <- get self, data
+18   var data/eax: (addr array int) <- lookup *data-ah
+19   var top/edx: int <- copy *top-addr
+20   var dest-addr/edx: (addr int) <- index data, top
+21   var val/eax: int <- copy _val
+22   copy-to *dest-addr, val
+23   add-to *top-addr, 1
+24 }
+25 
+26 fn pop-int-stack _self: (addr int-stack) -> _/eax: int {
+27   var self/esi: (addr int-stack) <- copy _self
+28   var top-addr/ecx: (addr int) <- get self, top
+29   {
+30     compare *top-addr, 0
+31     break-if->
+32     return 0
+33   }
+34   subtract-from *top-addr, 1
+35   var data-ah/edx: (addr handle array int) <- get self, data
+36   var data/eax: (addr array int) <- lookup *data-ah
+37   var top/edx: int <- copy *top-addr
+38   var result-addr/eax: (addr int) <- index data, top
+39   var val/eax: int <- copy *result-addr
+40   return val
+41 }
+42 
+43 fn int-stack-empty? _self: (addr int-stack) -> _/eax: boolean {
+44   var self/esi: (addr int-stack) <- copy _self
+45   var top-addr/ecx: (addr int) <- get self, top
+46   compare *top-addr, 0
+47   {
+48     break-if-=
+49     return 0/false
+50   }
+51   return 1/true
+52 }
+53 
+54 fn int-stack-top _self: (addr int-stack) -> _/eax: int {
+55   var self/esi: (addr int-stack) <- copy _self
+56   var top-addr/ecx: (addr int) <- get self, top
+57   var top/ecx: int <- copy *top-addr
+58   {
+59     compare top, 0
+60     break-if->
+61     return 0
+62   }
+63   top <- decrement
+64   var data-ah/edx: (addr handle array int) <- get self, data
+65   var data/eax: (addr array int) <- lookup *data-ah
+66   var result-addr/eax: (addr int) <- index data, top
+67   var val/eax: int <- copy *result-addr
+68   return val
+69 }
+
+ + + -- cgit 1.4.1-2-gfad0