mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 23:35:34 +00:00
Bug 804738 part 1. Fix codegen for named operations to be consistent about the naming of the string argument. r=peterv
This commit is contained in:
parent
2bceb7136d
commit
f7a97d85d7
@ -564,6 +564,11 @@ DOMInterfaces = {
|
||||
'register': False
|
||||
},
|
||||
|
||||
'TestIndexedGetterAndSetterAndNamedGetterInterface' : {
|
||||
'headerFile': 'TestBindingHeader.h',
|
||||
'register': False
|
||||
},
|
||||
|
||||
'TestIndexedAndNamedGetterInterface' : {
|
||||
'headerFile': 'TestBindingHeader.h',
|
||||
'register': False
|
||||
|
@ -5077,7 +5077,27 @@ class CGProxyIndexedSetter(CGProxySpecialOperation):
|
||||
def __init__(self, descriptor):
|
||||
CGProxySpecialOperation.__init__(self, descriptor, 'IndexedSetter')
|
||||
|
||||
class CGProxyNamedGetter(CGProxySpecialOperation):
|
||||
class CGProxyNamedOperation(CGProxySpecialOperation):
|
||||
"""
|
||||
Class to generate a call to a named operation.
|
||||
"""
|
||||
def __init__(self, descriptor, name):
|
||||
CGProxySpecialOperation.__init__(self, descriptor, name)
|
||||
def define(self):
|
||||
# Our first argument is the id we're getting.
|
||||
argName = self.arguments[0].identifier.name
|
||||
return (("JS::Value nameVal = STRING_TO_JSVAL(JSID_TO_STRING(id));\n"
|
||||
"FakeDependentString %s;\n"
|
||||
"if (!ConvertJSValueToString(cx, nameVal, &nameVal,\n"
|
||||
" eStringify, eStringify, %s)) {\n"
|
||||
" return false;\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"%s* self = UnwrapProxy(proxy);\n" %
|
||||
(argName, argName, self.descriptor.nativeType)) +
|
||||
CGProxySpecialOperation.define(self))
|
||||
|
||||
class CGProxyNamedGetter(CGProxyNamedOperation):
|
||||
"""
|
||||
Class to generate a call to an named getter. If templateValues is not None
|
||||
the returned value will be wrapped with wrapForType using templateValues.
|
||||
@ -5095,7 +5115,7 @@ class CGProxyNamedPresenceChecker(CGProxyNamedGetter):
|
||||
def __init__(self, descriptor):
|
||||
CGProxyNamedGetter.__init__(self, descriptor)
|
||||
|
||||
class CGProxyNamedSetter(CGProxySpecialOperation):
|
||||
class CGProxyNamedSetter(CGProxyNamedOperation):
|
||||
"""
|
||||
Class to generate a call to a named setter.
|
||||
"""
|
||||
@ -5109,7 +5129,7 @@ class CGProxyIndexedDeleter(CGProxySpecialOperation):
|
||||
def __init__(self, descriptor):
|
||||
CGProxySpecialOperation.__init__(self, descriptor, 'IndexedDeleter')
|
||||
|
||||
class CGProxyNamedDeleter(CGProxySpecialOperation):
|
||||
class CGProxyNamedDeleter(CGProxyNamedOperation):
|
||||
"""
|
||||
Class to generate a call to a named deleter.
|
||||
"""
|
||||
@ -5218,16 +5238,8 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(ClassMethod):
|
||||
# properties that shadow prototype properties.
|
||||
namedGet = ("\n" +
|
||||
"if (!set && JSID_IS_STRING(id) && !HasPropertyOnPrototype(cx, proxy, this, id)) {\n" +
|
||||
" JS::Value nameVal = STRING_TO_JSVAL(JSID_TO_STRING(id));\n" +
|
||||
" FakeDependentString name;\n"
|
||||
" if (!ConvertJSValueToString(cx, nameVal, &nameVal,\n" +
|
||||
" eStringify, eStringify, name)) {\n" +
|
||||
" return false;\n" +
|
||||
" }\n" +
|
||||
"\n" +
|
||||
" %s* self = UnwrapProxy(proxy);\n" +
|
||||
CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues)).define() + "\n" +
|
||||
"}\n") % (self.descriptor.nativeType)
|
||||
"}\n")
|
||||
else:
|
||||
namedGet = ""
|
||||
|
||||
@ -5277,31 +5289,16 @@ class CGDOMJSProxyHandler_defineProperty(ClassMethod):
|
||||
if not self.descriptor.operations['NamedCreator'] is namedSetter:
|
||||
raise TypeError("Can't handle creator that's different from the setter")
|
||||
set += ("if (JSID_IS_STRING(id)) {\n" +
|
||||
" JS::Value nameVal = STRING_TO_JSVAL(JSID_TO_STRING(id));\n" +
|
||||
" FakeDependentString name;\n"
|
||||
" if (!ConvertJSValueToString(cx, nameVal, &nameVal,\n" +
|
||||
" eStringify, eStringify, name)) {\n" +
|
||||
" return false;\n" +
|
||||
" }\n" +
|
||||
"\n" +
|
||||
" %s* self = UnwrapProxy(proxy);\n" +
|
||||
CGIndenter(CGProxyNamedSetter(self.descriptor)).define() + "\n" +
|
||||
" return true;\n" +
|
||||
"}\n") % (self.descriptor.nativeType)
|
||||
"}\n")
|
||||
elif self.descriptor.supportsNamedProperties():
|
||||
set += ("if (JSID_IS_STRING(id)) {\n" +
|
||||
" JS::Value nameVal = STRING_TO_JSVAL(JSID_TO_STRING(id));\n" +
|
||||
" FakeDependentString name;\n"
|
||||
" if (!ConvertJSValueToString(cx, nameVal, &nameVal,\n" +
|
||||
" eStringify, eStringify, name)) {\n" +
|
||||
" return false;\n" +
|
||||
" }\n" +
|
||||
" %s* self = UnwrapProxy(proxy);\n" +
|
||||
CGIndenter(CGProxyNamedPresenceChecker(self.descriptor)).define() +
|
||||
" if (found) {\n"
|
||||
" return ThrowErrorMessage(cx, MSG_NO_PROPERTY_SETTER, \"%s\");\n" +
|
||||
" }\n" +
|
||||
"}\n") % (self.descriptor.nativeType, self.descriptor.name)
|
||||
"}\n") % (self.descriptor.name)
|
||||
return set + """return mozilla::dom::DOMProxyHandler::defineProperty(%s);""" % ", ".join(a.name for a in self.args)
|
||||
|
||||
class CGDOMJSProxyHandler_delete(ClassMethod):
|
||||
@ -5359,19 +5356,12 @@ class CGDOMJSProxyHandler_delete(ClassMethod):
|
||||
|
||||
namedBody = getDeleterBody("Named")
|
||||
if namedBody is not None:
|
||||
delete += ("if (JSID_IS_STRING(id) && !HasPropertyOnPrototype(cx, proxy, this, id)) {\n"
|
||||
" jsval nameVal = STRING_TO_JSVAL(JSID_TO_STRING(id));\n" +
|
||||
" FakeDependentString name;\n"
|
||||
" if (!ConvertJSValueToString(cx, nameVal, &nameVal,\n" +
|
||||
" eStringify, eStringify, name)) {\n" +
|
||||
" return false;\n" +
|
||||
" }\n" +
|
||||
" %s* self = UnwrapProxy(proxy);\n" +
|
||||
delete += ("if (JSID_IS_STRING(id) && !HasPropertyOnPrototype(cx, proxy, this, id)) {\n" +
|
||||
CGIndenter(CGGeneric(namedBody)).define() + "\n"
|
||||
" if (found) {\n"
|
||||
" return true;\n"
|
||||
" }\n"
|
||||
"}\n") % self.descriptor.nativeType
|
||||
"}\n")
|
||||
|
||||
delete += "return dom::DOMProxyHandler::delete_(cx, proxy, id, bp);";
|
||||
|
||||
@ -5437,19 +5427,11 @@ class CGDOMJSProxyHandler_hasOwn(ClassMethod):
|
||||
|
||||
if self.descriptor.supportsNamedProperties():
|
||||
named = ("if (JSID_IS_STRING(id) && !HasPropertyOnPrototype(cx, proxy, this, id)) {\n" +
|
||||
" jsval nameVal = STRING_TO_JSVAL(JSID_TO_STRING(id));\n" +
|
||||
" FakeDependentString name;\n"
|
||||
" if (!ConvertJSValueToString(cx, nameVal, &nameVal,\n" +
|
||||
" eStringify, eStringify, name)) {\n" +
|
||||
" return false;\n" +
|
||||
" }\n" +
|
||||
"\n" +
|
||||
" %s* self = UnwrapProxy(proxy);\n" +
|
||||
CGIndenter(CGProxyNamedPresenceChecker(self.descriptor)).define() + "\n" +
|
||||
" *bp = found;\n"
|
||||
" return true;\n"
|
||||
"}\n" +
|
||||
"\n") % (self.descriptor.nativeType)
|
||||
"\n")
|
||||
else:
|
||||
named = ""
|
||||
|
||||
@ -5505,16 +5487,8 @@ if (expando) {
|
||||
|
||||
if self.descriptor.supportsNamedProperties():
|
||||
getNamed = ("if (JSID_IS_STRING(id)) {\n" +
|
||||
" JS::Value nameVal = STRING_TO_JSVAL(JSID_TO_STRING(id));\n" +
|
||||
" FakeDependentString name;\n"
|
||||
" if (!ConvertJSValueToString(cx, nameVal, &nameVal,\n" +
|
||||
" eStringify, eStringify, name)) {\n" +
|
||||
" return false;\n" +
|
||||
" }\n" +
|
||||
"\n" +
|
||||
" %s* self = UnwrapProxy(proxy);\n" +
|
||||
CGIndenter(CGProxyNamedGetter(self.descriptor, templateValues)).define() +
|
||||
"}\n") % (self.descriptor.nativeType)
|
||||
"}\n")
|
||||
else:
|
||||
getNamed = ""
|
||||
|
||||
|
@ -616,6 +616,22 @@ public:
|
||||
void GetSupportedNames(nsTArray<nsString>&);
|
||||
};
|
||||
|
||||
class TestIndexedGetterAndSetterAndNamedGetterInterface : public nsISupports,
|
||||
public nsWrapperCache
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// We need a GetParentObject to make binding codegen happy
|
||||
virtual nsISupports* GetParentObject();
|
||||
|
||||
void NamedGetter(const nsAString&, bool&, nsAString&);
|
||||
void GetSupportedNames(nsTArray<nsString>&);
|
||||
int32_t IndexedGetter(uint32_t, bool&);
|
||||
void IndexedSetter(uint32_t, int32_t);
|
||||
uint32_t Length();
|
||||
};
|
||||
|
||||
class TestIndexedAndNamedGetterInterface : public nsISupports,
|
||||
public nsWrapperCache
|
||||
{
|
||||
|
@ -432,6 +432,12 @@ interface TestNamedGetterInterface {
|
||||
getter DOMString (DOMString name);
|
||||
};
|
||||
|
||||
interface TestIndexedGetterAndSetterAndNamedGetterInterface {
|
||||
getter DOMString (DOMString myName);
|
||||
getter long (unsigned long index);
|
||||
setter creator void (unsigned long index, long arg);
|
||||
};
|
||||
|
||||
interface TestIndexedAndNamedGetterInterface {
|
||||
getter long (unsigned long index);
|
||||
getter DOMString namedItem(DOMString name);
|
||||
@ -444,7 +450,7 @@ interface TestIndexedSetterInterface {
|
||||
};
|
||||
|
||||
interface TestNamedSetterInterface {
|
||||
setter creator void (DOMString name, TestIndexedSetterInterface item);
|
||||
setter creator void (DOMString myName, TestIndexedSetterInterface item);
|
||||
getter TestIndexedSetterInterface (DOMString name);
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user