qute

A software analysis framework built around the QBE intermediate language

git clone https://git.8pit.net/qute.git

 1-- SPDX-FileCopyrightText: 2025 Sören Tempel <soeren+git@soeren-tempel.net>
 2--
 3-- SPDX-License-Identifier: GPL-3.0-only
 4
 5module Language.QBE.Simulator.Error (EvalError (..)) where
 6
 7import Control.Monad.Catch (Exception)
 8import Language.QBE.Simulator.Memory (Address, showAddr)
 9import Language.QBE.Types qualified as QBE
10
11-- TODO: Differentiate different typing errors.
12data EvalError
13  = TypingError
14  | UnknownVariable String
15  | EmptyStack
16  | EncounteredHalt
17  | InvalidReturnValue
18  | UnknownBlock QBE.BlockIdent
19  | InvalidMemoryLoad
20  | UnknownFunction QBE.GlobalIdent
21  | UnknownFunctionAddr Address
22  | MissingFunctionReturn
23  | FunctionReturnIgnored
24  | AssignedVoidReturnValue
25  | InvaldSubWordExtension
26  | InvalidAddressType
27  | OverlappingBlit Address Address
28  | FuncArgsMismatch QBE.GlobalIdent
29  | InvalidPhiPosition
30  | MemoryError String
31  deriving (Eq)
32
33instance Show EvalError where
34  show TypingError = "TypingError"
35  show (UnknownVariable s) = "UnknownVariable: '" ++ show s ++ "'"
36  show EmptyStack = "EmptyStack"
37  show EncounteredHalt = "EncounteredHalt"
38  show InvalidReturnValue = "InvalidReturnValue"
39  show (UnknownBlock block) = "UnknownBlock: '" ++ show block ++ "'"
40  show InvalidMemoryLoad = "InvalidMemoryLoad"
41  show (UnknownFunction ident) = "UnknownFunction: '" ++ show ident ++ "'"
42  show (UnknownFunctionAddr addr) = "UnknownFunctionAddr: '" ++ showAddr addr ++ "'"
43  show MissingFunctionReturn = "MissingFunctionReturn"
44  show FunctionReturnIgnored = "FunctionReturnIgnored"
45  show AssignedVoidReturnValue = "AssignedVoidReturnValue"
46  show InvaldSubWordExtension = "InvaldSubWordExtension"
47  show InvalidAddressType = "InvalidAddressType"
48  show (OverlappingBlit a1 a2) = "Addresses for Blit instruction overlap: " ++ show a1 ++ " and " ++ show a2
49  show (FuncArgsMismatch ident) = "FuncArgsMismatch: '" ++ show ident ++ "'"
50  show InvalidPhiPosition = "InvalidPhiPosition"
51  show (MemoryError msg) = "MemoryError: " ++ show msg
52
53instance Exception EvalError