1 | /* Copyright JS Foundation and other contributors, http://js.foundation |
2 | * |
3 | * Licensed under the Apache License, Version 2.0 (the "License"); |
4 | * you may not use this file except in compliance with the License. |
5 | * You may obtain a copy of the License at |
6 | * |
7 | * http://www.apache.org/licenses/LICENSE-2.0 |
8 | * |
9 | * Unless required by applicable law or agreed to in writing, software |
10 | * distributed under the License is distributed on an "AS IS" BASIS |
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
12 | * See the License for the specific language governing permissions and |
13 | * limitations under the License. |
14 | */ |
15 | |
16 | #include <math.h> |
17 | |
18 | #include "jerryscript-ext/arg.h" |
19 | #include "jerryscript.h" |
20 | |
21 | /** |
22 | * The common function to deal with optional arguments. |
23 | * The core transform function is provided by argument `func`. |
24 | * |
25 | * @return jerry undefined: the transformer passes, |
26 | * jerry error: the transformer fails. |
27 | */ |
28 | jerry_value_t |
29 | jerryx_arg_transform_optional (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
30 | const jerryx_arg_t *c_arg_p, /**< native arg */ |
31 | jerryx_arg_transform_func_t func) /**< the core transform function */ |
32 | { |
33 | jerry_value_t js_arg = jerryx_arg_js_iterator_peek (js_arg_iter_p); |
34 | |
35 | if (jerry_value_is_undefined (js_arg)) |
36 | { |
37 | return jerryx_arg_js_iterator_pop (js_arg_iter_p); |
38 | } |
39 | |
40 | return func (js_arg_iter_p, c_arg_p); |
41 | } /* jerryx_arg_transform_optional */ |
42 | |
43 | /** |
44 | * The common part in transforming a JS argument to a number (double or certain int) type. |
45 | * Type coercion is not allowed. |
46 | * |
47 | * @return jerry undefined: the transformer passes, |
48 | * jerry error: the transformer fails. |
49 | */ |
50 | static jerry_value_t |
51 | jerryx_arg_transform_number_strict_common (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
52 | double *number_p) /**< [out] the number in JS arg */ |
53 | { |
54 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
55 | |
56 | if (!jerry_value_is_number (js_arg)) |
57 | { |
58 | return jerry_create_error (JERRY_ERROR_TYPE, |
59 | (jerry_char_t *) "It is not a number." ); |
60 | } |
61 | |
62 | *number_p = jerry_get_number_value (js_arg); |
63 | |
64 | return jerry_create_undefined (); |
65 | } /* jerryx_arg_transform_number_strict_common */ |
66 | |
67 | /** |
68 | * The common part in transforming a JS argument to a number (double or certain int) type. |
69 | * Type coercion is allowed. |
70 | * |
71 | * @return jerry undefined: the transformer passes, |
72 | * jerry error: the transformer fails. |
73 | */ |
74 | static jerry_value_t |
75 | jerryx_arg_transform_number_common (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
76 | double *number_p) /**< [out] the number in JS arg */ |
77 | { |
78 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
79 | |
80 | jerry_value_t to_number = jerry_value_to_number (js_arg); |
81 | |
82 | if (jerry_value_is_error (to_number)) |
83 | { |
84 | jerry_release_value (to_number); |
85 | |
86 | return jerry_create_error (JERRY_ERROR_TYPE, |
87 | (jerry_char_t *) "It can not be converted to a number." ); |
88 | } |
89 | |
90 | *number_p = jerry_get_number_value (to_number); |
91 | jerry_release_value (to_number); |
92 | |
93 | return jerry_create_undefined (); |
94 | } /* jerryx_arg_transform_number_common */ |
95 | |
96 | /** |
97 | * Transform a JS argument to a double. Type coercion is not allowed. |
98 | * |
99 | * @return jerry undefined: the transformer passes, |
100 | * jerry error: the transformer fails. |
101 | */ |
102 | jerry_value_t |
103 | jerryx_arg_transform_number_strict (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
104 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
105 | { |
106 | return jerryx_arg_transform_number_strict_common (js_arg_iter_p, c_arg_p->dest); |
107 | } /* jerryx_arg_transform_number_strict */ |
108 | |
109 | /** |
110 | * Transform a JS argument to a double. Type coercion is allowed. |
111 | * |
112 | * @return jerry undefined: the transformer passes, |
113 | * jerry error: the transformer fails. |
114 | */ |
115 | jerry_value_t |
116 | jerryx_arg_transform_number (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
117 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
118 | { |
119 | return jerryx_arg_transform_number_common (js_arg_iter_p, c_arg_p->dest); |
120 | } /* jerryx_arg_transform_number */ |
121 | |
122 | /** |
123 | * Helper function to process a double number before converting it |
124 | * to an integer. |
125 | * |
126 | * @return jerry undefined: the transformer passes, |
127 | * jerry error: the transformer fails. |
128 | */ |
129 | static jerry_value_t |
130 | jerryx_arg_helper_process_double (double *d, /**< [in, out] the number to be processed */ |
131 | double min, /**< the min value for clamping */ |
132 | double max, /**< the max value for clamping */ |
133 | jerryx_arg_int_option_t option) /**< the converting policies */ |
134 | { |
135 | if (*d != *d) /* isnan (*d) triggers conversion warning on clang<9 */ |
136 | { |
137 | return jerry_create_error (JERRY_ERROR_TYPE, |
138 | (jerry_char_t *) "The number is NaN." ); |
139 | } |
140 | |
141 | if (option.clamp == JERRYX_ARG_NO_CLAMP) |
142 | { |
143 | if (*d > max || *d < min) |
144 | { |
145 | return jerry_create_error (JERRY_ERROR_TYPE, |
146 | (jerry_char_t *) "The number is out of range." ); |
147 | } |
148 | } |
149 | else |
150 | { |
151 | *d = *d < min ? min : *d; |
152 | *d = *d > max ? max : *d; |
153 | } |
154 | |
155 | if (option.round == JERRYX_ARG_ROUND) |
156 | { |
157 | *d = (*d >= 0.0) ? floor (*d + 0.5) : ceil (*d - 0.5); |
158 | } |
159 | else if (option.round == JERRYX_ARG_FLOOR) |
160 | { |
161 | *d = floor (*d); |
162 | } |
163 | else |
164 | { |
165 | *d = ceil (*d); |
166 | } |
167 | |
168 | return jerry_create_undefined (); |
169 | } /* jerryx_arg_helper_process_double */ |
170 | |
171 | /** |
172 | * Use the macro to define thr transform functions for int type. |
173 | */ |
174 | #define JERRYX_ARG_TRANSFORM_FUNC_FOR_INT_TEMPLATE(type, suffix, min, max) \ |
175 | jerry_value_t jerryx_arg_transform_ ## type ## suffix (jerryx_arg_js_iterator_t *js_arg_iter_p, \ |
176 | const jerryx_arg_t *c_arg_p) \ |
177 | { \ |
178 | double tmp = 0.0; \ |
179 | jerry_value_t rv = jerryx_arg_transform_number ## suffix ## _common (js_arg_iter_p, &tmp); \ |
180 | if (jerry_value_is_error (rv)) \ |
181 | { \ |
182 | return rv; \ |
183 | } \ |
184 | jerry_release_value (rv); \ |
185 | union \ |
186 | { \ |
187 | jerryx_arg_int_option_t int_option; \ |
188 | uintptr_t ; \ |
189 | } u = { .extra_info = c_arg_p->extra_info }; \ |
190 | rv = jerryx_arg_helper_process_double (&tmp, min, max, u.int_option); \ |
191 | if (jerry_value_is_error (rv)) \ |
192 | { \ |
193 | return rv; \ |
194 | } \ |
195 | *(type ## _t *) c_arg_p->dest = (type ## _t) tmp; \ |
196 | return rv; \ |
197 | } |
198 | |
199 | #define JERRYX_ARG_TRANSFORM_FUNC_FOR_INT(type, min, max) \ |
200 | JERRYX_ARG_TRANSFORM_FUNC_FOR_INT_TEMPLATE (type, _strict, min, max) \ |
201 | JERRYX_ARG_TRANSFORM_FUNC_FOR_INT_TEMPLATE (type, , min, max) |
202 | |
203 | JERRYX_ARG_TRANSFORM_FUNC_FOR_INT (uint8, 0, UINT8_MAX) |
204 | JERRYX_ARG_TRANSFORM_FUNC_FOR_INT (int8, INT8_MIN, INT8_MAX) |
205 | JERRYX_ARG_TRANSFORM_FUNC_FOR_INT (uint16, 0, UINT16_MAX) |
206 | JERRYX_ARG_TRANSFORM_FUNC_FOR_INT (int16, INT16_MIN, INT16_MAX) |
207 | JERRYX_ARG_TRANSFORM_FUNC_FOR_INT (uint32, 0, UINT32_MAX) |
208 | JERRYX_ARG_TRANSFORM_FUNC_FOR_INT (int32, INT32_MIN, INT32_MAX) |
209 | |
210 | #undef JERRYX_ARG_TRANSFORM_FUNC_FOR_INT_TEMPLATE |
211 | #undef JERRYX_ARG_TRANSFORM_FUNC_FOR_INT |
212 | /** |
213 | * Transform a JS argument to a boolean. Type coercion is not allowed. |
214 | * |
215 | * @return jerry undefined: the transformer passes, |
216 | * jerry error: the transformer fails. |
217 | */ |
218 | jerry_value_t |
219 | jerryx_arg_transform_boolean_strict (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
220 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
221 | { |
222 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
223 | |
224 | if (!jerry_value_is_boolean (js_arg)) |
225 | { |
226 | return jerry_create_error (JERRY_ERROR_TYPE, |
227 | (jerry_char_t *) "It is not a boolean." ); |
228 | } |
229 | |
230 | bool *dest = c_arg_p->dest; |
231 | *dest = jerry_get_boolean_value (js_arg); |
232 | |
233 | return jerry_create_undefined (); |
234 | } /* jerryx_arg_transform_boolean_strict */ |
235 | |
236 | /** |
237 | * Transform a JS argument to a boolean. Type coercion is allowed. |
238 | * |
239 | * @return jerry undefined: the transformer passes, |
240 | * jerry error: the transformer fails. |
241 | */ |
242 | jerry_value_t |
243 | jerryx_arg_transform_boolean (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
244 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
245 | { |
246 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
247 | |
248 | bool to_boolean = jerry_value_to_boolean (js_arg); |
249 | |
250 | bool *dest = c_arg_p->dest; |
251 | *dest = to_boolean; |
252 | |
253 | return jerry_create_undefined (); |
254 | } /* jerryx_arg_transform_boolean */ |
255 | |
256 | /** |
257 | * The common routine for string transformer. |
258 | * It works for both CESU-8 and UTF-8 string. |
259 | * |
260 | * @return jerry undefined: the transformer passes, |
261 | * jerry error: the transformer fails. |
262 | */ |
263 | static jerry_value_t |
264 | jerryx_arg_string_to_buffer_common_routine (jerry_value_t js_arg, /**< JS arg */ |
265 | const jerryx_arg_t *c_arg_p, /**< native arg */ |
266 | bool is_utf8) /**< whether it is UTF-8 string */ |
267 | { |
268 | jerry_char_t *target_p = (jerry_char_t *) c_arg_p->dest; |
269 | jerry_size_t target_buf_size = (jerry_size_t) c_arg_p->extra_info; |
270 | jerry_size_t size; |
271 | jerry_length_t len; |
272 | |
273 | if (!is_utf8) |
274 | { |
275 | size = jerry_string_to_char_buffer (js_arg, |
276 | target_p, |
277 | target_buf_size); |
278 | len = jerry_get_string_length (js_arg); |
279 | } |
280 | else |
281 | { |
282 | size = jerry_string_to_utf8_char_buffer (js_arg, |
283 | target_p, |
284 | target_buf_size); |
285 | len = jerry_get_utf8_string_length (js_arg); |
286 | } |
287 | |
288 | if ((size == target_buf_size) || (size == 0 && len != 0)) |
289 | { |
290 | return jerry_create_error (JERRY_ERROR_TYPE, |
291 | (jerry_char_t *) "Buffer size is not large enough." ); |
292 | } |
293 | |
294 | target_p[size] = '\0'; |
295 | |
296 | return jerry_create_undefined (); |
297 | } /* jerryx_arg_string_to_buffer_common_routine */ |
298 | |
299 | /** |
300 | * Transform a JS argument to a UTF-8/CESU-8 char array. Type coercion is not allowed. |
301 | * |
302 | * @return jerry undefined: the transformer passes, |
303 | * jerry error: the transformer fails. |
304 | */ |
305 | static jerry_value_t |
306 | jerryx_arg_transform_string_strict_common (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
307 | const jerryx_arg_t *c_arg_p, /**< the native arg */ |
308 | bool is_utf8) /**< whether it is a UTF-8 string */ |
309 | { |
310 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
311 | |
312 | if (!jerry_value_is_string (js_arg)) |
313 | { |
314 | return jerry_create_error (JERRY_ERROR_TYPE, |
315 | (jerry_char_t *) "It is not a string." ); |
316 | } |
317 | |
318 | return jerryx_arg_string_to_buffer_common_routine (js_arg, c_arg_p, is_utf8); |
319 | } /* jerryx_arg_transform_string_strict_common */ |
320 | |
321 | /** |
322 | * Transform a JS argument to a UTF-8/CESU-8 char array. Type coercion is allowed. |
323 | * |
324 | * @return jerry undefined: the transformer passes, |
325 | * jerry error: the transformer fails. |
326 | */ |
327 | static jerry_value_t |
328 | jerryx_arg_transform_string_common (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
329 | const jerryx_arg_t *c_arg_p, /**< the native arg */ |
330 | bool is_utf8) /**< whether it is a UTF-8 string */ |
331 | { |
332 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
333 | |
334 | jerry_value_t to_string = jerry_value_to_string (js_arg); |
335 | |
336 | if (jerry_value_is_error (to_string)) |
337 | { |
338 | jerry_release_value (to_string); |
339 | |
340 | return jerry_create_error (JERRY_ERROR_TYPE, |
341 | (jerry_char_t *) "It can not be converted to a string." ); |
342 | } |
343 | |
344 | jerry_value_t ret = jerryx_arg_string_to_buffer_common_routine (to_string, c_arg_p, is_utf8); |
345 | jerry_release_value (to_string); |
346 | |
347 | return ret; |
348 | } /* jerryx_arg_transform_string_common */ |
349 | |
350 | /** |
351 | * Transform a JS argument to a cesu8 char array. Type coercion is not allowed. |
352 | * |
353 | * Note: |
354 | * returned value must be freed with jerry_release_value, when it is no longer needed. |
355 | * |
356 | * @return jerry undefined: the transformer passes, |
357 | * jerry error: the transformer fails. |
358 | */ |
359 | jerry_value_t |
360 | jerryx_arg_transform_string_strict (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
361 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
362 | { |
363 | return jerryx_arg_transform_string_strict_common (js_arg_iter_p, c_arg_p, false); |
364 | } /* jerryx_arg_transform_string_strict */ |
365 | |
366 | /** |
367 | * Transform a JS argument to a utf8 char array. Type coercion is not allowed. |
368 | * |
369 | * Note: |
370 | * returned value must be freed with jerry_release_value, when it is no longer needed. |
371 | * |
372 | * @return jerry undefined: the transformer passes, |
373 | * jerry error: the transformer fails. |
374 | */ |
375 | jerry_value_t |
376 | jerryx_arg_transform_utf8_string_strict (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
377 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
378 | { |
379 | return jerryx_arg_transform_string_strict_common (js_arg_iter_p, c_arg_p, true); |
380 | } /* jerryx_arg_transform_utf8_string_strict */ |
381 | |
382 | /** |
383 | * Transform a JS argument to a cesu8 char array. Type coercion is allowed. |
384 | * |
385 | * Note: |
386 | * returned value must be freed with jerry_release_value, when it is no longer needed. |
387 | * |
388 | * @return jerry undefined: the transformer passes, |
389 | * jerry error: the transformer fails. |
390 | */ |
391 | jerry_value_t |
392 | jerryx_arg_transform_string (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
393 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
394 | { |
395 | return jerryx_arg_transform_string_common (js_arg_iter_p, c_arg_p, false); |
396 | } /* jerryx_arg_transform_string */ |
397 | |
398 | /** |
399 | * Transform a JS argument to a utf8 char array. Type coercion is allowed. |
400 | * |
401 | * Note: |
402 | * returned value must be freed with jerry_release_value, when it is no longer needed. |
403 | * |
404 | * @return jerry undefined: the transformer passes, |
405 | * jerry error: the transformer fails. |
406 | */ |
407 | jerry_value_t |
408 | jerryx_arg_transform_utf8_string (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
409 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
410 | { |
411 | return jerryx_arg_transform_string_common (js_arg_iter_p, c_arg_p, true); |
412 | } /* jerryx_arg_transform_utf8_string */ |
413 | |
414 | /** |
415 | * Check whether the JS argument is jerry function, if so, assign to the native argument. |
416 | * |
417 | * @return jerry undefined: the transformer passes, |
418 | * jerry error: the transformer fails. |
419 | */ |
420 | jerry_value_t |
421 | jerryx_arg_transform_function (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
422 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
423 | { |
424 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
425 | |
426 | if (!jerry_value_is_function (js_arg)) |
427 | { |
428 | return jerry_create_error (JERRY_ERROR_TYPE, |
429 | (jerry_char_t *) "It is not a function." ); |
430 | } |
431 | |
432 | jerry_value_t *func_p = c_arg_p->dest; |
433 | *func_p = jerry_acquire_value (js_arg); |
434 | |
435 | return jerry_create_undefined (); |
436 | } /* jerryx_arg_transform_function */ |
437 | |
438 | /** |
439 | * Check whether the native pointer has the expected type info. |
440 | * If so, assign it to the native argument. |
441 | * |
442 | * @return jerry undefined: the transformer passes, |
443 | * jerry error: the transformer fails. |
444 | */ |
445 | jerry_value_t |
446 | jerryx_arg_transform_native_pointer (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
447 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
448 | { |
449 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
450 | |
451 | if (!jerry_value_is_object (js_arg)) |
452 | { |
453 | return jerry_create_error (JERRY_ERROR_TYPE, |
454 | (jerry_char_t *) "It is not an object." ); |
455 | } |
456 | |
457 | const jerry_object_native_info_t *expected_info_p; |
458 | expected_info_p = (const jerry_object_native_info_t *) c_arg_p->extra_info; |
459 | void **ptr_p = (void **) c_arg_p->dest; |
460 | bool is_ok = jerry_get_object_native_pointer (js_arg, ptr_p, expected_info_p); |
461 | |
462 | if (!is_ok) |
463 | { |
464 | return jerry_create_error (JERRY_ERROR_TYPE, |
465 | (jerry_char_t *) "The object has no native pointer or type does not match." ); |
466 | } |
467 | |
468 | return jerry_create_undefined (); |
469 | } /* jerryx_arg_transform_native_pointer */ |
470 | |
471 | /** |
472 | * Check whether the JS object's properties have expected types, and transform them into native args. |
473 | * |
474 | * @return jerry undefined: the transformer passes, |
475 | * jerry error: the transformer fails. |
476 | */ |
477 | jerry_value_t |
478 | jerryx_arg_transform_object_props (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
479 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
480 | { |
481 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
482 | |
483 | const jerryx_arg_object_props_t *object_props = (const jerryx_arg_object_props_t *) c_arg_p->extra_info; |
484 | |
485 | return jerryx_arg_transform_object_properties (js_arg, |
486 | object_props->name_p, |
487 | object_props->name_cnt, |
488 | object_props->c_arg_p, |
489 | object_props->c_arg_cnt); |
490 | } /* jerryx_arg_transform_object_props */ |
491 | |
492 | /** |
493 | * Check whether the JS array's items have expected types, and transform them into native args. |
494 | * |
495 | * @return jerry undefined: the transformer passes, |
496 | * jerry error: the transformer fails. |
497 | */ |
498 | jerry_value_t |
499 | jerryx_arg_transform_array_items (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
500 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
501 | { |
502 | jerry_value_t js_arg = jerryx_arg_js_iterator_pop (js_arg_iter_p); |
503 | |
504 | const jerryx_arg_array_items_t *array_items_p = (const jerryx_arg_array_items_t *) c_arg_p->extra_info; |
505 | |
506 | return jerryx_arg_transform_array (js_arg, |
507 | array_items_p->c_arg_p, |
508 | array_items_p->c_arg_cnt); |
509 | } /* jerryx_arg_transform_array_items */ |
510 | |
511 | /** |
512 | * Define transformer for optional argument. |
513 | */ |
514 | #define JERRYX_ARG_TRANSFORM_OPTIONAL(type) \ |
515 | jerry_value_t \ |
516 | jerryx_arg_transform_ ## type ## _optional (jerryx_arg_js_iterator_t *js_arg_iter_p, \ |
517 | const jerryx_arg_t *c_arg_p) \ |
518 | { \ |
519 | return jerryx_arg_transform_optional (js_arg_iter_p, c_arg_p, jerryx_arg_transform_ ## type); \ |
520 | } |
521 | |
522 | JERRYX_ARG_TRANSFORM_OPTIONAL (number) |
523 | JERRYX_ARG_TRANSFORM_OPTIONAL (number_strict) |
524 | JERRYX_ARG_TRANSFORM_OPTIONAL (boolean) |
525 | JERRYX_ARG_TRANSFORM_OPTIONAL (boolean_strict) |
526 | JERRYX_ARG_TRANSFORM_OPTIONAL (string) |
527 | JERRYX_ARG_TRANSFORM_OPTIONAL (string_strict) |
528 | JERRYX_ARG_TRANSFORM_OPTIONAL (utf8_string) |
529 | JERRYX_ARG_TRANSFORM_OPTIONAL (utf8_string_strict) |
530 | JERRYX_ARG_TRANSFORM_OPTIONAL (function) |
531 | JERRYX_ARG_TRANSFORM_OPTIONAL (native_pointer) |
532 | JERRYX_ARG_TRANSFORM_OPTIONAL (object_props) |
533 | JERRYX_ARG_TRANSFORM_OPTIONAL (array_items) |
534 | |
535 | JERRYX_ARG_TRANSFORM_OPTIONAL (uint8) |
536 | JERRYX_ARG_TRANSFORM_OPTIONAL (uint16) |
537 | JERRYX_ARG_TRANSFORM_OPTIONAL (uint32) |
538 | JERRYX_ARG_TRANSFORM_OPTIONAL (int8) |
539 | JERRYX_ARG_TRANSFORM_OPTIONAL (int16) |
540 | JERRYX_ARG_TRANSFORM_OPTIONAL (int32) |
541 | JERRYX_ARG_TRANSFORM_OPTIONAL (int8_strict) |
542 | JERRYX_ARG_TRANSFORM_OPTIONAL (int16_strict) |
543 | JERRYX_ARG_TRANSFORM_OPTIONAL (int32_strict) |
544 | JERRYX_ARG_TRANSFORM_OPTIONAL (uint8_strict) |
545 | JERRYX_ARG_TRANSFORM_OPTIONAL (uint16_strict) |
546 | JERRYX_ARG_TRANSFORM_OPTIONAL (uint32_strict) |
547 | |
548 | #undef JERRYX_ARG_TRANSFORM_OPTIONAL |
549 | |
550 | /** |
551 | * Ignore the JS argument. |
552 | * |
553 | * @return jerry undefined |
554 | */ |
555 | jerry_value_t |
556 | jerryx_arg_transform_ignore (jerryx_arg_js_iterator_t *js_arg_iter_p, /**< available JS args */ |
557 | const jerryx_arg_t *c_arg_p) /**< the native arg */ |
558 | { |
559 | (void) js_arg_iter_p; /* unused */ |
560 | (void) c_arg_p; /* unused */ |
561 | |
562 | return jerry_create_undefined (); |
563 | } /* jerryx_arg_transform_ignore */ |
564 | |