1425bb815Sopenharmony_ci/* Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci * 3425bb815Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci * you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci * You may obtain a copy of the License at 6425bb815Sopenharmony_ci * 7425bb815Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci * 9425bb815Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci * See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci * limitations under the License. 14425bb815Sopenharmony_ci */ 15425bb815Sopenharmony_ci 16425bb815Sopenharmony_ci#include "ecma-builtins.h" 17425bb815Sopenharmony_ci#include "ecma-exceptions.h" 18425bb815Sopenharmony_ci#include "ecma-gc.h" 19425bb815Sopenharmony_ci#include "ecma-globals.h" 20425bb815Sopenharmony_ci#include "ecma-helpers.h" 21425bb815Sopenharmony_ci#include "ecma-proxy-object.h" 22425bb815Sopenharmony_ci#include "jrt.h" 23425bb815Sopenharmony_ci 24425bb815Sopenharmony_ci#if ENABLED (JERRY_ES2015_BUILTIN_PROXY) 25425bb815Sopenharmony_ci 26425bb815Sopenharmony_ci#define ECMA_BUILTINS_INTERNAL 27425bb815Sopenharmony_ci#include "ecma-builtins-internal.h" 28425bb815Sopenharmony_ci 29425bb815Sopenharmony_ci#define BUILTIN_INC_HEADER_NAME "ecma-builtin-proxy.inc.h" 30425bb815Sopenharmony_ci#define BUILTIN_UNDERSCORED_ID proxy 31425bb815Sopenharmony_ci#include "ecma-builtin-internal-routines-template.inc.h" 32425bb815Sopenharmony_ci 33425bb815Sopenharmony_ci/** \addtogroup ecma ECMA 34425bb815Sopenharmony_ci * @{ 35425bb815Sopenharmony_ci * 36425bb815Sopenharmony_ci * \addtogroup ecmabuiltins 37425bb815Sopenharmony_ci * @{ 38425bb815Sopenharmony_ci * 39425bb815Sopenharmony_ci * \addtogroup proxy ECMA Proxy object built-in 40425bb815Sopenharmony_ci * @{ 41425bb815Sopenharmony_ci */ 42425bb815Sopenharmony_ci 43425bb815Sopenharmony_ci/** 44425bb815Sopenharmony_ci * The Proxy object's 'revocable' routine 45425bb815Sopenharmony_ci * 46425bb815Sopenharmony_ci * See also: 47425bb815Sopenharmony_ci * ES2015 26.2.2.1 48425bb815Sopenharmony_ci * 49425bb815Sopenharmony_ci * @return ecma value 50425bb815Sopenharmony_ci * Returned value must be freed with ecma_free_value. 51425bb815Sopenharmony_ci */ 52425bb815Sopenharmony_cistatic ecma_value_t 53425bb815Sopenharmony_ciecma_builtin_proxy_object_revocable (ecma_value_t this_arg, /**< 'this' argument */ 54425bb815Sopenharmony_ci ecma_value_t target, /**< target argument */ 55425bb815Sopenharmony_ci ecma_value_t handler) /**< handler argument */ 56425bb815Sopenharmony_ci{ 57425bb815Sopenharmony_ci JERRY_UNUSED (this_arg); 58425bb815Sopenharmony_ci 59425bb815Sopenharmony_ci ecma_object_t *rev_proxy_p = ecma_proxy_create_revocable (target, handler); 60425bb815Sopenharmony_ci 61425bb815Sopenharmony_ci if (JERRY_UNLIKELY (rev_proxy_p == NULL)) 62425bb815Sopenharmony_ci { 63425bb815Sopenharmony_ci return ECMA_VALUE_ERROR; 64425bb815Sopenharmony_ci } 65425bb815Sopenharmony_ci 66425bb815Sopenharmony_ci return ecma_make_object_value (rev_proxy_p); 67425bb815Sopenharmony_ci} /* ecma_builtin_proxy_object_revocable */ 68425bb815Sopenharmony_ci 69425bb815Sopenharmony_ci/** 70425bb815Sopenharmony_ci * Handle calling [[Call]] of built-in Proxy object 71425bb815Sopenharmony_ci * 72425bb815Sopenharmony_ci * See also: 73425bb815Sopenharmony_ci * ES2015 26.2.2 74425bb815Sopenharmony_ci * 75425bb815Sopenharmony_ci * @return raised error 76425bb815Sopenharmony_ci */ 77425bb815Sopenharmony_ciecma_value_t 78425bb815Sopenharmony_ciecma_builtin_proxy_dispatch_call (const ecma_value_t *arguments_list_p, /**< arguments list */ 79425bb815Sopenharmony_ci ecma_length_t arguments_list_len) /**< number of arguments */ 80425bb815Sopenharmony_ci{ 81425bb815Sopenharmony_ci JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL); 82425bb815Sopenharmony_ci 83425bb815Sopenharmony_ci /* 1. */ 84425bb815Sopenharmony_ci return ecma_raise_type_error (ECMA_ERR_MSG ("Constructor Proxy requires 'new'")); 85425bb815Sopenharmony_ci} /* ecma_builtin_proxy_dispatch_call */ 86425bb815Sopenharmony_ci 87425bb815Sopenharmony_ci/** 88425bb815Sopenharmony_ci * Handle calling [[Construct]] of built-in proxy object 89425bb815Sopenharmony_ci * 90425bb815Sopenharmony_ci * See also: 91425bb815Sopenharmony_ci * ES2015 26.2.2 92425bb815Sopenharmony_ci * 93425bb815Sopenharmony_ci * @return ECMA_VALUE_ERROR - if the operation fails 94425bb815Sopenharmony_ci * new proxy object - otherwise 95425bb815Sopenharmony_ci */ 96425bb815Sopenharmony_ciecma_value_t 97425bb815Sopenharmony_ciecma_builtin_proxy_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */ 98425bb815Sopenharmony_ci ecma_length_t arguments_list_len) /**< number of arguments */ 99425bb815Sopenharmony_ci{ 100425bb815Sopenharmony_ci JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL); 101425bb815Sopenharmony_ci 102425bb815Sopenharmony_ci /* 2. */ 103425bb815Sopenharmony_ci ecma_object_t *proxy_p = ecma_proxy_create (arguments_list_len > 0 ? arguments_list_p[0] : ECMA_VALUE_UNDEFINED, 104425bb815Sopenharmony_ci arguments_list_len > 1 ? arguments_list_p[1] : ECMA_VALUE_UNDEFINED); 105425bb815Sopenharmony_ci 106425bb815Sopenharmony_ci if (JERRY_UNLIKELY (proxy_p == NULL)) 107425bb815Sopenharmony_ci { 108425bb815Sopenharmony_ci return ECMA_VALUE_ERROR; 109425bb815Sopenharmony_ci } 110425bb815Sopenharmony_ci 111425bb815Sopenharmony_ci return ecma_make_object_value (proxy_p); 112425bb815Sopenharmony_ci} /* ecma_builtin_proxy_dispatch_construct */ 113425bb815Sopenharmony_ci 114425bb815Sopenharmony_ci/** 115425bb815Sopenharmony_ci * @} 116425bb815Sopenharmony_ci * @} 117425bb815Sopenharmony_ci * @} 118425bb815Sopenharmony_ci */ 119425bb815Sopenharmony_ci 120425bb815Sopenharmony_ci#endif /* ENABLED (JERRY_ES2015_BUILTIN_PROXY) */ 121