aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen
diff options
context:
space:
mode:
authorImanol Fernandez <mortimergoro@gmail.com>2017-10-24 18:44:18 +0200
committerImanol Fernandez <mortimergoro@gmail.com>2017-10-25 12:56:39 +0200
commit3ed5899a64e2e386b3ed94954c5d41048c02335b (patch)
treeccb73862ad1a20037fd72c3b2ee26dbcd9c7ba4f /components/script/dom/bindings/codegen
parent2bcb3b4ca999b626511019161a1b7dbe548b0105 (diff)
downloadservo-3ed5899a64e2e386b3ed94954c5d41048c02335b.tar.gz
servo-3ed5899a64e2e386b3ed94954c5d41048c02335b.zip
Fix Const IDL value compilation errors in codegen
Diffstat (limited to 'components/script/dom/bindings/codegen')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 3251290f398..b7438e6be0a 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -1198,12 +1198,12 @@ def convertConstIDLValueToJSVal(value):
if tag == IDLType.Tags.uint32:
return "ConstantVal::UintVal(%s)" % (value.value)
if tag in [IDLType.Tags.int64, IDLType.Tags.uint64]:
- return "ConstantVal::DoubleVal(%s)" % (value.value)
+ return "ConstantVal::DoubleVal(%s as f64)" % (value.value)
if tag == IDLType.Tags.bool:
return "ConstantVal::BoolVal(true)" if value.value else "ConstantVal::BoolVal(false)"
if tag in [IDLType.Tags.unrestricted_float, IDLType.Tags.float,
IDLType.Tags.unrestricted_double, IDLType.Tags.double]:
- return "ConstantVal::DoubleVal(%s)" % (value.value)
+ return "ConstantVal::DoubleVal(%s as f64)" % (value.value)
raise TypeError("Const value of unhandled type: " + value.type)
@@ -4077,7 +4077,17 @@ class CGConstant(CGThing):
def define(self):
name = self.constant.identifier.name
value = convertConstIDLValueToRust(self.constant.value)
- return "pub const %s: %s = %s;\n" % (name, builtinNames[self.constant.value.type.tag()], value)
+
+ tag = self.constant.value.type.tag()
+ const_type = builtinNames[self.constant.value.type.tag()]
+ # Finite<f32> or Finite<f64> cannot be used un a constant declaration.
+ # Remote the Finite type from restricted float and double tag declarations.
+ if tag == IDLType.Tags.float:
+ const_type = "f32"
+ elif tag == IDLType.Tags.double:
+ const_type = "f64"
+
+ return "pub const %s: %s = %s;\n" % (name, const_type, value)
def getUnionTypeTemplateVars(type, descriptorProvider):