Refactor literal-storage to not use C++ features
JerryScript-DCO-1.0-Signed-off-by: Roland Takacs rtakacs.u-szeged@partner.samsung.com
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2015 University of Szeged
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef RCS_RECORDS_H
|
||||
#define RCS_RECORDS_H
|
||||
|
||||
#include "ecma-globals.h"
|
||||
|
||||
#define RCS_RECORD_TYPE_FIRST RCS_RECORD_TYPE_CHARSET
|
||||
#define RCS_RECORD_TYPE_LAST RCS_RECORD_TYPE_NUMBER
|
||||
#define RCS_RECORD_TYPE_MIN RCS_RECORD_TYPE_FREE
|
||||
#define RCS_RECORD_TYPE_MAX RCS_RECORD_TYPE_NUMBER
|
||||
|
||||
#define RCS_RECORD_TYPE_IS_FREE(type) ((type) == RCS_RECORD_TYPE_FREE)
|
||||
#define RCS_RECORD_TYPE_IS_NUMBER(type) ((type) == RCS_RECORD_TYPE_NUMBER)
|
||||
#define RCS_RECORD_TYPE_IS_CHARSET(type) ((type) == RCS_RECORD_TYPE_CHARSET)
|
||||
#define RCS_RECORD_TYPE_IS_MAGIC_STR(type) ((type) == RCS_RECORD_TYPE_MAGIC_STR)
|
||||
#define RCS_RECORD_TYPE_IS_MAGIC_STR_EX(type) ((type) == RCS_RECORD_TYPE_MAGIC_STR_EX)
|
||||
#define RCS_RECORD_TYPE_IS_VALID(type) ((type) <= RCS_RECORD_TYPE_MAX)
|
||||
|
||||
#define RCS_RECORD_IS_FREE(rec) (RCS_RECORD_TYPE_IS_FREE (rcs_record_get_type (rec)))
|
||||
#define RCS_RECORD_IS_NUMBER(rec) (RCS_RECORD_TYPE_IS_NUMBER (rcs_record_get_type (rec)))
|
||||
#define RCS_RECORD_IS_CHARSET(rec) (RCS_RECORD_TYPE_IS_CHARSET (rcs_record_get_type (rec)))
|
||||
#define RCS_RECORD_IS_MAGIC_STR(rec) (RCS_RECORD_TYPE_IS_MAGIC_STR (rcs_record_get_type (rec)))
|
||||
#define RCS_RECORD_IS_MAGIC_STR_EX(rec) (RCS_RECORD_TYPE_IS_MAGIC_STR_EX (rcs_record_get_type (rec)))
|
||||
|
||||
/**
|
||||
* Common header informations.
|
||||
*/
|
||||
#define RCS_HEADER_TYPE_POS 0u
|
||||
#define RCS_HEADER_TYPE_WIDTH 4u
|
||||
|
||||
#define RCS_HEADER_FIELD_BEGIN_POS (RCS_HEADER_TYPE_POS + RCS_HEADER_TYPE_WIDTH)
|
||||
|
||||
/**
|
||||
* Number record
|
||||
* Doesn't hold any characters, holds a number.
|
||||
* Numbers from source code are represented as number literals.
|
||||
*
|
||||
* Layout:
|
||||
* ------- header -----------------------
|
||||
* type (4 bits)
|
||||
* padding (12 bits)
|
||||
* pointer to prev (16 bits)
|
||||
* --------------------------------------
|
||||
* ecma_number_t
|
||||
*/
|
||||
#define RCS_NUMBER_HEADER_SIZE RCS_DYN_STORAGE_LENGTH_UNIT
|
||||
#define RCS_NUMBER_HEADER_PREV_POS (RCS_HEADER_FIELD_BEGIN_POS + 12u)
|
||||
|
||||
/**
|
||||
* Charset record
|
||||
*
|
||||
* layout:
|
||||
* ------- header -----------------------
|
||||
* type (4 bits)
|
||||
* alignment (2 bits)
|
||||
* unused (2 bits)
|
||||
* hash (8 bits)
|
||||
* length (16 bits)
|
||||
* pointer to prev (16 bits)
|
||||
* ------- characters -------------------
|
||||
* ...
|
||||
* chars
|
||||
* ....
|
||||
* ------- alignment bytes --------------
|
||||
* unused bytes (their count is specified
|
||||
* by 'alignment' field in header)
|
||||
* --------------------------------------
|
||||
*/
|
||||
#define RCS_CHARSET_HEADER_SIZE (RCS_DYN_STORAGE_LENGTH_UNIT + RCS_DYN_STORAGE_LENGTH_UNIT / 2)
|
||||
|
||||
#define RCS_CHARSET_HEADER_ALIGN_POS RCS_HEADER_FIELD_BEGIN_POS
|
||||
#define RCS_CHARSET_HEADER_ALIGN_WIDTH RCS_DYN_STORAGE_LENGTH_UNIT_LOG
|
||||
|
||||
#define RCS_CHARSET_HEADER_UNUSED_POS (RCS_CHARSET_HEADER_ALIGN_POS + RCS_CHARSET_HEADER_ALIGN_WIDTH)
|
||||
#define RCS_CHARSET_HEADER_UNUSED_WIDTH 2u
|
||||
|
||||
#define RCS_CHARSET_HEADER_HASH_POS (RCS_CHARSET_HEADER_UNUSED_POS + RCS_CHARSET_HEADER_UNUSED_WIDTH)
|
||||
#define RCS_CHARSET_HEADER_HASH_WIDTH 8u
|
||||
|
||||
#define RCS_CHARSET_HEADER_LENGTH_POS (RCS_CHARSET_HEADER_HASH_POS + RCS_CHARSET_HEADER_HASH_WIDTH)
|
||||
#define RCS_CHARSET_HEADER_LENGTH_WIDTH 16u
|
||||
|
||||
#define RCS_CHARSET_HEADER_PREV_POS (RCS_CHARSET_HEADER_LENGTH_POS + RCS_CHARSET_HEADER_LENGTH_WIDTH)
|
||||
|
||||
/**
|
||||
* Magic string record
|
||||
* Doesn't hold any characters. Corresponding string is identified by its id.
|
||||
*
|
||||
* Layout:
|
||||
* ------- header -----------------------
|
||||
* type (4 bits)
|
||||
* magic string id (12 bits)
|
||||
* pointer to prev (16 bits)
|
||||
* --------------------------------------
|
||||
*/
|
||||
#define RCS_MAGIC_STR_HEADER_SIZE RCS_DYN_STORAGE_LENGTH_UNIT
|
||||
|
||||
#define RCS_MAGIC_STR_HEADER_ID_POS RCS_HEADER_FIELD_BEGIN_POS
|
||||
#define RCS_MAGIC_STR_HEADER_ID_WIDTH 12u
|
||||
|
||||
#define RCS_MAGIC_STR_HEADER_PREV_POS (RCS_MAGIC_STR_HEADER_ID_POS + RCS_MAGIC_STR_HEADER_ID_WIDTH)
|
||||
|
||||
/**
|
||||
* Free record
|
||||
* Doesn't hold any data.
|
||||
*
|
||||
* Layout:
|
||||
* ------- header -----------------------
|
||||
* type (4 bits)
|
||||
* length (12 bits)
|
||||
* pointer to prev (16 bits)
|
||||
* --------------------------------------
|
||||
*/
|
||||
#define RCS_FREE_HEADER_SIZE RCS_DYN_STORAGE_LENGTH_UNIT
|
||||
|
||||
#define RCS_FREE_HEADER_LENGTH_POS RCS_HEADER_FIELD_BEGIN_POS
|
||||
#define RCS_FREE_HEADER_LENGTH_WIDTH (14u - RCS_DYN_STORAGE_LENGTH_UNIT_LOG)
|
||||
|
||||
#define RCS_FREE_HEADER_PREV_POS (RCS_FREE_HEADER_LENGTH_POS + RCS_FREE_HEADER_LENGTH_WIDTH)
|
||||
|
||||
/*
|
||||
* Setters
|
||||
*/
|
||||
extern void rcs_record_set_type (rcs_record_t *, rcs_record_type_t);
|
||||
extern void rcs_record_set_prev (rcs_record_set_t *, rcs_record_t *, rcs_record_t *);
|
||||
extern void rcs_record_set_size (rcs_record_t *, size_t);
|
||||
extern void rcs_record_set_alignment_bytes_count (rcs_record_t *, size_t);
|
||||
extern void rcs_record_set_hash (rcs_record_t *, lit_string_hash_t);
|
||||
extern void rcs_record_set_charset (rcs_record_set_t *, rcs_record_t *, const lit_utf8_byte_t *, lit_utf8_size_t);
|
||||
extern void rcs_record_set_magic_str_id (rcs_record_t *, lit_magic_string_id_t);
|
||||
extern void rcs_record_set_magic_str_ex_id (rcs_record_t *, lit_magic_string_ex_id_t);
|
||||
|
||||
/*
|
||||
* Getters
|
||||
*/
|
||||
extern rcs_record_type_t rcs_record_get_type (rcs_record_t *);
|
||||
extern rcs_record_t *rcs_record_get_prev (rcs_record_set_t *, rcs_record_t *);
|
||||
extern size_t rcs_record_get_size (rcs_record_t *);
|
||||
extern size_t rcs_header_get_size (rcs_record_t *);
|
||||
extern size_t rcs_record_get_alignment_bytes_count (rcs_record_t *);
|
||||
extern lit_string_hash_t rcs_record_get_hash (rcs_record_t *);
|
||||
extern lit_utf8_size_t rcs_record_get_length (rcs_record_t *);
|
||||
extern lit_utf8_size_t rcs_record_get_charset (rcs_record_set_t *, rcs_record_t *, const lit_utf8_byte_t *, size_t);
|
||||
extern lit_magic_string_id_t rcs_record_get_magic_str_id (rcs_record_t *);
|
||||
extern lit_magic_string_ex_id_t rcs_record_get_magic_str_ex_id (rcs_record_t *);
|
||||
extern ecma_number_t rcs_record_get_number (rcs_record_set_t *, rcs_record_t *);
|
||||
|
||||
extern rcs_record_t *rcs_record_get_first (rcs_record_set_t *);
|
||||
extern rcs_record_t *rcs_record_get_next (rcs_record_set_t *, rcs_record_t *);
|
||||
|
||||
extern bool rcs_record_is_equal (rcs_record_set_t *, rcs_record_t *, rcs_record_t *);
|
||||
extern bool rcs_record_is_equal_charset (rcs_record_set_t *, rcs_record_t *, const lit_utf8_byte_t *, lit_utf8_size_t);
|
||||
|
||||
#endif /* !RCS_RECORDS_H */
|
||||
Reference in New Issue
Block a user