@@ -225,11 +225,11 @@ class ExternalCallback {
225
225
: _env(env), _cb(cb), _data(data) {
226
226
}
227
227
228
- // JsNativeFunction
228
+ // JsEnhancedNativeFunction
229
229
static JsValueRef CALLBACK Callback (JsValueRef callee,
230
- bool isConstructCall,
231
230
JsValueRef *arguments,
232
231
uint16_t argumentCount,
232
+ JsNativeFunctionInfo *info,
233
233
void *callbackState) {
234
234
jsrtimpl::ExternalCallback* externalCallback =
235
235
reinterpret_cast <jsrtimpl::ExternalCallback*>(callbackState);
@@ -238,15 +238,8 @@ class ExternalCallback {
238
238
napi_clear_last_error ();
239
239
240
240
CallbackInfo cbInfo;
241
- cbInfo.thisArg = reinterpret_cast <napi_value>(arguments[0 ]);
242
-
243
- // TODO(digitalinfinity): This is incorrect as per spec, but
244
- // implementing this behavior for now to at least handle the case
245
- // where folks check newTarget != null to determine they're in a
246
- // constructor.
247
- // JSRT will need to implement an API to get new.target for this
248
- // to work correctly
249
- cbInfo.newTarget = (isConstructCall ? cbInfo.thisArg : nullptr );
241
+ cbInfo.thisArg = reinterpret_cast <napi_value>(info->thisArg );
242
+ cbInfo.newTarget = reinterpret_cast <napi_value>(info->newTargetArg );
250
243
cbInfo.argc = argumentCount - 1 ;
251
244
cbInfo.argv = reinterpret_cast <napi_value*>(arguments + 1 );
252
245
cbInfo.data = externalCallback->_data ;
@@ -688,24 +681,20 @@ napi_status napi_create_function(napi_env env,
688
681
}
689
682
690
683
JsValueRef function;
684
+ JsValueRef name = JS_INVALID_REFERENCE;
691
685
if (utf8name != nullptr ) {
692
- JsValueRef name;
693
686
CHECK_JSRT (JsCreateString (
694
687
utf8name,
695
688
length == -1 ? strlen (utf8name) : length,
696
689
&name));
697
- CHECK_JSRT (JsCreateNamedFunction (
698
- name,
699
- jsrtimpl::ExternalCallback::Callback,
700
- externalCallback,
701
- &function));
702
- } else {
703
- CHECK_JSRT (JsCreateFunction (
704
- jsrtimpl::ExternalCallback::Callback,
705
- externalCallback,
706
- &function));
707
690
}
708
691
692
+ CHECK_JSRT (JsCreateEnhancedFunction (
693
+ jsrtimpl::ExternalCallback::Callback,
694
+ name,
695
+ externalCallback,
696
+ &function));
697
+
709
698
CHECK_JSRT (JsSetObjectBeforeCollectCallback (
710
699
function, externalCallback, jsrtimpl::ExternalCallback::Finalize));
711
700
@@ -730,19 +719,17 @@ static napi_status napi_create_property_function(napi_env env,
730
719
CHECK_NAPI (napi_typeof (env, property_name, &nameType));
731
720
732
721
JsValueRef function;
722
+ JsValueRef name = JS_INVALID_REFERENCE;
733
723
if (nameType == napi_string) {
734
- CHECK_JSRT (JsCreateNamedFunction (
735
- property_name,
736
- jsrtimpl::ExternalCallback::Callback,
737
- externalCallback,
738
- &function));
739
- } else {
740
- CHECK_JSRT (JsCreateFunction (
741
- jsrtimpl::ExternalCallback::Callback,
742
- externalCallback,
743
- &function));
724
+ name = property_name;
744
725
}
745
726
727
+ CHECK_JSRT (JsCreateEnhancedFunction (
728
+ jsrtimpl::ExternalCallback::Callback,
729
+ name,
730
+ externalCallback,
731
+ &function));
732
+
746
733
CHECK_JSRT (JsSetObjectBeforeCollectCallback (
747
734
function, externalCallback, jsrtimpl::ExternalCallback::Finalize));
748
735
@@ -770,10 +757,10 @@ napi_status napi_define_class(napi_env env,
770
757
}
771
758
772
759
JsValueRef constructor;
773
- CHECK_JSRT (JsCreateNamedFunction (namestring ,
774
- jsrtimpl::ExternalCallback::Callback ,
775
- externalCallback,
776
- &constructor));
760
+ CHECK_JSRT (JsCreateEnhancedFunction (jsrtimpl::ExternalCallback::Callback ,
761
+ namestring ,
762
+ externalCallback,
763
+ &constructor));
777
764
778
765
CHECK_JSRT (JsSetObjectBeforeCollectCallback (
779
766
constructor, externalCallback, jsrtimpl::ExternalCallback::Finalize));
0 commit comments