diff options
Diffstat (limited to 'src/components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 4e0dc3b61f5..9f333ca6e75 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -443,7 +443,6 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, invalidEnumValueFatal=True, defaultValue=None, treatNullAs="Default", - treatUndefinedAs="Default", isEnforceRange=False, isClamp=False, exceptionCode=None, @@ -1058,37 +1057,31 @@ for (uint32_t i = 0; i < length; ++i) { assert not isEnforceRange and not isClamp treatAs = { - "Default": "eStringify", - "EmptyString": "eEmpty", - "Null": "eNull" + "Default": "Default", + "EmptyString": "Empty", } - if type.nullable(): - # For nullable strings null becomes a null string. - treatNullAs = "Null" - # For nullable strings undefined becomes a null string unless - # specified otherwise. - if treatUndefinedAs == "Default": - treatUndefinedAs = "Null" + if treatNullAs not in treatAs: + raise TypeError("We don't support [TreatNullAs=%s]" % treatNullAs) nullBehavior = treatAs[treatNullAs] - if treatUndefinedAs == "Missing": - raise TypeError("We don't support [TreatUndefinedAs=Missing]") - undefinedBehavior = treatAs[treatUndefinedAs] def getConversionCode(varName, isOptional=False): - #XXXjdm support nullBehavior and undefinedBehavior - #conversionCode = ( - # "if (!ConvertJSValueToString(cx, ${val}, ${valPtr}, %s, %s, %s)) {\n" - # " return false;\n" - # "}" % (nullBehavior, undefinedBehavior, varName)) - strval = "Some(strval.unwrap())" + strval = "strval" + if not type.nullable(): + # XXX #1207 Actually pass non-nullable strings to callees. + strval = "Some(%s)" % strval if isOptional: strval = "Some(%s)" % strval + if type.nullable(): + call = "jsval_to_domstring(cx, ${val})" + else: + call = "jsval_to_str(cx, ${val}, %s)" % nullBehavior conversionCode = ( - "let strval = jsval_to_str(cx, ${val});\n" + "let strval = %s;\n" "if strval.is_err() {\n" " return 0;\n" "}\n" - "%s = %s;" % (varName, strval)) + "let strval = strval.unwrap();\n" + "%s = %s;" % (call, varName, strval)) if defaultValue is None: return conversionCode @@ -1456,7 +1449,6 @@ class CGArgumentConverter(CGThing): invalidEnumValueFatal=self.invalidEnumValueFatal, defaultValue=self.argument.defaultValue, treatNullAs=self.argument.treatNullAs, - treatUndefinedAs=self.argument.treatUndefinedAs, isEnforceRange=self.argument.enforceRange, isClamp=self.argument.clamp), self.replacementVariables, @@ -3189,7 +3181,6 @@ class FakeArgument(): self.variadic = False self.defaultValue = None self.treatNullAs = interfaceMember.treatNullAs - self.treatUndefinedAs = interfaceMember.treatUndefinedAs self.enforceRange = False self.clamp = False @@ -4089,8 +4080,7 @@ class CGProxySpecialOperation(CGPerSignatureCall): # arguments[0] is the index or name of the item that we're setting. argument = arguments[1] template = getJSToNativeConversionTemplate(argument.type, descriptor, - treatNullAs=argument.treatNullAs, - treatUndefinedAs=argument.treatUndefinedAs) + treatNullAs=argument.treatNullAs) templateValues = { "declName": argument.identifier.name, "holderName": argument.identifier.name + "_holder", @@ -5692,7 +5682,7 @@ class CGCallbackInterface(CGCallback): class FakeMember(): def __init__(self): - self.treatUndefinedAs = self.treatNullAs = "Default" + self.treatNullAs = "Default" def isStatic(self): return False def isAttr(self): |