예제 #1
0
void TActualParamWithConversion::BuildConvert(TExpressionResult from_result, SemanticApi::TFormalParameter to_formal_param)
{
	result = from_result;
	auto result_class = dynamic_cast<TSClass*>(result.GetClass());
	//если необходимо преобразование типа формального параметра то добавляем его
	if (result.GetClass() != to_formal_param.GetClass())
	{
		conversion = result_class->GetConversion(result.IsRef(), to_formal_param.GetClass());
		if (result.IsRef() && !to_formal_param.IsRef())
		{
			if (conversion == nullptr)
			{
				//если отсутствует преобразование, но имеется конструктор копии
				copy_constr = result_class->GetCopyConstr();
				conversion = result_class->GetConversion(false, to_formal_param.GetClass());
			}
		}
		if(conversion == nullptr)
			throw std::logic_error("Невозможно преобразовать тип!");
	}
	//если в стеке находится ссылка, а в качестве параметра требуется значение, то добавляем преобразование
	else if (result.IsRef() && !to_formal_param.IsRef())
	{
		copy_constr = result_class->GetCopyConstr();
		ref_to_rvalue = true;
	}
}
예제 #2
0
void
BF_GUI_Text::FromUtf8(const char *pc_Source,char *pc_Dest)
{
	int32	iIN;
	int32	iOUT;
	int32	iStatus;
	uint32	iCP = GetConversion();

		if ( iCodePage == CP_UTF8 )
		{
			strcpy(pc_Dest,pc_Source);
		}
		else
		{
			iIN = strlen(pc_Source);
			iOUT = 255;
			convert_from_utf8(iCP,pc_Source,&iIN,pc_Dest,&iOUT,&iStatus);
			pc_Dest[iOUT] = 0;
		}
}