Skip to content

Commit 4752ee0

Browse files
committed
Fixes to support node inspector
* Added support for "forceSetValueProp" which forces the raw value to be added to the diagnostics object. * Handled the possibility that although a context may exist, it may not be fully initialized. * Added support for "JsDiagStepTypeContinue" to enable clearing a previously set stepping mode.
1 parent 81c4bdd commit 4752ee0

11 files changed

Lines changed: 88 additions & 36 deletions

bin/ch/ChakraRtInterface.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ struct JsAPIHooks
6767
typedef JsErrorCode(WINAPI *JsrtDiagGetStackProperties)(unsigned int stackFrameIndex, JsValueRef * properties);
6868
typedef JsErrorCode(WINAPI *JsrtDiagGetProperties)(unsigned int objectHandle, unsigned int fromCount, unsigned int totalCount, JsValueRef * propertiesObject);
6969
typedef JsErrorCode(WINAPI *JsrtDiagGetObjectFromHandle)(unsigned int handle, JsValueRef * handleObject);
70-
typedef JsErrorCode(WINAPI *JsrtDiagEvaluate)(JsValueRef expression, unsigned int stackFrameIndex, JsParseScriptAttributes parseAttributes, JsValueRef * evalResult);
70+
typedef JsErrorCode(WINAPI *JsrtDiagEvaluate)(JsValueRef expression, unsigned int stackFrameIndex, JsParseScriptAttributes parseAttributes, bool forceSetValueProp, JsValueRef * evalResult);
7171

7272
typedef JsErrorCode(WINAPI *JsrtRun)(JsValueRef script, JsSourceContext sourceContext, JsValueRef sourceUrl, JsParseScriptAttributes parseAttributes, JsValueRef *result);
7373
typedef JsErrorCode(WINAPI *JsrtParse)(JsValueRef script, JsSourceContext sourceContext, JsValueRef sourceUrl, JsParseScriptAttributes parseAttributes, JsValueRef *result);
@@ -333,7 +333,7 @@ class ChakraRTInterface
333333
static JsErrorCode WINAPI JsDiagGetStackProperties(unsigned int stackFrameIndex, JsValueRef * properties) { return HOOK_JS_API(DiagGetStackProperties(stackFrameIndex, properties)); }
334334
static JsErrorCode WINAPI JsDiagGetProperties(unsigned int objectHandle, unsigned int fromCount, unsigned int totalCount, JsValueRef * propertiesObject) { return HOOK_JS_API(DiagGetProperties(objectHandle, fromCount, totalCount, propertiesObject)); }
335335
static JsErrorCode WINAPI JsDiagGetObjectFromHandle(unsigned int handle, JsValueRef * handleObject) { return HOOK_JS_API(DiagGetObjectFromHandle(handle, handleObject)); }
336-
static JsErrorCode WINAPI JsDiagEvaluate(JsValueRef expression, unsigned int stackFrameIndex, JsParseScriptAttributes parseAttributes, JsValueRef * evalResult) { return HOOK_JS_API(DiagEvaluate(expression, stackFrameIndex, parseAttributes, evalResult)); }
336+
static JsErrorCode WINAPI JsDiagEvaluate(JsValueRef expression, unsigned int stackFrameIndex, JsParseScriptAttributes parseAttributes, bool forceSetValueProp, JsValueRef * evalResult) { return HOOK_JS_API(DiagEvaluate(expression, stackFrameIndex, parseAttributes, forceSetValueProp, evalResult)); }
337337
static JsErrorCode WINAPI JsParseModuleSource(JsModuleRecord requestModule, JsSourceContext sourceContext, byte* sourceText, unsigned int sourceLength, JsParseModuleSourceFlags sourceFlag, JsValueRef* exceptionValueRef) {
338338
return HOOK_JS_API(ParseModuleSource(requestModule, sourceContext, sourceText, sourceLength, sourceFlag, exceptionValueRef));
339339
}

