Introducing ecma_MakeThrowValue constructor for throw completion values.

This commit is contained in:
Ruben Ayrapetyan 2014-07-15 21:27:25 +04:00
parent cdde0900e3
commit 56f731a3f2
2 changed files with 24 additions and 4 deletions

View File

@ -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 */
/**
* @}
* @}

View File

@ -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);