/* File: Errors */ /* Class: scriptError An error scanning or parsing the source code. */ /datum/scriptError var/message /// A message describing the problem. /datum/scriptError/New(msg=null) if(msg)message=msg /datum/scriptError/BadToken message="Unexpected token: " var/datum/token/token /datum/scriptError/BadToken/New(datum/token/t) token=t if(t&&t.line) message="[t.line]: [message]" if(istype(t))message+="[t.value]" else message+="[t]" /datum/scriptError/InvalidID parent_type=/datum/scriptError/BadToken message="Invalid identifier name: " /datum/scriptError/ReservedWord parent_type=/datum/scriptError/BadToken message="Identifer using reserved word: " /datum/scriptError/BadNumber parent_type=/datum/scriptError/BadToken message = "Bad number: " /datum/scriptError/BadReturn var/datum/token/token message = "Unexpected return statement outside of a function." /datum/scriptError/BadReturn/New(datum/token/t) src.token=t /datum/scriptError/EndOfFile message = "Unexpected end of file." /datum/scriptError/ExpectedToken message="Expected: '" /datum/scriptError/ExpectedToken/New(id, datum/token/T) if(T && T.line) message="[T.line]: [message]" message+="[id]'. " if(T)message+="Found '[T.value]'." /datum/scriptError/UnterminatedComment message="Unterminated multi-line comment statement: expected */" /datum/scriptError/DuplicateFunction message="Function defined twice." /datum/scriptError/DuplicateFunction/New(name, datum/token/t) message="Function '[name]' defined twice." /* Class: runtimeError An error thrown by the interpreter in running the script. */ /datum/runtimeError var/name var/message /// A basic description as to what went wrong. var/datum/stack/stack /** * Proc: ToString * Returns a description of the error suitable for showing to the user. */ /datum/runtimeError/proc/ToString() . = "[name]: [message]" if(!stack.Top()) return .+="\nStack:" while(stack.Top()) var/datum/node/statement/FunctionCall/stmt=stack.Pop() . += "\n\t [stmt.func_name]()" /datum/runtimeError/TypeMismatch name="TypeMismatchError" /datum/runtimeError/TypeMismatch/New(op, a, b) message="Type mismatch: '[a]' [op] '[b]'" /datum/runtimeError/UnexpectedReturn name="UnexpectedReturnError" message="Unexpected return statement." /datum/runtimeError/UnknownInstruction name="UnknownInstructionError" message="Unknown instruction type. This may be due to incompatible compiler and interpreter versions or a lack of implementation." /datum/runtimeError/UndefinedVariable name="UndefinedVariableError" /datum/runtimeError/UndefinedVariable/New(variable) message="Variable '[variable]' has not been declared." /datum/runtimeError/UndefinedFunction name="UndefinedFunctionError" /datum/runtimeError/UndefinedFunction/New(function) message="Function '[function]()' has not been defined." /datum/runtimeError/DuplicateVariableDeclaration name="DuplicateVariableError" /datum/runtimeError/DuplicateVariableDeclaration/New(variable) message="Variable '[variable]' was already declared." /datum/runtimeError/IterationLimitReached name="MaxIterationError" message="A loop has reached its maximum number of iterations." /datum/runtimeError/RecursionLimitReached name="MaxRecursionError" message="The maximum amount of recursion has been reached." /datum/runtimeError/DivisionByZero name="DivideByZeroError" message="Division by zero attempted." /datum/runtimeError/MaxCPU name="MaxComputationalUse" message="Maximum amount of computational cycles reached (>= 1000)."