http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_field.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_field.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_field.h deleted file mode 100644 index eece7bb..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_field.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_FIELD_H -#define T_FIELD_H - -#include <string> -#include <sstream> - -#include "t_doc.h" - -// Forward declare for xsd_attrs -class t_struct; - -/** - * Class to represent a field in a thrift structure. A field has a data type, - * a symbolic name, and a numeric identifier. - * - */ -class t_field : public t_doc { -public: - t_field(t_type* type, std::string name) - : type_(type), - name_(name), - key_(0), - value_(NULL), - xsd_optional_(false), - xsd_nillable_(false), - xsd_attrs_(NULL), - reference_(false) {} - - t_field(t_type* type, std::string name, int32_t key) - : type_(type), - name_(name), - key_(key), - req_(T_OPT_IN_REQ_OUT), - value_(NULL), - xsd_optional_(false), - xsd_nillable_(false), - xsd_attrs_(NULL), - reference_(false) {} - - ~t_field() {} - - t_type* get_type() const { return type_; } - - const std::string& get_name() const { return name_; } - - int32_t get_key() const { return key_; } - - enum e_req { T_REQUIRED, T_OPTIONAL, T_OPT_IN_REQ_OUT }; - - void set_req(e_req req) { req_ = req; } - - e_req get_req() const { return req_; } - - void set_value(t_const_value* value) { value_ = value; } - - t_const_value* get_value() { return value_; } - - void set_xsd_optional(bool xsd_optional) { xsd_optional_ = xsd_optional; } - - bool get_xsd_optional() const { return xsd_optional_; } - - void set_xsd_nillable(bool xsd_nillable) { xsd_nillable_ = xsd_nillable; } - - bool get_xsd_nillable() const { return xsd_nillable_; } - - void set_xsd_attrs(t_struct* xsd_attrs) { xsd_attrs_ = xsd_attrs; } - - t_struct* get_xsd_attrs() { return xsd_attrs_; } - - /** - * Comparator to sort fields in ascending order by key. - * Make this a functor instead of a function to help GCC inline it. - * The arguments are (const) references to const pointers to const t_fields. - */ - struct key_compare { - bool operator()(t_field const* const& a, t_field const* const& b) { - return a->get_key() < b->get_key(); - } - }; - - std::map<std::string, std::string> annotations_; - - bool get_reference() { return reference_; } - - void set_reference(bool reference) { reference_ = reference; } - -private: - t_type* type_; - std::string name_; - int32_t key_; - e_req req_; - t_const_value* value_; - - bool xsd_optional_; - bool xsd_nillable_; - t_struct* xsd_attrs_; - bool reference_; -}; - -/** - * A simple struct for the parser to use to store a field ID, and whether or - * not it was specified by the user or automatically chosen. - */ -struct t_field_id { - int32_t value; - bool auto_assigned; -}; - -#endif
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_function.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_function.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_function.h deleted file mode 100644 index 96886f3..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_function.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_FUNCTION_H -#define T_FUNCTION_H - -#include <string> -#include "t_type.h" -#include "t_struct.h" -#include "t_doc.h" - -/** - * Representation of a function. Key parts are return type, function name, - * optional modifiers, and an argument list, which is implemented as a thrift - * struct. - * - */ -class t_function : public t_doc { -public: - t_function(t_type* returntype, std::string name, t_struct* arglist, bool oneway = false) - : returntype_(returntype), name_(name), arglist_(arglist), oneway_(oneway) { - xceptions_ = new t_struct(NULL); - if (oneway_ && (!returntype_->is_void())) { - pwarning(1, "Oneway methods should return void.\n"); - } - } - - t_function(t_type* returntype, - std::string name, - t_struct* arglist, - t_struct* xceptions, - bool oneway = false) - : returntype_(returntype), - name_(name), - arglist_(arglist), - xceptions_(xceptions), - oneway_(oneway) { - if (oneway_ && !xceptions_->get_members().empty()) { - throw std::string("Oneway methods can't throw exceptions."); - } - if (oneway_ && (!returntype_->is_void())) { - pwarning(1, "Oneway methods should return void.\n"); - } - } - - ~t_function() {} - - t_type* get_returntype() const { return returntype_; } - - const std::string& get_name() const { return name_; } - - t_struct* get_arglist() const { return arglist_; } - - t_struct* get_xceptions() const { return xceptions_; } - - bool is_oneway() const { return oneway_; } - - std::map<std::string, std::string> annotations_; - -private: - t_type* returntype_; - std::string name_; - t_struct* arglist_; - t_struct* xceptions_; - bool oneway_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_list.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_list.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_list.h deleted file mode 100644 index ac0d981..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_list.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_LIST_H -#define T_LIST_H - -#include "t_container.h" - -/** - * A list is a lightweight container type that just wraps another data type. - * - */ -class t_list : public t_container { -public: - t_list(t_type* elem_type) : elem_type_(elem_type) {} - - t_type* get_elem_type() const { return elem_type_; } - - bool is_list() const { return true; } - -private: - t_type* elem_type_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_map.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_map.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_map.h deleted file mode 100644 index 269aeab..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_map.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_MAP_H -#define T_MAP_H - -#include "t_container.h" - -/** - * A map is a lightweight container type that just wraps another two data - * types. - * - */ -class t_map : public t_container { -public: - t_map(t_type* key_type, t_type* val_type) : key_type_(key_type), val_type_(val_type) {} - - t_type* get_key_type() const { return key_type_; } - - t_type* get_val_type() const { return val_type_; } - - bool is_map() const { return true; } - -private: - t_type* key_type_; - t_type* val_type_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_program.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_program.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_program.h deleted file mode 100644 index 556ee6c..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_program.h +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_PROGRAM_H -#define T_PROGRAM_H - -#include <map> -#include <string> -#include <vector> - -// For program_name() -#include "main.h" - -#include "t_doc.h" -#include "t_scope.h" -#include "t_base_type.h" -#include "t_typedef.h" -#include "t_enum.h" -#include "t_const.h" -#include "t_struct.h" -#include "t_service.h" -#include "t_list.h" -#include "t_map.h" -#include "t_set.h" -#include "generate/t_generator_registry.h" -//#include "t_doc.h" - -/** - * Top level class representing an entire thrift program. A program consists - * fundamentally of the following: - * - * Typedefs - * Enumerations - * Constants - * Structs - * Exceptions - * Services - * - * The program module also contains the definitions of the base types. - * - */ -class t_program : public t_doc { -public: - t_program(std::string path, std::string name) - : path_(path), name_(name), out_path_("./"), out_path_is_absolute_(false) { - scope_ = new t_scope(); - } - - t_program(std::string path) : path_(path), out_path_("./"), out_path_is_absolute_(false) { - name_ = program_name(path); - scope_ = new t_scope(); - } - - ~t_program() { - if (scope_) { - delete scope_; - scope_ = NULL; - } - } - - // Path accessor - const std::string& get_path() const { return path_; } - - // Output path accessor - const std::string& get_out_path() const { return out_path_; } - - // Create gen-* dir accessor - bool is_out_path_absolute() const { return out_path_is_absolute_; } - - // Name accessor - const std::string& get_name() const { return name_; } - - // Namespace - const std::string& get_namespace() const { return namespace_; } - - // Include prefix accessor - const std::string& get_include_prefix() const { return include_prefix_; } - - // Accessors for program elements - const std::vector<t_typedef*>& get_typedefs() const { return typedefs_; } - const std::vector<t_enum*>& get_enums() const { return enums_; } - const std::vector<t_const*>& get_consts() const { return consts_; } - const std::vector<t_struct*>& get_structs() const { return structs_; } - const std::vector<t_struct*>& get_xceptions() const { return xceptions_; } - const std::vector<t_struct*>& get_objects() const { return objects_; } - const std::vector<t_service*>& get_services() const { return services_; } - const std::map<std::string, std::string>& get_namespaces() const { return namespaces_; } - - // Program elements - void add_typedef(t_typedef* td) { typedefs_.push_back(td); } - void add_enum(t_enum* te) { enums_.push_back(te); } - void add_const(t_const* tc) { consts_.push_back(tc); } - void add_struct(t_struct* ts) { - objects_.push_back(ts); - structs_.push_back(ts); - } - void add_xception(t_struct* tx) { - objects_.push_back(tx); - xceptions_.push_back(tx); - } - void add_service(t_service* ts) { services_.push_back(ts); } - - // Programs to include - const std::vector<t_program*>& get_includes() const { return includes_; } - - void set_out_path(std::string out_path, bool out_path_is_absolute) { - out_path_ = out_path; - out_path_is_absolute_ = out_path_is_absolute; - // Ensure that it ends with a trailing '/' (or '\' for windows machines) - char c = out_path_.at(out_path_.size() - 1); - if (!(c == '/' || c == '\\')) { - out_path_.push_back('/'); - } - } - - // Typename collision detection - /** - * Search for typename collisions - * @param t the type to test for collisions - * @return true if a certain collision was found, otherwise false - */ - bool is_unique_typename(t_type* t) { - int occurrences = program_typename_count(this, t); - for (std::vector<t_program*>::iterator it = includes_.begin(); it != includes_.end(); ++it) { - occurrences += program_typename_count(*it, t); - } - return 0 == occurrences; - } - - /** - * Search all type collections for duplicate typenames - * @param prog the program to search - * @param t the type to test for collisions - * @return the number of certain typename collisions - */ - int program_typename_count(t_program* prog, t_type* t) { - int occurrences = 0; - occurrences += collection_typename_count(prog, prog->typedefs_, t); - occurrences += collection_typename_count(prog, prog->enums_, t); - occurrences += collection_typename_count(prog, prog->objects_, t); - occurrences += collection_typename_count(prog, prog->services_, t); - return occurrences; - } - - /** - * Search a type collection for duplicate typenames - * @param prog the program to search - * @param type_collection the type collection to search - * @param t the type to test for collisions - * @return the number of certain typename collisions - */ - template <class T> - int collection_typename_count(t_program* prog, T type_collection, t_type* t) { - int occurrences = 0; - for (typename T::iterator it = type_collection.begin(); it != type_collection.end(); ++it) - if (t != *it && 0 == t->get_name().compare((*it)->get_name()) && is_common_namespace(prog, t)) - ++occurrences; - return occurrences; - } - - /** - * Determine whether identical typenames will collide based on namespaces. - * - * Because we do not know which languages the user will generate code for, - * collisions within programs (IDL files) having namespace declarations can be - * difficult to determine. Only guaranteed collisions return true (cause an error). - * Possible collisions involving explicit namespace declarations produce a warning. - * Other possible collisions go unreported. - * @param prog the program containing the preexisting typename - * @param t the type containing the typename match - * @return true if a collision within namespaces is found, otherwise false - */ - bool is_common_namespace(t_program* prog, t_type* t) { - // Case 1: Typenames are in the same program [collision] - if (prog == t->get_program()) { - pwarning(1, - "Duplicate typename %s found in %s", - t->get_name().c_str(), - t->get_program()->get_name().c_str()); - return true; - } - - // Case 2: Both programs have identical namespace scope/name declarations [collision] - bool match = true; - for (std::map<std::string, std::string>::iterator it = prog->namespaces_.begin(); - it != prog->namespaces_.end(); - ++it) { - if (0 == it->second.compare(t->get_program()->get_namespace(it->first))) { - pwarning(1, - "Duplicate typename %s found in %s,%s,%s and %s,%s,%s [file,scope,ns]", - t->get_name().c_str(), - t->get_program()->get_name().c_str(), - it->first.c_str(), - it->second.c_str(), - prog->get_name().c_str(), - it->first.c_str(), - it->second.c_str()); - } else { - match = false; - } - } - for (std::map<std::string, std::string>::iterator it = t->get_program()->namespaces_.begin(); - it != t->get_program()->namespaces_.end(); - ++it) { - if (0 == it->second.compare(prog->get_namespace(it->first))) { - pwarning(1, - "Duplicate typename %s found in %s,%s,%s and %s,%s,%s [file,scope,ns]", - t->get_name().c_str(), - t->get_program()->get_name().c_str(), - it->first.c_str(), - it->second.c_str(), - prog->get_name().c_str(), - it->first.c_str(), - it->second.c_str()); - } else { - match = false; - } - } - if (0 == prog->namespaces_.size() && 0 == t->get_program()->namespaces_.size()) { - pwarning(1, - "Duplicate typename %s found in %s and %s", - t->get_name().c_str(), - t->get_program()->get_name().c_str(), - prog->get_name().c_str()); - } - return match; - } - - // Scoping and namespacing - void set_namespace(std::string name) { namespace_ = name; } - - // Scope accessor - t_scope* scope() const { return scope_; } - - // Includes - - void add_include(std::string path, std::string include_site) { - t_program* program = new t_program(path); - - // include prefix for this program is the site at which it was included - // (minus the filename) - std::string include_prefix; - std::string::size_type last_slash = std::string::npos; - if ((last_slash = include_site.rfind("/")) != std::string::npos) { - include_prefix = include_site.substr(0, last_slash); - } - - program->set_include_prefix(include_prefix); - includes_.push_back(program); - } - - std::vector<t_program*>& get_includes() { return includes_; } - - void set_include_prefix(std::string include_prefix) { - include_prefix_ = include_prefix; - - // this is intended to be a directory; add a trailing slash if necessary - std::string::size_type len = include_prefix_.size(); - if (len > 0 && include_prefix_[len - 1] != '/') { - include_prefix_ += '/'; - } - } - - // Language neutral namespace / packaging - void set_namespace(std::string language, std::string name_space) { - if (language != "*") { - size_t sub_index = language.find('.'); - std::string base_language = language.substr(0, sub_index); - std::string sub_namespace; - - if (base_language == "smalltalk") { - pwarning(1, "Namespace 'smalltalk' is deprecated. Use 'st' instead"); - base_language = "st"; - } - - t_generator_registry::gen_map_t my_copy = t_generator_registry::get_generator_map(); - - t_generator_registry::gen_map_t::iterator it; - it = my_copy.find(base_language); - - if (it == my_copy.end()) { - std::string warning = "No generator named '" + base_language + "' could be found!"; - pwarning(1, warning.c_str()); - } else { - if (sub_index != std::string::npos) { - std::string sub_namespace = language.substr(sub_index + 1); - if (!it->second->is_valid_namespace(sub_namespace)) { - std::string warning = base_language + " generator does not accept '" + sub_namespace - + "' as sub-namespace!"; - pwarning(1, warning.c_str()); - } - } - } - } - - namespaces_[language] = name_space; - } - - std::string get_namespace(std::string language) const { - std::map<std::string, std::string>::const_iterator iter; - if ((iter = namespaces_.find(language)) != namespaces_.end() - || (iter = namespaces_.find("*")) != namespaces_.end()) { - return iter->second; - } - return std::string(); - } - - const std::map<std::string, std::string>& get_all_namespaces(){ - return namespaces_; - } - // Language specific namespace / packaging - - void add_cpp_include(std::string path) { cpp_includes_.push_back(path); } - - const std::vector<std::string>& get_cpp_includes() { return cpp_includes_; } - - void add_c_include(std::string path) { c_includes_.push_back(path); } - - const std::vector<std::string>& get_c_includes() { return c_includes_; } - -private: - // File path - std::string path_; - - // Name - std::string name_; - - // Output directory - std::string out_path_; - - // Output directory is absolute location for generated source (no gen-*) - bool out_path_is_absolute_; - - // Namespace - std::string namespace_; - - // Included programs - std::vector<t_program*> includes_; - - // Include prefix for this program, if any - std::string include_prefix_; - - // Identifier lookup scope - t_scope* scope_; - - // Components to generate code for - std::vector<t_typedef*> typedefs_; - std::vector<t_enum*> enums_; - std::vector<t_const*> consts_; - std::vector<t_struct*> objects_; - std::vector<t_struct*> structs_; - std::vector<t_struct*> xceptions_; - std::vector<t_service*> services_; - - // Dynamic namespaces - std::map<std::string, std::string> namespaces_; - - // C++ extra includes - std::vector<std::string> cpp_includes_; - - // C extra includes - std::vector<std::string> c_includes_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_scope.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_scope.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_scope.h deleted file mode 100644 index c108fdd..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_scope.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_SCOPE_H -#define T_SCOPE_H - -#include <map> -#include <string> -#include <sstream> - -#include "t_type.h" -#include "t_service.h" -#include "t_const.h" -#include "t_const_value.h" -#include "t_base_type.h" -#include "t_map.h" -#include "t_list.h" - -/** - * This represents a variable scope used for looking up predefined types and - * services. Typically, a scope is associated with a t_program. Scopes are not - * used to determine code generation, but rather to resolve identifiers at - * parse time. - * - */ -class t_scope { -public: - t_scope() {} - - void add_type(std::string name, t_type* type) { types_[name] = type; } - - t_type* get_type(std::string name) { return types_[name]; } - - void add_service(std::string name, t_service* service) { services_[name] = service; } - - t_service* get_service(std::string name) { return services_[name]; } - - void add_constant(std::string name, t_const* constant) { - if (constants_.find(name) != constants_.end()) { - throw "Enum " + name + " is already defined!"; - } else { - constants_[name] = constant; - } - } - - t_const* get_constant(std::string name) { return constants_[name]; } - - void print() { - std::map<std::string, t_type*>::iterator iter; - for (iter = types_.begin(); iter != types_.end(); ++iter) { - printf("%s => %s\n", iter->first.c_str(), iter->second->get_name().c_str()); - } - } - - void resolve_const_value(t_const_value* const_val, t_type* ttype) { - if (ttype->is_map()) { - const std::map<t_const_value*, t_const_value*>& map = const_val->get_map(); - std::map<t_const_value*, t_const_value*>::const_iterator v_iter; - for (v_iter = map.begin(); v_iter != map.end(); ++v_iter) { - resolve_const_value(v_iter->first, ((t_map*)ttype)->get_key_type()); - resolve_const_value(v_iter->second, ((t_map*)ttype)->get_val_type()); - } - } else if (ttype->is_list() || ttype->is_set()) { - const std::vector<t_const_value*>& val = const_val->get_list(); - std::vector<t_const_value*>::const_iterator v_iter; - for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) { - resolve_const_value((*v_iter), ((t_list*)ttype)->get_elem_type()); - } - } else if (ttype->is_struct()) { - t_struct* tstruct = (t_struct*)ttype; - const std::map<t_const_value*, t_const_value*>& map = const_val->get_map(); - std::map<t_const_value*, t_const_value*>::const_iterator v_iter; - for (v_iter = map.begin(); v_iter != map.end(); ++v_iter) { - t_field* field = tstruct->get_field_by_name(v_iter->first->get_string()); - if (field == NULL) { - throw "No field named \"" + v_iter->first->get_string() - + "\" was found in struct of type \"" + tstruct->get_name() + "\""; - } - resolve_const_value(v_iter->second, field->get_type()); - } - } else if (const_val->get_type() == t_const_value::CV_IDENTIFIER) { - if (ttype->is_enum()) { - const_val->set_enum((t_enum*)ttype); - } else { - t_const* constant = get_constant(const_val->get_identifier()); - if (constant == NULL) { - throw "No enum value or constant found named \"" + const_val->get_identifier() + "\"!"; - } - - // Resolve typedefs to the underlying type - t_type* const_type = constant->get_type()->get_true_type(); - - if (const_type->is_base_type()) { - switch (((t_base_type*)const_type)->get_base()) { - case t_base_type::TYPE_I16: - case t_base_type::TYPE_I32: - case t_base_type::TYPE_I64: - case t_base_type::TYPE_BOOL: - case t_base_type::TYPE_BYTE: - const_val->set_integer(constant->get_value()->get_integer()); - break; - case t_base_type::TYPE_STRING: - const_val->set_string(constant->get_value()->get_string()); - break; - case t_base_type::TYPE_DOUBLE: - const_val->set_double(constant->get_value()->get_double()); - break; - case t_base_type::TYPE_VOID: - throw "Constants cannot be of type VOID"; - } - } else if (const_type->is_map()) { - const std::map<t_const_value*, t_const_value*>& map = constant->get_value()->get_map(); - std::map<t_const_value*, t_const_value*>::const_iterator v_iter; - - const_val->set_map(); - for (v_iter = map.begin(); v_iter != map.end(); ++v_iter) { - const_val->add_map(v_iter->first, v_iter->second); - } - } else if (const_type->is_list()) { - const std::vector<t_const_value*>& val = constant->get_value()->get_list(); - std::vector<t_const_value*>::const_iterator v_iter; - - const_val->set_list(); - for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) { - const_val->add_list(*v_iter); - } - } - } - } else if (ttype->is_enum()) { - // enum constant with non-identifier value. set the enum and find the - // value's name. - t_enum* tenum = (t_enum*)ttype; - t_enum_value* enum_value = tenum->get_constant_by_value(const_val->get_integer()); - if (enum_value == NULL) { - std::ostringstream valstm; - valstm << const_val->get_integer(); - throw "Couldn't find a named value in enum " + tenum->get_name() + " for value " - + valstm.str(); - } - const_val->set_identifier(tenum->get_name() + "." + enum_value->get_name()); - const_val->set_enum(tenum); - } - } - -private: - // Map of names to types - std::map<std::string, t_type*> types_; - - // Map of names to constants - std::map<std::string, t_const*> constants_; - - // Map of names to services - std::map<std::string, t_service*> services_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_service.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_service.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_service.h deleted file mode 100644 index 2b01f9c..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_service.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_SERVICE_H -#define T_SERVICE_H - -#include "t_function.h" -#include <vector> - -class t_program; - -/** - * A service consists of a set of functions. - * - */ -class t_service : public t_type { -public: - t_service(t_program* program) : t_type(program), extends_(NULL) {} - - bool is_service() const { return true; } - - void set_extends(t_service* extends) { extends_ = extends; } - - void add_function(t_function* func) { - std::vector<t_function*>::const_iterator iter; - for (iter = functions_.begin(); iter != functions_.end(); ++iter) { - if (func->get_name() == (*iter)->get_name()) { - throw "Function " + func->get_name() + " is already defined"; - } - } - functions_.push_back(func); - } - - const std::vector<t_function*>& get_functions() const { return functions_; } - - t_service* get_extends() { return extends_; } - -private: - std::vector<t_function*> functions_; - t_service* extends_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_set.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_set.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_set.h deleted file mode 100644 index 8a46480..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_set.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_SET_H -#define T_SET_H - -#include "t_container.h" - -/** - * A set is a lightweight container type that just wraps another data type. - * - */ -class t_set : public t_container { -public: - t_set(t_type* elem_type) : elem_type_(elem_type) {} - - t_type* get_elem_type() const { return elem_type_; } - - bool is_set() const { return true; } - -private: - t_type* elem_type_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_struct.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_struct.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_struct.h deleted file mode 100644 index 93cb089..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_struct.h +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_STRUCT_H -#define T_STRUCT_H - -#include <algorithm> -#include <vector> -#include <utility> -#include <string> - -#include "t_type.h" -#include "t_field.h" - -// Forward declare that puppy -class t_program; - -/** - * A struct is a container for a set of member fields that has a name. Structs - * are also used to implement exception types. - * - */ -class t_struct : public t_type { -public: - typedef std::vector<t_field*> members_type; - - t_struct(t_program* program) - : t_type(program), - is_xception_(false), - is_union_(false), - members_validated(false), - members_with_value(0), - xsd_all_(false) {} - - t_struct(t_program* program, const std::string& name) - : t_type(program, name), - is_xception_(false), - is_union_(false), - members_validated(false), - members_with_value(0), - xsd_all_(false) {} - - void set_name(const std::string& name) { - name_ = name; - validate_union_members(); - } - - void set_xception(bool is_xception) { is_xception_ = is_xception; } - - void validate_union_member(t_field* field) { - if (is_union_ && (!name_.empty())) { - - // unions can't have required fields - if (field->get_req() == t_field::T_REQUIRED) { - pwarning(1, - "Required field %s of union %s set to optional.\n", - field->get_name().c_str(), - name_.c_str()); - field->set_req(t_field::T_OPTIONAL); - } - - // unions may have up to one member defaulted, but not more - if (field->get_value() != NULL) { - if (1 < ++members_with_value) { - throw "Error: Field " + field->get_name() + " provides another default value for union " - + name_; - } - } - } - } - - void validate_union_members() { - if (is_union_ && (!name_.empty()) && (!members_validated)) { - members_type::const_iterator m_iter; - for (m_iter = members_in_id_order_.begin(); m_iter != members_in_id_order_.end(); ++m_iter) { - validate_union_member(*m_iter); - } - members_validated = true; - } - } - - void set_union(bool is_union) { - is_union_ = is_union; - validate_union_members(); - } - - void set_xsd_all(bool xsd_all) { xsd_all_ = xsd_all; } - - bool get_xsd_all() const { return xsd_all_; } - - bool append(t_field* elem) { - typedef members_type::iterator iter_type; - std::pair<iter_type, iter_type> bounds = std::equal_range(members_in_id_order_.begin(), - members_in_id_order_.end(), - elem, - t_field::key_compare()); - if (bounds.first != bounds.second) { - return false; - } - // returns false when there is a conflict of field names - if (get_field_by_name(elem->get_name()) != NULL) { - return false; - } - members_.push_back(elem); - members_in_id_order_.insert(bounds.second, elem); - validate_union_member(elem); - return true; - } - - const members_type& get_members() { return members_; } - - const members_type& get_sorted_members() { return members_in_id_order_; } - - bool is_struct() const { return !is_xception_; } - - bool is_xception() const { return is_xception_; } - - bool is_union() const { return is_union_; } - - t_field* get_field_by_name(std::string field_name) { - members_type::const_iterator m_iter; - for (m_iter = members_in_id_order_.begin(); m_iter != members_in_id_order_.end(); ++m_iter) { - if ((*m_iter)->get_name() == field_name) { - return *m_iter; - } - } - return NULL; - } - -private: - members_type members_; - members_type members_in_id_order_; - bool is_xception_; - bool is_union_; - bool members_validated; - int members_with_value; - - bool xsd_all_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_type.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_type.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_type.h deleted file mode 100644 index 416cc6f..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_type.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_TYPE_H -#define T_TYPE_H - -#include <string> -#include <map> -#include <cstring> -#include <stdint.h> -#include "t_doc.h" - -class t_program; - -/** - * Generic representation of a thrift type. These objects are used by the - * parser module to build up a tree of object that are all explicitly typed. - * The generic t_type class exports a variety of useful methods that are - * used by the code generator to branch based upon different handling for the - * various types. - * - */ -class t_type : public t_doc { -public: - virtual ~t_type() {} - - virtual void set_name(const std::string& name) { name_ = name; } - - virtual const std::string& get_name() const { return name_; } - - virtual bool is_void() const { return false; } - virtual bool is_base_type() const { return false; } - virtual bool is_string() const { return false; } - virtual bool is_bool() const { return false; } - virtual bool is_typedef() const { return false; } - virtual bool is_enum() const { return false; } - virtual bool is_struct() const { return false; } - virtual bool is_xception() const { return false; } - virtual bool is_container() const { return false; } - virtual bool is_list() const { return false; } - virtual bool is_set() const { return false; } - virtual bool is_map() const { return false; } - virtual bool is_service() const { return false; } - - t_program* get_program() { return program_; } - - const t_program* get_program() const { return program_; } - - t_type* get_true_type(); - - // This function will break (maybe badly) unless 0 <= num <= 16. - static char nybble_to_xdigit(int num) { - if (num < 10) { - return '0' + num; - } else { - return 'A' + num - 10; - } - } - - static std::string byte_to_hex(uint8_t byte) { - std::string rv; - rv += nybble_to_xdigit(byte >> 4); - rv += nybble_to_xdigit(byte & 0x0f); - return rv; - } - - std::map<std::string, std::string> annotations_; - -protected: - t_type() : program_(NULL) { ; } - - t_type(t_program* program) : program_(program) { ; } - - t_type(t_program* program, std::string name) : program_(program), name_(name) { ; } - - t_type(std::string name) : program_(NULL), name_(name) { ; } - - t_program* program_; - std::string name_; -}; - -/** - * Placeholder struct for returning the key and value of an annotation - * during parsing. - */ -struct t_annotation { - std::string key; - std::string val; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_typedef.cc ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_typedef.cc b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_typedef.cc deleted file mode 100644 index ddbe749..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_typedef.cc +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -#include <cstdio> - -#include "t_typedef.h" -#include "t_program.h" - -t_type* t_typedef::get_type() const { - if (type_ == NULL) { - t_type* type = get_program()->scope()->get_type(symbolic_); - if (type == NULL) { - printf("Type \"%s\" not defined\n", symbolic_.c_str()); - exit(1); - } - return type; - } - return type_; -} http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/parse/t_typedef.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_typedef.h b/depends/thirdparty/thrift/compiler/cpp/src/parse/t_typedef.h deleted file mode 100644 index a39a246..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/parse/t_typedef.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef T_TYPEDEF_H -#define T_TYPEDEF_H - -#include <string> -#include "t_type.h" - -/** - * A typedef is a mapping from a symbolic name to another type. In dymanically - * typed languages (i.e. php/python) the code generator can actually usually - * ignore typedefs and just use the underlying type directly, though in C++ - * the symbolic naming can be quite useful for code clarity. - * - */ -class t_typedef : public t_type { -public: - t_typedef(t_program* program, t_type* type, const std::string& symbolic) - : t_type(program, symbolic), type_(type), symbolic_(symbolic), forward_(false), seen_(false) {} - - /** - * This constructor is used to refer to a type that is lazily - * resolved at a later time, like for forward declarations or - * recursive types. - */ - t_typedef(t_program* program, const std::string& symbolic, bool forward) - : t_type(program, symbolic), - type_(NULL), - symbolic_(symbolic), - forward_(forward), - seen_(false) {} - - ~t_typedef() {} - - t_type* get_type() const; - - const std::string& get_symbolic() const { return symbolic_; } - - bool is_forward_typedef() const { return forward_; } - - bool is_typedef() const { return true; } - -private: - t_type* type_; - std::string symbolic_; - bool forward_; - mutable bool seen_; -}; - -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/platform.h ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/platform.h b/depends/thirdparty/thrift/compiler/cpp/src/platform.h deleted file mode 100644 index 8cbe9db..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/platform.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * define for mkdir,since the method signature - * is different for the non-POSIX MinGW - */ - -#ifdef _MSC_VER -#include "windows/config.h" -#endif - -#ifdef _WIN32 -#include <direct.h> -#include <io.h> -#else -#include <sys/types.h> -#include <sys/stat.h> -#endif - -#ifdef _WIN32 -#define MKDIR(x) mkdir(x) -#else -#define MKDIR(x) mkdir(x, S_IRWXU | S_IRWXG | S_IRWXO) -#endif - -#ifdef PATH_MAX -#define THRIFT_PATH_MAX PATH_MAX -#else -#define THRIFT_PATH_MAX MAX_PATH -#endif http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/928eade3/depends/thirdparty/thrift/compiler/cpp/src/thriftl.ll ---------------------------------------------------------------------- diff --git a/depends/thirdparty/thrift/compiler/cpp/src/thriftl.ll b/depends/thirdparty/thrift/compiler/cpp/src/thriftl.ll deleted file mode 100644 index a771269..0000000 --- a/depends/thirdparty/thrift/compiler/cpp/src/thriftl.ll +++ /dev/null @@ -1,423 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Thrift scanner. - * - * Tokenizes a thrift definition file. - */ - -%{ - -/* This is redundant with some of the flags in Makefile.am, but it works - * when people override CXXFLAGS without being careful. The pragmas are - * the 'right' way to do it, but don't work on old-enough GCC (in particular - * the GCC that ship on Mac OS X 10.6.5, *counter* to what the GNU docs say) - * - * We should revert the Makefile.am changes once Apple ships a reasonable - * GCC. - */ -#ifdef __GNUC__ -#pragma GCC diagnostic ignored "-Wunused-function" -#pragma GCC diagnostic ignored "-Wunused-label" -#endif - -#ifdef _MSC_VER -//warning C4102: 'find_rule' : unreferenced label -#pragma warning(disable:4102) -//avoid isatty redefinition -#define YY_NEVER_INTERACTIVE 1 - -#define YY_NO_UNISTD_H 1 -#endif - -#include <cassert> -#include <string> -#include <errno.h> -#include <stdlib.h> - -#ifdef _MSC_VER -#include "windows/config.h" -#endif -#include "main.h" -#include "globals.h" -#include "parse/t_program.h" - -/** - * Must be included AFTER parse/t_program.h, but I can't remember why anymore - * because I wrote this a while ago. - */ -#if defined(BISON_USE_PARSER_H_EXTENSION) -#include "thrifty.h" -#else -#include "thrifty.hh" -#endif - -void thrift_reserved_keyword(char* keyword) { - yyerror("Cannot use reserved language keyword: \"%s\"\n", keyword); - exit(1); -} - -void integer_overflow(char* text) { - yyerror("This integer is too big: \"%s\"\n", text); - exit(1); -} - -void unexpected_token(char* text) { - yyerror("Unexpected token in input: \"%s\"\n", text); - exit(1); -} - -%} - -/** - * Provides the yylineno global, useful for debugging output - */ -%option lex-compat - -/** - * Our inputs are all single files, so no need for yywrap - */ -%option noyywrap - -/** - * We don't use it, and it fires up warnings at -Wall - */ -%option nounput - -/** - * Helper definitions, comments, constants, and whatnot - */ - -intconstant ([+-]?[0-9]+) -hexconstant ([+-]?"0x"[0-9A-Fa-f]+) -dubconstant ([+-]?[0-9]*(\.[0-9]+)?([eE][+-]?[0-9]+)?) -identifier ([a-zA-Z_](\.[a-zA-Z_0-9]|[a-zA-Z_0-9])*) -whitespace ([ \t\r\n]*) -sillycomm ("/*""*"*"*/") -multicomm ("/*"[^*]"/"*([^*/]|[^*]"/"|"*"[^/])*"*"*"*/") -doctext ("/**"([^*/]|[^*]"/"|"*"[^/])*"*"*"*/") -comment ("//"[^\n]*) -unixcomment ("#"[^\n]*) -symbol ([:;\,\{\}\(\)\=<>\[\]]) -st_identifier ([a-zA-Z-](\.[a-zA-Z_0-9-]|[a-zA-Z_0-9-])*) -literal_begin (['\"]) - -%% - -{whitespace} { /* do nothing */ } -{sillycomm} { /* do nothing */ } -{multicomm} { /* do nothing */ } -{comment} { /* do nothing */ } -{unixcomment} { /* do nothing */ } - -{symbol} { return yytext[0]; } -"*" { return yytext[0]; } - -"false" { yylval.iconst=0; return tok_int_constant; } -"true" { yylval.iconst=1; return tok_int_constant; } - -"namespace" { return tok_namespace; } -"cpp_namespace" { return tok_cpp_namespace; } -"cpp_include" { return tok_cpp_include; } -"cpp_type" { return tok_cpp_type; } -"java_package" { return tok_java_package; } -"cocoa_prefix" { return tok_cocoa_prefix; } -"csharp_namespace" { return tok_csharp_namespace; } -"delphi_namespace" { return tok_delphi_namespace; } -"php_namespace" { return tok_php_namespace; } -"py_module" { return tok_py_module; } -"perl_package" { return tok_perl_package; } -"ruby_namespace" { return tok_ruby_namespace; } -"smalltalk_category" { return tok_smalltalk_category; } -"smalltalk_prefix" { return tok_smalltalk_prefix; } -"xsd_all" { return tok_xsd_all; } -"xsd_optional" { return tok_xsd_optional; } -"xsd_nillable" { return tok_xsd_nillable; } -"xsd_namespace" { return tok_xsd_namespace; } -"xsd_attrs" { return tok_xsd_attrs; } -"include" { return tok_include; } -"void" { return tok_void; } -"bool" { return tok_bool; } -"byte" { return tok_byte; } -"i16" { return tok_i16; } -"i32" { return tok_i32; } -"i64" { return tok_i64; } -"double" { return tok_double; } -"string" { return tok_string; } -"binary" { return tok_binary; } -"slist" { - pwarning(0, "\"slist\" is deprecated and will be removed in a future compiler version. This type should be replaced with \"string\".\n"); - return tok_slist; -} -"senum" { - pwarning(0, "\"senum\" is deprecated and will be removed in a future compiler version. This type should be replaced with \"string\".\n"); - return tok_senum; -} -"map" { return tok_map; } -"list" { return tok_list; } -"set" { return tok_set; } -"oneway" { return tok_oneway; } -"typedef" { return tok_typedef; } -"struct" { return tok_struct; } -"union" { return tok_union; } -"exception" { return tok_xception; } -"extends" { return tok_extends; } -"throws" { return tok_throws; } -"service" { return tok_service; } -"enum" { return tok_enum; } -"const" { return tok_const; } -"required" { return tok_required; } -"optional" { return tok_optional; } -"async" { - pwarning(0, "\"async\" is deprecated. It is called \"oneway\" now.\n"); - return tok_oneway; -} -"&" { return tok_reference; } - - -"BEGIN" { thrift_reserved_keyword(yytext); } -"END" { thrift_reserved_keyword(yytext); } -"__CLASS__" { thrift_reserved_keyword(yytext); } -"__DIR__" { thrift_reserved_keyword(yytext); } -"__FILE__" { thrift_reserved_keyword(yytext); } -"__FUNCTION__" { thrift_reserved_keyword(yytext); } -"__LINE__" { thrift_reserved_keyword(yytext); } -"__METHOD__" { thrift_reserved_keyword(yytext); } -"__NAMESPACE__" { thrift_reserved_keyword(yytext); } -"abstract" { thrift_reserved_keyword(yytext); } -"alias" { thrift_reserved_keyword(yytext); } -"and" { thrift_reserved_keyword(yytext); } -"args" { thrift_reserved_keyword(yytext); } -"as" { thrift_reserved_keyword(yytext); } -"assert" { thrift_reserved_keyword(yytext); } -"begin" { thrift_reserved_keyword(yytext); } -"break" { thrift_reserved_keyword(yytext); } -"case" { thrift_reserved_keyword(yytext); } -"catch" { thrift_reserved_keyword(yytext); } -"class" { thrift_reserved_keyword(yytext); } -"clone" { thrift_reserved_keyword(yytext); } -"continue" { thrift_reserved_keyword(yytext); } -"declare" { thrift_reserved_keyword(yytext); } -"def" { thrift_reserved_keyword(yytext); } -"default" { thrift_reserved_keyword(yytext); } -"del" { thrift_reserved_keyword(yytext); } -"delete" { thrift_reserved_keyword(yytext); } -"do" { thrift_reserved_keyword(yytext); } -"dynamic" { thrift_reserved_keyword(yytext); } -"elif" { thrift_reserved_keyword(yytext); } -"else" { thrift_reserved_keyword(yytext); } -"elseif" { thrift_reserved_keyword(yytext); } -"elsif" { thrift_reserved_keyword(yytext); } -"end" { thrift_reserved_keyword(yytext); } -"enddeclare" { thrift_reserved_keyword(yytext); } -"endfor" { thrift_reserved_keyword(yytext); } -"endforeach" { thrift_reserved_keyword(yytext); } -"endif" { thrift_reserved_keyword(yytext); } -"endswitch" { thrift_reserved_keyword(yytext); } -"endwhile" { thrift_reserved_keyword(yytext); } -"ensure" { thrift_reserved_keyword(yytext); } -"except" { thrift_reserved_keyword(yytext); } -"exec" { thrift_reserved_keyword(yytext); } -"finally" { thrift_reserved_keyword(yytext); } -"float" { thrift_reserved_keyword(yytext); } -"for" { thrift_reserved_keyword(yytext); } -"foreach" { thrift_reserved_keyword(yytext); } -"from" { thrift_reserved_keyword(yytext); } -"function" { thrift_reserved_keyword(yytext); } -"global" { thrift_reserved_keyword(yytext); } -"goto" { thrift_reserved_keyword(yytext); } -"if" { thrift_reserved_keyword(yytext); } -"implements" { thrift_reserved_keyword(yytext); } -"import" { thrift_reserved_keyword(yytext); } -"in" { thrift_reserved_keyword(yytext); } -"inline" { thrift_reserved_keyword(yytext); } -"instanceof" { thrift_reserved_keyword(yytext); } -"interface" { thrift_reserved_keyword(yytext); } -"is" { thrift_reserved_keyword(yytext); } -"lambda" { thrift_reserved_keyword(yytext); } -"module" { thrift_reserved_keyword(yytext); } -"native" { thrift_reserved_keyword(yytext); } -"new" { thrift_reserved_keyword(yytext); } -"next" { thrift_reserved_keyword(yytext); } -"nil" { thrift_reserved_keyword(yytext); } -"not" { thrift_reserved_keyword(yytext); } -"or" { thrift_reserved_keyword(yytext); } -"package" { thrift_reserved_keyword(yytext); } -"pass" { thrift_reserved_keyword(yytext); } -"public" { thrift_reserved_keyword(yytext); } -"print" { thrift_reserved_keyword(yytext); } -"private" { thrift_reserved_keyword(yytext); } -"protected" { thrift_reserved_keyword(yytext); } -"public" { thrift_reserved_keyword(yytext); } -"raise" { thrift_reserved_keyword(yytext); } -"redo" { thrift_reserved_keyword(yytext); } -"rescue" { thrift_reserved_keyword(yytext); } -"retry" { thrift_reserved_keyword(yytext); } -"register" { thrift_reserved_keyword(yytext); } -"return" { thrift_reserved_keyword(yytext); } -"self" { thrift_reserved_keyword(yytext); } -"sizeof" { thrift_reserved_keyword(yytext); } -"static" { thrift_reserved_keyword(yytext); } -"super" { thrift_reserved_keyword(yytext); } -"switch" { thrift_reserved_keyword(yytext); } -"synchronized" { thrift_reserved_keyword(yytext); } -"then" { thrift_reserved_keyword(yytext); } -"this" { thrift_reserved_keyword(yytext); } -"throw" { thrift_reserved_keyword(yytext); } -"transient" { thrift_reserved_keyword(yytext); } -"try" { thrift_reserved_keyword(yytext); } -"undef" { thrift_reserved_keyword(yytext); } -"union" { thrift_reserved_keyword(yytext); } -"unless" { thrift_reserved_keyword(yytext); } -"unsigned" { thrift_reserved_keyword(yytext); } -"until" { thrift_reserved_keyword(yytext); } -"use" { thrift_reserved_keyword(yytext); } -"var" { thrift_reserved_keyword(yytext); } -"virtual" { thrift_reserved_keyword(yytext); } -"volatile" { thrift_reserved_keyword(yytext); } -"when" { thrift_reserved_keyword(yytext); } -"while" { thrift_reserved_keyword(yytext); } -"with" { thrift_reserved_keyword(yytext); } -"xor" { thrift_reserved_keyword(yytext); } -"yield" { thrift_reserved_keyword(yytext); } - -{intconstant} { - errno = 0; - yylval.iconst = strtoll(yytext, NULL, 10); - if (errno == ERANGE) { - integer_overflow(yytext); - } - return tok_int_constant; -} - -{hexconstant} { - errno = 0; - char sign = yytext[0]; - int shift = sign == '0' ? 2 : 3; - yylval.iconst = strtoll(yytext+shift, NULL, 16); - if (sign == '-') { - yylval.iconst = -yylval.iconst; - } - if (errno == ERANGE) { - integer_overflow(yytext); - } - return tok_int_constant; -} - -{dubconstant} { - yylval.dconst = atof(yytext); - return tok_dub_constant; -} - -{identifier} { - yylval.id = strdup(yytext); - return tok_identifier; -} - -{st_identifier} { - yylval.id = strdup(yytext); - return tok_st_identifier; -} - -{literal_begin} { - char mark = yytext[0]; - std::string result; - for(;;) - { - int ch = yyinput(); - switch (ch) { - case EOF: - yyerror("End of file while read string at %d\n", yylineno); - exit(1); - case '\n': - yyerror("End of line while read string at %d\n", yylineno - 1); - exit(1); - case '\\': - ch = yyinput(); - switch (ch) { - case 'r': - result.push_back('\r'); - continue; - case 'n': - result.push_back('\n'); - continue; - case 't': - result.push_back('\t'); - continue; - case '"': - result.push_back('"'); - continue; - case '\'': - result.push_back('\''); - continue; - case '\\': - result.push_back('\\'); - continue; - default: - yyerror("Bad escape character\n"); - return -1; - } - break; - default: - if (ch == mark) { - yylval.id = strdup(result.c_str()); - return tok_literal; - } else { - result.push_back(ch); - } - } - } -} - - -{doctext} { - /* This does not show up in the parse tree. */ - /* Rather, the parser will grab it out of the global. */ - if (g_parse_mode == PROGRAM) { - clear_doctext(); - g_doctext = strdup(yytext + 3); - assert(strlen(g_doctext) >= 2); - g_doctext[strlen(g_doctext) - 2] = ' '; - g_doctext[strlen(g_doctext) - 1] = '\0'; - g_doctext = clean_up_doctext(g_doctext); - g_doctext_lineno = yylineno; - if( (g_program_doctext_candidate == NULL) && (g_program_doctext_status == INVALID)){ - g_program_doctext_candidate = strdup(g_doctext); - g_program_doctext_lineno = g_doctext_lineno; - g_program_doctext_status = STILL_CANDIDATE; - pdebug("%s","program doctext set to STILL_CANDIDATE"); - } - } -} - -. { - unexpected_token(yytext); -} - - -. { - /* Catch-all to let us catch "*" in the parser. */ - return (int) yytext[0]; -} - -%% - -/* vim: filetype=lex -*/
