THRIFT-2421: Tree/Recursive struct support in thrift
authorjfarrell <jfarrell@apache.org>
Wed, 9 Apr 2014 02:45:01 +0000 (22:45 -0400)
committerjfarrell <jfarrell@apache.org>
Wed, 9 Apr 2014 02:45:01 +0000 (22:45 -0400)
commite0e831683897ea4b786eebabd0cea77659d77150
treef0a7e4bbd410047e6022657d568abc593013b6d0
parentbea3144a456a635c7a2e84c92277c5ad27f892d6
THRIFT-2421: Tree/Recursive struct support in thrift
Client: cpp
Patch:  Dave Watson

Github Pull Request: This closes #84
----
commit b6134cedf292845e5ed01052919894df6b561bf2
Date:   2014-03-20T18:12:04Z

    Recursive structs support in parser

    A common complaint is that you can't express trees or other recursive structures in thrift easily - unlike protobufs. This diff loosens up the parser to allow using structs before they are defined (and uses typedef as a forward declaration).
    This diff is actually enough to make recursive types work for some dyamic languages (I tried php, works out of the box!)

    Other languages will need forward declarations, or ways to box types, to make this work (i.e. C++ needs both forward decls and a way to express structs as pointers)
13 files changed:
compiler/cpp/Makefile.am
compiler/cpp/src/generate/t_cpp_generator.cc
compiler/cpp/src/generate/t_generator.cc
compiler/cpp/src/generate/t_generator.h
compiler/cpp/src/parse/t_program.h
compiler/cpp/src/parse/t_type.h
compiler/cpp/src/parse/t_typedef.cc [new file with mode: 0644]
compiler/cpp/src/parse/t_typedef.h
compiler/cpp/src/thrifty.yy
lib/cpp/test/Makefile.am
lib/cpp/test/RecursiveTest [new file with mode: 0755]
lib/cpp/test/RecursiveTest.cpp [new file with mode: 0644]
test/Recursive.thrift [new file with mode: 0644]