bin/ch/Debugger.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ JsValueRef Debugger::Evaluate(JsValueRef callee, bool isConstructCall, JsValueRe
174174
if (argumentCount > 2)
175175
{
176176
IfJsErrorFailLogAndRet(ChakraRTInterface::JsNumberToInt(arguments[1], &stackFrameIndex));
177-
ChakraRTInterface::JsDiagEvaluate(arguments[2], stackFrameIndex, JsParseScriptAttributeNone, &result);
177+
ChakraRTInterface::JsDiagEvaluate(arguments[2], stackFrameIndex, JsParseScriptAttributeNone, /* forceSetValueProp */ false, &result);
178178
}
179179

180180
return result;

lib/Jsrt/ChakraDebug.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ typedef unsigned __int32 uint32_t;
106106
/// <summary>
107107
/// Perform a reverse continue operation (only applicable in TTD mode).
108108
/// </summary>
109-
JsDiagStepTypeStepReverseContinue = 4
109+
JsDiagStepTypeReverseContinue = 4,
110+
/// <summary>
111+
/// Perform a forward continue operation. Clears any existing step value.
112+
/// </summary>
113+
JsDiagStepTypeContinue = 5
110114
} JsDiagStepType;
111115

112116
/// <summary>
@@ -563,6 +567,7 @@ typedef unsigned __int32 uint32_t;
563567
/// - `JsParseScriptAttributeArrayBufferIsUtf16Encoded` when `expression` is Utf16 Encoded ArrayBuffer
564568
/// - `JsParseScriptAttributeLibraryCode` has no use for this function and has similar effect with `JsParseScriptAttributeNone`
565569
/// </param>
570+
/// <param name="forceSetValueProp">Forces the result to contain the raw value of the expression result.</param>
566571
/// <param name="evalResult">Result of evaluation.</param>
567572
/// <remarks>
568573
/// <para>
@@ -600,6 +605,7 @@ typedef unsigned __int32 uint32_t;
600605
_In_ JsValueRef expression,
601606
_In_ unsigned int stackFrameIndex,
602607
_In_ JsParseScriptAttributes parseAttributes,
608+
_In_ bool forceSetValueProp,
603609
_Out_ JsValueRef *evalResult);
604610

605611
/////////////////////

lib/Jsrt/JsrtDebugManager.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ void JsrtDebugManager::ReportExceptionBreak(Js::InterpreterHaltState* haltState)
288288
resolvedObject.obj = resolvedObject.scriptContext->GetLibrary()->GetUndefined();
289289
}
290290

291-
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->GetDebuggerObjectsManager(), resolvedObject, scriptContext, [&](Js::Var marshaledObj)
291+
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->GetDebuggerObjectsManager(), resolvedObject, scriptContext, /* forceSetValueProp */ false, [&](Js::Var marshaledObj)
292292
{
293293
JsrtDebugUtils::AddPropertyToObject(eventDataObject, JsrtDebugPropertyId::exception, marshaledObj, scriptContext);
294294
});
@@ -313,10 +313,18 @@ void JsrtDebugManager::SetResumeType(BREAKRESUMEACTION resumeAction)
313313

