Rob Shearman : widl: Add coclass and module types to the global namespace.

Alexandre Julliard julliard at winehq.org
Fri Mar 6 09:49:28 CST 2009


Module: wine
Branch: master
Commit: 9d878f220b234f195732d077cd5157ff5a31f9c4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9d878f220b234f195732d077cd5157ff5a31f9c4

Author: Rob Shearman <robertshearman at gmail.com>
Date:   Thu Mar  5 08:23:07 2009 +0000

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 f589353..3b38278 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 c267e5f..4c25aa1 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);




More information about the wine-cvs mailing list