// ReadRef //------------------------------------------------------------------------------ bool TextReader::ReadRef() { // Name AStackString<> name; if ( !GetToken( name ) ) { Error( "Missing ref name" ); return false; } AStackString<> value; if ( !GetString( value ) ) { Error( "Missing ref value" ); return false; } Ref< RefObject > ref; if ( value != "null" ) { ref = (RefObject *)ReflectionInfo::CreateObject( value ); if ( ref.Get() == nullptr ) { Error( "Unable to create sub-object" ); ASSERT( false ); // TODO: Handle failure/skipping gracefully return false; } } const StackFrame & sf = m_DeserializationStack.Top(); if ( sf.m_ArrayProperty ) { void * arrayBase = (void *)( (size_t)sf.m_Base + (size_t)sf.m_ArrayProperty->GetOffset() ); Array< Ref< RefObject > > *array = ( Array< Ref< RefObject > > *)( arrayBase ); array->Append( ref ); } else { sf.m_Reflection->SetProperty( sf.m_Base, name.Get(), ref ); } // do sub-object properties if needed if ( ref.Get() ) { StackFrame newFrame; newFrame.m_Base = (void *)ref.Get(); newFrame.m_Reflection = ref->GetReflectionInfoV(); newFrame.m_ArrayProperty = nullptr; #ifdef DEBUG newFrame.m_RefObject = ref.Get(); newFrame.m_Struct = nullptr; #endif m_DeserializationStack.Append( newFrame ); } return true; }
nsresult mozApocPolicyModelNode::AddChild(Ref const & aNode) { NS_PRECONDITION(aNode, "apoc - Trying to add a NULL node as child"); NS_PRECONDITION(!aNode->mNext, "apoc - Trying to add an entire list as child"); NS_PRECONDITION(! ImplGetChild(aNode->mName), "apoc - Child being added already exists"); MODEL_TRACE(stderr, "apoc data model: Adding Node '%s' at %p as new child to Node '%s' at %p\n", PromiseFlatCString(aNode->mName).get(), (void*)aNode.Get(), PromiseFlatCString(mName).get(), (void*)this ); aNode->mNext = mChildren; mChildren = aNode; return NS_OK; }