Lazy initialization in deserializer
This commit is contained in:
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 ();
|
||||
}
|
||||
Reference in New Issue
Block a user