valeri/src/error.hpp

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; \
}))