THRIFT-5826 binary constants create uncompilable Delphi code
Client: Delphi
Patch: Jens Geyer
diff --git a/compiler/cpp/src/thrift/generate/t_delphi_generator.cc b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
index dc85f60..b6b3b28 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 @@
}
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,
@@ -1266,10 +1273,9 @@
}
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 +1327,11 @@
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 5cde19c..961795b 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 @@
"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"
+ )