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 deriving (Eq)3233instance Show EvalError where34 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 a249 show (FuncArgsMismatch ident) = "FuncArgsMismatch: '" ++ show ident ++ "'"50 show InvalidPhiPosition = "InvalidPhiPosition"51 show (MemoryError msg) = "MemoryError: " ++ show msg5253instance Exception EvalError