Skip to content

Commit 381f541

Browse files
committed
update on 5/3
* change api name * no countdown of js_arg_cnt in iterator * iterator var name: js_arg_iter_p JerryScript-DCO-1.0-Signed-off-by: Zidong Jiang [email protected]
1 parent aea8355 commit 381f541

File tree

5 files changed

+78
-52
lines changed

5 files changed

+78
-52
lines changed

jerry-ext/args/arg-transform-functions.c

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,43 +16,59 @@
1616
#include "jerryscript-ext/args.h"
1717
#include "jerryscript.h"
1818

19+
/**
20+
* Pop the current JS argument from the iterator.
21+
* It will change the index and js_arg_p value in the iterator.
22+
*
23+
* @return the current JS argument.
24+
*/
1925
jerry_value_t
20-
jerryx_arg_js_iterator_pop (jerryx_arg_js_iterator_t *js_args)
26+
jerryx_arg_js_iterator_pop (jerryx_arg_js_iterator_t *js_arg_iter_p) /**< the JS arg iterator */
2127
{
22-
js_args->js_arg_idx++;
23-
return js_args->js_arg_cnt-- > 0 ? *js_args->js_arg_p++ : jerry_create_undefined ();
28+
return (js_arg_iter_p->js_arg_idx++ < js_arg_iter_p->js_arg_cnt ? *js_arg_iter_p->js_arg_p++
29+
: jerry_create_undefined ());
2430
} /* jerryx_arg_js_iterator_pop */
2531

32+
/**
33+
* Get the current JS argument from the iterator.
34+
*
35+
* Note:
36+
* Unlike jerryx_arg_iterator_pop, it will not change index and
37+
* js_arg_p value in the iterator.
38+
*
39+
* @return the current JS argument.
40+
*/
2641
jerry_value_t
27-
jerryx_arg_js_iterator_peek (jerryx_arg_js_iterator_t *js_args)
42+
jerryx_arg_js_iterator_peek (jerryx_arg_js_iterator_t *js_arg_iter_p) /**< the JS arg iterator */
2843
{
29-
return js_args->js_arg_cnt > 0 ? *js_args->js_arg_p : jerry_create_undefined ();
44+
return (js_arg_iter_p->js_arg_idx < js_arg_iter_p->js_arg_cnt ? *js_arg_iter_p->js_arg_p
45+
: jerry_create_undefined ());
3046
} /* jerryx_arg_js_iterator_peek */
3147

3248
/**
3349
* The common function to deal with optional arguments.
3450
*/
3551
static jerry_value_t
36-
jerryx_arg_transform_optional (jerryx_arg_js_iterator_t *js_args, /**< available JS args */
52+
jerryx_arg_transform_optional (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */
3753
const jerryx_arg_t *c_arg_p, /**< native arg */
3854
jerryx_arg_transform_func_t func) /**< the core transform function */
3955
{
40-
jerry_value_t js_arg = jerryx_arg_js_iterator_peek (js_args);
56+
jerry_value_t js_arg = jerryx_arg_js_iterator_peek (js_arg_iter_p);
4157

4258
if (jerry_value_is_undefined (js_arg))
4359
{
4460
return js_arg;
4561
}
4662

47-
return func (js_args, c_arg_p);
63+
return func (js_arg_iter_p, c_arg_p);
4864
} /* jerryx_arg_transform_optional */
4965

5066
/**
5167
* Tranform a JS argument to a double. Type coercion is not allowed.
5268
*/
5369
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_number_strict)
5470
{
55-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
71+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
5672

5773
if (!jerry_value_is_number (js_arg))
5874
{
@@ -71,7 +87,7 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_number_strict)
7187
*/
7288
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_number)
7389
{
74-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
90+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
7591

7692
jerry_value_t to_number = jerry_value_to_number (js_arg);
7793

@@ -95,7 +111,7 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_number)
95111
*/
96112
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_boolean_strict)
97113
{
98-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
114+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
99115

100116
if (!jerry_value_is_boolean (js_arg))
101117
{
@@ -114,7 +130,7 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_boolean_strict)
114130
*/
115131
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_boolean)
116132
{
117-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
133+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
118134

119135
bool to_boolean = jerry_value_to_boolean (js_arg);
120136

@@ -126,6 +142,9 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_boolean)
126142

