Introducing string_literal_copy type descripting string literal copy for using in opcode handlers implementation.
This commit is contained in:
@@ -17,8 +17,76 @@
|
|||||||
#include "ecma-operations.h"
|
#include "ecma-operations.h"
|
||||||
#include "interpreter.h"
|
#include "interpreter.h"
|
||||||
#include "jerry-libc.h"
|
#include "jerry-libc.h"
|
||||||
|
#include "mem-heap.h"
|
||||||
#include "opcodes.h"
|
#include "opcodes.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String literal copy descriptor.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ecma_Char_t *str_p; /**< pointer to copied string literal */
|
||||||
|
ecma_Char_t literal_copy[32]; /**< buffer with string literal,
|
||||||
|
if it is stored locally
|
||||||
|
(i.e. not in the heap) */
|
||||||
|
} string_literal_copy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize string literal copy.
|
||||||
|
*/
|
||||||
|
static void __unused
|
||||||
|
init_string_literal_copy(T_IDX idx, /**< literal identifier */
|
||||||
|
string_literal_copy *str_lit_descr_p) /**< pointer to string literal copy descriptor */
|
||||||
|
{
|
||||||
|
JERRY_ASSERT( str_lit_descr_p != NULL );
|
||||||
|
|
||||||
|
ssize_t sz = try_get_string_by_idx( idx,
|
||||||
|
str_lit_descr_p->literal_copy,
|
||||||
|
sizeof(str_lit_descr_p->literal_copy));
|
||||||
|
if ( sz > 0 )
|
||||||
|
{
|
||||||
|
str_lit_descr_p->str_p = str_lit_descr_p->literal_copy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
JERRY_ASSERT( sz < 0 );
|
||||||
|
|
||||||
|
ssize_t req_sz = -sz;
|
||||||
|
|
||||||
|
str_lit_descr_p->str_p = mem_HeapAllocBlock( (size_t)req_sz,
|
||||||
|
MEM_HEAP_ALLOC_SHORT_TERM);
|
||||||
|
|
||||||
|
sz = try_get_string_by_idx( idx,
|
||||||
|
str_lit_descr_p->str_p,
|
||||||
|
req_sz);
|
||||||
|
|
||||||
|
JERRY_ASSERT( sz > 0 );
|
||||||
|
}
|
||||||
|
} /* init_string_literal */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free string literal copy.
|
||||||
|
*/
|
||||||
|
static void __unused
|
||||||
|
free_string_literal_copy(string_literal_copy *str_lit_descr_p) /**< string literal copy descriptor */
|
||||||
|
{
|
||||||
|
JERRY_ASSERT( str_lit_descr_p != NULL );
|
||||||
|
JERRY_ASSERT( str_lit_descr_p->str_p != NULL );
|
||||||
|
|
||||||
|
if ( str_lit_descr_p->str_p == str_lit_descr_p->literal_copy )
|
||||||
|
{
|
||||||
|
/* copy is inside descriptor */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mem_HeapFreeBlock( str_lit_descr_p->str_p);
|
||||||
|
}
|
||||||
|
|
||||||
|
str_lit_descr_p->str_p = NULL;
|
||||||
|
|
||||||
|
return;
|
||||||
|
} /* free_string_literal */
|
||||||
|
|
||||||
#define OP_UNIMPLEMENTED_LIST(op) \
|
#define OP_UNIMPLEMENTED_LIST(op) \
|
||||||
op(is_true_jmp) \
|
op(is_true_jmp) \
|
||||||
op(is_false_jmp) \
|
op(is_false_jmp) \
|
||||||
|
|||||||
Reference in New Issue
Block a user