зеркало из https://github.com/mozilla/pjs.git
Bug 397929 - Windows macro names kill kittens, maim babies, and introduce naming conflicts. Add an XPIDL annotation allowing the C++ method name for a method in an interface to either not be the method name, capitalized, or to not be [GS]et plus the attribute name, capitalized. This patch makes window.postMessage happy as PostMessageMoz; other APIs will need followup checkins. r=bsmedberg, a=schrep
This commit is contained in:
Родитель
84079ff4e0
Коммит
4751b5362a
|
@ -44,13 +44,6 @@ interface nsIControllers;
|
||||||
interface nsIDOMLocation;
|
interface nsIDOMLocation;
|
||||||
interface nsIVariant;
|
interface nsIVariant;
|
||||||
|
|
||||||
%{C++
|
|
||||||
/* I hate you, Windows. */
|
|
||||||
#ifdef PostMessage
|
|
||||||
#undef PostMessage
|
|
||||||
#endif
|
|
||||||
%}
|
|
||||||
|
|
||||||
[scriptable, uuid(86f7b733-aff9-469a-9e8c-2996f7db2720)]
|
[scriptable, uuid(86f7b733-aff9-469a-9e8c-2996f7db2720)]
|
||||||
interface nsIDOMWindowInternal : nsIDOMWindow2
|
interface nsIDOMWindowInternal : nsIDOMWindow2
|
||||||
{
|
{
|
||||||
|
@ -221,5 +214,5 @@ interface nsIDOMWindowInternal : nsIDOMWindow2
|
||||||
*
|
*
|
||||||
* See the WHATWG HTML5 specification, section 6.4, for more details.
|
* See the WHATWG HTML5 specification, section 6.4, for more details.
|
||||||
*/
|
*/
|
||||||
void postMessage(in DOMString message);
|
[binaryname(PostMessageMoz)] void postMessage(in DOMString message);
|
||||||
};
|
};
|
||||||
|
|
|
@ -5046,15 +5046,10 @@ nsGlobalWindow::CallerInnerWindow()
|
||||||
return static_cast<nsGlobalWindow*>(win.get());
|
return static_cast<nsGlobalWindow*>(win.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* I hate you, Windows. */
|
|
||||||
#ifdef PostMessage
|
|
||||||
#undef PostMessage
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsGlobalWindow::PostMessage(const nsAString& aMessage)
|
nsGlobalWindow::PostMessageMoz(const nsAString& aMessage)
|
||||||
{
|
{
|
||||||
FORWARD_TO_INNER_CREATE(PostMessage, (aMessage));
|
FORWARD_TO_INNER_CREATE(PostMessageMoz, (aMessage));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Window.postMessage is an intentional subversion of the same-origin policy.
|
// Window.postMessage is an intentional subversion of the same-origin policy.
|
||||||
|
|
|
@ -98,11 +98,6 @@
|
||||||
#include "nsPIDOMEventTarget.h"
|
#include "nsPIDOMEventTarget.h"
|
||||||
#include "nsIArray.h"
|
#include "nsIArray.h"
|
||||||
|
|
||||||
/* I hate you, Windows. */
|
|
||||||
#ifdef PostMessage
|
|
||||||
#undef PostMessage
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DEFAULT_HOME_PAGE "www.mozilla.org"
|
#define DEFAULT_HOME_PAGE "www.mozilla.org"
|
||||||
#define PREF_BROWSER_STARTUP_HOMEPAGE "browser.startup.homepage"
|
#define PREF_BROWSER_STARTUP_HOMEPAGE "browser.startup.homepage"
|
||||||
|
|
||||||
|
|
|
@ -733,6 +733,7 @@ write_type(IDL_tree type_tree, gboolean is_out, FILE *outfile)
|
||||||
#define ATTR_IDENT(tree) (IDL_IDENT(IDL_LIST(IDL_ATTR_DCL(tree).simple_declarations).data))
|
#define ATTR_IDENT(tree) (IDL_IDENT(IDL_LIST(IDL_ATTR_DCL(tree).simple_declarations).data))
|
||||||
#define ATTR_TYPE_DECL(tree) (IDL_ATTR_DCL(tree).param_type_spec)
|
#define ATTR_TYPE_DECL(tree) (IDL_ATTR_DCL(tree).param_type_spec)
|
||||||
#define ATTR_TYPE(tree) (IDL_NODE_TYPE(ATTR_TYPE_DECL(tree)))
|
#define ATTR_TYPE(tree) (IDL_NODE_TYPE(ATTR_TYPE_DECL(tree)))
|
||||||
|
#define ATTR_DECLS(tree) (IDL_LIST(IDL_ATTR_DCL(tree).simple_declarations).data)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AS_DECL writes 'NS_IMETHOD foo(string bar, long sil)'
|
* AS_DECL writes 'NS_IMETHOD foo(string bar, long sil)'
|
||||||
|
@ -744,15 +745,24 @@ write_attr_accessor(IDL_tree attr_tree, FILE * outfile,
|
||||||
gboolean getter, int mode, const char *className)
|
gboolean getter, int mode, const char *className)
|
||||||
{
|
{
|
||||||
char *attrname = ATTR_IDENT(attr_tree).str;
|
char *attrname = ATTR_IDENT(attr_tree).str;
|
||||||
|
const char *binaryname;
|
||||||
|
|
||||||
if (mode == AS_DECL) {
|
if (mode == AS_DECL) {
|
||||||
fputs("NS_IMETHOD ", outfile);
|
fputs("NS_IMETHOD ", outfile);
|
||||||
} else if (mode == AS_IMPL) {
|
} else if (mode == AS_IMPL) {
|
||||||
fprintf(outfile, "NS_IMETHODIMP %s::", className);
|
fprintf(outfile, "NS_IMETHODIMP %s::", className);
|
||||||
}
|
}
|
||||||
fprintf(outfile, "%cet%c%s(",
|
fprintf(outfile, "%cet",
|
||||||
getter ? 'G' : 'S',
|
getter ? 'G' : 'S');
|
||||||
toupper(*attrname), attrname + 1);
|
binaryname = IDL_tree_property_get(ATTR_DECLS(attr_tree), "binaryname");
|
||||||
|
if (binaryname) {
|
||||||
|
fprintf(outfile, "%s(",
|
||||||
|
binaryname);
|
||||||
|
} else {
|
||||||
|
fprintf(outfile, "%c%s(",
|
||||||
|
toupper(*attrname),
|
||||||
|
attrname + 1);
|
||||||
|
}
|
||||||
if (mode == AS_DECL || mode == AS_IMPL) {
|
if (mode == AS_DECL || mode == AS_IMPL) {
|
||||||
/* Setters for string, wstring, nsid, domstring, utf8string,
|
/* Setters for string, wstring, nsid, domstring, utf8string,
|
||||||
* cstring and astring get const.
|
* cstring and astring get const.
|
||||||
|
@ -1009,6 +1019,7 @@ write_method_signature(IDL_tree method_tree, FILE *outfile, int mode,
|
||||||
gboolean op_notxpcom =
|
gboolean op_notxpcom =
|
||||||
(IDL_tree_property_get(op->ident, "notxpcom") != NULL);
|
(IDL_tree_property_get(op->ident, "notxpcom") != NULL);
|
||||||
const char *name;
|
const char *name;
|
||||||
|
const char *binaryname;
|
||||||
IDL_tree iter;
|
IDL_tree iter;
|
||||||
|
|
||||||
if (mode == AS_DECL) {
|
if (mode == AS_DECL) {
|
||||||
|
@ -1035,7 +1046,11 @@ write_method_signature(IDL_tree method_tree, FILE *outfile, int mode,
|
||||||
}
|
}
|
||||||
name = IDL_IDENT(op->ident).str;
|
name = IDL_IDENT(op->ident).str;
|
||||||
if (mode == AS_IMPL) {
|
if (mode == AS_IMPL) {
|
||||||
fprintf(outfile, "%s::%c%s(", className, toupper(*name), name + 1);
|
fprintf(outfile, "%s::", className);
|
||||||
|
}
|
||||||
|
binaryname = IDL_tree_property_get(op->ident, "binaryname");
|
||||||
|
if (binaryname) {
|
||||||
|
fprintf(outfile, "%s(", binaryname);
|
||||||
} else {
|
} else {
|
||||||
fprintf(outfile, "%c%s(", toupper(*name), name + 1);
|
fprintf(outfile, "%c%s(", toupper(*name), name + 1);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче