@@ -965,7 +965,7 @@ jerry_snapshot_result (const uint32_t *snapshot_p, /**< snapshot */
965
965
}
966
966
else
967
967
{
968
- const uint8_t * literal_base_p = ( uint8_t * ) ( snapshot_data_p + header_p -> lit_table_offset ) ;
968
+ const uint8_t * literal_base_p = snapshot_data_p + header_p -> lit_table_offset ;
969
969
970
970
bytecode_p = snapshot_load_compiled_code ((const uint8_t * ) bytecode_p ,
971
971
literal_base_p ,
@@ -1055,13 +1055,13 @@ scan_snapshot_functions (const uint8_t *buffer_p, /**< snapshot buffer start */
1055
1055
1056
1056
do
1057
1057
{
1058
- ecma_compiled_code_t * bytecode_p = (ecma_compiled_code_t * ) buffer_p ;
1058
+ const ecma_compiled_code_t * bytecode_p = (ecma_compiled_code_t * ) buffer_p ;
1059
1059
uint32_t code_size = ((uint32_t ) bytecode_p -> size ) << JMEM_ALIGNMENT_LOG ;
1060
1060
1061
1061
if ((bytecode_p -> status_flags & CBC_CODE_FLAGS_FUNCTION )
1062
1062
&& !(bytecode_p -> status_flags & CBC_CODE_FLAGS_STATIC_FUNCTION ))
1063
1063
{
1064
- ecma_value_t * literal_start_p ;
1064
+ const ecma_value_t * literal_start_p ;
1065
1065
uint32_t argument_end ;
1066
1066
uint32_t const_literal_end ;
1067
1067
@@ -1087,7 +1087,6 @@ scan_snapshot_functions (const uint8_t *buffer_p, /**< snapshot buffer start */
1087
1087
if ((literal_start_p [i ] & ECMA_VALUE_TYPE_MASK ) == ECMA_TYPE_SNAPSHOT_OFFSET )
1088
1088
{
1089
1089
ecma_value_t lit_value = ecma_snapshot_get_literal (literal_base_p , literal_start_p [i ]);
1090
- literal_start_p [i ] = lit_value ;
1091
1090
ecma_save_literals_append_value (lit_value , lit_pool_p );
1092
1091
}
1093
1092
}
@@ -1103,7 +1102,6 @@ scan_snapshot_functions (const uint8_t *buffer_p, /**< snapshot buffer start */
1103
1102
if ((literal_start_p [i ] & ECMA_VALUE_TYPE_MASK ) == ECMA_TYPE_SNAPSHOT_OFFSET )
1104
1103
{
1105
1104
ecma_value_t lit_value = ecma_snapshot_get_literal (literal_base_p , literal_start_p [i ]);
1106
- literal_start_p [i ] = lit_value ;
1107
1105
ecma_save_literals_append_value (lit_value , lit_pool_p );
1108
1106
}
1109
1107
}
@@ -1119,15 +1117,16 @@ scan_snapshot_functions (const uint8_t *buffer_p, /**< snapshot buffer start */
1119
1117
* Update all literal offsets in a snapshot data.
1120
1118
*/
1121
1119
static void
1122
- update_literal_offsets (uint8_t * buffer_p , /**< snapshot buffer start */
1120
+ update_literal_offsets (uint8_t * buffer_p , /**< [in,out] snapshot buffer start */
1123
1121
const uint8_t * buffer_end_p , /**< snapshot buffer end */
1124
- lit_mem_to_snapshot_id_map_entry_t * lit_map_p ) /**< literal map */
1122
+ const lit_mem_to_snapshot_id_map_entry_t * lit_map_p , /**< literal map */
1123
+ const uint8_t * literal_base_p ) /**< start of literal data */
1125
1124
{
1126
1125
JERRY_ASSERT (buffer_end_p > buffer_p );
1127
1126
1128
1127
do
1129
1128
{
1130
- ecma_compiled_code_t * bytecode_p = (ecma_compiled_code_t * ) buffer_p ;
1129
+ const ecma_compiled_code_t * bytecode_p = (ecma_compiled_code_t * ) buffer_p ;
1131
1130
uint32_t code_size = ((uint32_t ) bytecode_p -> size ) << JMEM_ALIGNMENT_LOG ;
1132
1131
1133
1132
if ((bytecode_p -> status_flags & CBC_CODE_FLAGS_FUNCTION )
@@ -1156,12 +1155,12 @@ update_literal_offsets (uint8_t *buffer_p, /**< snapshot buffer start */
1156
1155
1157
1156
for (uint32_t i = 0 ; i < const_literal_end ; i ++ )
1158
1157
{
1159
- if (ecma_is_value_string (literal_start_p [i ])
1160
- || ecma_is_value_float_number (literal_start_p [i ]))
1158
+ if ((literal_start_p [i ] & ECMA_VALUE_TYPE_MASK ) == ECMA_TYPE_SNAPSHOT_OFFSET )
1161
1159
{
1162
- lit_mem_to_snapshot_id_map_entry_t * current_p = lit_map_p ;
1160
+ ecma_value_t lit_value = ecma_snapshot_get_literal (literal_base_p , literal_start_p [i ]);
1161
+ const lit_mem_to_snapshot_id_map_entry_t * current_p = lit_map_p ;
1163
1162
1164
- while (current_p -> literal_id != literal_start_p [ i ] )
1163
+ while (current_p -> literal_id != lit_value )
1165
1164
{
1166
1165
current_p ++ ;
1167
1166
}
@@ -1178,11 +1177,12 @@ update_literal_offsets (uint8_t *buffer_p, /**< snapshot buffer start */
1178
1177
1179
1178
for (uint32_t i = 0 ; i < argument_end ; i ++ )
1180
1179
{
1181
- if (literal_start_p [i ] != ECMA_VALUE_EMPTY )
1180
+ if (( literal_start_p [i ] & ECMA_VALUE_TYPE_MASK ) == ECMA_TYPE_SNAPSHOT_OFFSET )
1182
1181
{
1183
- lit_mem_to_snapshot_id_map_entry_t * current_p = lit_map_p ;
1182
+ ecma_value_t lit_value = ecma_snapshot_get_literal (literal_base_p , literal_start_p [i ]);
1183
+ const lit_mem_to_snapshot_id_map_entry_t * current_p = lit_map_p ;
1184
1184
1185
- while (current_p -> literal_id != literal_start_p [ i ] )
1185
+ while (current_p -> literal_id != lit_value )
1186
1186
{
1187
1187
current_p ++ ;
1188
1188
}
@@ -1251,7 +1251,7 @@ jerry_merge_snapshots (const uint32_t **inp_buffers_p, /**< array of (pointers t
1251
1251
1252
1252
uint32_t start_offset = header_p -> func_offsets [0 ];
1253
1253
const uint8_t * data_p = (const uint8_t * ) inp_buffers_p [i ];
1254
- const uint8_t * literal_base_p = ( uint8_t * ) ( data_p + header_p -> lit_table_offset ) ;
1254
+ const uint8_t * literal_base_p = data_p + header_p -> lit_table_offset ;
1255
1255
1256
1256
JERRY_ASSERT (header_p -> number_of_funcs > 0 );
1257
1257
@@ -1311,9 +1311,11 @@ jerry_merge_snapshots (const uint32_t **inp_buffers_p, /**< array of (pointers t
1311
1311
((const uint8_t * ) inp_buffers_p [i ]) + start_offset ,
1312
1312
current_header_p -> lit_table_offset - start_offset );
1313
1313
1314
+ const uint8_t * literal_base_p = ((const uint8_t * ) inp_buffers_p [i ]) + current_header_p -> lit_table_offset ;
1314
1315
update_literal_offsets (dst_p ,
1315
1316
dst_p + current_header_p -> lit_table_offset - start_offset ,
1316
- lit_map_p );
1317
+ lit_map_p ,
1318
+ literal_base_p );
1317
1319
1318
1320
uint32_t current_offset = (uint32_t ) (dst_p - (uint8_t * ) out_buffer_p ) - start_offset ;
1319
1321
0 commit comments