From 5396e24cba8390ca2d70d99c7e8772eee4ec3a11 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Tue, 18 May 2021 13:01:59 -0700 Subject: . --- html/shell/cell.mu.html | 377 ++++++++++++++++++++++++------------------------ 1 file changed, 189 insertions(+), 188 deletions(-) (limited to 'html/shell/cell.mu.html') diff --git a/html/shell/cell.mu.html b/html/shell/cell.mu.html index 1b15ee5f..5386139c 100644 --- a/html/shell/cell.mu.html +++ b/html/shell/cell.mu.html @@ -73,194 +73,195 @@ if ('onhashchange' in window) { 15 # type 6: keyboard 16 keyboard-data: (handle gap-buffer) 17 # TODO: array, (associative) table - 18 } - 19 - 20 fn allocate-symbol _out: (addr handle cell) { - 21 var out/eax: (addr handle cell) <- copy _out - 22 allocate out - 23 var out-addr/eax: (addr cell) <- lookup *out - 24 var type/ecx: (addr int) <- get out-addr, type - 25 copy-to *type, 2/symbol - 26 var dest-ah/eax: (addr handle stream byte) <- get out-addr, text-data - 27 populate-stream dest-ah, 0x40/max-symbol-size - 28 } - 29 - 30 fn initialize-symbol _out: (addr handle cell), val: (addr array byte) { - 31 var out/eax: (addr handle cell) <- copy _out - 32 var out-addr/eax: (addr cell) <- lookup *out - 33 var dest-ah/eax: (addr handle stream byte) <- get out-addr, text-data - 34 var dest/eax: (addr stream byte) <- lookup *dest-ah - 35 write dest, val - 36 } - 37 - 38 fn new-symbol out: (addr handle cell), val: (addr array byte) { - 39 allocate-symbol out - 40 initialize-symbol out, val - 41 } - 42 - 43 fn symbol-equal? _in: (addr cell), name: (addr array byte) -> _/eax: boolean { - 44 var in/esi: (addr cell) <- copy _in - 45 var in-type/eax: (addr int) <- get in, type - 46 compare *in-type, 2/symbol - 47 { - 48 break-if-= - 49 return 0/false - 50 } - 51 var in-data-ah/eax: (addr handle stream byte) <- get in, text-data - 52 var in-data/eax: (addr stream byte) <- lookup *in-data-ah - 53 var result/eax: boolean <- stream-data-equal? in-data, name - 54 return result - 55 } - 56 - 57 fn allocate-stream _out: (addr handle cell) { - 58 var out/eax: (addr handle cell) <- copy _out - 59 allocate out - 60 var out-addr/eax: (addr cell) <- lookup *out - 61 var type/ecx: (addr int) <- get out-addr, type - 62 copy-to *type, 3/stream - 63 var dest-ah/eax: (addr handle stream byte) <- get out-addr, text-data - 64 populate-stream dest-ah, 0x40/max-stream-size - 65 } - 66 - 67 fn allocate-number _out: (addr handle cell) { - 68 var out/eax: (addr handle cell) <- copy _out - 69 allocate out - 70 var out-addr/eax: (addr cell) <- lookup *out - 71 var type/ecx: (addr int) <- get out-addr, type - 72 copy-to *type, 1/number - 73 } - 74 - 75 fn initialize-integer _out: (addr handle cell), n: int { - 76 var out/eax: (addr handle cell) <- copy _out - 77 var out-addr/eax: (addr cell) <- lookup *out - 78 var dest-addr/eax: (addr float) <- get out-addr, number-data - 79 var src/xmm0: float <- convert n - 80 copy-to *dest-addr, src - 81 } - 82 - 83 fn new-integer out: (addr handle cell), n: int { - 84 allocate-number out - 85 initialize-integer out, n - 86 } - 87 - 88 fn initialize-float _out: (addr handle cell), n: float { - 89 var out/eax: (addr handle cell) <- copy _out - 90 var out-addr/eax: (addr cell) <- lookup *out - 91 var dest-ah/eax: (addr float) <- get out-addr, number-data - 92 var src/xmm0: float <- copy n - 93 copy-to *dest-ah, src - 94 } - 95 - 96 fn new-float out: (addr handle cell), n: float { - 97 allocate-number out - 98 initialize-float out, n - 99 } -100 -101 fn allocate-pair out: (addr handle cell) { -102 allocate out -103 # new cells have type pair by default -104 } -105 -106 fn initialize-pair _out: (addr handle cell), left: (handle cell), right: (handle cell) { -107 var out/eax: (addr handle cell) <- copy _out -108 var out-addr/eax: (addr cell) <- lookup *out -109 var dest-ah/ecx: (addr handle cell) <- get out-addr, left -110 copy-handle left, dest-ah -111 dest-ah <- get out-addr, right -112 copy-handle right, dest-ah -113 } -114 -115 fn new-pair out: (addr handle cell), left: (handle cell), right: (handle cell) { -116 allocate-pair out -117 initialize-pair out, left, right -118 } -119 -120 fn nil out: (addr handle cell) { -121 allocate-pair out -122 } -123 -124 fn allocate-primitive-function _out: (addr handle cell) { -125 var out/eax: (addr handle cell) <- copy _out -126 allocate out -127 var out-addr/eax: (addr cell) <- lookup *out -128 var type/ecx: (addr int) <- get out-addr, type -129 copy-to *type, 4/primitive-function -130 } -131 -132 fn initialize-primitive-function _out: (addr handle cell), n: int { -133 var out/eax: (addr handle cell) <- copy _out -134 var out-addr/eax: (addr cell) <- lookup *out -135 var dest-addr/eax: (addr int) <- get out-addr, index-data -136 var src/ecx: int <- copy n -137 copy-to *dest-addr, src -138 } -139 -140 fn new-primitive-function out: (addr handle cell), n: int { -141 allocate-primitive-function out -142 initialize-primitive-function out, n -143 } -144 -145 fn allocate-screen _out: (addr handle cell) { -146 var out/eax: (addr handle cell) <- copy _out -147 allocate out -148 var out-addr/eax: (addr cell) <- lookup *out -149 var type/ecx: (addr int) <- get out-addr, type -150 copy-to *type, 5/screen -151 } -152 -153 fn new-fake-screen _out: (addr handle cell), width: int, height: int, pixel-graphics?: boolean { -154 var out/eax: (addr handle cell) <- copy _out -155 allocate-screen out -156 var out-addr/eax: (addr cell) <- lookup *out -157 var dest-ah/eax: (addr handle screen) <- get out-addr, screen-data -158 allocate dest-ah -159 var dest-addr/eax: (addr screen) <- lookup *dest-ah -160 initialize-screen dest-addr, width, height, pixel-graphics? -161 } -162 -163 fn clear-screen-cell _self-ah: (addr handle cell) { -164 var self-ah/eax: (addr handle cell) <- copy _self-ah -165 var self/eax: (addr cell) <- lookup *self-ah -166 compare self, 0 -167 { -168 break-if-!= -169 return -170 } -171 var screen-ah/eax: (addr handle screen) <- get self, screen-data -172 var screen/eax: (addr screen) <- lookup *screen-ah -173 clear-screen screen -174 } -175 -176 fn allocate-keyboard _out: (addr handle cell) { -177 var out/eax: (addr handle cell) <- copy _out -178 allocate out -179 var out-addr/eax: (addr cell) <- lookup *out -180 var type/ecx: (addr int) <- get out-addr, type -181 copy-to *type, 6/keyboard -182 } -183 -184 fn new-fake-keyboard _out: (addr handle cell), capacity: int { -185 var out/eax: (addr handle cell) <- copy _out -186 allocate-keyboard out -187 var out-addr/eax: (addr cell) <- lookup *out -188 var dest-ah/eax: (addr handle gap-buffer) <- get out-addr, keyboard-data -189 allocate dest-ah -190 var dest-addr/eax: (addr gap-buffer) <- lookup *dest-ah -191 initialize-gap-buffer dest-addr, capacity -192 } -193 -194 fn rewind-keyboard-cell _self-ah: (addr handle cell) { -195 var self-ah/eax: (addr handle cell) <- copy _self-ah -196 var self/eax: (addr cell) <- lookup *self-ah -197 compare self, 0 -198 { -199 break-if-!= -200 return -201 } -202 var keyboard-ah/eax: (addr handle gap-buffer) <- get self, keyboard-data -203 var keyboard/eax: (addr gap-buffer) <- lookup *keyboard-ah -204 rewind-gap-buffer keyboard -205 } + 18 # if you add types here, don't forget to update cell-isomorphic? + 19 } + 20 + 21 fn allocate-symbol _out: (addr handle cell) { + 22 var out/eax: (addr handle cell) <- copy _out + 23 allocate out + 24 var out-addr/eax: (addr cell) <- lookup *out + 25 var type/ecx: (addr int) <- get out-addr, type + 26 copy-to *type, 2/symbol + 27 var dest-ah/eax: (addr handle stream byte) <- get out-addr, text-data + 28 populate-stream dest-ah, 0x40/max-symbol-size + 29 } + 30 + 31 fn initialize-symbol _out: (addr handle cell), val: (addr array byte) { + 32 var out/eax: (addr handle cell) <- copy _out + 33 var out-addr/eax: (addr cell) <- lookup *out + 34 var dest-ah/eax: (addr handle stream byte) <- get out-addr, text-data + 35 var dest/eax: (addr stream byte) <- lookup *dest-ah + 36 write dest, val + 37 } + 38 + 39 fn new-symbol out: (addr handle cell), val: (addr array byte) { + 40 allocate-symbol out + 41 initialize-symbol out, val + 42 } + 43 + 44 fn symbol-equal? _in: (addr cell), name: (addr array byte) -> _/eax: boolean { + 45 var in/esi: (addr cell) <- copy _in + 46 var in-type/eax: (addr int) <- get in, type + 47 compare *in-type, 2/symbol + 48 { + 49 break-if-= + 50 return 0/false + 51 } + 52 var in-data-ah/eax: (addr handle stream byte) <- get in, text-data + 53 var in-data/eax: (addr stream byte) <- lookup *in-data-ah + 54 var result/eax: boolean <- stream-data-equal? in-data, name + 55 return result + 56 } + 57 + 58 fn allocate-stream _out: (addr handle cell) { + 59 var out/eax: (addr handle cell) <- copy _out + 60 allocate out + 61 var out-addr/eax: (addr cell) <- lookup *out + 62 var type/ecx: (addr int) <- get out-addr, type + 63 copy-to *type, 3/stream + 64 var dest-ah/eax: (addr handle stream byte) <- get out-addr, text-data + 65 populate-stream dest-ah, 0x40/max-stream-size + 66 } + 67 + 68 fn allocate-number _out: (addr handle cell) { + 69 var out/eax: (addr handle cell) <- copy _out + 70 allocate out + 71 var out-addr/eax: (addr cell) <- lookup *out + 72 var type/ecx: (addr int) <- get out-addr, type + 73 copy-to *type, 1/number + 74 } + 75 + 76 fn initialize-integer _out: (addr handle cell), n: int { + 77 var out/eax: (addr handle cell) <- copy _out + 78 var out-addr/eax: (addr cell) <- lookup *out + 79 var dest-addr/eax: (addr float) <- get out-addr, number-data + 80 var src/xmm0: float <- convert n + 81 copy-to *dest-addr, src + 82 } + 83 + 84 fn new-integer out: (addr handle cell), n: int { + 85 allocate-number out + 86 initialize-integer out, n + 87 } + 88 + 89 fn initialize-float _out: (addr handle cell), n: float { + 90 var out/eax: (addr handle cell) <- copy _out + 91 var out-addr/eax: (addr cell) <- lookup *out + 92 var dest-ah/eax: (addr float) <- get out-addr, number-data + 93 var src/xmm0: float <- copy n + 94 copy-to *dest-ah, src + 95 } + 96 + 97 fn new-float out: (addr handle cell), n: float { + 98 allocate-number out + 99 initialize-float out, n +100 } +101 +102 fn allocate-pair out: (addr handle cell) { +103 allocate out +104 # new cells have type pair by default +105 } +106 +107 fn initialize-pair _out: (addr handle cell), left: (handle cell), right: (handle cell) { +108 var out/eax: (addr handle cell) <- copy _out +109 var out-addr/eax: (addr cell) <- lookup *out +110 var dest-ah/ecx: (addr handle cell) <- get out-addr, left +111 copy-handle left, dest-ah +112 dest-ah <- get out-addr, right +113 copy-handle right, dest-ah +114 } +115 +116 fn new-pair out: (addr handle cell), left: (handle cell), right: (handle cell) { +117 allocate-pair out +118 initialize-pair out, left, right +119 } +120 +121 fn nil out: (addr handle cell) { +122 allocate-pair out +123 } +124 +125 fn allocate-primitive-function _out: (addr handle cell) { +126 var out/eax: (addr handle cell) <- copy _out +127 allocate out +128 var out-addr/eax: (addr cell) <- lookup *out +129 var type/ecx: (addr int) <- get out-addr, type +130 copy-to *type, 4/primitive-function +131 } +132 +133 fn initialize-primitive-function _out: (addr handle cell), n: int { +134 var out/eax: (addr handle cell) <- copy _out +135 var out-addr/eax: (addr cell) <- lookup *out +136 var dest-addr/eax: (addr int) <- get out-addr, index-data +137 var src/ecx: int <- copy n +138 copy-to *dest-addr, src +139 } +140 +141 fn new-primitive-function out: (addr handle cell), n: int { +142 allocate-primitive-function out +143 initialize-primitive-function out, n +144 } +145 +146 fn allocate-screen _out: (addr handle cell) { +147 var out/eax: (addr handle cell) <- copy _out +148 allocate out +149 var out-addr/eax: (addr cell) <- lookup *out +150 var type/ecx: (addr int) <- get out-addr, type +151 copy-to *type, 5/screen +152 } +153 +154 fn new-fake-screen _out: (addr handle cell), width: int, height: int, pixel-graphics?: boolean { +155 var out/eax: (addr handle cell) <- copy _out +156 allocate-screen out +157 var out-addr/eax: (addr cell) <- lookup *out +158 var dest-ah/eax: (addr handle screen) <- get out-addr, screen-data +159 allocate dest-ah +160 var dest-addr/eax: (addr screen) <- lookup *dest-ah +161 initialize-screen dest-addr, width, height, pixel-graphics? +162 } +163 +164 fn clear-screen-cell _self-ah: (addr handle cell) { +165 var self-ah/eax: (addr handle cell) <- copy _self-ah +166 var self/eax: (addr cell) <- lookup *self-ah +167 compare self, 0 +168 { +169 break-if-!= +170 return +171 } +172 var screen-ah/eax: (addr handle screen) <- get self, screen-data +173 var screen/eax: (addr screen) <- lookup *screen-ah +174 clear-screen screen +175 } +176 +177 fn allocate-keyboard _out: (addr handle cell) { +178 var out/eax: (addr handle cell) <- copy _out +179 allocate out +180 var out-addr/eax: (addr cell) <- lookup *out +181 var type/ecx: (addr int) <- get out-addr, type +182 copy-to *type, 6/keyboard +183 } +184 +185 fn new-fake-keyboard _out: (addr handle cell), capacity: int { +186 var out/eax: (addr handle cell) <- copy _out +187 allocate-keyboard out +188 var out-addr/eax: (addr cell) <- lookup *out +189 var dest-ah/eax: (addr handle gap-buffer) <- get out-addr, keyboard-data +190 allocate dest-ah +191 var dest-addr/eax: (addr gap-buffer) <- lookup *dest-ah +192 initialize-gap-buffer dest-addr, capacity +193 } +194 +195 fn rewind-keyboard-cell _self-ah: (addr handle cell) { +196 var self-ah/eax: (addr handle cell) <- copy _self-ah +197 var self/eax: (addr cell) <- lookup *self-ah +198 compare self, 0 +199 { +200 break-if-!= +201 return +202 } +203 var keyboard-ah/eax: (addr handle gap-buffer) <- get self, keyboard-data +204 var keyboard/eax: (addr gap-buffer) <- lookup *keyboard-ah +205 rewind-gap-buffer keyboard +206 } -- cgit 1.4.1-2-gfad0