Summary:
Fingerprints were'nt being initialized properly because I forgot to move
the initialization from t_struct to t_type. Fixed that.
Also, typedefs weren't generating fingerprints for their true types.
Reviewed By: mcslee
Test Plan:
This didn't work before with -cpp -dense. Now it does.
typedef list<i32> ilist
struct foo { 1: ilist l }
Revert Plan: ok
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665268
13f79535-47bb-0310-9956-
ffa450edef68
#include <vector>
#include <string>
-#include <cstring>
#include "t_type.h"
#include "t_field.h"
t_struct(t_program* program) :
t_type(program),
is_xception_(false),
- xsd_all_(false)
- {
- memset(fingerprint_, 0, sizeof(fingerprint_));
- }
+ xsd_all_(false) {}
t_struct(t_program* program, const std::string& name) :
t_type(program, name),
is_xception_(false),
- xsd_all_(false)
- {
- memset(fingerprint_, 0, sizeof(fingerprint_));
- }
+ xsd_all_(false) {}
void set_name(const std::string& name) {
name_ = name;
#define T_TYPE_H
#include <string>
+#include <cstring>
#include "t_doc.h"
// What's worse? This, or making a src/parse/non_inlined.cc?
protected:
- t_type() {}
+ t_type() {
+ memset(fingerprint_, 0, sizeof(fingerprint_));
+ }
t_type(t_program* program) :
- program_(program) {}
+ program_(program)
+ {
+ memset(fingerprint_, 0, sizeof(fingerprint_));
+ }
t_type(t_program* program, std::string name) :
program_(program),
- name_(name) {}
+ name_(name)
+ {
+ memset(fingerprint_, 0, sizeof(fingerprint_));
+ }
t_type(std::string name) :
- name_(name) {}
+ name_(name)
+ {
+ memset(fingerprint_, 0, sizeof(fingerprint_));
+ }
t_program* program_;
std::string name_;
return type_->get_fingerprint_material();
}
+ virtual void generate_fingerprint() {
+ t_type::generate_fingerprint();
+ if (!type_->has_fingerprint()) {
+ type_->generate_fingerprint();
+ }
+ }
+
private:
t_type* type_;
std::string symbolic_;