in lib/Debugger.ProtocolHandler/RuntimeImpl.cpp [88:142]
Response RuntimeImpl::getProperties(
const String& in_objectId,
Maybe<bool> /*in_ownProperties*/,
Maybe<bool> in_accessorPropertiesOnly,
Maybe<bool> /*in_generatePreview*/,
std::unique_ptr<Array<PropertyDescriptor>>* out_result,
Maybe<Array<InternalPropertyDescriptor>>* out_internalProperties,
Maybe<ExceptionDetails>* /*out_exceptionDetails*/)
{
if (in_accessorPropertiesOnly.fromMaybe(false))
{
// We don't support accessorPropertiesOnly queries, just return an empty list.
*out_result = Array<PropertyDescriptor>::create();
return Response::OK();
}
auto parsedId = ProtocolHelpers::ParseObjectId(in_objectId);
int handle = 0;
int ordinal = 0;
String name;
if (parsedId->getInteger(PropertyHelpers::Names::Handle, &handle))
{
DebuggerObject obj = m_debugger->GetObjectFromHandle(handle);
*out_result = obj.GetPropertyDescriptors();
*out_internalProperties = obj.GetInternalPropertyDescriptors();
return Response::OK();
}
else if (parsedId->getInteger(PropertyHelpers::Names::Ordinal, &ordinal) &&
parsedId->getString(PropertyHelpers::Names::Name, &name))
{
DebuggerCallFrame callFrame = m_debugger->GetCallFrame(ordinal);
if (name == PropertyHelpers::Names::Locals)
{
DebuggerLocalScope obj = callFrame.GetLocals();
*out_result = obj.GetPropertyDescriptors();
*out_internalProperties = obj.GetInternalPropertyDescriptors();
return Response::OK();
}
else if (name == PropertyHelpers::Names::Globals)
{
DebuggerObject obj = callFrame.GetGlobals();
*out_result = obj.GetPropertyDescriptors();
*out_internalProperties = obj.GetInternalPropertyDescriptors();
return Response::OK();
}
}
return Response::Error(c_ErrorInvalidObjectId);
}