diff --git a/src/config.h b/src/config.h index 42ee08218..6ecc96548 100644 --- a/src/config.h +++ b/src/config.h @@ -96,14 +96,34 @@ /** * Use 32-bit/64-bit float for ecma-numbers */ -#define CONFIG_ECMA_NUMBER_FLOAT32 -// #define CONFIG_ECMA_NUMBER_FLOAT64 +#define CONFIG_ECMA_NUMBER_FLOAT32 (1u) /* 32-bit float */ +#define CONFIG_ECMA_NUMBER_FLOAT64 (2u) /* 64-bit float */ + +#ifndef CONFIG_ECMA_NUMBER_TYPE +# define CONFIG_ECMA_NUMBER_TYPE CONFIG_ECMA_NUMBER_FLOAT32 +#else /* !CONFIG_ECMA_NUMBER_TYPE */ +# if (CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT32 \ + && CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT64) +# error "ECMA-number storage is configured incorrectly" +# endif /* CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT32 + && CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT64 */ +#endif /* CONFIG_ECMA_NUMBER_TYPE */ /** - * Use ASCII/UTF-16 representation for ecma-characters + * Representation for ecma-characters */ -#define CONFIG_ECMA_CHAR_ASCII -// #define CONFIG_ECMA_CHAR_UTF16 +#define CONFIG_ECMA_CHAR_ASCII (1) /* ASCII */ +#define CONFIG_ECMA_CHAR_UTF16 (2) /* UTF-16 */ + +#ifndef CONFIG_ECMA_CHAR_ENCODING +# define CONFIG_ECMA_CHAR_ENCODING CONFIG_ECMA_CHAR_ASCII +#else /* !CONFIG_ECMA_CHAR_ENCODING */ +# if (CONFIG_ECMA_CHAR_ENCODING != CONFIG_ECMA_CHAR_ASCII \ + && CONFIG_ECMA_CHAR_ENCODING != CONFIG_ECMA_CHAR_UTF16) +# error "ECMA-char encoding is configured incorrectly" +# endif /* CONFIG_ECMA_CHAR_ENCODING != CONFIG_ECMA_CHAR_ASCII + && CONFIG_ECMA_CHAR_ENCODING != CONFIG_ECMA_CHAR_UTF16 */ +#endif /* CONFIG_ECMA_CHAR_ENCODING */ /** * Enable ecma-exception support diff --git a/src/libcoreint/opcodes-native-call.c b/src/libcoreint/opcodes-native-call.c index 7ee07cc43..73e3c08c9 100644 --- a/src/libcoreint/opcodes-native-call.c +++ b/src/libcoreint/opcodes-native-call.c @@ -138,13 +138,11 @@ opfunc_native_call (opcode_t opdata, /**< operation data */ ecma_string_to_zt_string (str_p, zt_str_p, zt_str_size); -#if defined (CONFIG_ECMA_CHAR_ASCII) +#if CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_ASCII __printf ("%s\n", (char*) zt_str_p); -#elif defined (CONFIG_ECMA_CHAR_UTF16) +#elif CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_UTF16 JERRY_UNIMPLEMENTED (); -#else /* !CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16 */ -# error "!CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16" -#endif /* !CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16 */ +#endif /* CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_UTF16 */ mem_heap_free_block (zt_str_p); diff --git a/src/libecmabuiltins/ecma-builtin-string-object.c b/src/libecmabuiltins/ecma-builtin-string-object.c index 8da6c24aa..5552cf180 100644 --- a/src/libecmabuiltins/ecma-builtin-string-object.c +++ b/src/libecmabuiltins/ecma-builtin-string-object.c @@ -108,7 +108,7 @@ ecma_builtin_string_object_from_char_code (ecma_value_t args[], /**< arguments l uint32_t uint32_char_code = ecma_number_to_uint32 (*arg_num_p); uint16_t uint16_char_code = (uint16_t) uint32_char_code; -#if defined (CONFIG_ECMA_CHAR_ASCII) +#if CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_ASCII if ((uint16_char_code >> JERRY_BITSINBYTE) != 0) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); @@ -117,11 +117,9 @@ ecma_builtin_string_object_from_char_code (ecma_value_t args[], /**< arguments l { ret_zt_str_p [arg_index] = (ecma_char_t) uint16_char_code; } -#elif defined (CONFIG_ECMA_CHAR_UTF16) +#elif CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_UTF16 ret_zt_str_p [arg_index] = (ecma_char_t) uint16_char_code; -#else /* !CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16 */ -# error "!CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16" -#endif /* !CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16 */ +#endif /* CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_UTF16 */ ECMA_FINALIZE (arg_num_value); diff --git a/src/libecmaobjects/ecma-globals.h b/src/libecmaobjects/ecma-globals.h index c9a4e8a47..1c967b29a 100644 --- a/src/libecmaobjects/ecma-globals.h +++ b/src/libecmaobjects/ecma-globals.h @@ -506,21 +506,19 @@ typedef struct ecma_property_configurable_value_t configurable; } ecma_property_descriptor_t; -#ifdef CONFIG_ECMA_CHAR_ASCII +#if CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_ASCII /** * Description of an ecma-character */ typedef uint8_t ecma_char_t; -#elif defined (CONFIG_ECMA_CHAR_UTF16) +#elif CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_UTF16 /** * Description of an ecma-character */ typedef uint16_t ecma_char_t; -#else /* !CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16 */ -# error "!CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16" -#endif /* !CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16 */ +#endif /* CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_UTF16 */ -#ifdef CONFIG_ECMA_NUMBER_FLOAT32 +#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 /** * Description of an ecma-number */ @@ -530,7 +528,7 @@ typedef float ecma_number_t; * Maximum number of significant digits that ecma-number can store */ #define ECMA_NUMBER_MAX_DIGITS (10u) -#elif defined (CONFIG_ECMA_NUMBER_FLOAT64) +#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 /** * Description of an ecma-number */ @@ -540,9 +538,7 @@ typedef double ecma_number_t; * Maximum number of significant digits that ecma-number can store */ #define ECMA_NUMBER_MAX_DIGITS (18u) -#else /* !CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64 */ -#error "!CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64" -#endif /* !CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64 */ +#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */ /** * Value '0' of ecma_number_t @@ -567,10 +563,10 @@ typedef double ecma_number_t; /** * Minimum positive and maximum value of ecma-number */ -#ifdef CONFIG_ECMA_NUMBER_FLOAT32 +#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 # define ECMA_NUMBER_MIN_VALUE (FLT_MIN) # define ECMA_NUMBER_MAX_VALUE (FLT_MAX) -#elif defined (CONFIG_ECMA_NUMBER_FLOAT64) +#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 /** * Number.MAX_VALUE * @@ -583,10 +579,7 @@ typedef double ecma_number_t; * See also: ECMA_262 v5, 15.7.3.3 */ # define ECMA_NUMBER_MIN_VALUE ((ecma_number_t)5e-324) -#else /* !CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64 */ -# error "!CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64" -#endif /* !CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64 */ - +#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */ /** * Euler number diff --git a/src/libecmaobjects/ecma-helpers-conversion.c b/src/libecmaobjects/ecma-helpers-conversion.c index 1e2b8a8d6..7ce0251ee 100644 --- a/src/libecmaobjects/ecma-helpers-conversion.c +++ b/src/libecmaobjects/ecma-helpers-conversion.c @@ -801,15 +801,13 @@ ecma_number_to_zt_string (ecma_number_t num, /**< ecma-number */ else { // 5. -#ifdef CONFIG_ECMA_NUMBER_FLOAT32 +#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 #define LL_T uint32_t #define LL_MAX_DIGITS 10 -#elif defined (CONFIG_ECMA_NUMBER_FLOAT64) +#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 #define LL_T uint64_t #define LL_MAX_DIGITS 18 -#else /* !CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64 */ -# error "!CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64" -#endif /* !CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64 */ +#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */ uint32_t num_uint32 = ecma_number_to_uint32 (num); if (ecma_uint32_to_number (num_uint32) == num) diff --git a/src/libecmaobjects/ecma-helpers-number.c b/src/libecmaobjects/ecma-helpers-number.c index efd78d8bd..d9395cea1 100644 --- a/src/libecmaobjects/ecma-helpers-number.c +++ b/src/libecmaobjects/ecma-helpers-number.c @@ -23,7 +23,7 @@ #include "ecma-globals.h" #include "ecma-helpers.h" -#ifdef CONFIG_ECMA_NUMBER_FLOAT32 +#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 JERRY_STATIC_ASSERT (sizeof (ecma_number_t) == sizeof (uint32_t)); /** @@ -80,7 +80,7 @@ const int32_t ecma_number_exponent_bias = 127; * Relative precision used in calculation with ecma-numbers */ const ecma_number_t ecma_number_relative_eps = 1.0e-10f; -#elif defined (CONFIG_ECMA_NUMBER_FLOAT64) +#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 JERRY_STATIC_ASSERT (sizeof (ecma_number_t) == sizeof (uint64_t)); /** @@ -137,9 +137,7 @@ const int32_t ecma_number_exponent_bias = 1023; * Relative precision used in calculation with ecma-numbers */ const ecma_number_t ecma_number_relative_eps = 1.0e-16; -#else /* !CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64 */ -# error "!CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64" -#endif /* !CONFIG_ECMA_NUMBER_FLOAT32 && !CONFIG_ECMA_NUMBER_FLOAT64 */ +#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */ /** * Get fraction of number diff --git a/src/libecmaobjects/ecma-helpers-string.c b/src/libecmaobjects/ecma-helpers-string.c index f579da9b7..d48f8627a 100644 --- a/src/libecmaobjects/ecma-helpers-string.c +++ b/src/libecmaobjects/ecma-helpers-string.c @@ -1088,7 +1088,7 @@ ecma_compare_zt_strings_relational (const ecma_char_t *string1_p, /**< zero-term while (*iter_1_p != ECMA_CHAR_NULL && *iter_2_p != ECMA_CHAR_NULL) { -#ifdef CONFIG_ECMA_CHAR_ASCII +#if CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_ASCII const ecma_char_t chr_1 = *iter_1_p++; const ecma_char_t chr_2 = *iter_2_p++; @@ -1100,7 +1100,7 @@ ecma_compare_zt_strings_relational (const ecma_char_t *string1_p, /**< zero-term { return false; } -#elif defined (CONFIG_ECMA_CHAR_UTF16) +#elif CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_UTF16 const ecma_char_t first_in_pair_range_begin = 0xD800; const ecma_char_t first_in_pair_range_end = 0xDBFF; const ecma_char_t second_in_pair_range_begin = 0xDC00; @@ -1176,9 +1176,7 @@ ecma_compare_zt_strings_relational (const ecma_char_t *string1_p, /**< zero-term return false; } } -#else /* !CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16 */ -# error "!CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16" -#endif /* !CONFIG_ECMA_CHAR_ASCII && !CONFIG_ECMA_CHAR_UTF16 */ +#endif /* CONFIG_ECMA_CHAR_ENCODING == CONFIG_ECMA_CHAR_UTF16 */ } return (*iter_1_p == ECMA_CHAR_NULL