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; } }
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; } }