34 lines
811 B
C++
34 lines
811 B
C++
#pragma once
|
|
|
|
enum class ErrorCode {
|
|
Success,
|
|
OutOfMemory,
|
|
IndexOutOfRange,
|
|
TypeMismatch,
|
|
ReadError,
|
|
UnterminatedStringLiteral,
|
|
InvalidNumericLiteral,
|
|
NotImplemented,
|
|
InvalidSymbol,
|
|
MalformedList,
|
|
KeyError,
|
|
EndOfProgram,
|
|
CompilationError,
|
|
ArgumentCountMismatch,
|
|
IOError,
|
|
Interrupt,
|
|
AssertionFailed,
|
|
DivisionByZero,
|
|
};
|
|
|
|
void seterr(const char* err);
|
|
const char* geterr(void);
|
|
|
|
#define STRINGIZE_NESTED(A) #A
|
|
#define STRINGIZE(A) STRINGIZE_NESTED(A)
|
|
|
|
#define ERROR(code) \
|
|
(({ \
|
|
seterr("Error " STRINGIZE(code) " at " __FILE__ ":" STRINGIZE(__LINE__)); \
|
|
ErrorCode::code; \
|
|
}))
|