Skip to content

Commit 9995bae

Browse files
committed
.null returns the same js instance
1 parent 9f1c702 commit 9995bae

1 file changed

Lines changed: 12 additions & 14 deletions

File tree

src/jni/MetadataNode.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -281,15 +281,15 @@ void MetadataNode::NullObjectAccessorGetterCallback(Local<String> property,const
281281
DEBUG_WRITE("NullObjectAccessorGetterCallback");
282282
auto isolate = info.GetIsolate();
283283

284-
auto node = reinterpret_cast<MetadataNode*>(info.Data().As<External>()->Value());
285-
286-
DEBUG_WRITE("NullObjectAccessorGetterCallback node name: %s", node->GetName().c_str());
287-
288-
Local<Object> value = Object::New(isolate);
289-
value->SetHiddenValue(V8StringConstants::GetNullNodeName(), External::New(isolate, node));
290284
// TODO: pete: Set .valueOf() callback to return null
285+
auto thiz = info.This();
286+
if(!(thiz->GetHiddenValue(V8StringConstants::GetNullNodeName())).IsEmpty())
287+
{
288+
auto node = reinterpret_cast<MetadataNode*>(info.Data().As<External>()->Value());
289+
thiz->SetHiddenValue(V8StringConstants::GetNullNodeName(), External::New(isolate, node));
290+
}
291291

292-
info.GetReturnValue().Set(value);
292+
info.GetReturnValue().Set(thiz);
293293
}
294294
catch (NativeScriptException& e)
295295
{
@@ -389,28 +389,26 @@ void MetadataNode::SuperAccessorGetterCallback(Local<String> property, const Pro
389389
{
390390
auto thiz = info.This();
391391
auto isolate = info.GetIsolate();
392-
auto k = ConvertToV8String("supervalue");
393-
auto superValue = thiz->GetHiddenValue(k).As<Object>();
392+
auto key = ConvertToV8String("supervalue");
393+
auto superValue = thiz->GetHiddenValue(key).As<Object>();
394394
if (superValue.IsEmpty())
395395
{
396396
auto runtime = Runtime::GetRuntime(isolate);
397397
auto objectManager = runtime->GetObjectManager();
398398

399399
superValue = objectManager->GetEmptyObject(isolate);
400-
bool d = superValue->Delete(ConvertToV8String("toString"));
401-
d = superValue->Delete(ConvertToV8String("valueOf"));
400+
bool d = superValue->Delete(V8StringConstants::GetToString());
401+
d = superValue->Delete(V8StringConstants::GetValueOf());
402402
superValue->SetInternalField(static_cast<int>(ObjectManager::MetadataNodeKeys::CallSuper), True(isolate));
403403

404404
superValue->SetPrototype(thiz->GetPrototype().As<Object>()->GetPrototype().As<Object>()->GetPrototype());
405-
thiz->SetHiddenValue(k, superValue);
405+
thiz->SetHiddenValue(key, superValue);
406406
objectManager->CloneLink(thiz, superValue);
407407

408408
DEBUG_WRITE("superValue.GetPrototype=%d", superValue->GetPrototype().As<Object>()->GetIdentityHash());
409409

410410
auto node = GetInstanceMetadata(isolate, thiz);
411411
SetInstanceMetadata(isolate, superValue, node);
412-
413-
thiz->SetHiddenValue(k, superValue);
414412
}
415413

416414
info.GetReturnValue().Set(superValue);

0 commit comments

Comments
 (0)