Change strings offset size from 8 bits to 16 bits

This commit is contained in:
Ilmir Usmanov
2014-07-29 17:49:13 +04:00
parent bc9d80147a
commit e497875c06
13 changed files with 63 additions and 45 deletions
+2 -2
View File
@@ -21,9 +21,9 @@
void serializer_init (void);
uint8_t serializer_dump_strings (const char **, uint8_t);
uint16_t serializer_dump_strings (const char **, uint8_t);
void serializer_dump_nums (const int32_t *, uint8_t, uint8_t, uint8_t);
void serializer_dump_nums (const int32_t *, uint8_t, uint16_t, uint8_t);
void serializer_dump_opcode (OPCODE);
+10 -7
View File
@@ -22,7 +22,8 @@ uint8_t num_size = 0;
const ecma_char_t *
deserialize_string_by_id (uint8_t id)
{
uint8_t size, *data, offset;
uint8_t size, *data;
uint16_t offset;
if (bytecode_data == NULL)
return NULL;
@@ -34,17 +35,18 @@ deserialize_string_by_id (uint8_t id)
data = bytecode_data;
data += id + 1;
data += id * 2 + 1;
offset = *data;
offset = *((uint16_t *) data);
return bytecode_data + offset;
return ((const ecma_char_t *) bytecode_data + offset);
}
int
deserialize_num_by_id (uint8_t id)
{
uint8_t str_size, str_offset, *data;
uint16_t str_size, str_offset;
uint8_t *data;
str_size = *bytecode_data;
if (id < str_size)
@@ -55,8 +57,9 @@ deserialize_num_by_id (uint8_t id)
if (num_data == NULL)
{
data = bytecode_data + str_size;
str_offset = *data;
// Go to last string's offset
data = (uint8_t *) (bytecode_data + str_size * 2 - 1);
str_offset = *((uint16_t *) data);
data = bytecode_data + str_offset;
while (*data)
+18 -13
View File
@@ -14,6 +14,7 @@
*/
#include "serializer.h"
#include "parser.h"
#include "jerry-libc.h"
#include "bytecode-linux.h"
#include "deserializer.h"
@@ -41,32 +42,35 @@ serializer_init (void)
{
}
uint8_t
uint16_t
serializer_dump_strings (const char *strings[], uint8_t size)
{
uint8_t i;
uint8_t offset = (uint8_t) (size + 1), res;
uint16_t offset = (uint16_t) (size * 2 + 1), res;
__printf ("STRINGS %d:\n", size);
for (i = 0; i < size; i++)
{
__printf ("%3d %3d %20s\n", i, offset, strings[i]);
offset = (uint8_t) (offset + __strlen (strings[i]) + 1);
__printf ("%3d %5d %20s\n", i, offset, strings[i]);
offset = (uint16_t) (offset + __strlen (strings[i]) + 1);
}
bytecode_data = mem_heap_alloc_block (offset, MEM_HEAP_ALLOC_SHORT_TERM);
res = offset;
bytecode_data[0] = size;
offset = (uint8_t) (size + 1);
offset = (uint16_t) (size * 2 + 1);
for (i = 0; i < size; i++)
{
bytecode_data[i + 1] = offset;
offset = (uint8_t) (offset + __strlen (strings[i]) + 1);
*((uint16_t *) (bytecode_data + i * 2 + 1)) = offset;
offset = (uint16_t) (offset + __strlen (strings[i]) + 1);
}
for (i = 0; i < size; i++)
__strncpy ((void *) (bytecode_data + bytecode_data[i + 1]), strings[i], __strlen (strings[i]) + 1);
{
offset = *((uint16_t *) (bytecode_data + i * 2 + 1));
__strncpy ((char *) (bytecode_data + offset), strings[i], __strlen (strings[i]) + 1);
}
#ifndef JERRY_NDEBUG
for (i = 0; i < size; i++)
@@ -79,21 +83,22 @@ serializer_dump_strings (const char *strings[], uint8_t size)
}
void
serializer_dump_nums (const int32_t nums[], uint8_t size, uint8_t offset, uint8_t strings_num)
serializer_dump_nums (const int32_t nums[], uint8_t size, uint16_t offset, uint8_t strings_num)
{
uint8_t i, *data, num_offset;
uint8_t i, *data;
num_offset = (uint8_t) (offset + size + 1);
__printf ("NUMS %d:\n", size);
for (i = 0; i < size; i++)
{
__printf ("%3d %3d %7d\n", i + strings_num, num_offset, nums[i]);
num_offset = (uint8_t) (num_offset + 4);
__printf ("%3d %7d\n", i + strings_num, nums[i]);
}
__printf ("\n");
data = mem_heap_alloc_block ((size_t) (offset + size * 4 + 1), MEM_HEAP_ALLOC_LONG_TERM);
if (!data)
parser_fatal (ERR_MEMORY);
__memcpy (data, bytecode_data, offset);
mem_heap_free_block (bytecode_data);
bytecode_data = data;
+10 -7
View File
@@ -24,7 +24,8 @@ uint8_t num_size = 0;
const ecma_char_t *
deserialize_string_by_id (uint8_t id)
{
uint8_t size, *data, offset;
uint8_t size, *data;
uint16_t offset;
if (bytecode_data == NULL)
return NULL;
@@ -36,17 +37,18 @@ deserialize_string_by_id (uint8_t id)
data = bytecode_data;
data += id + 1;
data += id * 2 + 1;
offset = *data;
offset = *((uint16_t *) data);
return bytecode_data + offset;
return ((const ecma_char_t *) bytecode_data + offset);
}
int
deserialize_num_by_id (uint8_t id)
{
uint8_t str_size, str_offset, *data;
uint16_t str_size, str_offset;
uint8_t *data;
str_size = *bytecode_data;
if (id < str_size)
@@ -57,8 +59,9 @@ deserialize_num_by_id (uint8_t id)
if (num_data == NULL)
{
data = bytecode_data + str_size;
str_offset = *data;
// Go to last string's offset
data = (uint8_t *) (bytecode_data + str_size * 2 - 1);
str_offset = *((uint16_t *) data);
data = bytecode_data + str_offset;
while (*data)
+15 -8
View File
@@ -14,6 +14,7 @@
*/
#include "serializer.h"
#include "parser.h"
#include "globals.h"
#include "serializer.h"
#include "jerry-libc.h"
@@ -27,30 +28,33 @@ serializer_init (void)
{
}
uint8_t
uint16_t
serializer_dump_strings (const char *strings[], uint8_t size)
{
uint8_t i;
uint8_t offset = (uint8_t) (size + 1), res;
uint16_t offset = (uint8_t) (size * 2 + 1), res;
for (i = 0; i < size; i++)
{
offset = (uint8_t) (offset + __strlen (strings[i]) + 1);
offset = (uint16_t) (offset + __strlen (strings[i]) + 1);
}
bytecode_data = mem_heap_alloc_block (offset, MEM_HEAP_ALLOC_SHORT_TERM);
res = offset;
bytecode_data[0] = size;
offset = (uint8_t) (size + 1);
offset = (uint16_t) (size * 2 + 1);
for (i = 0; i < size; i++)
{
bytecode_data[i + 1] = offset;
offset = (uint8_t) (offset + __strlen (strings[i]) + 1);
*((uint16_t *) (bytecode_data + i * 2 + 1)) = offset;
offset = (uint16_t) (offset + __strlen (strings[i]) + 1);
}
for (i = 0; i < size; i++)
__strncpy ((void *) (bytecode_data + bytecode_data[i + 1]), strings[i], __strlen (strings[i]) + 1);
{
offset = *((uint16_t *) (bytecode_data + i * 2 + 1));
__strncpy ((char *) (bytecode_data + offset), strings[i], __strlen (strings[i]) + 1);
}
#ifndef JERRY_NDEBUG
for (i = 0; i < size; i++)
@@ -63,11 +67,14 @@ serializer_dump_strings (const char *strings[], uint8_t size)
}
void
serializer_dump_nums (const int32_t nums[], uint8_t size, uint8_t offset, uint8_t strings_num __unused)
serializer_dump_nums (const int32_t nums[], uint8_t size, uint16_t offset, uint8_t strings_num __unused)
{
uint8_t i, *data;
data = mem_heap_alloc_block ((size_t) (offset + size * 4 + 1), MEM_HEAP_ALLOC_LONG_TERM);
if (!data)
parser_fatal (ERR_MEMORY);
__memcpy (data, bytecode_data, offset);
mem_heap_free_block (bytecode_data);
+1 -1
View File
@@ -36,7 +36,7 @@ parser_run (const char *script_source, size_t script_source_size __unused)
const char *strings[MAX_STRINGS];
int32_t nums[MAX_NUMS];
uint8_t strings_num, nums_count;
uint8_t offset;
uint16_t offset;
const OPCODE *opcodes;
TODO( Consider using script_source_size in lexer to check buffer boundaries );
@@ -41,7 +41,7 @@ main( int __unused argc,
const char *strings[] = { "a",
"b" };
int nums [] = { 2 };
uint8_t offset = serializer_dump_strings( strings, 2);
uint16_t offset = serializer_dump_strings( strings, 2);
serializer_dump_nums( nums, 1, offset, 2);
init_int( test_program);
+1 -1
View File
@@ -46,7 +46,7 @@ main( int __unused argc,
const char *strings[] = { "a",
"b" };
int nums [] = { 2 };
uint8_t offset = serializer_dump_strings( strings, 2);
uint16_t offset = serializer_dump_strings( strings, 2);
serializer_dump_nums( nums, 1, offset, 2);
init_int( test_program);
+1 -1
View File
@@ -41,7 +41,7 @@ main( int __unused argc,
const char *strings[] = { "a",
"b" };
int nums [] = { 2 };
uint8_t offset = serializer_dump_strings( strings, 2);
uint16_t offset = serializer_dump_strings( strings, 2);
serializer_dump_nums( nums, 1, offset, 2);
init_int( test_program);
+1 -1
View File
@@ -41,7 +41,7 @@ main( int __unused argc,
const char *strings[] = { "a",
"b" };
int nums [] = { 2 };
uint8_t offset = serializer_dump_strings( strings, 2);
uint16_t offset = serializer_dump_strings( strings, 2);
serializer_dump_nums( nums, 1, offset, 2);
init_int( test_program);
+1 -1
View File
@@ -41,7 +41,7 @@ main( int __unused argc,
const char *strings[] = { "a",
"b" };
int nums [] = { 2 };
uint8_t offset = serializer_dump_strings( strings, 2);
uint16_t offset = serializer_dump_strings( strings, 2);
serializer_dump_nums( nums, 1, offset, 2);
init_int( test_program);
+1 -1
View File
@@ -41,7 +41,7 @@ main( int __unused argc,
const char *strings[] = { "a",
"b" };
int nums [] = { 2 };
uint8_t offset = serializer_dump_strings( strings, 2);
uint16_t offset = serializer_dump_strings( strings, 2);
serializer_dump_nums( nums, 1, offset, 2);
init_int( test_program);
@@ -39,7 +39,7 @@ main( int __unused argc,
const char *strings[] = { "a",
"b" };
int nums [] = { 2 };
uint8_t offset = serializer_dump_strings( strings, 2);
uint16_t offset = serializer_dump_strings( strings, 2);
serializer_dump_nums( nums, 1, offset, 2);
init_int( test_program);