Пример #1
0
void CNscContext::AddVariable (const char *pszIdentifier, NscType nType, 
	UINT32 ulFlags)
{

	//
	// Add a new symbol
	//

	NscSymbol *pSymbol = m_sSymbols .Add (
		pszIdentifier, NscSymType_Variable);
	pSymbol ->nType = nType;
	pSymbol ->ulFlags = ulFlags;
	pSymbol ->nStackOffset = 0;
	pSymbol ->nExtra = 0;
	pSymbol ->nCompiledStart = 0xffffffff;
	pSymbol ->nCompiledEnd = 0xffffffff;
	size_t nSymbol = m_sSymbols .GetSymbolOffset (pSymbol);

	//
	// Depending on the scope of the variable, adjust offsets and such
	//

	if (IsNWScript () || (pSymbol ->ulFlags & NscSymFlag_Constant) != 0)
	{
		assert (!IsPhase2 ());
		pSymbol ->ulFlags |= NscSymFlag_Constant;
		m_sSymCount ++;
		if (!IsNWScript() && m_fSymPrint) printf("Add const symbol %s, count now %d\n", pszIdentifier,m_sSymCount);
	}
	else if (IsGlobalScope ())
	{
		assert (!IsPhase2 ());
		m_anGlobalVars .Add (nSymbol);
		m_anGlobalDefs .Add (nSymbol);
		pSymbol ->ulFlags |= NscSymFlag_Global;
		//m_sSymCount ++;	
		//if (m_fSymPrint) printf("Add global symbol %s, count now %d\n", pszIdentifier, m_sSymCount);
	}
	else 
	{
		assert (IsPhase2 ());
		assert (m_pCurrentFence);
		pSymbol ->nStackOffset = m_pCurrentFence ->nLocals
			+ m_pCurrentFence ->nPrevLocals;
		m_pCurrentFence ->nLocals += GetTypeSize (nType);
	}
}
Пример #2
0
bool FrameInjection::IsGlobalScope() {
  return IsGlobalScope(ThreadInfo::s_threadInfo->m_top);
}