| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent c1d53f8 commit 169bff3
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -476,15 +476,6 @@ class TryCatch : public v8::TryCatch { | |||
| 476 | 476 | ||
| 477 | 477 | //=== Function napi_callback wrapper ================================= | |
| 478 | 478 | ||
| 479 | - // TODO(somebody): these constants can be removed with relevant changes | ||
| 480 | - // in CallbackWrapperBase<> and CallbackBundle. | ||
| 481 | - // Leave them for now just to keep the change set and cognitive load minimal. | ||
| 482 | - static const int kFunctionIndex = 0; // Used in CallbackBundle::cb[] | ||
| 483 | - static const int kGetterIndex = 0; // Used in CallbackBundle::cb[] | ||
| 484 | - static const int kSetterIndex = 1; // Used in CallbackBundle::cb[] | ||
| 485 | - static const int kCallbackCount = 2; // Used in CallbackBundle::cb[] | ||
| 486 | - // Max is "getter + setter" case | ||
| 487 | - | ||
| 488 | 479 | // Use this data structure to associate callback data with each N-API function | |
| 489 | 480 | // exposed to JavaScript. The structure is stored in a v8::External which gets | |
| 490 | 481 | // passed into our callback wrapper. This reduces the performance impact of | |
@@ -501,7 +492,8 @@ struct CallbackBundle { | |||
| 501 | 492 | ||
| 502 | 493 | napi_env env; // Necessary to invoke C++ NAPI callback | |
| 503 | 494 | void* cb_data; // The user provided callback data | |
| 504 | - napi_callback cb[kCallbackCount]; // Max capacity is 2 (getter + setter) | ||
| 495 | + napi_callback function_or_getter; | ||
| 496 | + napi_callback setter; | ||
| 505 | 497 | node::Persistent<v8::Value> handle; // Die with this JavaScript object | |
| 506 | 498 | ||
| 507 | 499 | private: | |
@@ -539,7 +531,7 @@ class CallbackWrapper { | |||
| 539 | 531 | void* _data; | |
| 540 | 532 | }; | |
| 541 | 533 | ||
| 542 | - template <typename Info, int kInternalFieldIndex> | ||
| 534 | + template <typename Info, napi_callback CallbackBundle::*FunctionField> | ||
| 543 | 535 | class CallbackWrapperBase : public CallbackWrapper { | |
| 544 | 536 | public: | |
| 545 | 537 | CallbackWrapperBase(const Info& cbinfo, const size_t args_length) | |
@@ -561,7 +553,7 @@ class CallbackWrapperBase : public CallbackWrapper { | |||
| 561 | 553 | ||
| 562 | 554 | // All other pointers we need are stored in `_bundle` | |
| 563 | 555 | napi_env env = _bundle->env; | |
| 564 | - napi_callback cb = _bundle->cb[kInternalFieldIndex]; | ||
| 556 | + napi_callback cb = _bundle->*FunctionField; | ||
| 565 | 557 | ||
| 566 | 558 | napi_value result; | |
| 567 | 559 | NAPI_CALL_INTO_MODULE_THROW(env, result = cb(env, cbinfo_wrapper)); | |
@@ -577,7 +569,7 @@ class CallbackWrapperBase : public CallbackWrapper { | |||
| 577 | 569 | ||
| 578 | 570 | class FunctionCallbackWrapper | |
| 579 | 571 | : public CallbackWrapperBase<v8::FunctionCallbackInfo<v8::Value>, | |
| 580 | - kFunctionIndex> { | ||
| 572 | + &CallbackBundle::function_or_getter> { | ||
| 581 | 573 | public: | |
| 582 | 574 | static void Invoke(const v8::FunctionCallbackInfo<v8::Value>& info) { | |
| 583 | 575 | FunctionCallbackWrapper cbwrapper(info); | |
@@ -623,7 +615,7 @@ class FunctionCallbackWrapper | |||
| 623 | 615 | ||
| 624 | 616 | class GetterCallbackWrapper | |
| 625 | 617 | : public CallbackWrapperBase<v8::PropertyCallbackInfo<v8::Value>, | |
| 626 | - kGetterIndex> { | ||
| 618 | + &CallbackBundle::function_or_getter> { | ||
| 627 | 619 | public: | |
| 628 | 620 | static void Invoke(v8::Local<v8::Name> property, | |
| 629 | 621 | const v8::PropertyCallbackInfo<v8::Value>& info) { | |
@@ -654,7 +646,8 @@ class GetterCallbackWrapper | |||
| 654 | 646 | }; | |
| 655 | 647 | ||
| 656 | 648 | class SetterCallbackWrapper | |
| 657 | - : public CallbackWrapperBase<v8::PropertyCallbackInfo<void>, kSetterIndex> { | ||
| 649 | + : public CallbackWrapperBase<v8::PropertyCallbackInfo<void>, | ||
| 650 | + &CallbackBundle::setter> { | ||
| 658 | 651 | public: | |
| 659 | 652 | static void Invoke(v8::Local<v8::Name> property, | |
| 660 | 653 | v8::Local<v8::Value> value, | |
@@ -698,7 +691,7 @@ v8::Local<v8::Value> CreateFunctionCallbackData(napi_env env, | |||
| 698 | 691 | napi_callback cb, | |
| 699 | 692 | void* data) { | |
| 700 | 693 | CallbackBundle* bundle = new CallbackBundle(); | |
| 701 | - bundle->cb[kFunctionIndex] = cb; | ||
| 694 | + bundle->function_or_getter = cb; | ||
| 702 | 695 | bundle->cb_data = data; | |
| 703 | 696 | bundle->env = env; | |
| 704 | 697 | v8::Local<v8::Value> cbdata = v8::External::New(env->isolate, bundle); | |
@@ -716,8 +709,8 @@ v8::Local<v8::Value> CreateAccessorCallbackData(napi_env env, | |||
| 716 | 709 | napi_callback setter, | |
| 717 | 710 | void* data) { | |
| 718 | 711 | CallbackBundle* bundle = new CallbackBundle(); | |
| 719 | - bundle->cb[kGetterIndex] = getter; | ||
| 720 | - bundle->cb[kSetterIndex] = setter; | ||
| 712 | + bundle->function_or_getter = getter; | ||
| 713 | + bundle->setter = setter; | ||
| 721 | 714 | bundle->cb_data = data; | |
| 722 | 715 | bundle->env = env; | |
| 723 | 716 | v8::Local<v8::Value> cbdata = v8::External::New(env->isolate, bundle); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments