Skip to content

Commit

Permalink
Merge branch 'trunk' into d-gsoc
Browse files Browse the repository at this point in the history
  • Loading branch information
dnadlinger committed Mar 12, 2012
2 parents 7133bc7 + 17515db commit efce47f
Show file tree
Hide file tree
Showing 31 changed files with 1,409 additions and 321 deletions.
20 changes: 3 additions & 17 deletions compiler/cpp/src/generate/t_cpp_generator.cc
Expand Up @@ -1368,26 +1368,14 @@ void t_cpp_generator::generate_struct_writer(ofstream& out,
indent(out) <<
"xfer += oprot->writeStructBegin(\"" << name << "\");" << endl;

bool first = true;
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
bool check_if_set = (*f_iter)->get_req() == t_field::T_OPTIONAL ||
(*f_iter)->get_type()->is_xception();
if (check_if_set) {
if (first) {
first = false;
out <<
endl <<
indent() << "if ";
} else {
out <<
" else if ";
}
out << "(this->__isset." << (*f_iter)->get_name() << ") {" << endl;
out << endl << indent() << "if (this->__isset." << (*f_iter)->get_name() << ") {" << endl;
indent_up();
} else {
if (!first)
out << endl;
first = true;
out << endl;
}

// Write field header
Expand All @@ -1411,9 +1399,7 @@ void t_cpp_generator::generate_struct_writer(ofstream& out,
}
}

if (!first) {
out << endl;
}
out << endl;

// Write the struct map
out <<
Expand Down
105 changes: 82 additions & 23 deletions compiler/cpp/src/generate/t_delphi_generator.cc
Expand Up @@ -906,7 +906,9 @@ void t_delphi_generator::generate_delphi_struct_impl( ostream& out, string cls_p
}
generate_delphi_property_reader_impl( out, cls_prefix, cls_nm, t, *m_iter, "F", is_exception);
generate_delphi_property_writer_impl( out, cls_prefix, cls_nm, t, *m_iter, "F", is_exception , is_x_factory, exception_factory_name);
generate_delphi_isset_reader_impl( out, cls_prefix, cls_nm, t, *m_iter, "F", is_exception);
if ((*m_iter)->get_req() != t_field::T_REQUIRED) {
generate_delphi_isset_reader_impl( out, cls_prefix, cls_nm, t, *m_iter, "F", is_exception);
}
}

if ((! is_exception) || is_x_factory) {
Expand Down Expand Up @@ -975,15 +977,19 @@ void t_delphi_generator::generate_delphi_struct_definition(ostream &out, t_struc
if (members.size() > 0) {
out << endl;
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
generate_delphi_isset_reader_definition( out, *m_iter, is_exception);
if ((*m_iter)->get_req() != t_field::T_REQUIRED) {
generate_delphi_isset_reader_definition( out, *m_iter, is_exception);
}
}
}

if (members.size() > 0) {
out << endl;
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
isset_name = "__isset_" + prop_name(*m_iter, is_exception);
indent(out) << "property " << isset_name << ": Boolean read Get" << isset_name << ";" << endl;
if ((*m_iter)->get_req() != t_field::T_REQUIRED) {
isset_name = "__isset_" + prop_name(*m_iter, is_exception);
indent(out) << "property " << isset_name << ": Boolean read Get" << isset_name << ";" << endl;
}
}
}

Expand Down Expand Up @@ -1027,8 +1033,10 @@ void t_delphi_generator::generate_delphi_struct_definition(ostream &out, t_struc
if (members.size() > 0) {
indent(out) << endl;
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
isset_name = "F__isset_" + prop_name(*m_iter, is_exception);
indent(out) << isset_name << ": Boolean;" << endl;
if ((*m_iter)->get_req() != t_field::T_REQUIRED) {
isset_name = "F__isset_" + prop_name(*m_iter, is_exception);
indent(out) << isset_name << ": Boolean;" << endl;
}
}
}

Expand All @@ -1042,8 +1050,10 @@ void t_delphi_generator::generate_delphi_struct_definition(ostream &out, t_struc
if (members.size() > 0) {
out << endl;
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
isset_name = "__isset_" + prop_name(*m_iter, is_exception);
indent(out) << "function Get" << isset_name << ": Boolean;" << endl;
if ((*m_iter)->get_req() != t_field::T_REQUIRED) {
isset_name = "__isset_" + prop_name(*m_iter, is_exception);
indent(out) << "function Get" << isset_name << ": Boolean;" << endl;
}
}
}

