From 30008f8dc5a2ee87029246fd19de86f97ac60fe6 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Thu, 18 Sep 2014 13:59:51 +0400 Subject: [PATCH] Splitting ERR_GENERAL error code in ERR_FAILED_INTERNAL_ASSERTION and ERR_UNIMPLEMENTED_CASE; introducing ERR_FAILED_ASSERTION_IN_SCRIPT error code for handling non-zero script's exit values. --- src/globals.h | 15 ++++++++++++--- src/libruntime/jerry-exit.c | 17 ++++++++++++----- src/libruntime/target/linux/jerry-assert.c | 2 +- src/libruntime/target/stm32f4/jerry-assert.c | 2 +- src/main.c | 2 +- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/globals.h b/src/globals.h index 618250085..11d009730 100644 --- a/src/globals.h +++ b/src/globals.h @@ -57,7 +57,9 @@ typedef enum ERR_MEMORY = -10, ERR_SYSCALL = -11, ERR_UNHANDLED_EXCEPTION = -12, - ERR_GENERAL = -255 + ERR_UNIMPLEMENTED_CASE = -118, + ERR_FAILED_ASSERTION_IN_SCRIPT = -119, + ERR_FAILED_INTERNAL_ASSERTION = -120, } jerry_status_t; /** @@ -111,9 +113,16 @@ extern void jerry_ref_unused_variables (int unused_variables_follow, ...); do \ { \ JERRY_ASSERT (false); \ - jerry_exit (ERR_GENERAL); \ + jerry_exit (ERR_FAILED_INTERNAL_ASSERTION); \ } while (0) -#define JERRY_UNIMPLEMENTED() JERRY_UNREACHABLE () + +#define JERRY_UNIMPLEMENTED() \ + do \ + { \ + JERRY_ASSERT (false); \ + jerry_exit (ERR_UNIMPLEMENTED_CASE); \ + } while (0) + #define JERRY_UNIMPLEMENTED_REF_UNUSED_VARS(...) \ do \ { \ diff --git a/src/libruntime/jerry-exit.c b/src/libruntime/jerry-exit.c index ee297827d..deebf80e2 100644 --- a/src/libruntime/jerry-exit.c +++ b/src/libruntime/jerry-exit.c @@ -101,15 +101,22 @@ jerry_exit (jerry_status_t code) /**< status code */ __printf ("ERR_UNHANDLED_EXCEPTION\n"); break; } - case ERR_GENERAL: + case ERR_UNIMPLEMENTED_CASE: { - __printf ("ERR_GENERAL\n"); + __printf ("ERR_UNIMPLEMENTED_CASE\n"); + break; + } + case ERR_FAILED_ASSERTION_IN_SCRIPT: + { + __printf ("ERR_FAILED_ASSERTION_IN_SCRIPT\n"); + break; + } + case ERR_FAILED_INTERNAL_ASSERTION: + { + __printf ("ERR_FAILED_INTERNAL_ASSERTION\n"); break; } } - - /* The failed assertion is 'Return code is zero' */ - jerry_assert_fail ("Return code is zero", __FILE__, __LINE__); } #endif /* !JERRY_NDEBUG */ diff --git a/src/libruntime/target/linux/jerry-assert.c b/src/libruntime/target/linux/jerry-assert.c index 361b1c729..d2d82055e 100644 --- a/src/libruntime/target/linux/jerry-assert.c +++ b/src/libruntime/target/linux/jerry-assert.c @@ -27,6 +27,6 @@ jerry_assert_fail (const char *assertion, /**< assertion condition string */ __printf ("Assertion '%s' failed at %s:%u\n", assertion, file, line); - __exit (-ERR_GENERAL); + __exit (-ERR_FAILED_INTERNAL_ASSERTION); } /* jerry_assert_fail */ diff --git a/src/libruntime/target/stm32f4/jerry-assert.c b/src/libruntime/target/stm32f4/jerry-assert.c index c140d7d93..53ae8925c 100644 --- a/src/libruntime/target/stm32f4/jerry-assert.c +++ b/src/libruntime/target/stm32f4/jerry-assert.c @@ -24,5 +24,5 @@ jerry_assert_fail (const char *assertion __unused, /**< assertion condition stri const char *file __unused, /**< file name */ const uint32_t line __unused) /** line */ { - __exit (-ERR_GENERAL); + __exit (-ERR_FAILED_INTERNAL_ASSERTION); } /* jerry_assert_fail */ diff --git a/src/main.c b/src/main.c index 929ea5ccf..6f9fc6bda 100644 --- a/src/main.c +++ b/src/main.c @@ -217,7 +217,7 @@ main (int argc __unused, bool is_success = jerry_run (source_p, source_size, parse_only, show_opcodes, print_mem_stats); - return is_success ? 0 : 1; + jerry_exit (is_success ? ERR_OK : ERR_FAILED_ASSERTION_IN_SCRIPT); } #endif