Lazy initialization in deserializer
This commit is contained in:
@@ -17,9 +17,11 @@
|
|||||||
#define DESERIALIZER_H
|
#define DESERIALIZER_H
|
||||||
|
|
||||||
#include "globals.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);
|
int deserialize_num_by_id (uint8_t);
|
||||||
const void *deserialize_bytecode (void);
|
const void *deserialize_bytecode (void);
|
||||||
|
uint8_t deserialize_min_temp (void);
|
||||||
|
|
||||||
#endif //DESERIALIZER_H
|
#endif //DESERIALIZER_H
|
||||||
@@ -16,7 +16,10 @@
|
|||||||
#include "deserializer.h"
|
#include "deserializer.h"
|
||||||
#include "bytecode-linux.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)
|
deserialize_string_by_id (uint8_t id)
|
||||||
{
|
{
|
||||||
uint8_t size = *bytecode_data, *data = bytecode_data, offset;
|
uint8_t size = *bytecode_data, *data = bytecode_data, offset;
|
||||||
@@ -28,28 +31,33 @@ deserialize_string_by_id (uint8_t id)
|
|||||||
|
|
||||||
offset = *data;
|
offset = *data;
|
||||||
|
|
||||||
return (char*) (bytecode_data + offset);
|
return bytecode_data + offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
deserialize_num_by_id (uint8_t id)
|
deserialize_num_by_id (uint8_t id)
|
||||||
{
|
{
|
||||||
int *num_data;
|
uint8_t str_size, str_offset, *data;
|
||||||
uint8_t str_size, str_offset, *data, num_size;
|
|
||||||
|
|
||||||
str_size = *bytecode_data;
|
str_size = *bytecode_data;
|
||||||
data = bytecode_data + str_size;
|
|
||||||
if (id < str_size)
|
if (id < str_size)
|
||||||
return 0;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
id = (uint8_t) (id - str_size);
|
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)
|
while (*data)
|
||||||
data++;
|
data++;
|
||||||
|
|
||||||
num_size = *(++data);
|
num_size = *(++data);
|
||||||
num_data = (int *) ++data;
|
num_data = (int *) ++data;
|
||||||
|
}
|
||||||
|
|
||||||
if (id >= num_size)
|
if (id >= num_size)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -62,3 +70,16 @@ deserialize_bytecode (void)
|
|||||||
{
|
{
|
||||||
return bytecode_opcodes;
|
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
|
#ifndef JERRY_NDEBUG
|
||||||
for (i = 0; i < size; i++)
|
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
|
#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 (nums[i] == deserialize_num_by_id ((uint8_t) (i + strings_num)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JERRY_ASSERT (deserialize_min_temp () == (uint8_t) (size + strings_num));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
TODO (Implement)
|
TODO (Implement)
|
||||||
|
|
||||||
const char *
|
const ecma_char_t *
|
||||||
deserialize_string_by_id (uint8_t id)
|
deserialize_string_by_id (uint8_t id)
|
||||||
{
|
{
|
||||||
JERRY_UNIMPLEMENTED_REF_UNUSED_VARS (id);
|
JERRY_UNIMPLEMENTED_REF_UNUSED_VARS (id);
|
||||||
@@ -34,3 +34,9 @@ deserialize_bytecode (void)
|
|||||||
{
|
{
|
||||||
JERRY_UNIMPLEMENTED ();
|
JERRY_UNIMPLEMENTED ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t
|
||||||
|
deserialize_min_temp (void)
|
||||||
|
{
|
||||||
|
JERRY_UNIMPLEMENTED ();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user