1 /* Copyright JS Foundation and other contributors, http://js.foundation 2 * 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ECMA_LEX_ENV_H 17 #define ECMA_LEX_ENV_H 18 19 #include "ecma-globals.h" 20 #include "ecma-reference.h" 21 #include "jrt.h" 22 23 /** \addtogroup ecma ECMA 24 * @{ 25 * 26 * \addtogroup lexicalenvironment Lexical environment 27 * @{ 28 * 29 * \addtogroup globallexicalenvironment Global lexical environment 30 * @{ 31 */ 32 33 void ecma_init_global_environment (void); 34 void ecma_finalize_global_environment (void); 35 ecma_object_t *ecma_get_global_environment (void); 36 ecma_object_t *ecma_get_global_scope (void); 37 #if ENABLED (JERRY_ES2015) 38 void ecma_create_global_lexical_block (void); 39 #endif /* ENABLED (JERRY_ES2015) */ 40 41 #if ENABLED (JERRY_ES2015_MODULE_SYSTEM) 42 void ecma_module_add_lex_env (ecma_object_t *lex_env_p); 43 void ecma_module_finalize_lex_envs (void); 44 #endif /* ENABLED (JERRY_ES2015_MODULE_SYSTEM) */ 45 46 /** 47 * @} 48 */ 49 50 /* ECMA-262 v5, 8.7.1 and 8.7.2 */ 51 ecma_value_t ecma_op_get_value_lex_env_base (ecma_object_t *lex_env_p, ecma_object_t **ref_base_lex_env_p, 52 ecma_string_t *name_p); 53 ecma_value_t ecma_op_get_value_object_base (ecma_value_t base_value, ecma_string_t *property_name_p); 54 ecma_value_t ecma_op_put_value_lex_env_base (ecma_object_t *lex_env_p, ecma_string_t *var_name_string_p, 55 bool is_strict, ecma_value_t value); 56 57 /* ECMA-262 v5, Table 17. Abstract methods of Environment Records */ 58 ecma_value_t ecma_op_has_binding (ecma_object_t *lex_env_p, ecma_string_t *name_p); 59 ecma_value_t ecma_op_create_mutable_binding (ecma_object_t *lex_env_p, ecma_string_t *name_p, bool is_deletable); 60 ecma_value_t ecma_op_set_mutable_binding (ecma_object_t *lex_env_p, ecma_string_t *name_p, ecma_value_t value, 61 bool is_strict); 62 ecma_value_t ecma_op_get_binding_value (ecma_object_t *lex_env_p, ecma_string_t *name_p, bool is_strict); 63 ecma_value_t ecma_op_delete_binding (ecma_object_t *lex_env_p, ecma_string_t *name_p); 64 ecma_value_t ecma_op_implicit_this_value (ecma_object_t *lex_env_p); 65 66 /* ECMA-262 v5, Table 18. Additional methods of Declarative Environment Records */ 67 void ecma_op_create_immutable_binding (ecma_object_t *lex_env_p, ecma_string_t *name_p, ecma_value_t value); 68 69 #if ENABLED (JERRY_ES2015) 70 void ecma_op_initialize_binding (ecma_object_t *lex_env_p, ecma_string_t *name_p, ecma_value_t value); 71 72 void 73 ecma_op_init_this_binding (ecma_object_t *lex_env_p, ecma_value_t this_binding); 74 75 ecma_property_t * 76 ecma_op_get_this_property (ecma_object_t *lex_env_p); 77 78 bool 79 ecma_op_this_binding_is_initialized (ecma_property_t *prop_p); 80 81 ecma_value_t 82 ecma_op_get_this_binding (ecma_object_t *lex_env_p); 83 84 void 85 ecma_op_bind_this_value (ecma_property_t *prop_p, ecma_value_t this_binding); 86 #endif /* ENABLED (JERRY_ES2015) */ 87 88 /** 89 * @} 90 * @} 91 */ 92 93 #endif /* !ECMA_LEX_ENV_H */ 94