зеркало из https://github.com/mozilla/gecko-dev.git
Bug 949078. Provide information about which return value we're talking about when throwing a conversion failure exception for the return value of a call into a WebIDL callback. r=peterv
This commit is contained in:
Родитель
3073fb27e4
Коммит
f687511020
|
@ -10928,13 +10928,13 @@ class CallbackMember(CGNativeMember):
|
||||||
isCallbackReturnValue = "JSImpl"
|
isCallbackReturnValue = "JSImpl"
|
||||||
else:
|
else:
|
||||||
isCallbackReturnValue = "Callback"
|
isCallbackReturnValue = "Callback"
|
||||||
|
sourceDescription = "return value of %s" % self.getPrettyName()
|
||||||
convertType = instantiateJSToNativeConversion(
|
convertType = instantiateJSToNativeConversion(
|
||||||
getJSToNativeConversionInfo(self.retvalType,
|
getJSToNativeConversionInfo(self.retvalType,
|
||||||
self.descriptorProvider,
|
self.descriptorProvider,
|
||||||
exceptionCode=self.exceptionCode,
|
exceptionCode=self.exceptionCode,
|
||||||
isCallbackReturnValue=isCallbackReturnValue,
|
isCallbackReturnValue=isCallbackReturnValue,
|
||||||
# XXXbz we should try to do better here
|
sourceDescription=sourceDescription),
|
||||||
sourceDescription="return value"),
|
|
||||||
replacements)
|
replacements)
|
||||||
assignRetval = string.Template(
|
assignRetval = string.Template(
|
||||||
self.getRetvalInfo(self.retvalType,
|
self.getRetvalInfo(self.retvalType,
|
||||||
|
@ -11104,6 +11104,7 @@ class CallbackMethod(CallbackMember):
|
||||||
|
|
||||||
class CallCallback(CallbackMethod):
|
class CallCallback(CallbackMethod):
|
||||||
def __init__(self, callback, descriptorProvider):
|
def __init__(self, callback, descriptorProvider):
|
||||||
|
self.callback = callback
|
||||||
CallbackMethod.__init__(self, callback.signatures()[0], "Call",
|
CallbackMethod.__init__(self, callback.signatures()[0], "Call",
|
||||||
descriptorProvider, needThisHandling=True)
|
descriptorProvider, needThisHandling=True)
|
||||||
|
|
||||||
|
@ -11113,6 +11114,9 @@ class CallCallback(CallbackMethod):
|
||||||
def getCallableDecl(self):
|
def getCallableDecl(self):
|
||||||
return "JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));\n"
|
return "JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));\n"
|
||||||
|
|
||||||
|
def getPrettyName(self):
|
||||||
|
return self.callback.identifier.name
|
||||||
|
|
||||||
class CallbackOperationBase(CallbackMethod):
|
class CallbackOperationBase(CallbackMethod):
|
||||||
"""
|
"""
|
||||||
Common class for implementing various callback operations.
|
Common class for implementing various callback operations.
|
||||||
|
@ -11157,23 +11161,39 @@ class CallbackOperation(CallbackOperationBase):
|
||||||
"""
|
"""
|
||||||
def __init__(self, method, signature, descriptor):
|
def __init__(self, method, signature, descriptor):
|
||||||
self.ensureASCIIName(method)
|
self.ensureASCIIName(method)
|
||||||
|
self.method = method
|
||||||
jsName = method.identifier.name
|
jsName = method.identifier.name
|
||||||
CallbackOperationBase.__init__(self, signature,
|
CallbackOperationBase.__init__(self, signature,
|
||||||
jsName, MakeNativeName(jsName),
|
jsName, MakeNativeName(jsName),
|
||||||
descriptor, descriptor.interface.isSingleOperationInterface(),
|
descriptor, descriptor.interface.isSingleOperationInterface(),
|
||||||
rethrowContentException=descriptor.interface.isJSImplemented())
|
rethrowContentException=descriptor.interface.isJSImplemented())
|
||||||
|
|
||||||
class CallbackGetter(CallbackMember):
|
def getPrettyName(self):
|
||||||
def __init__(self, attr, descriptor):
|
return "%s.%s" % (self.descriptorProvider.interface.identifier.name,
|
||||||
|
self.method.identifier.name)
|
||||||
|
|
||||||
|
class CallbackAccessor(CallbackMember):
|
||||||
|
"""
|
||||||
|
Shared superclass for CallbackGetter and CallbackSetter.
|
||||||
|
"""
|
||||||
|
def __init__(self, attr, sig, name, descriptor):
|
||||||
self.ensureASCIIName(attr)
|
self.ensureASCIIName(attr)
|
||||||
self.attrName = attr.identifier.name
|
self.attrName = attr.identifier.name
|
||||||
CallbackMember.__init__(self,
|
CallbackMember.__init__(self, sig, name, descriptor,
|
||||||
(attr.type, []),
|
|
||||||
callbackGetterName(attr),
|
|
||||||
descriptor,
|
|
||||||
needThisHandling=False,
|
needThisHandling=False,
|
||||||
rethrowContentException=descriptor.interface.isJSImplemented())
|
rethrowContentException=descriptor.interface.isJSImplemented())
|
||||||
|
|
||||||
|
def getPrettyName(self):
|
||||||
|
return "%s.%s" % (self.descriptorProvider.interface.identifier.name,
|
||||||
|
self.attrName)
|
||||||
|
|
||||||
|
class CallbackGetter(CallbackAccessor):
|
||||||
|
def __init__(self, attr, descriptor):
|
||||||
|
CallbackAccessor.__init__(self, attr,
|
||||||
|
(attr.type, []),
|
||||||
|
callbackGetterName(attr),
|
||||||
|
descriptor)
|
||||||
|
|
||||||
def getRvalDecl(self):
|
def getRvalDecl(self):
|
||||||
return "JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());\n"
|
return "JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());\n"
|
||||||
|
|
||||||
|
@ -11188,17 +11208,13 @@ class CallbackGetter(CallbackMember):
|
||||||
' return${errorReturn};\n'
|
' return${errorReturn};\n'
|
||||||
'}\n').substitute(replacements);
|
'}\n').substitute(replacements);
|
||||||
|
|
||||||
class CallbackSetter(CallbackMember):
|
class CallbackSetter(CallbackAccessor):
|
||||||
def __init__(self, attr, descriptor):
|
def __init__(self, attr, descriptor):
|
||||||
self.ensureASCIIName(attr)
|
CallbackAccessor.__init__(self, attr,
|
||||||
self.attrName = attr.identifier.name
|
(BuiltinTypes[IDLBuiltinType.Types.void],
|
||||||
CallbackMember.__init__(self,
|
[FakeArgument(attr.type, attr)]),
|
||||||
(BuiltinTypes[IDLBuiltinType.Types.void],
|
callbackSetterName(attr),
|
||||||
[FakeArgument(attr.type, attr)]),
|
descriptor)
|
||||||
callbackSetterName(attr),
|
|
||||||
descriptor,
|
|
||||||
needThisHandling=False,
|
|
||||||
rethrowContentException=descriptor.interface.isJSImplemented())
|
|
||||||
|
|
||||||
def getRvalDecl(self):
|
def getRvalDecl(self):
|
||||||
# We don't need an rval
|
# We don't need an rval
|
||||||
|
@ -11229,6 +11245,9 @@ class CGJSImplInitOperation(CallbackOperationBase):
|
||||||
CallbackOperationBase.__init__(self, (BuiltinTypes[IDLBuiltinType.Types.void], sig[1]),
|
CallbackOperationBase.__init__(self, (BuiltinTypes[IDLBuiltinType.Types.void], sig[1]),
|
||||||
"__init", "__Init", descriptor, False, True)
|
"__init", "__Init", descriptor, False, True)
|
||||||
|
|
||||||
|
def getPrettyName(self):
|
||||||
|
return "__init"
|
||||||
|
|
||||||
class GlobalGenRoots():
|
class GlobalGenRoots():
|
||||||
"""
|
"""
|
||||||
Roots for global codegen.
|
Roots for global codegen.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче