@@ -259,6 +259,10 @@ bcc i (CONSTCASE r code def)
260 intConsts ((I _, _ ) : _) = True
260 intConsts ((I _, _ ) : _) = True
261 intConsts ((Ch _, _ ) : _) = True
261 intConsts ((Ch _, _ ) : _) = True
262+ intConsts ((B8 _, _ ) : _) = True
263+ intConsts ((B16 _, _ ) : _) = True
264+ intConsts ((B32 _, _ ) : _) = True
265+ intConsts ((B64 _, _ ) : _) = True
262 intConsts _ = False
266 intConsts _ = False
264 bigintConsts ((BI _, _ ) : _) = True
268 bigintConsts ((BI _, _ ) : _) = True
@@ -279,7 +283,18 @@ bcc i (CONSTCASE r code def)
279 iCase v (Ch b, bc) =
283 iCase v (Ch b, bc) =
280 indent i ++ "if (GETINT(" ++ v ++ ") == " ++ show (fromEnum b) ++ ") {\n"
284 indent i ++ "if (GETINT(" ++ v ++ ") == " ++ show (fromEnum b) ++ ") {\n"
281 ++ concatMap (bcc (i+1)) bc ++ indent i ++ "} else\n"
285 ++ concatMap (bcc (i+1)) bc ++ indent i ++ "} else\n"
282−
286+ iCase v (B8 w, bc) =
287+ indent i ++ "if (GETBITS8(" ++ v ++ ") == " ++ show (fromEnum w) ++ ") {\n"
288+ ++ concatMap (bcc (i+1)) bc ++ indent i ++ "} else\n"
289+ iCase v (B16 w, bc) =
290+ indent i ++ "if (GETBITS16(" ++ v ++ ") == " ++ show (fromEnum w) ++ ") {\n"
291+ ++ concatMap (bcc (i+1)) bc ++ indent i ++ "} else\n"
292+ iCase v (B32 w, bc) =
293+ indent i ++ "if (GETBITS32(" ++ v ++ ") == " ++ show (fromEnum w) ++ ") {\n"
294+ ++ concatMap (bcc (i+1)) bc ++ indent i ++ "} else\n"
295+ iCase v (B64 w, bc) =
296+ indent i ++ "if (GETBITS64(" ++ v ++ ") == " ++ show (fromEnum w) ++ ") {\n"
297+ ++ concatMap (bcc (i+1)) bc ++ indent i ++ "} else\n"
283 showCase i (t, bc) = indent i ++ "case " ++ show t ++ ":\n"
298 showCase i (t, bc) = indent i ++ "case " ++ show t ++ ":\n"
284 ++ concatMap (bcc (i+1)) bc ++
299 ++ concatMap (bcc (i+1)) bc ++
285 indent (i + 1) ++ "break;\n"
300 indent (i + 1) ++ "break;\n"