Expand Down Expand Up @@ -1095,8 +1105,10 @@ void t_delphi_generator::generate_delphi_struct_definition(ostream &out, t_struc
out << endl;
indent(out) << "// isset" << endl;
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
isset_name = "__isset_" + prop_name(*m_iter, is_exception);
indent(out) << "property " << isset_name << ": Boolean read Get" << isset_name << ";" << endl;
if ((*m_iter)->get_req() != t_field::T_REQUIRED) {
isset_name = "__isset_" + prop_name(*m_iter, is_exception);
indent(out) << "property " << isset_name << ": Boolean read Get" << isset_name << ";" << endl;
}
}
}

Expand Down Expand Up @@ -2392,7 +2404,9 @@ void t_delphi_generator::generate_delphi_property_writer_impl(ostream& out, std:
indent_impl(out) << "procedure " << cls_prefix << name << "." << "Set" << prop_name(tfield, is_xception_class) << "( const Value: " << type_name(ftype,false,true,is_xception,true) << ");" << endl;
indent_impl(out) << "begin" << endl;
indent_up_impl();
indent_impl(out) << "F__isset_" << prop_name(tfield, is_xception_class) << " := True;" << endl;
if (tfield->get_req() != t_field::T_REQUIRED) {
indent_impl(out) << "F__isset_" << prop_name(tfield, is_xception_class) << " := True;" << endl;
}
indent_impl(out) << fieldPrefix << prop_name(tfield, is_xception_class) << " := Value;" << endl;

if (is_xception_class && (! is_xception_factory) ) {
Expand Down Expand Up @@ -2452,12 +2466,16 @@ void t_delphi_generator::generate_delphi_create_exception_impl(ostream& out, str

for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
propname = prop_name(*f_iter, is_exception);
indent_impl(out) << "if __isset_" << propname << " then" << endl;
indent_impl(out) << "begin" << endl;
indent_up_impl();
if ((*f_iter)->get_req() != t_field::T_REQUIRED) {
indent_impl(out) << "if __isset_" << propname << " then" << endl;
indent_impl(out) << "begin" << endl;
indent_up_impl();
}
indent_impl(out) << "Result." << propname << " := " << propname << ";" << endl;
indent_down_impl();
indent_impl(out) << "end;" << endl;
if ((*f_iter)->get_req() != t_field::T_REQUIRED) {
indent_down_impl();
indent_impl(out) << "end;" << endl;
}
}

indent_impl(out) << "Result.UpdateMessageProperty;" << endl;
Expand All @@ -2478,6 +2496,16 @@ void t_delphi_generator::generate_delphi_struct_reader_impl(ostream& out, string
indent_impl(code_block) << "begin" << endl;
indent_up_impl();

// local bools for required fields
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
if ((*f_iter)->get_req() == t_field::T_REQUIRED) {
indent_impl(local_vars) <<
"_req_isset_" << prop_name(*f_iter, is_exception) << " : Boolean;" << endl;
indent_impl(code_block) <<
"_req_isset_" << prop_name(*f_iter, is_exception) << " := FALSE;" << endl;
}
}

indent_impl(code_block) << "struc := iprot.ReadStructBegin;" << endl;

indent_impl(code_block) << "try" << endl;
Expand Down Expand Up @@ -2518,6 +2546,12 @@ void t_delphi_generator::generate_delphi_struct_reader_impl(ostream& out, string

generate_deserialize_field(code_block, is_exception, *f_iter, "", local_vars);

// required field?
if ((*f_iter)->get_req() == t_field::T_REQUIRED) {
indent_impl(code_block) <<
"_req_isset_" << prop_name(*f_iter, is_exception) << " := TRUE;" << endl;
}

indent_down_impl();

indent_impl(code_block) << "end else" << endl;
Expand Down Expand Up @@ -2558,6 +2592,18 @@ void t_delphi_generator::generate_delphi_struct_reader_impl(ostream& out, string
indent_impl(code_block) << "iprot.ReadStructEnd;" << endl;
indent_down_impl();
indent_impl(code_block) << "end;" << endl;

// all required fields have been read?
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
if ((*f_iter)->get_req() == t_field::T_REQUIRED) {
indent_impl(code_block) <<
"if not _req_isset_" << prop_name(*f_iter, is_exception) << endl;
indent_impl(code_block) <<
"then raise TProtocolException.Create( TProtocolException.INVALID_DATA, '" <<
prop_name(*f_iter, is_exception) << "');" << endl;
}
}

indent_down_impl();
indent_impl(code_block) << "end;" << endl << endl;

Expand Down Expand Up @@ -2671,17 +2717,28 @@ void t_delphi_generator::generate_delphi_struct_writer_impl(ostream& out, string

for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
bool null_allowed = type_can_be_null((*f_iter)->get_type());
bool is_optional = ((*f_iter)->get_req() != t_field::T_REQUIRED);
if (null_allowed) {
indent_impl(code_block) <<
"if ((" << prop_name((*f_iter), is_exception) << " <> nil) and __isset_" << prop_name(*f_iter,is_exception) << ") then" << endl;
"if (" << prop_name((*f_iter), is_exception) << " <> nil)";
if (is_optional) {
code_block <<
" and __isset_" << prop_name(*f_iter,is_exception);
}
code_block <<
" then" << endl;
indent_impl(code_block) << "begin" << endl;
indent_up_impl();
} else {
indent_impl(code_block) << "if (__isset_" << prop_name(*f_iter,is_exception) << ") then" << endl;
indent_impl(code_block) << "begin" << endl;
indent_up_impl();
if (is_optional) {
indent_impl(code_block) << "if (__isset_" << prop_name(*f_iter,is_exception) << ") then" << endl;
indent_impl(code_block) << "begin" << endl;
indent_up_impl();
} else {
indent_impl(code_block) << "// required field" << endl;
}
}
indent_impl(code_block) <<
indent_impl(code_block) <<
"field_.Name := '" << (*f_iter)->get_name() << "';" << endl;
indent_impl(code_block) <<
"field_.Type_ := " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
Expand All @@ -2691,8 +2748,10 @@ void t_delphi_generator::generate_delphi_struct_writer_impl(ostream& out, string
"oprot.WriteFieldBegin(field_);" << endl;
generate_serialize_field(code_block, is_exception, *f_iter, "", local_vars);
indent_impl(code_block) << "oprot.WriteFieldEnd();" << endl;
indent_down_impl();
indent_impl(code_block) << "end;" << endl;
if (null_allowed || is_optional) {
indent_down_impl();
indent_impl(code_block) << "end;" << endl;
}
}

indent_impl(code_block) << "oprot.WriteFieldStop();" << endl;
Expand Down
7 changes: 6 additions & 1 deletion compiler/cpp/src/generate/t_java_generator.cc
Expand Up @@ -353,6 +353,7 @@ string t_java_generator::java_type_imports() {
"import org.apache.thrift.scheme.StandardScheme;\n\n" +
"import org.apache.thrift.scheme.TupleScheme;\n" +
"import org.apache.thrift.protocol.TTupleProtocol;\n" +
"import org.apache.thrift.protocol.TProtocolException;\n" +
"import org.apache.thrift.EncodingUtils;\n" +
"import java.util.List;\n" +
"import java.util.ArrayList;\n" +
Expand Down Expand Up @@ -1082,7 +1083,7 @@ void t_java_generator::generate_tuple_scheme_read_value(ofstream& out, t_struct*
indent_down();
indent(out) << "} else {" << endl;
indent_up();
indent(out) << "return null;" << endl;
indent(out) << "throw new TProtocolException(\"Couldn't find a field with field id \" + fieldID);" << endl;
indent_down();
indent(out) << "}" << endl;
indent_down();
Expand Down Expand Up @@ -2673,6 +2674,10 @@ void t_java_generator::generate_process_function(t_service* tservice,
indent(f_service_) << " return new " << argsname << "();" << endl;
indent(f_service_) << "}" << endl << endl;

indent(f_service_) << "protected boolean isOneway() {" << endl;
indent(f_service_) << " return " << ((tfunction->is_oneway())?"true":"false") << ";" << endl;
indent(f_service_) << "}" << endl << endl;

indent(f_service_) << "public " << resultname << " getResult(I iface, " << argsname << " args) throws org.apache.thrift.TException {" << endl;
indent_up();
if (!tfunction->is_oneway()) {
Expand Down

0 comments on commit efce47f

Please sign in to comment.