servo: Merge #1895 - Remove support for returning values through outparams (from Ms2ger:outparams); r=jdm

Source-Repo: https://github.com/servo/servo
Source-Revision: 3933d17262de06458e1d79217d5a7810c4154611
This commit is contained in:
Ms2ger 2014-03-13 07:13:35 -04:00
Родитель 934ba083f0
Коммит 318a35fbf5
1 изменённых файлов: 12 добавлений и 19 удалений

Просмотреть файл

@ -1225,36 +1225,36 @@ def memberIsCreator(member):
def getRetvalDeclarationForType(returnType, descriptorProvider):
if returnType is None or returnType.isVoid():
# Nothing to declare
return None, False
return None
if returnType.isPrimitive() and returnType.tag() in builtinNames:
result = CGGeneric(builtinNames[returnType.tag()])
if returnType.nullable():
result = CGWrapper(result, pre="Option<", post=">")
return result, False
return result
if returnType.isString():
result = CGGeneric("DOMString")
if returnType.nullable():
result = CGWrapper(result, pre="Option<", post=">")
return result, False
return result
if returnType.isEnum():
if returnType.nullable():
raise TypeError("We don't support nullable enum return values")
return CGGeneric(returnType.inner.identifier.name), False
return CGGeneric(returnType.inner.identifier.name)
if returnType.isGeckoInterface():
descriptor = descriptorProvider.getDescriptor(
returnType.unroll().inner.identifier.name)
result = CGGeneric(descriptor.nativeType)
if returnType.nullable():
result = CGWrapper(result, pre="Option<", post=">")
return result, False
return result
if returnType.isCallback():
# XXXbz we're going to assume that callback types are always
# nullable for now.
return CGGeneric("*JSObject"), False
return CGGeneric("*JSObject")
if returnType.isAny():
return CGGeneric("JSVal"), False
return CGGeneric("JSVal")
if returnType.isObject() or returnType.isSpiderMonkeyInterface():
return CGGeneric("*JSObject"), False
return CGGeneric("*JSObject")
if returnType.isSequence():
raise TypeError("We don't support sequence return values")
@ -2420,8 +2420,7 @@ class CGCallGenerator(CGThing):
isFallible = errorReport is not None
(result, resultOutParam) = getRetvalDeclarationForType(returnType,
descriptorProvider)
result = getRetvalDeclarationForType(returnType, descriptorProvider)
args = CGList([CGGeneric(arg) for arg in argsPre], ", ")
for (a, name) in arguments:
@ -2437,10 +2436,6 @@ class CGCallGenerator(CGThing):
name = "&" + name
args.append(CGGeneric(name))
# Return values that go in outparams go here
if resultOutParam:
args.append(CGGeneric("result"))
needsCx = (typeNeedsCx(returnType, True) or
any(typeNeedsCx(a.type) for (a, _) in arguments))
@ -2467,7 +2462,7 @@ class CGCallGenerator(CGThing):
if isFallible:
call = CGWrapper(call, pre="result_fallible = ")
elif result is not None and not resultOutParam:
elif result is not None:
call = CGWrapper(call, pre="result = ")
call = CGWrapper(call)
@ -2477,7 +2472,7 @@ class CGCallGenerator(CGThing):
self.cgRoot.append(CGGeneric("if (result_fallible.is_err()) {"))
self.cgRoot.append(CGIndenter(errorReport))
self.cgRoot.append(CGGeneric("}"))
if result is not None and not resultOutParam:
if result is not None:
self.cgRoot.append(CGGeneric("result = result_fallible.unwrap();"))
def define(self):
@ -2790,8 +2785,6 @@ class CGSpecializedGetter(CGAbstractExternMethod):
nativeName = MakeNativeName(name)
extraPre = ''
argsPre = []
(_, resultOutParam) = getRetvalDeclarationForType(self.attr.type,
self.descriptor)
infallible = ('infallible' in
self.descriptor.getExtendedAttributes(self.attr,
getter=True))
@ -2799,7 +2792,7 @@ class CGSpecializedGetter(CGAbstractExternMethod):
abstractName = re.sub(r'<\w+>', '', self.descriptor.nativeType)
extraPre = ' let mut abstract_this = %s::from_box(this);\n' % abstractName
argsPre = ['&mut abstract_this']
if resultOutParam or self.attr.type.nullable() or not infallible:
if self.attr.type.nullable() or not infallible:
nativeName = "Get" + nativeName
return CGWrapper(CGIndenter(CGGetterCall(argsPre, self.attr.type, nativeName,
self.descriptor, self.attr)),