mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
239 lines
8.7 KiB
C
239 lines
8.7 KiB
C
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
|
*
|
|
* 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 OPCODES_DUMPER_H
|
|
#define OPCODES_DUMPER_H
|
|
|
|
#include "opcodes.h"
|
|
#include "ecma-globals.h"
|
|
#include "lexer.h"
|
|
|
|
typedef enum __attr_packed___
|
|
{
|
|
OPERAND_LITERAL,
|
|
OPERAND_TMP
|
|
} operand_type;
|
|
|
|
typedef struct
|
|
{
|
|
operand_type type;
|
|
union
|
|
{
|
|
idx_t uid;
|
|
lit_cpointer_t lit_id;
|
|
} data;
|
|
} operand;
|
|
|
|
typedef enum __attr_packed___
|
|
{
|
|
VARG_FUNC_DECL,
|
|
VARG_FUNC_EXPR,
|
|
VARG_ARRAY_DECL,
|
|
VARG_OBJ_DECL,
|
|
VARG_CONSTRUCT_EXPR,
|
|
VARG_CALL_EXPR
|
|
} varg_list_type;
|
|
|
|
operand empty_operand (void);
|
|
operand literal_operand (lit_cpointer_t);
|
|
operand eval_ret_operand (void);
|
|
operand jsp_create_operand_for_in_special_reg (void);
|
|
bool operand_is_empty (operand);
|
|
|
|
void dumper_init (void);
|
|
void dumper_free (void);
|
|
|
|
void dumper_new_statement (void);
|
|
void dumper_new_scope (void);
|
|
void dumper_finish_scope (void);
|
|
|
|
extern bool dumper_is_eval_literal (operand);
|
|
|
|
void dump_boolean_assignment (operand, bool);
|
|
operand dump_boolean_assignment_res (bool);
|
|
void dump_string_assignment (operand, lit_cpointer_t);
|
|
operand dump_string_assignment_res (lit_cpointer_t);
|
|
void dump_number_assignment (operand, lit_cpointer_t);
|
|
operand dump_number_assignment_res (lit_cpointer_t);
|
|
void dump_regexp_assignment (operand, lit_cpointer_t);
|
|
operand dump_regexp_assignment_res (lit_cpointer_t);
|
|
void dump_smallint_assignment (operand, idx_t);
|
|
operand dump_smallint_assignment_res (idx_t);
|
|
void dump_undefined_assignment (operand);
|
|
operand dump_undefined_assignment_res (void);
|
|
void dump_null_assignment (operand);
|
|
operand dump_null_assignment_res (void);
|
|
void dump_variable_assignment (operand, operand);
|
|
operand dump_variable_assignment_res (operand);
|
|
|
|
void dump_varg_header_for_rewrite (varg_list_type, operand);
|
|
operand rewrite_varg_header_set_args_count (uint8_t);
|
|
void dump_call_additional_info (opcode_call_flags_t, operand);
|
|
void dump_varg (operand);
|
|
|
|
void dump_prop_name_and_value (operand, operand);
|
|
void dump_prop_getter_decl (operand, operand);
|
|
void dump_prop_setter_decl (operand, operand);
|
|
void dump_prop_getter (operand, operand, operand);
|
|
operand dump_prop_getter_res (operand, operand);
|
|
void dump_prop_setter (operand, operand, operand);
|
|
|
|
void dump_function_end_for_rewrite (void);
|
|
void rewrite_function_end (varg_list_type);
|
|
|
|
void dump_this (operand);
|
|
operand dump_this_res (void);
|
|
|
|
void dump_post_increment (operand, operand);
|
|
operand dump_post_increment_res (operand);
|
|
void dump_post_decrement (operand, operand);
|
|
operand dump_post_decrement_res (operand);
|
|
void dump_pre_increment (operand, operand);
|
|
operand dump_pre_increment_res (operand);
|
|
void dump_pre_decrement (operand, operand);
|
|
operand dump_pre_decrement_res (operand);
|
|
void dump_unary_plus (operand, operand);
|
|
operand dump_unary_plus_res (operand);
|
|
void dump_unary_minus (operand, operand);
|
|
operand dump_unary_minus_res (operand);
|
|
void dump_bitwise_not (operand, operand);
|
|
operand dump_bitwise_not_res (operand);
|
|
void dump_logical_not (operand, operand);
|
|
operand dump_logical_not_res (operand);
|
|
|
|
void dump_multiplication (operand, operand, operand);
|
|
operand dump_multiplication_res (operand, operand);
|
|
void dump_division (operand, operand, operand);
|
|
operand dump_division_res (operand, operand);
|
|
void dump_remainder (operand, operand, operand);
|
|
operand dump_remainder_res (operand, operand);
|
|
void dump_addition (operand, operand, operand);
|
|
operand dump_addition_res (operand, operand);
|
|
void dump_substraction (operand, operand, operand);
|
|
operand dump_substraction_res (operand, operand);
|
|
void dump_left_shift (operand, operand, operand);
|
|
operand dump_left_shift_res (operand, operand);
|
|
void dump_right_shift (operand, operand, operand);
|
|
operand dump_right_shift_res (operand, operand);
|
|
void dump_right_shift_ex (operand, operand, operand);
|
|
operand dump_right_shift_ex_res (operand, operand);
|
|
void dump_less_than (operand, operand, operand);
|
|
operand dump_less_than_res (operand, operand);
|
|
void dump_greater_than (operand, operand, operand);
|
|
operand dump_greater_than_res (operand, operand);
|
|
void dump_less_or_equal_than (operand, operand, operand);
|
|
operand dump_less_or_equal_than_res (operand, operand);
|
|
void dump_greater_or_equal_than (operand, operand, operand);
|
|
operand dump_greater_or_equal_than_res (operand, operand);
|
|
void dump_instanceof (operand, operand, operand);
|
|
operand dump_instanceof_res (operand, operand);
|
|
void dump_in (operand, operand, operand);
|
|
operand dump_in_res (operand, operand);
|
|
void dump_equal_value (operand, operand, operand);
|
|
operand dump_equal_value_res (operand, operand);
|
|
void dump_not_equal_value (operand, operand, operand);
|
|
operand dump_not_equal_value_res (operand, operand);
|
|
void dump_equal_value_type (operand, operand, operand);
|
|
operand dump_equal_value_type_res (operand, operand);
|
|
void dump_not_equal_value_type (operand, operand, operand);
|
|
operand dump_not_equal_value_type_res (operand, operand);
|
|
void dump_bitwise_and (operand, operand, operand);
|
|
operand dump_bitwise_and_res (operand, operand);
|
|
void dump_bitwise_xor (operand, operand, operand);
|
|
operand dump_bitwise_xor_res (operand, operand);
|
|
void dump_bitwise_or (operand, operand, operand);
|
|
operand dump_bitwise_or_res (operand, operand);
|
|
|
|
void start_dumping_logical_and_checks (void);
|
|
void dump_logical_and_check_for_rewrite (operand);
|
|
void rewrite_logical_and_checks (void);
|
|
void start_dumping_logical_or_checks (void);
|
|
void dump_logical_or_check_for_rewrite (operand);
|
|
void rewrite_logical_or_checks (void);
|
|
void dump_conditional_check_for_rewrite (operand);
|
|
void rewrite_conditional_check (void);
|
|
void dump_jump_to_end_for_rewrite (void);
|
|
void rewrite_jump_to_end (void);
|
|
|
|
void start_dumping_assignment_expression (void);
|
|
operand dump_prop_setter_or_variable_assignment_res (operand, operand);
|
|
operand dump_prop_setter_or_addition_res (operand, operand);
|
|
operand dump_prop_setter_or_multiplication_res (operand, operand);
|
|
operand dump_prop_setter_or_division_res (operand, operand);
|
|
operand dump_prop_setter_or_remainder_res (operand, operand);
|
|
operand dump_prop_setter_or_substraction_res (operand, operand);
|
|
operand dump_prop_setter_or_left_shift_res (operand, operand);
|
|
operand dump_prop_setter_or_right_shift_res (operand, operand);
|
|
operand dump_prop_setter_or_right_shift_ex_res (operand, operand);
|
|
operand dump_prop_setter_or_bitwise_and_res (operand, operand);
|
|
operand dump_prop_setter_or_bitwise_xor_res (operand, operand);
|
|
operand dump_prop_setter_or_bitwise_or_res (operand, operand);
|
|
|
|
void dumper_set_break_target (void);
|
|
void dumper_set_continue_target (void);
|
|
void dumper_set_next_interation_target (void);
|
|
opcode_counter_t
|
|
dump_simple_or_nested_jump_for_rewrite (bool is_simple_jump,
|
|
opcode_counter_t next_jump_for_tg_oc);
|
|
opcode_counter_t
|
|
rewrite_simple_or_nested_jump_and_get_next (opcode_counter_t jump_oc,
|
|
opcode_counter_t target_oc);
|
|
void dump_continue_iterations_check (operand);
|
|
|
|
void start_dumping_case_clauses (void);
|
|
void dump_case_clause_check_for_rewrite (operand, operand);
|
|
void dump_default_clause_check_for_rewrite (void);
|
|
void rewrite_case_clause (void);
|
|
void rewrite_default_clause (void);
|
|
void finish_dumping_case_clauses (void);
|
|
|
|
void dump_delete (operand, operand, bool, locus);
|
|
operand dump_delete_res (operand, bool, locus);
|
|
|
|
void dump_typeof (operand, operand);
|
|
operand dump_typeof_res (operand);
|
|
|
|
opcode_counter_t dump_with_for_rewrite (operand);
|
|
void rewrite_with (opcode_counter_t);
|
|
void dump_with_end (void);
|
|
|
|
opcode_counter_t dump_for_in_for_rewrite (operand);
|
|
void rewrite_for_in (opcode_counter_t);
|
|
void dump_for_in_end (void);
|
|
|
|
void dump_try_for_rewrite (void);
|
|
void rewrite_try (void);
|
|
void dump_catch_for_rewrite (operand);
|
|
void rewrite_catch (void);
|
|
void dump_finally_for_rewrite (void);
|
|
void rewrite_finally (void);
|
|
void dump_end_try_catch_finally (void);
|
|
void dump_throw (operand);
|
|
|
|
bool dumper_variable_declaration_exists (lit_cpointer_t);
|
|
void dump_variable_declaration (lit_cpointer_t);
|
|
|
|
opcode_counter_t dump_scope_code_flags_for_rewrite (void);
|
|
void rewrite_scope_code_flags (opcode_counter_t scope_code_flags_oc,
|
|
opcode_scope_code_flags_t scope_flags);
|
|
|
|
void dump_reg_var_decl_for_rewrite (void);
|
|
void rewrite_reg_var_decl (void);
|
|
|
|
void dump_ret (void);
|
|
void dump_retval (operand op);
|
|
|
|
#endif /* OPCODES_DUMPER_H */
|