fix(if): Support resolving all number types 0 or below as false

This commit is contained in:
Kyle Fuller
2016-11-28 17:23:37 +00:00
parent 6ad609e562
commit 3eb2657a62
2 changed files with 43 additions and 5 deletions

View File

@@ -52,11 +52,7 @@ final class VariableExpression: Expression, CustomStringConvertible {
truthy = !result.isEmpty
} else if let result = result as? Bool {
truthy = result
} else if let result = result as? Int {
truthy = result > 0
} else if let result = result as? Float {
truthy = result > 0
} else if let result = result as? Double {
} else if let value = result, let result = toNumber(value: value) {
truthy = result > 0
} else if result != nil {
truthy = true
@@ -134,3 +130,40 @@ final class AndExpression: Expression, InfixOperator, CustomStringConvertible {
return try rhs.evaluate(context: context)
}
}
func toNumber(value: Any) -> Float80? {
if let value = value as? Float {
return Float80(value)
} else if let value = value as? Double {
return Float80(value)
} else if let value = value as? UInt {
return Float80(value)
} else if let value = value as? Int {
return Float80(value)
} else if let value = value as? Int8 {
return Float80(value)
} else if let value = value as? Int16 {
return Float80(value)
} else if let value = value as? Int32 {
return Float80(value)
} else if let value = value as? Int64 {
return Float80(value)
} else if let value = value as? UInt8 {
return Float80(value)
} else if let value = value as? UInt16 {
return Float80(value)
} else if let value = value as? UInt32 {
return Float80(value)
} else if let value = value as? UInt64 {
return Float80(value)
} else if let value = value as? Float80 {
return value
} else if let value = value as? Float64 {
return Float80(value)
} else if let value = value as? Float32 {
return Float80(value)
}
return nil
}