1-- SPDX-FileCopyrightText: 2025 Sören Tempel <soeren+git@soeren-tempel.net>2--3-- SPDX-License-Identifier: GPL-3.0-only45module Language.QBE.Simulator.Error (EvalError (..)) where67import Control.Monad.Catch (Exception)8import Language.QBE.Simulator.Memory (Address, showAddr)9import Language.QBE.Types qualified as QBE1011-- TODO: Differentiate different typing errors.12data EvalError13 = TypingError14 | UnknownVariable String15 | EmptyStack16 | EncounteredHalt17 | InvalidReturnValue18 | UnknownBlock QBE.BlockIdent19 | InvalidMemoryLoad20 | UnknownFunction QBE.GlobalIdent21 | UnknownFunctionAddr Address22 | MissingFunctionReturn23 | FunctionReturnIgnored24 | AssignedVoidReturnValue25 | InvaldSubWordExtension26 | InvalidAddressType27 | OverlappingBlit Address Address28 | FuncArgsMismatch QBE.GlobalIdent29 | InvalidPhiPosition30 | MemoryError String31 | -- | Terminate execution path in symbolic execution.32 TerminatePath33 deriving (Eq)3435instance Show EvalError where36 show TypingError = "TypingError"37 show (UnknownVariable s) = "UnknownVariable: '" ++ show s ++ "'"38 show EmptyStack = "EmptyStack"39 show EncounteredHalt = "EncounteredHalt"40 show InvalidReturnValue = "InvalidReturnValue"41 show (UnknownBlock block) = "UnknownBlock: '" ++ show block ++ "'"42 show InvalidMemoryLoad = "InvalidMemoryLoad"43 show (UnknownFunction ident) = "UnknownFunction: '" ++ show ident ++ "'"44 show (UnknownFunctionAddr addr) = "UnknownFunctionAddr: '" ++ showAddr addr ++ "'"45 show MissingFunctionReturn = "MissingFunctionReturn"46 show FunctionReturnIgnored = "FunctionReturnIgnored"47 show AssignedVoidReturnValue = "AssignedVoidReturnValue"48 show InvaldSubWordExtension = "InvaldSubWordExtension"49 show InvalidAddressType = "InvalidAddressType"50 show (OverlappingBlit a1 a2) = "Addresses for Blit instruction overlap: " ++ show a1 ++ " and " ++ show a251 show (FuncArgsMismatch ident) = "FuncArgsMismatch: '" ++ show ident ++ "'"52 show InvalidPhiPosition = "InvalidPhiPosition"53 show (MemoryError msg) = "MemoryError: " ++ show msg54 show TerminatePath = "TerminatePath"5556instance Exception EvalError