Add info to external pointer free callback. (#4642)
Furthermore reduce memory consumption when only one external pointer is assigned to an object. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
+58
-11
@@ -696,11 +696,11 @@ typedef jerry_value_t (*jerry_external_handler_t) (const jerry_call_info_t *call
|
||||
|
||||
- [jerry_create_external_function](#jerry_create_external_function)
|
||||
|
||||
## jerry_object_native_free_callback_t
|
||||
## jerry_value_free_callback_t
|
||||
|
||||
**Summary**
|
||||
|
||||
Native free callback of an object. It is used in `jerry_object_native_info_t` and for external Array buffers.
|
||||
Native free callback of generic value types.
|
||||
|
||||
*Note*:
|
||||
- Referred values by this method must have at least 1 reference. (Correct API usage satisfies this condition)
|
||||
@@ -708,17 +708,45 @@ Native free callback of an object. It is used in `jerry_object_native_info_t` an
|
||||
**Prototype**
|
||||
|
||||
```c
|
||||
typedef void (*jerry_object_native_free_callback_t) (void *native_p);
|
||||
typedef void (*jerry_value_free_callback_t) (void *native_p);
|
||||
```
|
||||
|
||||
*New in version [[NEXT_RELEASE]]*.
|
||||
|
||||
**See also**
|
||||
|
||||
- [jerry_create_external_string](#jerry_create_external_string)
|
||||
- [jerry_create_external_string_sz](#jerry_create_external_string_sz)
|
||||
- [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
|
||||
|
||||
## jerry_object_native_free_callback_t
|
||||
|
||||
**Summary**
|
||||
|
||||
Native free callback of an object. The callback receives both the memory pointer and the type
|
||||
information passed to [jerry_set_object_native_pointer](#jerry_set_object_native_pointer).
|
||||
|
||||
*Note*:
|
||||
- Referred values by this method must have at least 1 reference. (Correct API usage satisfies this condition)
|
||||
|
||||
**Prototype**
|
||||
|
||||
```c
|
||||
typedef void (*jerry_object_native_free_callback_t) (void *native_p, struct jerry_object_native_info_t *info_p);
|
||||
```
|
||||
|
||||
- `native_p` - native pointer passed to [jerry_set_object_native_pointer](#jerry_set_object_native_pointer).
|
||||
- `info_p` - native type info passed to [jerry_set_object_native_pointer](#jerry_set_object_native_pointer).
|
||||
|
||||
*New in version 2.0*: Renamed from `jerry_object_free_callback_t`.
|
||||
|
||||
*Changed in version 2.2*: API calls are once again allowed. (See note)
|
||||
|
||||
*Changed in version [[NEXT_RELEASE]]*: `info_p` argument is added
|
||||
|
||||
**See also**
|
||||
|
||||
- [jerry_object_native_info_t](#jerry_object_native_info_t)
|
||||
- [jerry_create_arraybuffer_external](#jerry_create_arraybuffer_external)
|
||||
|
||||
## jerry_error_object_created_callback_t
|
||||
|
||||
@@ -5655,7 +5683,7 @@ so the user can release the buffer which was provided.
|
||||
jerry_value_t
|
||||
jerry_create_arraybuffer_external (const jerry_length_t size
|
||||
uint8_t *buffer_p,
|
||||
jerry_object_native_free_callback_t free_cb);
|
||||
jerry_value_free_callback_t free_cb);
|
||||
```
|
||||
|
||||
- `size` - size of the buffer to use **in bytes** (should not be 0)
|
||||
@@ -5667,6 +5695,8 @@ jerry_create_arraybuffer_external (const jerry_length_t size
|
||||
|
||||
*New in version 2.0*.
|
||||
|
||||
*Changed in version [[NEXT_RELEASE]]*: type of `free_cb` has been changed.
|
||||
|
||||
**Example**
|
||||
|
||||
```c
|
||||
@@ -6473,7 +6503,7 @@ is no longer needed.
|
||||
```c
|
||||
jerry_value_t
|
||||
jerry_create_external_string (const jerry_char_t *str_p,
|
||||
jerry_object_native_free_callback_t free_cb)
|
||||
jerry_value_free_callback_t free_cb)
|
||||
```
|
||||
|
||||
- `str_p` - non-null pointer to string
|
||||
@@ -6482,6 +6512,8 @@ jerry_create_external_string (const jerry_char_t *str_p,
|
||||
|
||||
*New in version 2.4*.
|
||||
|
||||
*Changed in version [[NEXT_RELEASE]]*: type of `free_cb` has been changed.
|
||||
|
||||
**Example**
|
||||
|
||||
```c
|
||||
@@ -6519,7 +6551,7 @@ is no longer needed.
|
||||
jerry_value_t
|
||||
jerry_create_external_string_sz (const jerry_char_t *str_p,
|
||||
jerry_size_t str_size,
|
||||
jerry_object_native_free_callback_t free_cb)
|
||||
jerry_value_free_callback_t free_cb)
|
||||
```
|
||||
|
||||
- `str_p` - non-null pointer to string
|
||||
@@ -6529,6 +6561,8 @@ jerry_create_external_string_sz (const jerry_char_t *str_p,
|
||||
|
||||
*New in version 2.4*.
|
||||
|
||||
*Changed in version [[NEXT_RELEASE]]*: type of `free_cb` has been changed.
|
||||
|
||||
**Example**
|
||||
|
||||
```c
|
||||
@@ -8416,8 +8450,11 @@ typedef struct
|
||||
#define SECRET_INFO ((void *) 42)
|
||||
|
||||
static void
|
||||
buffer_native_freecb (void *native_p)
|
||||
buffer_native_freecb (void *native_p,
|
||||
jerry_object_native_info_t *info_p)
|
||||
{
|
||||
(void) info_p;
|
||||
|
||||
char *data_p = ((buffer_native_object_t*)native_p)->data_p;
|
||||
|
||||
if (data_p != NULL)
|
||||
@@ -8429,14 +8466,21 @@ buffer_native_freecb (void *native_p)
|
||||
}
|
||||
|
||||
static void
|
||||
shape_native_freecb (void *native_p)
|
||||
shape_native_freecb (void *native_p,
|
||||
jerry_object_native_info_t *info_p)
|
||||
{
|
||||
(void) info_p;
|
||||
|
||||
free (native_p);
|
||||
}
|
||||
|
||||
static void
|
||||
destructor_freecb (void *native_p)
|
||||
destructor_freecb (void *native_p,
|
||||
jerry_object_native_info_t *info_p)
|
||||
{
|
||||
(void) native_p;
|
||||
(void) info_p;
|
||||
|
||||
printf("Note: the object has been freed\n");
|
||||
}
|
||||
|
||||
@@ -8988,8 +9032,11 @@ typedef struct
|
||||
int match_foo_value;
|
||||
} find_object_data_t;
|
||||
|
||||
static void native_freecb (void *native_p)
|
||||
static void native_freecb (void *native_p,
|
||||
jerry_object_native_info_t *info_p)
|
||||
{
|
||||
(void) info_p;
|
||||
|
||||
/* `native_p` was allocated via malloc. */
|
||||
free (native_p);
|
||||
} /* native_freecb */
|
||||
|
||||
Reference in New Issue
Block a user