127143
/**
128144
* The common routine for string tranformor.
145+
*
146+
* @return jerry undefined: the validator passes,
147+
* jerry error: the validator fails.
129148
*/
130149
static jerry_value_t
131150
jerryx_arg_string_common_routine (jerry_value_t js_arg, /**< JS arg */
@@ -149,7 +168,7 @@ jerryx_arg_string_common_routine (jerry_value_t js_arg, /**< JS arg */
149168
*/
150169
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_string_strict)
151170
{
152-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
171+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
153172

154173
if (!jerry_value_is_string (js_arg))
155174
{
@@ -165,7 +184,7 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_string_strict)
165184
*/
166185
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_string)
167186
{
168-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
187+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
169188

170189
jerry_value_t to_string = jerry_value_to_string (js_arg);
171190

@@ -188,7 +207,7 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_string)
188207
*/
189208
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_function)
190209
{
191-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
210+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
192211

193212
if (!jerry_value_is_function (js_arg))
194213
{
@@ -208,7 +227,7 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_function)
208227
*/
209228
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_native_pointer)
210229
{
211-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
230+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
212231

213232
if (!jerry_value_is_object (js_arg))
214233
{
@@ -237,7 +256,7 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_native_pointer)
237256
#define JERRYX_ARG_TRANSFORM_OPTIONAL(type) \
238257
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_ ## type ## _optional) \
239258
{ \
240-
return jerryx_arg_transform_optional (js_args, c_arg_p, jerryx_arg_transform_ ## type); \
259+
return jerryx_arg_transform_optional (js_arg_iter_p, c_arg_p, jerryx_arg_transform_ ## type); \
241260
}
242261

243262
JERRYX_ARG_TRANSFORM_OPTIONAL (number)
@@ -254,7 +273,7 @@ JERRYX_ARG_TRANSFORM_OPTIONAL (native_pointer)
254273
*/
255274
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_ignore)
256275
{
257-
(void) js_args; /* unused */
276+
(void) js_arg_iter_p; /* unused */
258277
(void) c_arg_p; /* unused */
259278

260279
return jerry_create_undefined ();

jerry-ext/args/args.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818

1919
/**
2020
* Validate the JS arguments and assign them to the native arguments.
21+
*
22+
* @return jerry undefined: the validator passes,
23+
* jerry error: the validator fails.
2124
*/
2225
jerry_value_t
2326
jerryx_arg_transform_args (const jerry_value_t *js_arg_p, /**< points to the js argument */
24-
jerry_length_t js_arg_cnt, /**< the count of the js arguments */
27+
const jerry_length_t js_arg_cnt, /**< the count of the js arguments */
2528
const jerryx_arg_t *c_arg_p, /**< points to the jerryx_arg_t */
2629
jerry_length_t c_arg_cnt) /**< the count of the native argument */
2730
{
@@ -45,17 +48,20 @@ jerryx_arg_transform_args (const jerry_value_t *js_arg_p, /**< points to the js
4548
/**
4649
* Validate the this value and the JS arguments,
4750
* and assign them to the native arguments.
51+
*
52+
* @return jerry undefined: the validator passes,
53+
* jerry error: the validator fails.
4854
*/
4955
jerry_value_t
50-
jerryx_arg_transform_all (const jerry_value_t this_val, /**< the this_val for the external function */
51-
const jerry_value_t *js_arg_p, /**< points to the js argument */
52-
jerry_length_t js_arg_cnt, /**< the count of the js arguments */
53-
const jerryx_arg_t *c_arg_p, /**< points to the jerryx_arg_t */
54-
jerry_length_t c_arg_cnt) /**< the count of the native argument */
56+
jerryx_arg_transform_args_with_this (const jerry_value_t this_val, /**< the this_val for the external function */
57+
const jerry_value_t *js_arg_p, /**< points to the js argument */
58+
const jerry_length_t js_arg_cnt, /**< the count of the js arguments */
59+
const jerryx_arg_t *c_arg_p, /**< points to the jerryx_arg_t */
60+
jerry_length_t c_arg_cnt) /**< the count of the native argument */
5561
{
5662
if (c_arg_cnt == 0)
5763
{
58-
return 0;
64+
return jerry_create_undefined ();
5965
}
6066

6167
jerryx_arg_js_iterator_t iterator =
@@ -75,4 +81,4 @@ jerryx_arg_transform_all (const jerry_value_t this_val, /**< the this_val for th
7581
}
7682

7783
return jerryx_arg_transform_args (js_arg_p, js_arg_cnt, c_arg_p + 1, c_arg_cnt - 1);
78-
} /* jerryx_arg_transform_all */
84+
} /* jerryx_arg_transform_args_with_this */

jerry-ext/include/jerryscript-ext/args.h

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,20 @@ extern "C"
2929

3030
typedef struct jerryx_arg_t jerryx_arg_t;
3131

32+
/**
33+
* The iterator structor for JS arguments.
34+
*/
3235
typedef struct
3336
{
34-
const jerry_value_t *js_arg_p;
35-
jerry_length_t js_arg_cnt;
36-
jerry_length_t js_arg_idx;
37+
const jerry_value_t *js_arg_p; /**< the JS arguments */
38+
const jerry_length_t js_arg_cnt; /**< the total num of JS arguments */
39+
jerry_length_t js_arg_idx; /**< current index of JS argument */
3740
} jerryx_arg_js_iterator_t;
3841

3942
/**
4043
* Signature of the transform function.
4144
*/
42-
typedef jerry_value_t (*jerryx_arg_transform_func_t) (jerryx_arg_js_iterator_t *js_args, /**< available JS args */
45+
typedef jerry_value_t (*jerryx_arg_transform_func_t) (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */
4346
const jerryx_arg_t *c_arg_p); /**< native arg */
4447

4548
/**
@@ -48,7 +51,7 @@ typedef jerry_value_t (*jerryx_arg_transform_func_t) (jerryx_arg_js_iterator_t *
4851
* @param NAME name of the function.
4952
*/
5053
#define JERRYX_ARG_TRANSFORM_FUNC(NAME) \
51-
jerry_value_t NAME (jerryx_arg_js_iterator_t *js_args, \
54+
jerry_value_t NAME (jerryx_arg_js_iterator_t *js_arg_iter_p, \
5255
const jerryx_arg_t *c_arg_p)
5356

5457

@@ -63,14 +66,14 @@ struct jerryx_arg_t
6366
uintptr_t extra_info; /**< extra infomation for arg transform */
6467
};
6568

66-
jerry_value_t jerryx_arg_transform_all (const jerry_value_t this_val,
67-
const jerry_value_t *js_arg_p,
68-
jerry_length_t js_arg_cnt,
69-
const jerryx_arg_t *c_arg_p,
70-
jerry_length_t c_arg_cnt);
69+
jerry_value_t jerryx_arg_transform_args_with_this (const jerry_value_t this_val,
70+
const jerry_value_t *js_arg_p,
71+
const jerry_length_t js_arg_cnt,
72+
const jerryx_arg_t *c_arg_p,
73+
jerry_length_t c_arg_cnt);
7174

7275
jerry_value_t jerryx_arg_transform_args (const jerry_value_t *js_arg_p,
73-
jerry_length_t js_arg_cnt,
76+
const jerry_length_t js_arg_cnt,
7477
const jerryx_arg_t *c_arg_p,
7578
jerry_length_t c_arg_cnt);
7679

@@ -109,8 +112,8 @@ static inline jerryx_arg_t
109112
jerryx_arg_custom (void *dest, uintptr_t extra_info, jerryx_arg_transform_func_t func);
110113

111114
/* Helper functions for transform functions. */
112-
jerry_value_t jerryx_arg_js_iterator_pop (jerryx_arg_js_iterator_t *js_args);
113-
jerry_value_t jerryx_arg_js_iterator_peek (jerryx_arg_js_iterator_t *js_args);
115+
jerry_value_t jerryx_arg_js_iterator_pop (jerryx_arg_js_iterator_t *js_arg_iter_p);
116+
jerry_value_t jerryx_arg_js_iterator_peek (jerryx_arg_js_iterator_t *js_arg_iter_p);
114117

115118
#include "args.impl.h"
116119

jerry-ext/include/jerryscript-ext/args.impl.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_string_optional);
3131
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_string);
3232
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_function);
3333
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_function_optional);
34-
// JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_constructor);
35-
// JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_constructor_optional);
3634
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_native_pointer);
3735
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_native_pointer_optional);
3836
JERRYX_ARG_TRANSFORM_FUNC (jerryx_arg_transform_ignore);

tests/unit-ext/test-ext-args.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,11 @@ test_validator1_handler (const jerry_value_t func_obj_val __attribute__((unused)
106106
jerryx_arg_function (&arg4, JERRYX_ARG_OPTIONAL)
107107
};
108108

109-
jerry_value_t is_ok = jerryx_arg_transform_all (this_val,
110-
args_p,
111-
args_cnt,
112-
mapping,
113-
5);
109+
jerry_value_t is_ok = jerryx_arg_transform_args_with_this (this_val,
110+
args_p,
111+
args_cnt,
112+
mapping,
113+
5);
114114

115115

116116

@@ -150,7 +150,7 @@ test_validator1_handler (const jerry_value_t func_obj_val __attribute__((unused)
150150
static
151151
JERRYX_ARG_TRANSFORM_FUNC (my_custom_transform)
152152
{
153-
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_args);
153+
jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p);
154154
jerry_value_t to_number = jerry_value_to_number (js_arg);
155155

156156
if (jerry_value_has_error_flag (to_number))
@@ -194,11 +194,11 @@ test_validator2_handler (const jerry_value_t func_obj_val __attribute__((unused)
194194
jerryx_arg_custom (NULL, 5, my_custom_transform)
195195
};
196196

197-
jerry_value_t is_ok = jerryx_arg_transform_all (this_val,
198-
args_p,
199-
args_cnt,
200-
mapping,
201-
2);
197+
jerry_value_t is_ok = jerryx_arg_transform_args_with_this (this_val,
198+
args_p,
199+
args_cnt,
200+
mapping,
201+
2);
202202

203203

204204

0 commit comments

Comments
 (0)