Files
node/src/node_exit_code.h
Joyee Cheung be525d7d04 src: consolidate exit codes in the code base
Add an ExitCode enum class and use it throughout the code base
instead of hard-coding the exit codes everywhere. At the moment,
the exit codes used in many places do not actually conform to
what the documentation describes. With the new enums (which
are also available to the JS land as constants in an internal
binding) we could migrate to a more consistent usage of the
codes, and eventually expose the constants to the user land
when they are stable enough.

PR-URL: https://github.com/nodejs/node/pull/44746
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Jacob Smith <jacob@frende.me>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
2022-10-06 12:41:16 +00:00

55 lines
3.0 KiB
C++

#ifndef SRC_NODE_EXIT_CODE_H_
#define SRC_NODE_EXIT_CODE_H_
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
namespace node {
#define EXIT_CODE_LIST(V) \
V(NoFailure, 0) \
/* 1 was intended for uncaught JS exceptions from the user land but we */ \
/* actually use this for all kinds of generic errors. */ \
V(GenericUserError, 1) \
/* 2 is unused */ \
/* 3 is actually unused because we pre-compile all builtins during */ \
/* snapshot building, when we exit with 1 if there's any error. */ \
V(InternalJSParseError, 3) \
/* 4 is actually unused. We exit with 1 in this case. */ \
V(InternalJSEvaluationFailure, 4) \
/* 5 is actually unused. We exit with 133 (128+SIGTRAP) or 134 */ \
/* (128+SIGABRT) in this case. */ \
V(V8FatalError, 5) \
V(InvalidFatalExceptionMonkeyPatching, 6) \
V(ExceptionInFatalExceptionHandler, 7) \
/* 8 is unused */ \
V(InvalidCommandLineArgument, 9) \
V(BootstrapFailure, 10) \
/* 11 is unused */ \
/* This was intended for invalid inspector arguments but is actually now */ \
/* just a duplicate of InvalidCommandLineArgument */ \
V(InvalidCommandLineArgument2, 12) \
V(UnfinishedTopLevelAwait, 13) \
V(StartupSnapshotFailure, 14) \
/* If the process exits from unhandled signals e.g. SIGABRT, SIGTRAP, */ \
/* typically the exit codes are 128 + signal number. We also exit with */ \
/* certain error codes directly for legacy reasons. Here we define those */ \
/* that are used to normalize the exit code on Windows. */ \
V(Abort, 134)
// TODO(joyeecheung): expose this to user land when the codes are stable.
// The underlying type should be an int, or we can get undefined behavior when
// casting error codes into exit codes (technically we shouldn't do that,
// but that's how things have been).
enum class ExitCode : int {
#define V(Name, Code) k##Name = Code,
EXIT_CODE_LIST(V)
#undef V
};
[[noreturn]] void Exit(ExitCode exit_code);
} // namespace node
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#endif // SRC_NODE_EXIT_CODE_H_