Thrift: Allow whole program doctext.
authorDavid Reiss <dreiss@apache.org>
Mon, 30 Jul 2007 23:46:11 +0000 (23:46 +0000)
committerDavid Reiss <dreiss@apache.org>
Mon, 30 Jul 2007 23:46:11 +0000 (23:46 +0000)
Summary:
Allow docstrings at the top of the program.

Blame Rev: 52687

Reviewed By: mcslee

Test Plan:
../compiler/cpp/thrift -cpp DocTest.thrift
(with dump_docs on)
and looked at the output.
Generated C++ is identical to installed thrift.

Revert Plan: Do 52687 also.

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665183 13f79535-47bb-0310-9956-ffa450edef68

compiler/cpp/src/main.cc
compiler/cpp/src/parse/t_doc.h
compiler/cpp/src/parse/t_program.h
compiler/cpp/src/thrifty.yy
test/DocTest.thrift

index 4d00306..ed38b07 100644 (file)
@@ -433,9 +433,13 @@ static bool dump_docs = false;
 
 /**
  * Dumps docstrings to stdout
- * Only works for typedefs
+ * Only works for typedefs and whole program
  */
 void dump_docstrings(t_program* program) {
+  string progdoc = g_program->get_doc();
+  if (!progdoc.empty()) {
+    printf("Whole program doc:\n%s\n", progdoc.c_str());
+  }
   const vector<t_typedef*>& typedefs = program->get_typedefs();
   vector<t_typedef*>::const_iterator t_iter;
   for (t_iter = typedefs.begin(); t_iter != typedefs.end(); ++t_iter) {
index 9e3795a..bfa66ef 100644 (file)
@@ -15,6 +15,8 @@
 class t_doc {
 
  public:
+  t_doc() : has_doc_(false) {}
+
   void set_doc(const std::string& doc) {
     doc_ = doc;
     has_doc_ = true;
index 8b4f59c..f54ed71 100644 (file)
@@ -14,6 +14,7 @@
 // For program_name()
 #include "main.h"
 
+#include "t_doc.h"
 #include "t_scope.h"
 #include "t_base_type.h"
 #include "t_typedef.h"
@@ -41,7 +42,7 @@
  *
  * @author Mark Slee <mcslee@facebook.com>
  */
-class t_program {
+class t_program : public t_doc {
  public:
   t_program(std::string path, std::string name) :
     path_(path),
index 68384be..1ad0c35 100644 (file)
@@ -186,9 +186,12 @@ int y_field_val = -1;
  */
 
 Program:
-  HeaderList DefinitionList
+  DocTextOptional HeaderList DefinitionList
     {
       pdebug("Program -> Headers DefinitionList");
+      if ($1 != NULL) {
+        g_program->set_doc($1);
+      }
     }
 
 HeaderList:
index c06bd21..361bdde 100755 (executable)
@@ -1,3 +1,9 @@
+/**
+ * Program doctext.
+ *
+ * Seriously, this is the documentation for this whole program.
+ */
+
 java_package thrift.test
 cpp_namespace thrift.test
 
@@ -67,6 +73,10 @@ exception Xception2 {
   2: Xtruct struct_thing
 }
  
+/* C1 */
+/** Doc */
+/* C2 */
+/* C3 */
 struct EmptyStruct {}
 
 struct OneField {
@@ -211,3 +221,11 @@ typedef i32 TrailingWhitespace
  * }
  */
 typedef i32 BigDog
+
+/**
+*
+*
+*/
+typedef i32 TotallyDegenerate
+
+/* THE END */