@@ -45,12 +45,29 @@ constexpr double twoPi = M_PI * 2.;
45
45
pango_context_get_language(pango_layout_get_context(LAYOUT)))
46
46
47
47
inline static bool checkArgs(const Napi::CallbackInfo&info, double *args, int argsNum, int offset = 0 ){
48
- Napi::Number zero = Napi::Number::New ( info.Env (), 0 );
49
- int argsEnd = offset + argsNum;
48
+ Napi::Env env = info.Env ();
49
+ int argsEnd = std::min ( 9 , offset + argsNum) ;
50
50
bool areArgsValid = true ;
51
51
52
+ napi_value argv[9 ];
53
+ size_t argc = 9 ;
54
+ napi_get_cb_info (env, static_cast <napi_callback_info>(info), &argc, argv, nullptr , nullptr );
55
+
52
56
for (int i = offset; i < argsEnd; i++) {
53
- double val = info[i].ToNumber ().UnwrapOr (zero).DoubleValue ();
57
+ napi_valuetype type;
58
+ double val = 0 ;
59
+
60
+ napi_typeof (env, argv[i], &type);
61
+ if (type == napi_number) {
62
+ // fast path
63
+ napi_get_value_double (env, argv[i], &val);
64
+ } else {
65
+ napi_value num;
66
+ napi_create_double (env, 0 , &num);
67
+ if (napi_coerce_to_number (env, argv[i], &num) == napi_ok) {
68
+ napi_get_value_double (env, num, &val);
69
+ }
70
+ }
54
71
55
72
if (areArgsValid) {
56
73
if (!std::isfinite (val)) {
0 commit comments