diff --git a/mozilla/xpcom/typelib/xpidl/xpidl.h b/mozilla/xpcom/typelib/xpidl/xpidl.h index 915ad765d40..00cf8566615 100644 --- a/mozilla/xpcom/typelib/xpidl/xpidl.h +++ b/mozilla/xpcom/typelib/xpidl/xpidl.h @@ -37,6 +37,25 @@ #include #endif +/* + * IDL_tree_warning bombs on libIDL version 6.5, and I don't want to not write + * warnings... so I define a versioned one here. Thanks to Mike Shaver for the + * ## idiom, which allows us to pass through varargs calls. + */ +#if !(LIBIDL_MAJOR_VERSION == 0 && LIBIDL_MINOR_VERSION == 6 && \ + LIBIDL_MICRO_VERSION == 5) +/* + * This turns a varargs call to XPIDL_WARNING directly into a varargs call to + * IDL_tree_warning. The only tricky bit is that you must call XPIDL_WARNING + * with extra parens, e.g. XPIDL_WARNING((foo, bar, "sil")) + * + * Probably best removed when we leave 6.5. +*/ +#define XPIDL_WARNING(x) IDL_tree_warning##x +#else +#define XPIDL_WARNING(x) do { } while (0) +#endif + /* * Internal operation flags. */ diff --git a/mozilla/xpcom/typelib/xpidl/xpidl_header.c b/mozilla/xpcom/typelib/xpidl/xpidl_header.c index e5cf0988f01..1a53b1bd068 100644 --- a/mozilla/xpcom/typelib/xpidl/xpidl_header.c +++ b/mozilla/xpcom/typelib/xpidl/xpidl_header.c @@ -221,16 +221,12 @@ interface(TreeState *state) continue; case IDLN_CODEFRAG: -/* IDL_tree_warning crashes in libIDL 0.6.5, sometimes */ -#if !(LIBIDL_MAJOR_VERSION == 0 && LIBIDL_MINOR_VERSION == 6 && \ - LIBIDL_MICRO_VERSION == 5) - IDL_tree_warning(iter, IDL_WARNING1, - "%%{ .. %%} code fragment within interface " - "ignored when generating NS_DECL_IFOO macro; " - "if the code fragment contains method " - "declarations, the macro probably isn't " - "complete."); -#endif + XPIDL_WARNING((iter, IDL_WARNING1, + "%%{ .. %%} code fragment within interface " + "ignored when generating NS_DECL_IFOO macro; " + "if the code fragment contains method " + "declarations, the macro probably isn't " + "complete.")); continue; default: @@ -476,9 +472,9 @@ attr_dcl(TreeState *state) static gboolean do_enum(TreeState *state) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "enums not supported, enum \'%s\' ignored", - IDL_IDENT(IDL_TYPE_ENUM(state->tree).ident).str); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "enums not supported, enum \'%s\' ignored", + IDL_IDENT(IDL_TYPE_ENUM(state->tree).ident).str)); return TRUE; #if 0 IDL_tree enumb = state->tree, iter; @@ -509,9 +505,9 @@ do_const_dcl(TreeState *state) if (!IDL_NODE_UP(IDL_NODE_UP(state->tree)) || IDL_NODE_TYPE(IDL_NODE_UP(IDL_NODE_UP(state->tree))) != IDLN_INTERFACE) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "const decl \'%s\' not inside interface, ignored", - name); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "const decl \'%s\' not inside interface, ignored", + name)); return TRUE; } @@ -530,8 +526,9 @@ do_const_dcl(TreeState *state) fprintf(state->file, "\n enum { %s = %d };\n", name, (int) IDL_INTEGER(dcl->const_exp).value); } else { - IDL_tree_warning(state->tree, IDL_WARNING1, - "const decl \'%s\' was not of type short or long, ignored", name); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "const decl \'%s\' was not of type " + "short or long, ignored", name)); } return TRUE; } @@ -544,8 +541,8 @@ do_typedef(TreeState *state) complex; if (IDL_NODE_TYPE(type) == IDLN_TYPE_SEQUENCE) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "sequences not supported, ignored"); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "sequences not supported, ignored")); } else { state->tree = type; fputs("typedef ", state->file); @@ -741,9 +738,9 @@ codefrag(TreeState *state) { char *desc = IDL_CODEFRAG(state->tree).desc; if (strcmp(desc, "C++")) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "ignoring '%%{%s' escape. " - "(Use '%%{C++' to escape verbatim code.)", desc); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "ignoring '%%{%s' escape. " + "(Use '%%{C++' to escape verbatim code.)", desc)); return TRUE; } diff --git a/mozilla/xpcom/typelib/xpidl/xpidl_java.c b/mozilla/xpcom/typelib/xpidl/xpidl_java.c index a925f16bbab..25eb2665039 100644 --- a/mozilla/xpcom/typelib/xpidl/xpidl_java.c +++ b/mozilla/xpcom/typelib/xpidl/xpidl_java.c @@ -564,9 +564,9 @@ constant_declaration(TreeState *state) IDL_NODE_TYPE(IDL_NODE_UP(IDL_NODE_UP(state->tree))) != IDLN_INTERFACE) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "A constant \"%s\" was declared outside an interface." - " It was ignored.", name); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "A constant \"%s\" was declared outside an interface." + " It was ignored.", name)); return TRUE; } @@ -614,9 +614,9 @@ constant_declaration(TreeState *state) (isshort ? "short" : "int"), name, (int) IDL_INTEGER(declaration->const_exp).value); } else { - IDL_tree_warning(state->tree, IDL_WARNING1, - "A constant \"%s\" was not of type short or long." - " It was ignored.", name); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "A constant \"%s\" was not of type short or long." + " It was ignored.", name)); } return TRUE; @@ -699,9 +699,9 @@ attribute_declaration(TreeState *state) static gboolean enum_declaration(TreeState *state) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "enums not supported, enum \'%s\' ignored", - IDL_IDENT(IDL_TYPE_ENUM(state->tree).ident).str); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "enums not supported, enum \'%s\' ignored", + IDL_IDENT(IDL_TYPE_ENUM(state->tree).ident).str)); return TRUE; } diff --git a/mozilla/xpcom/typelib/xpidl/xpidl_typelib.c b/mozilla/xpcom/typelib/xpidl/xpidl_typelib.c index 5d2a1e09071..32657a8e69c 100644 --- a/mozilla/xpcom/typelib/xpidl/xpidl_typelib.c +++ b/mozilla/xpcom/typelib/xpidl/xpidl_typelib.c @@ -933,9 +933,9 @@ typelib_const_dcl(TreeState *state) if (!IDL_NODE_UP(IDL_NODE_UP(state->tree)) || IDL_NODE_TYPE(IDL_NODE_UP(IDL_NODE_UP(state->tree))) != IDLN_INTERFACE) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "const decl \'%s\' not inside interface, ignored", - name); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "const decl \'%s\' not inside interface, ignored", + name)); return TRUE; } @@ -987,8 +987,8 @@ typelib_const_dcl(TreeState *state) } NEXT_CONST(state)++; } else { - IDL_tree_warning(state->tree, IDL_WARNING1, - "const decl \'%s\' was not of type short or long, ignored", name); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "const decl \'%s\' was not of type short or long, ignored", name)); } return TRUE; @@ -1000,8 +1000,8 @@ typelib_const_dcl(TreeState *state) /* const -> list -> interface */ if (IDL_NODE_TYPE(IDL_NODE_UP(IDL_NODE_UP(state->tree))) != IDLN_INTERFACE) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "const decl not inside interface!\n"); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "const decl not inside interface!\n")); return TRUE; } @@ -1088,9 +1088,9 @@ typelib_const_dcl(TreeState *state) static gboolean typelib_enum(TreeState *state) { - IDL_tree_warning(state->tree, IDL_WARNING1, - "enums not supported, enum \'%s\' ignored", - IDL_IDENT(IDL_TYPE_ENUM(state->tree).ident).str); + XPIDL_WARNING((state->tree, IDL_WARNING1, + "enums not supported, enum \'%s\' ignored", + IDL_IDENT(IDL_TYPE_ENUM(state->tree).ident).str)); return TRUE; }