void FuncInfo::SetHasMaybeEscapedNestedFunc(DebugOnly(char16 const * reason)) { if (PHASE_TESTTRACE(Js::StackFuncPhase, this->byteCodeFunction) && !hasEscapedUseNestedFunc) { char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; char16 const * r = _u(""); DebugOnly(r = reason); Output::Print(_u("HasMaybeEscapedNestedFunc (%s): %s (function %s)\n"), r, this->byteCodeFunction->GetDisplayName(), this->byteCodeFunction->GetDebugNumberSet(debugStringBuffer)); Output::Flush(); } hasEscapedUseNestedFunc = true; }
void Symbol::SetHasMaybeEscapedUseInternal(ByteCodeGenerator * byteCodeGenerator) { Assert(!hasMaybeEscapedUse); Assert(!this->GetIsFormal()); hasMaybeEscapedUse = true; if (PHASE_TESTTRACE(Js::StackFuncPhase, byteCodeGenerator->TopFuncInfo()->byteCodeFunction)) { Output::Print(L"HasMaybeEscapedUse: %s\n", this->GetName().GetBuffer()); Output::Flush(); } if (this->GetHasFuncAssignment()) { this->GetScope()->GetFunc()->SetHasMaybeEscapedNestedFunc( DebugOnly(this->symbolType == STFunction ? L"MaybeEscapedUseFuncDecl" : L"MaybeEscapedUse")); } }
void Symbol::SetHasFuncAssignmentInternal(ByteCodeGenerator * byteCodeGenerator) { Assert(!hasFuncAssignment); hasFuncAssignment = true; FuncInfo * top = byteCodeGenerator->TopFuncInfo(); if (PHASE_TESTTRACE(Js::StackFuncPhase, top->byteCodeFunction)) { Output::Print(L"HasFuncAssignment: %s\n", this->GetName().GetBuffer()); Output::Flush(); } if (this->GetHasMaybeEscapedUse() || this->GetScope()->GetIsObject()) { byteCodeGenerator->TopFuncInfo()->SetHasMaybeEscapedNestedFunc(DebugOnly( this->GetIsFormal() ? L"FormalAssignment" : this->GetScope()->GetIsObject() ? L"ObjectScopeAssignment" : L"MaybeEscapedUse")); } }