diff --git a/src/libecmaobjects/ecma-helpers-value.c b/src/libecmaobjects/ecma-helpers-value.c index b3bb41adc..170aa40d1 100644 --- a/src/libecmaobjects/ecma-helpers-value.c +++ b/src/libecmaobjects/ecma-helpers-value.c @@ -33,10 +33,10 @@ * false - otherwise. */ bool -ecma_IsUndefinedValue( ecma_Value_t value) /**< ecma-value */ +ecma_IsValueUndefined( ecma_Value_t value) /**< ecma-value */ { return ( value.m_ValueType == ECMA_TYPE_SIMPLE && value.m_Value == ECMA_SIMPLE_VALUE_UNDEFINED ); -} /* ecma_IsUndefinedValue */ +} /* ecma_IsValueUndefined */ /** * Check if the value is null. @@ -45,10 +45,10 @@ ecma_IsUndefinedValue( ecma_Value_t value) /**< ecma-value */ * false - otherwise. */ bool -ecma_IsNullValue( ecma_Value_t value) /**< ecma-value */ +ecma_IsValueNull( ecma_Value_t value) /**< ecma-value */ { return ( value.m_ValueType == ECMA_TYPE_SIMPLE && value.m_Value == ECMA_SIMPLE_VALUE_NULL ); -} /* ecma_IsNullValue */ +} /* ecma_IsValueNull */ /** * Check if the value is boolean. @@ -57,11 +57,11 @@ ecma_IsNullValue( ecma_Value_t value) /**< ecma-value */ * false - otherwise. */ bool -ecma_IsBooleanValue( ecma_Value_t value) /**< ecma-value */ +ecma_IsValueBoolean( ecma_Value_t value) /**< ecma-value */ { return ( ( value.m_ValueType == ECMA_TYPE_SIMPLE && value.m_Value == ECMA_SIMPLE_VALUE_FALSE ) || ( value.m_ValueType == ECMA_TYPE_SIMPLE && value.m_Value == ECMA_SIMPLE_VALUE_TRUE ) ); -} /* ecma_IsBooleanValue */ +} /* ecma_IsValueBoolean */ /** * Check if the value is true. @@ -75,7 +75,7 @@ ecma_IsBooleanValue( ecma_Value_t value) /**< ecma-value */ bool ecma_IsValueTrue( ecma_Value_t value) /**< ecma-value */ { - JERRY_ASSERT( ecma_IsBooleanValue( value) ); + JERRY_ASSERT( ecma_IsValueBoolean( value) ); return ( value.m_ValueType == ECMA_TYPE_SIMPLE && value.m_Value == ECMA_SIMPLE_VALUE_TRUE ); } /* ecma_IsValueTrue */ @@ -242,6 +242,36 @@ ecma_MakeThrowValue( ecma_Object_t *exception_p) /**< an object */ ECMA_TARGET_ID_RESERVED); } /* ecma_MakeThrowValue */ +/** + * Check if the completion value is normal true. + * + * @return true - if the completion type is normal and + * value contains ecma-true simple value, + * false - otherwise. + */ +bool +ecma_IsCompletionValueNormalTrue( ecma_CompletionValue_t value) /**< completion value */ +{ + return ( value.type == ECMA_COMPLETION_TYPE_NORMAL + && value.value.m_ValueType == ECMA_TYPE_SIMPLE + && value.value.m_Value == ECMA_SIMPLE_VALUE_TRUE ); +} /* ecma_IsCompletionValueNormalTrue */ + +/** + * Check if the completion value is normal false. + * + * @return true - if the completion type is normal and + * value contains ecma-false simple value, + * false - otherwise. + */ +bool +ecma_IsCompletionValueNormalFalse( ecma_CompletionValue_t value) /**< completion value */ +{ + return ( value.type == ECMA_COMPLETION_TYPE_NORMAL + && value.value.m_ValueType == ECMA_TYPE_SIMPLE + && value.value.m_Value == ECMA_SIMPLE_VALUE_FALSE ); +} /* ecma_IsCompletionValueNormalFalse */ + /** * @} * @} diff --git a/src/libecmaobjects/ecma-helpers.h b/src/libecmaobjects/ecma-helpers.h index 1ac4354d7..8f87ddaf2 100644 --- a/src/libecmaobjects/ecma-helpers.h +++ b/src/libecmaobjects/ecma-helpers.h @@ -42,9 +42,9 @@ extern void* ecma_DecompressPointer(uintptr_t compressedPointer); (field) = ecma_CompressPointer( nonCompressedPointer) & ( ( 1u << ECMA_POINTER_FIELD_WIDTH ) - 1) /* 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_IsValueUndefined( ecma_Value_t value); +extern bool ecma_IsValueNull( ecma_Value_t value); +extern bool ecma_IsValueBoolean( ecma_Value_t value); extern bool ecma_IsValueTrue( ecma_Value_t value); extern ecma_Value_t ecma_MakeSimpleValue( ecma_SimpleValue_t value); @@ -55,6 +55,9 @@ extern void ecma_FreeValue( const ecma_Value_t value); 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 bool ecma_IsCompletionValueNormalFalse( ecma_CompletionValue_t value); +extern bool ecma_IsCompletionValueNormalTrue( ecma_CompletionValue_t value); + 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); diff --git a/src/libecmaoperations/ecma-get-put-value.c b/src/libecmaoperations/ecma-get-put-value.c index 07051623b..8a632b7a2 100644 --- a/src/libecmaoperations/ecma-get-put-value.c +++ b/src/libecmaoperations/ecma-get-put-value.c @@ -38,8 +38,8 @@ ecma_CompletionValue_t ecma_OpGetValue( ecma_Reference_t *ref_p) /**< ECMA-reference */ { const ecma_Value_t base = ref_p->base; - const bool is_unresolvable_reference = ecma_IsUndefinedValue( base); - const bool has_primitive_base = ( ecma_IsBooleanValue( base) + const bool is_unresolvable_reference = ecma_IsValueUndefined( base); + const bool has_primitive_base = ( ecma_IsValueBoolean( base) || base.m_ValueType == ECMA_TYPE_NUMBER || base.m_ValueType == ECMA_TYPE_STRING ); const bool is_property_reference = has_primitive_base || ( base.m_ValueType == ECMA_TYPE_OBJECT ); @@ -112,8 +112,8 @@ ecma_OpSetValue(ecma_Reference_t *ref_p, /**< ECMA-reference */ ecma_Value_t value) /**< ECMA-value */ { const ecma_Value_t base = ref_p->base; - const bool is_unresolvable_reference = ecma_IsUndefinedValue( base); - const bool has_primitive_base = ( ecma_IsBooleanValue( base) + const bool is_unresolvable_reference = ecma_IsValueUndefined( base); + const bool has_primitive_base = ( ecma_IsValueBoolean( base) || base.m_ValueType == ECMA_TYPE_NUMBER || base.m_ValueType == ECMA_TYPE_STRING ); const bool is_property_reference = has_primitive_base || ( base.m_ValueType == ECMA_TYPE_OBJECT );