diff --git a/src/libecmaobjects/ecma-globals.h b/src/libecmaobjects/ecma-globals.h index a740ceba4..e781b62e9 100644 --- a/src/libecmaobjects/ecma-globals.h +++ b/src/libecmaobjects/ecma-globals.h @@ -150,8 +150,8 @@ typedef struct */ struct { - /** Levels left */ - uint8_t level; + /** Levels to label left */ + uint8_t depth; /** Target's offset */ uint16_t offset; diff --git a/src/libecmaobjects/ecma-helpers-value.c b/src/libecmaobjects/ecma-helpers-value.c index 80c94d4b4..c5e8a4fb3 100644 --- a/src/libecmaobjects/ecma-helpers-value.c +++ b/src/libecmaobjects/ecma-helpers-value.c @@ -279,7 +279,7 @@ ecma_free_value (ecma_value_t value, /**< value description */ } /* ecma_free_value */ /** - * Completion value constructor + * Normal, throw, return, exit and meta completion values constructor * * @return completion value */ @@ -303,6 +303,29 @@ ecma_make_completion_value (ecma_completion_type_t type, /**< type */ return ret_value; } /* ecma_make_completion_value */ +/** + * Break and continue completion values constructor + * + * @return completion value + */ +ecma_completion_value_t +ecma_make_label_completion_value (ecma_completion_type_t type, /**< type */ + uint8_t depth_level, /**< depth level (in try constructions, + with blocks, etc.) */ + uint16_t offset) /**< offset to label from end of last block */ +{ + JERRY_ASSERT (type == ECMA_COMPLETION_TYPE_BREAK + || type == ECMA_COMPLETION_TYPE_CONTINUE); + + ecma_completion_value_t ret_value; + + ret_value.type = type; + ret_value.u.target.depth = depth_level; + ret_value.u.target.offset = offset; + + return ret_value; +} /* ecma_make_label_completion_value */ + /** * Simple normal completion value constructor * diff --git a/src/libecmaobjects/ecma-helpers.h b/src/libecmaobjects/ecma-helpers.h index 35d95e9cd..c0017ef49 100644 --- a/src/libecmaobjects/ecma-helpers.h +++ b/src/libecmaobjects/ecma-helpers.h @@ -70,6 +70,9 @@ extern void ecma_free_value (const ecma_value_t value, bool do_deref_if_object); extern ecma_completion_value_t ecma_make_completion_value (ecma_completion_type_t type, ecma_value_t value); +extern ecma_completion_value_t ecma_make_label_completion_value (ecma_completion_type_t type, + uint8_t depth_level, + uint16_t offset); extern ecma_completion_value_t ecma_make_simple_completion_value (ecma_simple_value_t simple_value); extern ecma_completion_value_t ecma_make_throw_value (ecma_object_t *exception_p); extern ecma_completion_value_t ecma_make_empty_completion_value (void);