From 9d878f220b234f195732d077cd5157ff5a31f9c4 Mon Sep 17 00:00:00 2001 From: Rob Shearman Date: Thu, 5 Mar 2009 08:23:07 +0000 Subject: [PATCH] widl: Add coclass and module types to the global namespace. --- tools/widl/typetree.c | 20 ++++++++++++-------- tools/widl/typetree.h | 4 ++-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/tools/widl/typetree.c b/tools/widl/typetree.c index f58935366c2..3b382781e59 100644 --- a/tools/widl/typetree.c +++ b/tools/widl/typetree.c @@ -96,20 +96,24 @@ type_t *type_new_alias(type_t *t, const char *name) return a; } -type_t *type_new_module(const char *name) +type_t *type_new_module(char *name) { - type_t *type = make_type(TYPE_MODULE); + type_t *type = get_type(TYPE_MODULE, name, 0); + if (type->type_type != TYPE_MODULE || type->defined) + error_loc("%s: redefinition error; original definition was at %s:%d\n", + type->name, type->loc_info.input_name, type->loc_info.line_number); type->name = name; - /* FIXME: register type to detect multiple definitions */ return type; } -type_t *type_new_coclass(const char *name) +type_t *type_new_coclass(char *name) { - type_t *c = make_type(TYPE_COCLASS); - c->name = name; - /* FIXME: register type to detect multiple definitions */ - return c; + type_t *type = get_type(TYPE_COCLASS, name, 0); + if (type->type_type != TYPE_COCLASS || type->defined) + error_loc("%s: redefinition error; original definition was at %s:%d\n", + type->name, type->loc_info.input_name, type->loc_info.line_number); + type->name = name; + return type; } diff --git a/tools/widl/typetree.h b/tools/widl/typetree.h index c267e5fa6b4..4c25aa1e16e 100644 --- a/tools/widl/typetree.h +++ b/tools/widl/typetree.h @@ -27,13 +27,13 @@ type_t *type_new_function(var_list_t *args); type_t *type_new_pointer(type_t *ref, attr_list_t *attrs); type_t *type_new_alias(type_t *t, const char *name); -type_t *type_new_module(const char *name); +type_t *type_new_module(char *name); type_t *type_new_array(const char *name, type_t *element, int declptr, unsigned int dim, expr_t *size_is, expr_t *length_is); type_t *type_new_basic(enum type_basic_type basic_type); type_t *type_new_int(enum type_basic_type basic_type, int sign); type_t *type_new_void(void); -type_t *type_new_coclass(const char *name); +type_t *type_new_coclass(char *name); type_t *type_new_enum(const char *name, int defined, var_list_t *enums); type_t *type_new_struct(char *name, int defined, var_list_t *fields); type_t *type_new_nonencapsulated_union(const char *name, int defined, var_list_t *fields);