diff --git a/src/libruntime/deserializer.h b/src/libruntime/deserializer.h index da8276c7c..984da5436 100644 --- a/src/libruntime/deserializer.h +++ b/src/libruntime/deserializer.h @@ -17,9 +17,11 @@ #define DESERIALIZER_H #include "globals.h" +#include "ecma-globals.h" -const char *deserialize_string_by_id (uint8_t); +const ecma_char_t *deserialize_string_by_id (uint8_t); int deserialize_num_by_id (uint8_t); const void *deserialize_bytecode (void); +uint8_t deserialize_min_temp (void); #endif //DESERIALIZER_H \ No newline at end of file diff --git a/src/libruntime/target/linux/deserializer.c b/src/libruntime/target/linux/deserializer.c index ec5673a50..fb09c43b4 100644 --- a/src/libruntime/target/linux/deserializer.c +++ b/src/libruntime/target/linux/deserializer.c @@ -16,7 +16,10 @@ #include "deserializer.h" #include "bytecode-linux.h" -const char * +int *num_data = NULL; +uint8_t num_size = 0; + +const ecma_char_t * deserialize_string_by_id (uint8_t id) { uint8_t size = *bytecode_data, *data = bytecode_data, offset; @@ -28,28 +31,33 @@ deserialize_string_by_id (uint8_t id) offset = *data; - return (char*) (bytecode_data + offset); + return bytecode_data + offset; } int deserialize_num_by_id (uint8_t id) { - int *num_data; - uint8_t str_size, str_offset, *data, num_size; + uint8_t str_size, str_offset, *data; str_size = *bytecode_data; - data = bytecode_data + str_size; if (id < str_size) - return 0; + { + return 0; + } id = (uint8_t) (id - str_size); - str_offset = *data; - data = bytecode_data + str_offset; + + if (num_data == NULL) + { + data = bytecode_data + str_size; + str_offset = *data; + data = bytecode_data + str_offset; - while (*data) - data++; - - num_size = *(++data); - num_data = (int *) ++data; + while (*data) + data++; + + num_size = *(++data); + num_data = (int *) ++data; + } if (id >= num_size) return 0; @@ -62,3 +70,16 @@ deserialize_bytecode (void) { return bytecode_opcodes; } + +uint8_t +deserialize_min_temp (void) +{ + uint8_t str_size = *bytecode_data; + + if (num_size == 0) + { + deserialize_num_by_id (str_size); // Init num_data and num_size + } + + return (uint8_t) (str_size + num_size); +} diff --git a/src/libruntime/target/linux/serializer.c b/src/libruntime/target/linux/serializer.c index 9d2c92bf5..dfe4bf399 100644 --- a/src/libruntime/target/linux/serializer.c +++ b/src/libruntime/target/linux/serializer.c @@ -71,7 +71,7 @@ serializer_dump_strings (const char *strings[], uint8_t size) #ifndef JERRY_NDEBUG for (i = 0; i < size; i++) { - JERRY_ASSERT (!__strcmp (strings[i], deserialize_string_by_id (i))); + JERRY_ASSERT (!__strcmp (strings[i], (const char *) deserialize_string_by_id (i))); } #endif @@ -112,6 +112,8 @@ serializer_dump_nums (const int nums[], uint8_t size, uint8_t offset, uint8_t st { JERRY_ASSERT (nums[i] == deserialize_num_by_id ((uint8_t) (i + strings_num))); } + + JERRY_ASSERT (deserialize_min_temp () == (uint8_t) (size + strings_num)); #endif } diff --git a/src/libruntime/target/stm32f4/deserializer.c b/src/libruntime/target/stm32f4/deserializer.c index f3ec5edce..e77ae97af 100644 --- a/src/libruntime/target/stm32f4/deserializer.c +++ b/src/libruntime/target/stm32f4/deserializer.c @@ -17,7 +17,7 @@ TODO (Implement) -const char * +const ecma_char_t * deserialize_string_by_id (uint8_t id) { JERRY_UNIMPLEMENTED_REF_UNUSED_VARS (id); @@ -34,3 +34,9 @@ deserialize_bytecode (void) { JERRY_UNIMPLEMENTED (); } + +uint8_t +deserialize_min_temp (void) +{ + JERRY_UNIMPLEMENTED (); +} \ No newline at end of file