diff --git a/src/libecmaobjects/ecma-helpers-value.c b/src/libecmaobjects/ecma-helpers-value.c index ad8d6bc9e..1c562e40f 100644 --- a/src/libecmaobjects/ecma-helpers-value.c +++ b/src/libecmaobjects/ecma-helpers-value.c @@ -114,6 +114,23 @@ ecma_MakeCompletionValue(ecma_CompletionType_t type, /**< type */ return (ecma_CompletionValue_t) { .type = type, .value = value, .target = target }; } /* ecma_MakeCompletionValue */ +/** + * Throw completion value constructor. + */ +ecma_CompletionValue_t +ecma_MakeThrowValue( ecma_Object_t *exception_p) /**< an object */ +{ + JERRY_ASSERT( exception_p != NULL && !exception_p->m_IsLexicalEnvironment ); + + ecma_Value_t exception; + exception.m_ValueType = ECMA_TYPE_OBJECT; + ecma_SetPointer( exception.m_Value, exception_p); + + return ecma_MakeCompletionValue(ECMA_COMPLETION_TYPE_THROW, + exception, + ECMA_TARGET_ID_RESERVED); +} /* ecma_MakeThrowValue */ + /** * @} * @} diff --git a/src/libecmaobjects/ecma-helpers.h b/src/libecmaobjects/ecma-helpers.h index 21e438a59..e0dd15d56 100644 --- a/src/libecmaobjects/ecma-helpers.h +++ b/src/libecmaobjects/ecma-helpers.h @@ -41,18 +41,21 @@ extern void* ecma_DecompressPointer(uintptr_t compressedPointer); #define ecma_SetPointer( field, nonCompressedPointer) \ (field) = ecma_CompressPointer( nonCompressedPointer) & ( ( 1u << ECMA_POINTER_FIELD_WIDTH ) - 1) -extern ecma_Value_t ecma_MakeSimpleValue( ecma_SimpleValue_t value); -extern ecma_Value_t ecma_MakeObjectValue( ecma_Object_t* object_p); -extern ecma_CompletionValue_t ecma_MakeCompletionValue( ecma_CompletionType_t type, ecma_Value_t value, uint8_t target); - +/* ecma-helpers-value.c */ extern bool ecma_IsUndefinedValue( ecma_Value_t value); extern bool ecma_IsNullValue( ecma_Value_t value); extern bool ecma_IsBooleanValue( ecma_Value_t value); extern bool ecma_IsValueTrue( ecma_Value_t value); +extern ecma_Value_t ecma_MakeSimpleValue( ecma_SimpleValue_t value); +extern ecma_Value_t ecma_MakeObjectValue( ecma_Object_t* object_p); +extern ecma_CompletionValue_t ecma_MakeCompletionValue( ecma_CompletionType_t type, ecma_Value_t value, uint8_t target); +extern ecma_CompletionValue_t ecma_MakeThrowValue( ecma_Object_t *exception_p); + extern ecma_Object_t* ecma_CreateObject( ecma_Object_t *pPrototypeObject, bool isExtensible); extern ecma_Object_t* ecma_CreateLexicalEnvironment( ecma_Object_t *pOuterLexicalEnvironment, ecma_LexicalEnvironmentType_t type); +/* ecma-helpers.c */ extern ecma_Property_t* ecma_CreateInternalProperty(ecma_Object_t *pObject, ecma_InternalPropertyId_t propertyId); extern ecma_Property_t* ecma_FindInternalProperty(ecma_Object_t *pObject, ecma_InternalPropertyId_t propertyId); extern ecma_Property_t* ecma_GetInternalProperty(ecma_Object_t *pObject, ecma_InternalPropertyId_t propertyId);