unexpected byte #11

Closed
opened 2025-08-14 17:02:13 +00:00 by zupa · 2 comments

I have this code snippet below, sorry for the size.
It works as expected. However, if I remove the line writeASCIIByte('H'), it enters the default case in the switch statement, which should be impossible. I don't quite understand what's going on.

(I wanted to see if the allocated memory is zero initialized, or what is there.)

import mem
import io
import run

main() {
	length := 6
	address := mem.alloc(length)
	assert address != 0
	
	//fill(address)
	
	writeASCIIByte('H')

	writeASCIIByte(address[0])
	writeASCIIByte(address[1])
	writeASCIIByte(address[2])
	writeASCIIByte(address[3])
	writeASCIIByte(address[4])

	io.write("\n")

	mem.free(address, length)
}

fill(address *byte) {
	address[0] = 'H'
	address[1] = 'e'
	address[2] = 'l'
	address[3] = 'l'
	address[4] = 'o'
	address[5] = '\n'
}

_(_ any) {}

writeASCIIByte(b byte) {
	switch {
		b == 0  { io.write("{0x00}") }
		b == 1  { io.write("{0x01}") }
		b == 2  { io.write("{0x02}") }
		b == 3  { io.write("{0x03}") }
		b == 4  { io.write("{0x04}") }
		b == 5  { io.write("{0x05}") }
		b == 6  { io.write("{0x06}") }
		b == 7  { io.write("{0x07}") }
		b == 8  { io.write("{0x08}") }
		b == 9  { io.write("{0x09}") }
		b == 10 { io.write("{0x0A}") }
		b == 11 { io.write("{0x0B}") }
		b == 12 { io.write("{0x0C}") }
		b == 13 { io.write("{0x0D}") }
		b == 14 { io.write("{0x0E}") }
		b == 15 { io.write("{0x0F}") }
		b == 16 { io.write("{0x10}") }
		b == 17 { io.write("{0x11}") }
		b == 18 { io.write("{0x12}") }
		b == 19 { io.write("{0x13}") }
		b == 20 { io.write("{0x14}") }
		b == 21 { io.write("{0x15}") }
		b == 22 { io.write("{0x16}") }
		b == 23 { io.write("{0x17}") }
		b == 24 { io.write("{0x18}") }
		b == 25 { io.write("{0x19}") }
		b == 26 { io.write("{0x1A}") }
		b == 27 { io.write("{0x1B}") }
		b == 28 { io.write("{0x1C}") }
		b == 29 { io.write("{0x1D}") }
		b == 30 { io.write("{0x1E}") }
		b == 31 { io.write("{0x1F}") }
		b == 32 { io.write(" ") }
		b == 33 { io.write("!") }
		b == 34 { io.write("\"") }
		b == 35 { io.write("#") }
		b == 36 { io.write("$") }
		b == 37 { io.write("%") }
		b == 38 { io.write("&") }
		b == 39 { io.write("'") }
		b == 40 { io.write("(") }
		b == 41 { io.write("A") }
		b == 42 { io.write("*") }
		b == 43 { io.write("+") }
		b == 44 { io.write(",") }
		b == 45 { io.write("-") }
		b == 46 { io.write(".") }
		b == 47 { io.write("/") }
		b == 48 { io.write("0") }
		b == 49 { io.write("1") }
		b == 50 { io.write("2") }
		b == 51 { io.write("3") }
		b == 52 { io.write("4") }
		b == 53 { io.write("5") }
		b == 54 { io.write("6") }
		b == 55 { io.write("7") }
		b == 56 { io.write("8") }
		b == 57 { io.write("9") }
		b == 58 { io.write(":") }
		b == 59 { io.write(";") }
		b == 60 { io.write("<") }
		b == 61 { io.write("=") }
		b == 62 { io.write(">") }
		b == 63 { io.write("?") }
		b == 64 { io.write("@") }
		b == 65 { io.write("A") }
		b == 66 { io.write("B") }
		b == 67 { io.write("C") }
		b == 68 { io.write("D") }
		b == 69 { io.write("E") }
		b == 70 { io.write("F") }
		b == 71 { io.write("G") }
		b == 72 { io.write("H") }
		b == 73 { io.write("I") }
		b == 74 { io.write("J") }
		b == 75 { io.write("K") }
		b == 76 { io.write("L") }
		b == 77 { io.write("M") }
		b == 78 { io.write("N") }
		b == 79 { io.write("O") }
		b == 80 { io.write("P") }
		b == 81 { io.write("Q") }
		b == 82 { io.write("R") }
		b == 83 { io.write("S") }
		b == 84 { io.write("T") }
		b == 85 { io.write("U") }
		b == 86 { io.write("V") }
		b == 87 { io.write("W") }
		b == 88 { io.write("X") }
		b == 89 { io.write("Y") }
		b == 90 { io.write("Z") }
		b == 91 { io.write("[") }
		b == 92 { io.write("\\") }
		b == 93 { io.write("]") }
		b == 94 { io.write("^") }
		b == 95 { io.write("_") }
		b == 96 { io.write("`") }
		b == 97 { io.write("a") }
		b == 98 { io.write("b") }
		b == 99 { io.write("c") }
		b == 100 { io.write("d") }
		b == 101 { io.write("e") }
		b == 102 { io.write("f") }
		b == 103 { io.write("g") }
		b == 104 { io.write("h") }
		b == 105 { io.write("i") }
		b == 106 { io.write("j") }
		b == 107 { io.write("k") }
		b == 108 { io.write("l") }
		b == 109 { io.write("m") }
		b == 110 { io.write("n") }
		b == 111 { io.write("o") }
		b == 112 { io.write("p") }
		b == 113 { io.write("q") }
		b == 114 { io.write("r") }
		b == 115 { io.write("s") }
		b == 116 { io.write("t") }
		b == 117 { io.write("u") }
		b == 118 { io.write("v") }
		b == 119 { io.write("w") }
		b == 120 { io.write("x") }
		b == 121 { io.write("y") }
		b == 122 { io.write("z") }
		b == 123 { io.write("{") }
		b == 124 { io.write("|") }
		b == 125 { io.write("}") }
		b == 126 { io.write("~") }
		b == 127 { io.write("{0x7F}") }
		b == 128 { io.write("{0x80}") }
		b == 129 { io.write("{0x81}") }
		b == 130 { io.write("{0x82}") }
		b == 131 { io.write("{0x83}") }
		b == 132 { io.write("{0x84}") }
		b == 133 { io.write("{0x85}") }
		b == 134 { io.write("{0x86}") }
		b == 135 { io.write("{0x87}") }
		b == 136 { io.write("{0x88}") }
		b == 137 { io.write("{0x89}") }
		b == 138 { io.write("{0x8A}") }
		b == 139 { io.write("{0x8B}") }
		b == 140 { io.write("{0x8C}") }
		b == 141 { io.write("{0x8D}") }
		b == 142 { io.write("{0x8E}") }
		b == 143 { io.write("{0x8F}") }
		b == 144 { io.write("{0x90}") }
		b == 145 { io.write("{0x91}") }
		b == 146 { io.write("{0x92}") }
		b == 147 { io.write("{0x93}") }
		b == 148 { io.write("{0x94}") }
		b == 149 { io.write("{0x95}") }
		b == 150 { io.write("{0x96}") }
		b == 151 { io.write("{0x97}") }
		b == 152 { io.write("{0x98}") }
		b == 153 { io.write("{0x99}") }
		b == 154 { io.write("{0x9A}") }
		b == 155 { io.write("{0x9B}") }
		b == 156 { io.write("{0x9C}") }
		b == 157 { io.write("{0x9D}") }
		b == 158 { io.write("{0x9E}") }
		b == 159 { io.write("{0x9F}") }
		b == 160 { io.write("{0xA0}") }
		b == 161 { io.write("{0xA1}") }
		b == 162 { io.write("{0xA2}") }
		b == 163 { io.write("{0xA3}") }
		b == 164 { io.write("{0xA4}") }
		b == 165 { io.write("{0xA5}") }
		b == 166 { io.write("{0xA6}") }
		b == 167 { io.write("{0xA7}") }
		b == 168 { io.write("{0xA8}") }
		b == 169 { io.write("{0xA9}") }
		b == 170 { io.write("{0xAA}") }
		b == 171 { io.write("{0xAB}") }
		b == 172 { io.write("{0xAC}") }
		b == 173 { io.write("{0xAD}") }
		b == 174 { io.write("{0xAE}") }
		b == 175 { io.write("{0xAF}") }
		b == 176 { io.write("{0xB0}") }
		b == 177 { io.write("{0xB1}") }
		b == 178 { io.write("{0xB2}") }
		b == 179 { io.write("{0xB3}") }
		b == 180 { io.write("{0xB4}") }
		b == 181 { io.write("{0xB5}") }
		b == 182 { io.write("{0xB6}") }
		b == 183 { io.write("{0xB7}") }
		b == 184 { io.write("{0xB8}") }
		b == 185 { io.write("{0xB9}") }
		b == 186 { io.write("{0xBA}") }
		b == 187 { io.write("{0xBB}") }
		b == 188 { io.write("{0xBC}") }
		b == 189 { io.write("{0xBD}") }
		b == 190 { io.write("{0xBE}") }
		b == 191 { io.write("{0xBF}") }
		b == 192 { io.write("{0xC0}") }
		b == 193 { io.write("{0xC1}") }
		b == 194 { io.write("{0xC2}") }
		b == 195 { io.write("{0xC3}") }
		b == 196 { io.write("{0xC4}") }
		b == 197 { io.write("{0xC5}") }
		b == 198 { io.write("{0xC6}") }
		b == 199 { io.write("{0xC7}") }
		b == 200 { io.write("{0xC8}") }
		b == 201 { io.write("{0xC9}") }
		b == 202 { io.write("{0xCA}") }
		b == 203 { io.write("{0xCB}") }
		b == 204 { io.write("{0xCC}") }
		b == 205 { io.write("{0xCD}") }
		b == 206 { io.write("{0xCE}") }
		b == 207 { io.write("{0xCF}") }
		b == 208 { io.write("{0xD0}") }
		b == 209 { io.write("{0xD1}") }
		b == 210 { io.write("{0xD2}") }
		b == 211 { io.write("{0xD3}") }
		b == 212 { io.write("{0xD4}") }
		b == 213 { io.write("{0xD5}") }
		b == 214 { io.write("{0xD6}") }
		b == 215 { io.write("{0xD7}") }
		b == 216 { io.write("{0xD8}") }
		b == 217 { io.write("{0xD9}") }
		b == 218 { io.write("{0xDA}") }
		b == 219 { io.write("{0xDB}") }
		b == 220 { io.write("{0xDC}") }
		b == 221 { io.write("{0xDD}") }
		b == 222 { io.write("{0xDE}") }
		b == 223 { io.write("{0xDF}") }
		b == 224 { io.write("{0xE0}") }
		b == 225 { io.write("{0xE1}") }
		b == 226 { io.write("{0xE2}") }
		b == 227 { io.write("{0xE3}") }
		b == 228 { io.write("{0xE4}") }
		b == 229 { io.write("{0xE5}") }
		b == 230 { io.write("{0xE6}") }
		b == 231 { io.write("{0xE7}") }
		b == 232 { io.write("{0xE8}") }
		b == 233 { io.write("{0xE9}") }
		b == 234 { io.write("{0xEA}") }
		b == 235 { io.write("{0xEB}") }
		b == 236 { io.write("{0xEC}") }
		b == 237 { io.write("{0xED}") }
		b == 238 { io.write("{0xEE}") }
		b == 239 { io.write("{0xEF}") }
		b == 240 { io.write("{0xF0}") }
		b == 241 { io.write("{0xF1}") }
		b == 242 { io.write("{0xF2}") }
		b == 243 { io.write("{0xF3}") }
		b == 244 { io.write("{0xF4}") }
		b == 245 { io.write("{0xF5}") }
		b == 246 { io.write("{0xF6}") }
		b == 247 { io.write("{0xF7}") }
		b == 248 { io.write("{0xF8}") }
		b == 249 { io.write("{0xF9}") }
		b == 250 { io.write("{0xFA}") }
		b == 251 { io.write("{0xFB}") }
		b == 252 { io.write("{0xFC}") }
		b == 253 { io.write("{0xFD}") }
		b == 254 { io.write("{0xFE}") }
		b == 255 { io.write("{0xFF}") }
		_ {
			io.write("unexpected byte")
			run.crash()
		}
	}
}
I have this code snippet below, sorry for the size. It works as expected. However, if I remove the line `writeASCIIByte('H')`, it enters the default case in the switch statement, which should be impossible. I don't quite understand what's going on. (I wanted to see if the allocated memory is zero initialized, or what is there.) ``` import mem import io import run main() { length := 6 address := mem.alloc(length) assert address != 0 //fill(address) writeASCIIByte('H') writeASCIIByte(address[0]) writeASCIIByte(address[1]) writeASCIIByte(address[2]) writeASCIIByte(address[3]) writeASCIIByte(address[4]) io.write("\n") mem.free(address, length) } fill(address *byte) { address[0] = 'H' address[1] = 'e' address[2] = 'l' address[3] = 'l' address[4] = 'o' address[5] = '\n' } _(_ any) {} writeASCIIByte(b byte) { switch { b == 0 { io.write("{0x00}") } b == 1 { io.write("{0x01}") } b == 2 { io.write("{0x02}") } b == 3 { io.write("{0x03}") } b == 4 { io.write("{0x04}") } b == 5 { io.write("{0x05}") } b == 6 { io.write("{0x06}") } b == 7 { io.write("{0x07}") } b == 8 { io.write("{0x08}") } b == 9 { io.write("{0x09}") } b == 10 { io.write("{0x0A}") } b == 11 { io.write("{0x0B}") } b == 12 { io.write("{0x0C}") } b == 13 { io.write("{0x0D}") } b == 14 { io.write("{0x0E}") } b == 15 { io.write("{0x0F}") } b == 16 { io.write("{0x10}") } b == 17 { io.write("{0x11}") } b == 18 { io.write("{0x12}") } b == 19 { io.write("{0x13}") } b == 20 { io.write("{0x14}") } b == 21 { io.write("{0x15}") } b == 22 { io.write("{0x16}") } b == 23 { io.write("{0x17}") } b == 24 { io.write("{0x18}") } b == 25 { io.write("{0x19}") } b == 26 { io.write("{0x1A}") } b == 27 { io.write("{0x1B}") } b == 28 { io.write("{0x1C}") } b == 29 { io.write("{0x1D}") } b == 30 { io.write("{0x1E}") } b == 31 { io.write("{0x1F}") } b == 32 { io.write(" ") } b == 33 { io.write("!") } b == 34 { io.write("\"") } b == 35 { io.write("#") } b == 36 { io.write("$") } b == 37 { io.write("%") } b == 38 { io.write("&") } b == 39 { io.write("'") } b == 40 { io.write("(") } b == 41 { io.write("A") } b == 42 { io.write("*") } b == 43 { io.write("+") } b == 44 { io.write(",") } b == 45 { io.write("-") } b == 46 { io.write(".") } b == 47 { io.write("/") } b == 48 { io.write("0") } b == 49 { io.write("1") } b == 50 { io.write("2") } b == 51 { io.write("3") } b == 52 { io.write("4") } b == 53 { io.write("5") } b == 54 { io.write("6") } b == 55 { io.write("7") } b == 56 { io.write("8") } b == 57 { io.write("9") } b == 58 { io.write(":") } b == 59 { io.write(";") } b == 60 { io.write("<") } b == 61 { io.write("=") } b == 62 { io.write(">") } b == 63 { io.write("?") } b == 64 { io.write("@") } b == 65 { io.write("A") } b == 66 { io.write("B") } b == 67 { io.write("C") } b == 68 { io.write("D") } b == 69 { io.write("E") } b == 70 { io.write("F") } b == 71 { io.write("G") } b == 72 { io.write("H") } b == 73 { io.write("I") } b == 74 { io.write("J") } b == 75 { io.write("K") } b == 76 { io.write("L") } b == 77 { io.write("M") } b == 78 { io.write("N") } b == 79 { io.write("O") } b == 80 { io.write("P") } b == 81 { io.write("Q") } b == 82 { io.write("R") } b == 83 { io.write("S") } b == 84 { io.write("T") } b == 85 { io.write("U") } b == 86 { io.write("V") } b == 87 { io.write("W") } b == 88 { io.write("X") } b == 89 { io.write("Y") } b == 90 { io.write("Z") } b == 91 { io.write("[") } b == 92 { io.write("\\") } b == 93 { io.write("]") } b == 94 { io.write("^") } b == 95 { io.write("_") } b == 96 { io.write("`") } b == 97 { io.write("a") } b == 98 { io.write("b") } b == 99 { io.write("c") } b == 100 { io.write("d") } b == 101 { io.write("e") } b == 102 { io.write("f") } b == 103 { io.write("g") } b == 104 { io.write("h") } b == 105 { io.write("i") } b == 106 { io.write("j") } b == 107 { io.write("k") } b == 108 { io.write("l") } b == 109 { io.write("m") } b == 110 { io.write("n") } b == 111 { io.write("o") } b == 112 { io.write("p") } b == 113 { io.write("q") } b == 114 { io.write("r") } b == 115 { io.write("s") } b == 116 { io.write("t") } b == 117 { io.write("u") } b == 118 { io.write("v") } b == 119 { io.write("w") } b == 120 { io.write("x") } b == 121 { io.write("y") } b == 122 { io.write("z") } b == 123 { io.write("{") } b == 124 { io.write("|") } b == 125 { io.write("}") } b == 126 { io.write("~") } b == 127 { io.write("{0x7F}") } b == 128 { io.write("{0x80}") } b == 129 { io.write("{0x81}") } b == 130 { io.write("{0x82}") } b == 131 { io.write("{0x83}") } b == 132 { io.write("{0x84}") } b == 133 { io.write("{0x85}") } b == 134 { io.write("{0x86}") } b == 135 { io.write("{0x87}") } b == 136 { io.write("{0x88}") } b == 137 { io.write("{0x89}") } b == 138 { io.write("{0x8A}") } b == 139 { io.write("{0x8B}") } b == 140 { io.write("{0x8C}") } b == 141 { io.write("{0x8D}") } b == 142 { io.write("{0x8E}") } b == 143 { io.write("{0x8F}") } b == 144 { io.write("{0x90}") } b == 145 { io.write("{0x91}") } b == 146 { io.write("{0x92}") } b == 147 { io.write("{0x93}") } b == 148 { io.write("{0x94}") } b == 149 { io.write("{0x95}") } b == 150 { io.write("{0x96}") } b == 151 { io.write("{0x97}") } b == 152 { io.write("{0x98}") } b == 153 { io.write("{0x99}") } b == 154 { io.write("{0x9A}") } b == 155 { io.write("{0x9B}") } b == 156 { io.write("{0x9C}") } b == 157 { io.write("{0x9D}") } b == 158 { io.write("{0x9E}") } b == 159 { io.write("{0x9F}") } b == 160 { io.write("{0xA0}") } b == 161 { io.write("{0xA1}") } b == 162 { io.write("{0xA2}") } b == 163 { io.write("{0xA3}") } b == 164 { io.write("{0xA4}") } b == 165 { io.write("{0xA5}") } b == 166 { io.write("{0xA6}") } b == 167 { io.write("{0xA7}") } b == 168 { io.write("{0xA8}") } b == 169 { io.write("{0xA9}") } b == 170 { io.write("{0xAA}") } b == 171 { io.write("{0xAB}") } b == 172 { io.write("{0xAC}") } b == 173 { io.write("{0xAD}") } b == 174 { io.write("{0xAE}") } b == 175 { io.write("{0xAF}") } b == 176 { io.write("{0xB0}") } b == 177 { io.write("{0xB1}") } b == 178 { io.write("{0xB2}") } b == 179 { io.write("{0xB3}") } b == 180 { io.write("{0xB4}") } b == 181 { io.write("{0xB5}") } b == 182 { io.write("{0xB6}") } b == 183 { io.write("{0xB7}") } b == 184 { io.write("{0xB8}") } b == 185 { io.write("{0xB9}") } b == 186 { io.write("{0xBA}") } b == 187 { io.write("{0xBB}") } b == 188 { io.write("{0xBC}") } b == 189 { io.write("{0xBD}") } b == 190 { io.write("{0xBE}") } b == 191 { io.write("{0xBF}") } b == 192 { io.write("{0xC0}") } b == 193 { io.write("{0xC1}") } b == 194 { io.write("{0xC2}") } b == 195 { io.write("{0xC3}") } b == 196 { io.write("{0xC4}") } b == 197 { io.write("{0xC5}") } b == 198 { io.write("{0xC6}") } b == 199 { io.write("{0xC7}") } b == 200 { io.write("{0xC8}") } b == 201 { io.write("{0xC9}") } b == 202 { io.write("{0xCA}") } b == 203 { io.write("{0xCB}") } b == 204 { io.write("{0xCC}") } b == 205 { io.write("{0xCD}") } b == 206 { io.write("{0xCE}") } b == 207 { io.write("{0xCF}") } b == 208 { io.write("{0xD0}") } b == 209 { io.write("{0xD1}") } b == 210 { io.write("{0xD2}") } b == 211 { io.write("{0xD3}") } b == 212 { io.write("{0xD4}") } b == 213 { io.write("{0xD5}") } b == 214 { io.write("{0xD6}") } b == 215 { io.write("{0xD7}") } b == 216 { io.write("{0xD8}") } b == 217 { io.write("{0xD9}") } b == 218 { io.write("{0xDA}") } b == 219 { io.write("{0xDB}") } b == 220 { io.write("{0xDC}") } b == 221 { io.write("{0xDD}") } b == 222 { io.write("{0xDE}") } b == 223 { io.write("{0xDF}") } b == 224 { io.write("{0xE0}") } b == 225 { io.write("{0xE1}") } b == 226 { io.write("{0xE2}") } b == 227 { io.write("{0xE3}") } b == 228 { io.write("{0xE4}") } b == 229 { io.write("{0xE5}") } b == 230 { io.write("{0xE6}") } b == 231 { io.write("{0xE7}") } b == 232 { io.write("{0xE8}") } b == 233 { io.write("{0xE9}") } b == 234 { io.write("{0xEA}") } b == 235 { io.write("{0xEB}") } b == 236 { io.write("{0xEC}") } b == 237 { io.write("{0xED}") } b == 238 { io.write("{0xEE}") } b == 239 { io.write("{0xEF}") } b == 240 { io.write("{0xF0}") } b == 241 { io.write("{0xF1}") } b == 242 { io.write("{0xF2}") } b == 243 { io.write("{0xF3}") } b == 244 { io.write("{0xF4}") } b == 245 { io.write("{0xF5}") } b == 246 { io.write("{0xF6}") } b == 247 { io.write("{0xF7}") } b == 248 { io.write("{0xF8}") } b == 249 { io.write("{0xF9}") } b == 250 { io.write("{0xFA}") } b == 251 { io.write("{0xFB}") } b == 252 { io.write("{0xFC}") } b == 253 { io.write("{0xFD}") } b == 254 { io.write("{0xFE}") } b == 255 { io.write("{0xFF}") } _ { io.write("unexpected byte") run.crash() } } } ```
ed self-assigned this 2025-08-14 17:38:55 +00:00
Owner

Fixed after cli/q@f966940dfb.

Fixed after https://git.urbach.dev/cli/q/commit/f966940dfb76b246408bdb50393d8c479c20d297.
ed added spent time 2025-08-14 19:31:33 +00:00
2 hours
Author

Confirmed, thanks!

Confirmed, thanks!
zupa closed this issue 2025-08-14 19:43:03 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Total time spent: 2 hours
ed
2 hours
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cli/q#11
No description provided.