@@ -61,7 +61,10 @@ Napi::Value GetMarshalNodes(const Napi::CallbackInfo &info,
6161 for (unsigned i = 0 ; i < node_count; i++) {
6262 TSNode node = nodes[i];
6363 const auto &cache_entry = tree->cached_nodes_ .find (node.id );
64- if (cache_entry == tree->cached_nodes_ .end ()) {
64+ Napi::Value value;
65+ if (cache_entry != tree->cached_nodes_ .end () && (value = cache_entry->second ->node .Value (), !value.IsEmpty ())) {
66+ result[i] = value;
67+ } else {
6568 MarshalNodeId (node.id , p);
6669 p += 2 ;
6770 *(p++) = node.context [0 ];
@@ -73,8 +76,6 @@ Napi::Value GetMarshalNodes(const Napi::CallbackInfo &info,
7376 } else {
7477 result[i] = env.Null ();
7578 }
76- } else {
77- result[i] = cache_entry->second ->node .Value ();
7879 }
7980 }
8081 return result;
@@ -84,7 +85,10 @@ Napi::Value GetMarshalNode(const Napi::CallbackInfo &info, const Tree *tree, TSN
8485 Env env = info.Env ();
8586 auto * data = env.GetInstanceData <AddonData>();
8687 const auto &cache_entry = tree->cached_nodes_ .find (node.id );
87- if (cache_entry == tree->cached_nodes_ .end ()) {
88+ Napi::Value value;
89+ if (cache_entry != tree->cached_nodes_ .end () && (value = cache_entry->second ->node .Value (), !value.IsEmpty ())) {
90+ return value;
91+ } else {
8892 setup_transfer_buffer (env, 1 );
8993 uint32_t *p = data->transfer_buffer ;
9094 MarshalNodeId (node.id , p);
@@ -96,8 +100,6 @@ Napi::Value GetMarshalNode(const Napi::CallbackInfo &info, const Tree *tree, TSN
96100 if (node.id != nullptr ) {
97101 return Number::New (env, ts_node_symbol (node));
98102 }
99- } else {
100- return cache_entry->second ->node .Value ();
101103 }
102104 return env.Null ();
103105}
0 commit comments