diff --git a/compiler/cpp/src/thrift/generate/t_delphi_generator.cc b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc index dc85f6042ea..8efc44a7152 100644 --- a/compiler/cpp/src/thrift/generate/t_delphi_generator.cc +++ b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc @@ -1237,7 +1237,14 @@ bool t_delphi_generator::const_needs_var(t_type* type) { } t_base_type::t_base tbase = ((t_base_type*)truetype)->get_base(); - return (tbase == t_base_type::TYPE_UUID); + switch (tbase) { + case t_base_type::TYPE_UUID: + return true; + case t_base_type::TYPE_STRING: + return truetype->is_binary(); + default: + return false; + } } void t_delphi_generator::print_const_prop(std::ostream& out, @@ -1267,9 +1274,9 @@ void t_delphi_generator::print_const_value(std::ostream& vars, if (truetype->is_base_type()) { t_base_type::t_base tbase = ((t_base_type*)truetype)->get_base(); - if(tbase == t_base_type::TYPE_UUID) { // already done otherwise - string v2 = render_const_value( vars, out, name, type, value, false); - indent_impl(out) << name << " := " << v2 << ";" << '\n'; + if(const_needs_var(type)) { + string the_value = render_const_value( vars, out, name, type, value, false); + indent_impl(out) << name << " := " << the_value << ";" << '\n'; } } else if (truetype->is_enum()) { indent_impl(out) << name << " := " << type_name(type) << "." << value->get_identifier_name() @@ -1321,7 +1328,11 @@ string t_delphi_generator::render_const_value(ostream& vars, t_base_type::t_base tbase = ((t_base_type*)truetype)->get_base(); switch (tbase) { case t_base_type::TYPE_STRING: - render << "'" << get_escaped_string(value) << "'"; + if (truetype->is_binary()) { + render << "TEncoding.UTF8.GetBytes('" << get_escaped_string(value) << "')"; + } else { + render << "'" << get_escaped_string(value) << "'"; + } break; case t_base_type::TYPE_UUID: if(guidAsLiteral) { diff --git a/lib/delphi/test/codegen/run-Pascal-Codegen-Tests.ps1 b/lib/delphi/test/codegen/run-Pascal-Codegen-Tests.ps1 index 5cde19c702f..961795b075a 100644 --- a/lib/delphi/test/codegen/run-Pascal-Codegen-Tests.ps1 +++ b/lib/delphi/test/codegen/run-Pascal-Codegen-Tests.ps1 @@ -26,17 +26,16 @@ $FAIL_THRIFT = @( "Include.thrift") # subdir includes don't work here # expected to fail at Delphi Compiler -$FAIL_DELPHI = @() +$FAIL_DELPHI = @( + "Thrift5320.thrift" # this conflicts with Delphi scopes, but it's a bad practice testcase anyway +) # unexpected but known bugs (TODO: fix them) -$KNOWN_BUGS = @( "ConstOptionalField.thrift" - , "IgnoreInitialismsTest.thrift" - , "JavaTypes.thrift" - , "JavaDefinitionOrderB.thrift" - , "JavaDeepCopyTest.thrift" - , "NameConflictTest.thrift" - , "Thrift5320.thrift" # this conflicts with Delphi scopes, but it's a bad practice testcase anyway - ) +$KNOWN_BUGS = @( + "IgnoreInitialismsTest.thrift", + "JavaDefinitionOrderB.thrift", + "NameConflictTest.thrift" + )