1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 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#include "ecmascript/containers/containers_errors.h" 17 18namespace panda::ecmascript::containers { 19JSTaggedValue ContainerError::BusinessError(JSThread *thread, int32_t errorCode, const char *msg) 20{ 21 ObjectFactory *factory = thread->GetEcmaVM()->GetFactory(); 22 JSHandle<JSObject> error = factory->GetJSError(ErrorType::ERROR, msg, StackCheck::NO); 23 JSHandle<JSTaggedValue> code(thread, JSTaggedValue(errorCode)); 24 JSHandle<EcmaString> key = factory->NewFromUtf8("code"); 25 JSHandle<EcmaString> name = factory->NewFromUtf8("name"); 26 JSHandle<EcmaString> value = factory->NewFromUtf8("BusinessError"); 27 JSObject::CreateDataPropertyOrThrow(thread, error, JSHandle<JSTaggedValue>::Cast(key), code); 28 RETURN_EXCEPTION_IF_ABRUPT_COMPLETION(thread); 29 JSObject::CreateDataPropertyOrThrow(thread, error, JSHandle<JSTaggedValue>::Cast(name), 30 JSHandle<JSTaggedValue>::Cast(value)); 31 RETURN_EXCEPTION_IF_ABRUPT_COMPLETION(thread); 32 return error.GetTaggedValue(); 33} 34 35JSTaggedValue ContainerError::BindError(JSThread *thread, const char *msg) 36{ 37 return ContainerError::BusinessError(thread, ErrorFlag::BIND_ERROR, msg); 38} 39 40JSTaggedValue ContainerError::ParamError(JSThread *thread, const char *msg) 41{ 42 return ContainerError::BusinessError(thread, ErrorFlag::TYPE_ERROR, msg); 43} 44 45JSTaggedValue ContainerError::ReferenceError(JSThread *thread, const char *msg) 46{ 47 return ContainerError::BusinessError(thread, ErrorFlag::REFERENCE_ERROR, msg); 48} 49} // namespace panda::ecmascript::containers