From: David Reiss Date: Thu, 2 Sep 2010 16:41:45 +0000 (+0000) Subject: Allow "*" as a catch-all namespace. X-Git-Tag: 0.5.0~60 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=fb790d726297cfa85900db00214fc0f3a9d029e6;p=common%2Fthrift.git Allow "*" as a catch-all namespace. In an IDL file, you can can now declare "namespace * foo", which will apply to any language not explicitly specified. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@992012 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/compiler/cpp/src/parse/t_program.h b/compiler/cpp/src/parse/t_program.h index 4f8f1514..daad6b99 100644 --- a/compiler/cpp/src/parse/t_program.h +++ b/compiler/cpp/src/parse/t_program.h @@ -189,11 +189,12 @@ class t_program : public t_doc { } std::string get_namespace(std::string language) const { - std::map::const_iterator iter = namespaces_.find(language); - if (iter == namespaces_.end()) { - return std::string(); + std::map::const_iterator iter; + if ((iter = namespaces_.find(language)) != namespaces_.end() || + (iter = namespaces_.find("*" )) != namespaces_.end()) { + return iter->second; } - return iter->second; + return std::string(); } // Language specific namespace / packaging diff --git a/compiler/cpp/src/thriftl.ll b/compiler/cpp/src/thriftl.ll index 84e02bb5..b8c36c3d 100644 --- a/compiler/cpp/src/thriftl.ll +++ b/compiler/cpp/src/thriftl.ll @@ -342,6 +342,11 @@ literal_begin (['\"]) } +. { + /* Catch-all to let us catch "*" in the parser. */ + return (int) yytext[0]; +} + %% /* vim: filetype=lex diff --git a/compiler/cpp/src/thrifty.yy b/compiler/cpp/src/thrifty.yy index d12cca39..cdedee07 100644 --- a/compiler/cpp/src/thrifty.yy +++ b/compiler/cpp/src/thrifty.yy @@ -280,6 +280,13 @@ Header: g_program->set_namespace($2, $3); } } +| tok_namespace '*' tok_identifier + { + pdebug("Header -> tok_namespace * tok_identifier"); + if (g_parse_mode == PROGRAM) { + g_program->set_namespace("*", $3); + } + } /* TODO(dreiss): Get rid of this once everyone is using the new hotness. */ | tok_cpp_namespace tok_identifier { diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift index 4ade6aa7..a6788a9b 100644 --- a/test/ThriftTest.thrift +++ b/test/ThriftTest.thrift @@ -28,6 +28,7 @@ namespace perl ThriftTest namespace csharp Thrift.Test namespace js ThriftTest namespace st ThriftTest +namespace * thrift.test /** * Docstring!