Support default values for restricted float members (fixes #7217)

This commit is contained in:
Anthony Ramine 2015-08-15 14:00:53 +02:00
parent a1b3f477aa
commit ec2a6b24b1
3 changed files with 15 additions and 14 deletions

View file

@ -97,8 +97,8 @@ numericTags = [
IDLType.Tags.int16, IDLType.Tags.uint16, IDLType.Tags.int16, IDLType.Tags.uint16,
IDLType.Tags.int32, IDLType.Tags.uint32, IDLType.Tags.int32, IDLType.Tags.uint32,
IDLType.Tags.int64, IDLType.Tags.uint64, IDLType.Tags.int64, IDLType.Tags.uint64,
IDLType.Tags.unrestricted_float, IDLType.Tags.float, IDLType.Tags.unrestricted_float,
IDLType.Tags.unrestricted_double, IDLType.Tags.double IDLType.Tags.unrestricted_double
] ]
@ -1056,7 +1056,9 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
defaultStr = "None" defaultStr = "None"
else: else:
tag = defaultValue.type.tag() tag = defaultValue.type.tag()
if tag in numericTags: if tag in [IDLType.Tags.float, IDLType.Tags.double]:
defaultStr = "Finite::wrap(%s)" % defaultValue.value
elif tag in numericTags:
defaultStr = str(defaultValue.value) defaultStr = str(defaultValue.value)
else: else:
assert(tag == IDLType.Tags.bool) assert(tag == IDLType.Tags.bool)

View file

@ -2920,8 +2920,7 @@ class IDLValue(IDLObject):
elif self.type.isInteger() and type.isFloat(): elif self.type.isInteger() and type.isFloat():
# Convert an integer literal into float # Convert an integer literal into float
if -2**24 <= self.value <= 2**24: if -2**24 <= self.value <= 2**24:
floatType = BuiltinTypes[IDLBuiltinType.Types.float] return IDLValue(self.location, type, float(self.value))
return IDLValue(self.location, floatType, float(self.value))
else: else:
raise WebIDLError("Converting value %s to %s will lose precision." % raise WebIDLError("Converting value %s to %s will lose precision." %
(self.value, type), [location]) (self.value, type), [location])
@ -2939,7 +2938,7 @@ class IDLValue(IDLObject):
math.isnan(self.value))): math.isnan(self.value))):
raise WebIDLError("Trying to convert unrestricted value %s to non-unrestricted" raise WebIDLError("Trying to convert unrestricted value %s to non-unrestricted"
% self.value, [location]); % self.value, [location]);
return self return IDLValue(self.location, type, self.value)
elif self.type.isString() and type.isUSVString(): elif self.type.isString() and type.isUSVString():
# Allow USVStrings to use default value just like # Allow USVStrings to use default value just like
# DOMString. No coercion is required in this case as Codegen.py # DOMString. No coercion is required in this case as Codegen.py

View file

@ -39,10 +39,10 @@ dictionary TestDictionaryDefaults {
unsigned long unsignedLongValue = 7; unsigned long unsignedLongValue = 7;
long long longLongValue = 7; long long longLongValue = 7;
unsigned long long unsignedLongLongValue = 7; unsigned long long unsignedLongLongValue = 7;
// unrestricted float unrestrictedFloatValue = 7.0; unrestricted float unrestrictedFloatValue = 7.0;
// float floatValue = 7.0; float floatValue = 7.0;
// unrestricted double UnrestrictedDoubleValue = 7.0; unrestricted double UnrestrictedDoubleValue = 7.0;
// double doubleValue = 7.0; double doubleValue = 7.0;
DOMString stringValue = "foo"; DOMString stringValue = "foo";
USVString usvstringValue = "foo"; USVString usvstringValue = "foo";
TestEnum enumValue = "bar"; TestEnum enumValue = "bar";
@ -57,10 +57,10 @@ dictionary TestDictionaryDefaults {
unsigned long? nullableUnsignedLongValue = 7; unsigned long? nullableUnsignedLongValue = 7;
long long? nullableLongLongValue = 7; long long? nullableLongLongValue = 7;
unsigned long long? nullableUnsignedLongLongValue = 7; unsigned long long? nullableUnsignedLongLongValue = 7;
// unrestricted float? nullableUnrestrictedFloatValue = 7.0; unrestricted float? nullableUnrestrictedFloatValue = 7.0;
// float? nullableFloatValue = 7.0; float? nullableFloatValue = 7.0;
// unrestricted double? nullableUnrestrictedDoubleValue = 7.0; unrestricted double? nullableUnrestrictedDoubleValue = 7.0;
// double? nullableDoubleValue = 7.0; double? nullableDoubleValue = 7.0;
DOMString? nullableStringValue = "foo"; DOMString? nullableStringValue = "foo";
USVString? nullableUsvstringValue = "foo"; USVString? nullableUsvstringValue = "foo";
// TestEnum? nullableEnumValue = "bar"; // TestEnum? nullableEnumValue = "bar";