314314
bool JsrtDebugManager::EnableAsyncBreak(Js::ScriptContext* scriptContext)
315315
{
316+
if (!scriptContext->IsDebugContextInitialized())
317+
{
318+
// Although the script context exists, it hasn't been fully initialized yet.
319+
return false;
320+
}
321+
322+
Js::ProbeContainer* probeContainer = scriptContext->GetDebugContext()->GetProbeContainer();
323+
316324
// This can be called when we are already at break
317-
if (!scriptContext->GetDebugContext()->GetProbeContainer()->IsAsyncActivate())
325+
if (!probeContainer->IsAsyncActivate())
318326
{
319-
scriptContext->GetDebugContext()->GetProbeContainer()->AsyncActivate(this);
327+
probeContainer->AsyncActivate(this);
320328
if (Js::Configuration::Global.EnableJitInDebugMode())
321329
{
322330
scriptContext->GetThreadContext()->GetDebugManager()->GetDebuggingFlags()->SetForceInterpreter(true);

lib/Jsrt/JsrtDebugUtils.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ void JsrtDebugUtils::AddVarPropertyToObject(Js::DynamicObject * object, const ch
122122
}
123123
}
124124

125-
void JsrtDebugUtils::AddPropertyType(Js::DynamicObject * object, Js::IDiagObjectModelDisplay* objectDisplayRef, Js::ScriptContext * scriptContext)
125+
void JsrtDebugUtils::AddPropertyType(Js::DynamicObject * object, Js::IDiagObjectModelDisplay* objectDisplayRef, Js::ScriptContext * scriptContext, bool forceSetValueProp)
126126
{
127127
Assert(objectDisplayRef != nullptr);
128128
Assert(scriptContext != nullptr);
@@ -325,6 +325,11 @@ void JsrtDebugUtils::AddPropertyType(Js::DynamicObject * object, Js::IDiagObject
325325
JsrtDebugUtils::AddPropertyToObject(object, addDisplay ? JsrtDebugPropertyId::display : JsrtDebugPropertyId::value, value, wcslen(value), scriptContext);
326326
}
327327

328+
if (forceSetValueProp && varValue != nullptr && !JsrtDebugUtils::HasProperty(object, JsrtDebugPropertyId::value, scriptContext))
329+
{
330+
JsrtDebugUtils::AddPropertyToObject(object, JsrtDebugPropertyId::value, varValue, scriptContext);
331+
}
332+
328333
DBGPROP_ATTRIB_FLAGS dbPropAttrib = objectDisplayRef->GetTypeAttribute();
329334

330335
JsrtDebugPropertyAttribute propertyAttributes = JsrtDebugPropertyAttribute::NONE;
@@ -389,6 +394,22 @@ void JsrtDebugUtils::AddPropertyToObject(Js::DynamicObject * object, JsrtDebugPr
389394
JsrtDebugUtils::AddVarPropertyToObject(object, propertyId, value, scriptContext);
390395
}
391396

397+
bool JsrtDebugUtils::HasProperty(Js::DynamicObject * object, JsrtDebugPropertyId propertyId, Js::ScriptContext * scriptContext)
398+
{
399+
const char16* propertyName = GetDebugPropertyName(propertyId);
400+
401+
const Js::PropertyRecord* propertyRecord;
402+
scriptContext->FindPropertyRecord(propertyName, static_cast<int>(wcslen(propertyName)), &propertyRecord);
403+
404+
if (propertyRecord == nullptr)
405+
{
406+
// No property record exists, there must be no property with that name in the script context.
407+
return false;
408+
}
409+
410+
return !!Js::JavascriptOperators::HasProperty(object, propertyRecord->GetPropertyId());
411+
}
412+
392413
const char16 * JsrtDebugUtils::GetClassName(Js::TypeId typeId)
393414
{
394415
switch (typeId)

lib/Jsrt/JsrtDebugUtils.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ class JsrtDebugUtils
3535
static void AddPropertyToObject(Js::DynamicObject* object, JsrtDebugPropertyId propertyId, bool value, Js::ScriptContext* scriptContext);
3636
static void AddPropertyToObject(Js::DynamicObject* object, JsrtDebugPropertyId propertyId, Js::Var value, Js::ScriptContext* scriptContext);
3737

38-
static void AddPropertyType(Js::DynamicObject * object, Js::IDiagObjectModelDisplay* objectDisplayRef, Js::ScriptContext * scriptContext);
38+
static void AddPropertyType(Js::DynamicObject * object, Js::IDiagObjectModelDisplay* objectDisplayRef, Js::ScriptContext * scriptContext, bool forceSetValueProp);
3939

4040
private:
4141
static void AddVarPropertyToObject(Js::DynamicObject* object, JsrtDebugPropertyId propertyId, Js::Var value, Js::ScriptContext* scriptContext);
42+
static bool HasProperty(Js::DynamicObject* object, JsrtDebugPropertyId propertyId, Js::ScriptContext * scriptContext);
4243
static const char16* GetClassName(Js::TypeId typeId);
4344
static const char16* GetDebugPropertyName(JsrtDebugPropertyId propertyId);
4445
};

lib/Jsrt/JsrtDebuggerObject.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Js::DynamicObject * JsrtDebuggerObjectBase::GetChildren(WeakArenaReference<Js::I
8484
if (resolvedObjectDisplay != nullptr)
8585
{
8686
JsrtDebuggerObjectBase* debuggerObject = JsrtDebuggerObjectProperty::Make(this->GetDebuggerObjectsManager(), objectDisplayWeakRef);
87-
Js::DynamicObject* object = debuggerObject->GetJSONObject(resolvedObject.scriptContext);
87+
Js::DynamicObject* object = debuggerObject->GetJSONObject(resolvedObject.scriptContext, /* forceSetValueProp */ false);
8888
Js::Var marshaledObj = Js::CrossSite::MarshalVar(scriptContext, object);
8989
if (resolvedObjectDisplay->IsFake())
9090
{
@@ -314,7 +314,7 @@ Js::DynamicObject * JsrtDebuggerStackFrame::GetLocalsObject(Js::ScriptContext* s
314314
thisResolvedObject.scriptContext = scriptContext;
315315
thisResolvedObject.name = _u("this");
316316
thisResolvedObject.typeId = Js::JavascriptOperators::GetTypeId(thisResolvedObject.obj);
317-
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->debuggerObjectsManager, thisResolvedObject, this->stackFrame->GetScriptContext(), [&](Js::Var marshaledObj)
317+
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->debuggerObjectsManager, thisResolvedObject, this->stackFrame->GetScriptContext(), false, [&](Js::Var marshaledObj)
318318
{
319319
JsrtDebugUtils::AddPropertyToObject(propertiesObject, JsrtDebugPropertyId::thisObject, marshaledObj, scriptContext);
320320
});
@@ -330,7 +330,7 @@ Js::DynamicObject * JsrtDebuggerStackFrame::GetLocalsObject(Js::ScriptContext* s
330330
// If we have a exception add 'exception'
331331
if (Js::VariableWalkerBase::GetExceptionObject(index, this->stackFrame, &resolvedObject))
332332
{
333-
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->debuggerObjectsManager, resolvedObject, scriptContext, [&](Js::Var marshaledObj)
333+
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->debuggerObjectsManager, resolvedObject, scriptContext, false, [&](Js::Var marshaledObj)
334334
{
335335
JsrtDebugUtils::AddPropertyToObject(propertiesObject, JsrtDebugPropertyId::exception, marshaledObj, scriptContext);
336336
});
@@ -339,7 +339,7 @@ Js::DynamicObject * JsrtDebuggerStackFrame::GetLocalsObject(Js::ScriptContext* s
339339
// If user have not explicitly defined 'arguments' add 'arguments'
340340
if (localsWalker->HasUserNotDefinedArguments() && localsWalker->CreateArgumentsObject(&resolvedObject))
341341
{
342-
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->debuggerObjectsManager, resolvedObject, scriptContext, [&](Js::Var marshaledObj)
342+
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->debuggerObjectsManager, resolvedObject, scriptContext, false, [&](Js::Var marshaledObj)
343343
{
344344
JsrtDebugUtils::AddPropertyToObject(propertiesObject, JsrtDebugPropertyId::arguments, marshaledObj, scriptContext);
345345
});
@@ -355,7 +355,7 @@ Js::DynamicObject * JsrtDebuggerStackFrame::GetLocalsObject(Js::ScriptContext* s
355355
Js::ReturnedValue * returnValue = returnedValueList->Item(i);
356356
Js::VariableWalkerBase::GetReturnedValueResolvedObject(returnValue, this->stackFrame, &resolvedObject);
357357

358-
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(debuggerObjectsManager, resolvedObject, scriptContext, [&](Js::Var marshaledObj)
358+
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(debuggerObjectsManager, resolvedObject, scriptContext, false, [&](Js::Var marshaledObj)
359359
{
360360

361361
if (returnValue->isValueOfReturnStatement)
@@ -390,7 +390,7 @@ Js::DynamicObject * JsrtDebuggerStackFrame::GetLocalsObject(Js::ScriptContext* s
390390
break;
391391
}
392392

393-
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(debuggerObjectsManager, resolvedObject, scriptContext, [&](Js::Var marshaledObj)
393+
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(debuggerObjectsManager, resolvedObject, scriptContext, false, [&](Js::Var marshaledObj)
394394
{
395395
Js::JavascriptOperators::OP_SetElementI((Js::Var)localsArray, Js::JavascriptNumber::ToVar(totalLocalsCount, scriptContext), marshaledObj, scriptContext);
396396
totalLocalsCount++;
@@ -407,7 +407,7 @@ Js::DynamicObject * JsrtDebuggerStackFrame::GetLocalsObject(Js::ScriptContext* s
407407
{
408408
AutoPtr<WeakArenaReference<Js::IDiagObjectModelDisplay>> objectDisplayWeakRef(resolvedObject.GetObjectDisplay());
409409
JsrtDebuggerObjectBase* debuggerObject = JsrtDebuggerObjectScope::Make(debuggerObjectsManager, objectDisplayWeakRef, scopesCount);
410-
Js::DynamicObject* object = debuggerObject->GetJSONObject(resolvedObject.scriptContext);
410+
Js::DynamicObject* object = debuggerObject->GetJSONObject(resolvedObject.scriptContext, /* forceSetValueProp */ false);
411411
Assert(object != nullptr);
412412
Js::Var marshaledObj = Js::CrossSite::MarshalVar(scriptContext, object);
413413
Js::JavascriptOperators::OP_SetElementI((Js::Var)scopesArray, Js::JavascriptNumber::ToVar(scopesCount, scriptContext), marshaledObj, scriptContext);
@@ -419,7 +419,7 @@ Js::DynamicObject * JsrtDebuggerStackFrame::GetLocalsObject(Js::ScriptContext* s
419419
// Add globals handle
420420
if (localsWalker->GetGlobalsObject(&resolvedObject))
421421
{
422-
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectGlobalsNode>(this->debuggerObjectsManager, resolvedObject, scriptContext, [&](Js::Var marshaledObj)
422+
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectGlobalsNode>(this->debuggerObjectsManager, resolvedObject, scriptContext, false, [&](Js::Var marshaledObj)
423423
{
424424
globalsObject = (Js::DynamicObject*)marshaledObj;
425425
});
@@ -446,7 +446,7 @@ Js::DynamicObject * JsrtDebuggerStackFrame::GetLocalsObject(Js::ScriptContext* s
446446
return propertiesObject;
447447
}
448448

449-
bool JsrtDebuggerStackFrame::Evaluate(Js::ScriptContext* scriptContext, const char16 *source, int sourceLength, bool isLibraryCode, Js::DynamicObject** evalResult)
449+
bool JsrtDebuggerStackFrame::Evaluate(Js::ScriptContext* scriptContext, const char16 *source, int sourceLength, bool isLibraryCode, bool forceSetValueProp, Js::DynamicObject** evalResult)
450450
{
451451
*evalResult = nullptr;
452452
bool success = false;
@@ -504,7 +504,7 @@ bool JsrtDebuggerStackFrame::Evaluate(Js::ScriptContext* scriptContext, const ch
504504
}
505505

506506
resolvedObject.typeId = Js::JavascriptOperators::GetTypeId(resolvedObject.obj);
507-
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->debuggerObjectsManager, resolvedObject, scriptContext, [&](Js::Var marshaledObj)
507+
JsrtDebuggerObjectBase::CreateDebuggerObject<JsrtDebuggerObjectProperty>(this->debuggerObjectsManager, resolvedObject, scriptContext, forceSetValueProp, [&](Js::Var marshaledObj)
508508
{
509509
*evalResult = (Js::DynamicObject*)marshaledObj;
510510
});
@@ -545,7 +545,7 @@ JsrtDebuggerObjectBase * JsrtDebuggerObjectProperty::Make(JsrtDebuggerObjectsMan
545545
return debuggerObject;
546546
}
547547

548-
Js::DynamicObject * JsrtDebuggerObjectProperty::GetJSONObject(Js::ScriptContext* scriptContext)
548+
Js::DynamicObject * JsrtDebuggerObjectProperty::GetJSONObject(Js::ScriptContext* scriptContext, bool forceSetValueProp)
549549
{
550550
Js::IDiagObjectModelDisplay* objectDisplayRef = this->objectDisplay->GetStrongReference();
551551

@@ -559,7 +559,7 @@ Js::DynamicObject * JsrtDebuggerObjectProperty::GetJSONObject(Js::ScriptContext*
559559

560560
JsrtDebugUtils::AddPropertyToObject(propertyObject, JsrtDebugPropertyId::name, name, wcslen(name), scriptContext);
561561

562-
JsrtDebugUtils::AddPropertyType(propertyObject, objectDisplayRef, scriptContext); // Will add type, value, display, className, propertyAttributes
562+
JsrtDebugUtils::AddPropertyType(propertyObject, objectDisplayRef, scriptContext, forceSetValueProp); // Will add type, value, display, className, propertyAttributes
563563

564564
JsrtDebugUtils::AddPropertyToObject(propertyObject, JsrtDebugPropertyId::handle, this->GetHandle(), scriptContext);
565565

@@ -622,7 +622,7 @@ JsrtDebuggerObjectBase * JsrtDebuggerObjectScope::Make(JsrtDebuggerObjectsManage
622622
return debuggerObject;
623623
}
624624

625-
Js::DynamicObject * JsrtDebuggerObjectScope::GetJSONObject(Js::ScriptContext* scriptContext)
625+
Js::DynamicObject * JsrtDebuggerObjectScope::GetJSONObject(Js::ScriptContext* scriptContext, bool forceSetValueProp)
626626
{
627627
Js::IDiagObjectModelDisplay* modelDisplay = this->objectDisplay->GetStrongReference();
628628

@@ -688,7 +688,7 @@ JsrtDebuggerObjectBase * JsrtDebuggerObjectFunction::Make(JsrtDebuggerObjectsMan
688688
return debuggerObject;
689689
}
690690

691-
Js::DynamicObject * JsrtDebuggerObjectFunction::GetJSONObject(Js::ScriptContext * scriptContext)
691+
Js::DynamicObject * JsrtDebuggerObjectFunction::GetJSONObject(Js::ScriptContext * scriptContext, bool forceSetValueProp)
692692
{
693693
Js::DynamicObject* functionObject = scriptContext->GetLibrary()->CreateObject();
694694

@@ -734,7 +734,7 @@ JsrtDebuggerObjectBase * JsrtDebuggerObjectGlobalsNode::Make(JsrtDebuggerObjects
734734
return debuggerObject;
735735
}
736736

737-
Js::DynamicObject * JsrtDebuggerObjectGlobalsNode::GetJSONObject(Js::ScriptContext * scriptContext)
737+
Js::DynamicObject * JsrtDebuggerObjectGlobalsNode::GetJSONObject(Js::ScriptContext * scriptContext, bool forceSetValueProp)
738738
{
739739
Js::IDiagObjectModelDisplay* objectDisplayRef = this->objectDisplay->GetStrongReference();
740740

0 commit comments

Comments
 (0)