diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 69 |
1 files changed, 25 insertions, 44 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index df472f718cb..0683774a392 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -275,7 +275,7 @@ class CGMethodCall(CGThing): # The argument at index distinguishingIndex can't possibly # be unset here, because we've already checked that argc is # large enough that we can examine this argument. - template, declType, _, needsRooting = getJSToNativeConversionTemplate( + template, declType, needsRooting = getJSToNativeConversionTemplate( type, descriptor, failureCode="break;", isDefinitelyObject=True) testCode = instantiateJSToNativeConversionTemplate( @@ -400,7 +400,6 @@ def typeNeedsRooting(type, descriptorProvider): def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, isDefinitelyObject=False, isMember=False, - isOptional=False, invalidEnumValueFatal=True, defaultValue=None, treatNullAs="Default", @@ -428,9 +427,6 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, passing true needs to ensure that it is handled correctly in typeIsSequenceOrHasSequenceMember. - If isOptional is true, then we are doing conversion of an optional - argument with no default value. - invalidEnumValueFatal controls whether an invalid enum value conversion attempt will throw (if true) or simply return without doing anything (if false). @@ -459,11 +455,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, 3) A boolean indicating whether the caller has to do optional-argument handling. """ - # If we have a defaultValue then we're not actually optional for - # purposes of what we need to be declared as. - assert(defaultValue is None or not isOptional) - - # Also, we should not have a defaultValue if we know we're an object + # We should not have a defaultValue if we know we're an object assert(not isDefinitelyObject or defaultValue is None) # If exceptionCode is not set, we'll just rethrow the exception we got. @@ -475,18 +467,14 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, needsRooting = typeNeedsRooting(type, descriptorProvider) - def handleOptional(template, declType, isOptional, default): + def handleOptional(template, declType, default): assert (defaultValue is None) == (default is None) - if isOptional: - template = "Some(%s)" % template - declType = CGWrapper(declType, pre="Option<", post=">") - if default is not None: template = CGIfElseWrapper("${haveValue}", CGGeneric(template), CGGeneric(default)).define() - return (template, declType, isOptional, needsRooting) + return (template, declType, needsRooting) # Unfortunately, .capitalize() on a string will lowercase things inside the # string, which we do not want. @@ -568,7 +556,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, " Err(()) => { %s },\n" "}" % exceptionCode) - return handleOptional(templateBody, declType, isOptional, handleDefaultNull("None")) + return handleOptional(templateBody, declType, handleDefaultNull("None")) if type.isGeckoInterface(): assert not isEnforceRange and not isClamp @@ -583,7 +571,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, template = wrapObjectTemplate(conversion, isDefinitelyObject, type, failureCode) - return handleOptional(template, declType, isOptional, handleDefaultNull("None")) + return handleOptional(template, declType, handleDefaultNull("None")) descriptorType = descriptor.memberType if isMember else descriptor.nativeType @@ -613,7 +601,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, templateBody = wrapObjectTemplate(templateBody, isDefinitelyObject, type, failureCode) - return handleOptional(templateBody, declType, isOptional, handleDefaultNull("None")) + return handleOptional(templateBody, declType, handleDefaultNull("None")) if type.isSpiderMonkeyInterface(): raise TypeError("Can't handle SpiderMonkey interface arguments yet") @@ -660,7 +648,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, if type.nullable(): declType = "Option<%s>" % declType - return handleOptional(conversionCode, CGGeneric(declType), isOptional, default) + return handleOptional(conversionCode, CGGeneric(declType), default) if type.isByteString(): assert not isEnforceRange and not isClamp @@ -675,7 +663,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, if type.nullable(): declType = CGWrapper(declType, pre="Option<", post=">") - return handleOptional(conversionCode, declType, isOptional, handleDefaultNull("None")) + return handleOptional(conversionCode, declType, handleDefaultNull("None")) if type.isEnum(): assert not isEnforceRange and not isClamp @@ -707,7 +695,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, else: default = None - return handleOptional(template, CGGeneric(enum), isOptional, default) + return handleOptional(template, CGGeneric(enum), default) if type.isCallback(): assert not isEnforceRange and not isClamp @@ -727,13 +715,13 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, "} else {\n" " ${declName} = NULL;\n" "}" % haveCallable, - CGGeneric("JSObject*"), isOptional, None, needsRooting) + CGGeneric("JSObject*"), None, needsRooting) if type.isAny(): assert not isEnforceRange and not isClamp declType = CGGeneric("JSVal") - return handleOptional("${val}", declType, isOptional, handleDefaultNull("NullValue()")) + return handleOptional("${val}", declType, handleDefaultNull("NullValue()")) if type.isObject(): raise TypeError("Can't handle object arguments yet") @@ -743,9 +731,6 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, raise TypeError("Can't handle dictionaries when failureCode is not None") # There are no nullable dictionaries assert not type.nullable() - # All optional dictionaries always have default values, so we - # should be able to assume not isOptional here. - assert not isOptional typeName = CGDictionary.makeDictionaryName(type.inner) declType = CGGeneric(typeName) @@ -754,13 +739,12 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, " Err(_) => return 0,\n" "}" % typeName) - return handleOptional(template, declType, isOptional, handleDefaultNull("%s::empty()" % typeName)) + return handleOptional(template, declType, handleDefaultNull("%s::empty()" % typeName)) if type.isVoid(): - assert not isOptional # This one only happens for return values, and its easy: Just # ignore the jsval. - return ("", None, False, False) + return ("", None, False) if not type.isPrimitive(): raise TypeError("Need conversion for argument type '%s'" % str(type)) @@ -798,7 +782,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, else: defaultStr = None - return handleOptional(template, declType, isOptional, defaultStr) + return handleOptional(template, declType, defaultStr) def instantiateJSToNativeConversionTemplate(templateBody, replacements, declType, declName, needsRooting): @@ -883,19 +867,19 @@ class CGArgumentConverter(CGThing): if argument.defaultValue: replacementVariables["haveValue"] = condition - template, declType, dealWithOptional, needsRooting = getJSToNativeConversionTemplate( + template, declType, needsRooting = getJSToNativeConversionTemplate( argument.type, descriptorProvider, - isOptional=argument.optional and not argument.defaultValue, invalidEnumValueFatal=invalidEnumValueFatal, defaultValue=argument.defaultValue, treatNullAs=argument.treatNullAs, isEnforceRange=argument.enforceRange, isClamp=argument.clamp) - if dealWithOptional: + if argument.optional and not argument.defaultValue: + declType = CGWrapper(declType, pre="Option<", post=">") template = CGIfElseWrapper(condition, - CGGeneric(template), + CGGeneric("Some(%s)" % template), CGGeneric("None")).define() self.converter = instantiateJSToNativeConversionTemplate( @@ -2693,10 +2677,10 @@ def getUnionTypeTemplateVars(type, descriptorProvider): name = type.name typeName = "/*" + type.name + "*/" - template, _, _, _ = getJSToNativeConversionTemplate( + template, _, _ = getJSToNativeConversionTemplate( type, descriptorProvider, failureCode="return Ok(None);", exceptionCode='return Err(());', - isDefinitelyObject=True, isOptional=False) + isDefinitelyObject=True) assert not type.isObject() jsConversion = string.Template(template).substitute({ @@ -3344,7 +3328,7 @@ class CGProxySpecialOperation(CGPerSignatureCall): if operation.isSetter() or operation.isCreator(): # arguments[0] is the index or name of the item that we're setting. argument = arguments[1] - template, declType, _, needsRooting = getJSToNativeConversionTemplate( + template, declType, needsRooting = getJSToNativeConversionTemplate( argument.type, descriptor, treatNullAs=argument.treatNullAs) templateValues = { "val": "(*desc).value", @@ -3984,7 +3968,6 @@ class CGDictionary(CGThing): getJSToNativeConversionTemplate(member.type, descriptorProvider, isMember=True, - isOptional=(not member.defaultValue), defaultValue=member.defaultValue, failureCode="return Err(());", exceptionCode="return Err(());")) @@ -4074,13 +4057,11 @@ class CGDictionary(CGThing): return "/* uh oh */ %s" % name def getMemberType(self, memberInfo): - (member, (templateBody, declType, dealWithOptional, _)) = memberInfo - if dealWithOptional: - declType = CGWrapper(declType, pre="Optional< ", post=" >") + _, (_, declType, _) = memberInfo return declType.define() def getMemberConversion(self, memberInfo): - (member, (templateBody, declType, dealWithOptional, _)) = memberInfo + member, (templateBody, declType, _) = memberInfo replacements = { "val": "value.unwrap()" } if member.defaultValue: replacements["haveValue"] = "value.is_some()" @@ -4870,7 +4851,7 @@ class CallbackMember(CGNativeMember): isCallbackReturnValue = "JSImpl" else: isCallbackReturnValue = "Callback" - template, declType, _, needsRooting = getJSToNativeConversionTemplate( + template, declType, needsRooting = getJSToNativeConversionTemplate( self.retvalType, self.descriptorProvider, exceptionCode=self.exceptionCode, |