secureswitools/swisistools/source/sisxlibrary/sisexpression.cpp
changeset 26 04d4a7bbc3e0
parent 0 ba25891c3a9e
equal deleted inserted replaced
25:98b66e4fb0be 26:04d4a7bbc3e0
   266 	{
   266 	{
   267 	SetOperator (CSISExpression::EPrimTypeVariable);
   267 	SetOperator (CSISExpression::EPrimTypeVariable);
   268 	SetValue (static_cast <TUint32> (IdentifyUCKeyword (KVariables, aIdentifier, L"unknown variable")));
   268 	SetValue (static_cast <TUint32> (IdentifyUCKeyword (KVariables, aIdentifier, L"unknown variable")));
   269 	}
   269 	}
   270 
   270 
   271 void CSISExpression::AddPackageEntry(std::wostream& aStream, bool aVerbose) const
   271 void CSISExpression::AddPackageEntry(std::wostream& aStream, bool aVerbose, bool aCompatible) const
   272 	{
   272 	{
   273 	TExpressionFeatures* features = findExpressionFeature (iOperator);
   273 	TExpressionFeatures* features = findExpressionFeature (iOperator);
   274 	if(NULL == features)
   274 	if(NULL == features)
   275 		{
   275 		{
   276 		aStream << L"UNKNOWN";
   276 		aStream << L"UNKNOWN";
   283 		if(iOperator.Value() == EFuncExists)
   283 		if(iOperator.Value() == EFuncExists)
   284 			{
   284 			{
   285 			aStream << L"\"";
   285 			aStream << L"\"";
   286 			}
   286 			}
   287 
   287 
   288 		LHS().AddPackageEntry(aStream, aVerbose);
   288 		LHS().AddPackageEntry(aStream, aVerbose, aCompatible);
   289 		if(iOperator.Value() == EFuncExists)
   289 		if(iOperator.Value() == EFuncExists)
   290 			{
   290 			{
   291 			aStream << L"\"";
   291 			aStream << L"\"";
   292 			}
   292 			}
   293 		aStream << L")";
   293 		aStream << L")";
   295 	
   295 	
   296 	std::wstring versionStr = iString.GetString().substr(0,KFuncVersionPrefix.length());
   296 	std::wstring versionStr = iString.GetString().substr(0,KFuncVersionPrefix.length());
   297 	std::wstring supportedLanguageStr = iString.GetString().substr(0,KFuncSupportedLanguagePrefix.length());
   297 	std::wstring supportedLanguageStr = iString.GetString().substr(0,KFuncSupportedLanguagePrefix.length());
   298 	if((iOperator.Value() == EFuncExists) && (versionStr == KFuncVersionPrefix))
   298 	if((iOperator.Value() == EFuncExists) && (versionStr == KFuncVersionPrefix))
   299 		{
   299 		{
   300 		WriteVersionCondition (aStream, aVerbose);
   300 		WriteVersionCondition (aStream, aVerbose, aCompatible);
   301 		}
   301 		}
   302 	else if ((iOperator.Value() == EFuncExists) && (supportedLanguageStr == KFuncSupportedLanguagePrefix))
   302 	else if ((iOperator.Value() == EFuncExists) && (supportedLanguageStr == KFuncSupportedLanguagePrefix))
   303 		{
   303 		{
   304 		WriteSupportedLanguageCondition (aStream, aVerbose);
   304 		WriteSupportedLanguageCondition (aStream, aVerbose, aCompatible);
   305 		}
   305 		}
   306 	else
   306 	else
   307 		{	
   307 		{	
   308 		aStream << features->iName;
   308 		aStream << features->iName;
   309 		}
   309 		}
   314 		if(iOperator.Value() == EFuncExists)
   314 		if(iOperator.Value() == EFuncExists)
   315 			{
   315 			{
   316 			aStream << L"\"";
   316 			aStream << L"\"";
   317 			}
   317 			}
   318 
   318 
   319 		RHS().AddPackageEntry(aStream, aVerbose);
   319 		RHS().AddPackageEntry(aStream, aVerbose, aCompatible);
   320 		if(iOperator.Value() == EFuncExists)
   320 		if(iOperator.Value() == EFuncExists)
   321 			{
   321 			{
   322 			aStream << L"\"";
   322 			aStream << L"\"";
   323 			}
   323 			}
   324 		aStream << L")";
   324 		aStream << L")";
   333 			if(iOperator.Value() == EFuncExists)
   333 			if(iOperator.Value() == EFuncExists)
   334 				{
   334 				{
   335 				aStream << L"\"";
   335 				aStream << L"\"";
   336 				}
   336 				}
   337 			
   337 			
   338 			iString.AddPackageEntry(aStream, aVerbose);
   338 			iString.AddPackageEntry(aStream, aVerbose, aCompatible);
   339 			if(iOperator.Value() == EFuncExists)
   339 			if(iOperator.Value() == EFuncExists)
   340 				{
   340 				{
   341 				aStream << L"\"";
   341 				aStream << L"\"";
   342 				}
   342 				}
   343 			aStream << L")";
   343 			aStream << L")";
   368 			aStream << iInteger;
   368 			aStream << iInteger;
   369 			}
   369 			}
   370 		}
   370 		}
   371 	}
   371 	}
   372 
   372 
   373 void CSISExpression::WriteVersionCondition(std::basic_ostream<wchar_t>& aStream, bool aVerbose) const
   373 void CSISExpression::WriteVersionCondition(std::basic_ostream<wchar_t>& aStream, bool aVerbose, bool aCompatible) const
   374 	{
   374 	{
   375 	std::wstring parseString = iString.GetString().substr(KFuncVersionPrefix.length());
   375 	std::wstring parseString = iString.GetString().substr(KFuncVersionPrefix.length());
   376 	std::wstring outputArgs;
   376 	std::wstring outputArgs;
   377 
   377 
   378 	try
   378 	try
   528 		std::wstring msgString(buffer);
   528 		std::wstring msgString(buffer);
   529 		delete buffer;
   529 		delete buffer;
   530 
   530 
   531 		// Output the condition as an exists statement and comment warnings to the stream
   531 		// Output the condition as an exists statement and comment warnings to the stream
   532 		aStream << L"exists(\"";
   532 		aStream << L"exists(\"";
   533 		iString.AddPackageEntry(aStream, aVerbose);
   533 		iString.AddPackageEntry(aStream, aVerbose, aCompatible);
   534 		aStream << L"\")" << std::endl;
   534 		aStream << L"\")" << std::endl;
   535 		aStream << L"; warning: \"VERSION\" condition output as \"EXISTS\"" << std::endl;
   535 		aStream << L"; warning: \"VERSION\" condition output as \"EXISTS\"" << std::endl;
   536 		aStream << L"; " << msgString;
   536 		aStream << L"; " << msgString;
   537 		}
   537 		}
   538 	}
   538 	}
   592 		}
   592 		}
   593 
   593 
   594 	return false;
   594 	return false;
   595 	}
   595 	}
   596 
   596 
   597 void CSISExpression::WriteSupportedLanguageCondition(std::basic_ostream<wchar_t>& aStream, bool aVerbose) const
   597 void CSISExpression::WriteSupportedLanguageCondition(std::basic_ostream<wchar_t>& aStream, bool aVerbose, bool aCompatible) const
   598 	{
   598 	{
   599 	std::wstring parseString = iString.GetString().substr(KFuncSupportedLanguagePrefix.length());
   599 	std::wstring parseString = iString.GetString().substr(KFuncSupportedLanguagePrefix.length());
   600 	std::wstring outputArgs;
   600 	std::wstring outputArgs;
   601 	try
   601 	try
   602 		{
   602 		{
   621 		std::wstring msgString(buffer);
   621 		std::wstring msgString(buffer);
   622 		delete buffer;
   622 		delete buffer;
   623 
   623 
   624 		// Output the condition as an exists statement and comment warnings to the stream
   624 		// Output the condition as an exists statement and comment warnings to the stream
   625 		aStream << L"exists(\"";
   625 		aStream << L"exists(\"";
   626 		iString.AddPackageEntry(aStream, aVerbose);
   626 		iString.AddPackageEntry(aStream, aVerbose, aCompatible);
   627 		aStream << L"\")" << std::endl;
   627 		aStream << L"\")" << std::endl;
   628 		aStream << L"; warning: \"Supported_Language\" condition output as \"EXISTS\"" << std::endl;
   628 		aStream << L"; warning: \"Supported_Language\" condition output as \"EXISTS\"" << std::endl;
   629 		aStream << L"; " << msgString;
   629 		aStream << L"; " << msgString;
   630 		}
   630 		}
   631 	}
   631 	}