|
|
|
@ -137,6 +137,7 @@ impl Truthiness for OwnedLiteral {
|
|
|
|
|
match self {
|
|
|
|
|
OwnedLiteral::LString(text) => !text.is_empty(),
|
|
|
|
|
OwnedLiteral::LPositiveInteger(_num) => true,
|
|
|
|
|
OwnedLiteral::LNegativeInteger(_num) => true,
|
|
|
|
|
OwnedLiteral::LFloat(_num) => true,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -147,6 +148,7 @@ impl Renderable for OwnedLiteral {
|
|
|
|
|
match self {
|
|
|
|
|
OwnedLiteral::LString(text) => Ok(text.clone()),
|
|
|
|
|
OwnedLiteral::LPositiveInteger(num) => Ok(num.to_string()),
|
|
|
|
|
OwnedLiteral::LNegativeInteger(num) => Ok(num.to_string()),
|
|
|
|
|
OwnedLiteral::LFloat(num) => Ok(num.to_string()),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -176,31 +178,67 @@ impl CompareContextElement for OwnedLiteral {
|
|
|
|
|
(OwnedLiteral::LString(self_text), OwnedLiteral::LString(other_text)) => {
|
|
|
|
|
self_text == other_text
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LPositiveInteger(self_num),
|
|
|
|
|
OwnedLiteral::LPositiveInteger(other_num),
|
|
|
|
|
) => self_num == other_num,
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LNegativeInteger(self_num),
|
|
|
|
|
OwnedLiteral::LNegativeInteger(other_num),
|
|
|
|
|
) => self_num == other_num,
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
self_num == other_num
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LPositiveInteger(self_num), OwnedLiteral::LString(other_text)) => {
|
|
|
|
|
&self_num.to_string() == other_text
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LString(self_text), OwnedLiteral::LPositiveInteger(other_num)) => {
|
|
|
|
|
self_text == &other_num.to_string()
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LNegativeInteger(self_num), OwnedLiteral::LString(other_text)) => {
|
|
|
|
|
&self_num.to_string() == other_text
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LString(self_text), OwnedLiteral::LNegativeInteger(other_num)) => {
|
|
|
|
|
self_text == &other_num.to_string()
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LString(other_text)) => {
|
|
|
|
|
&self_num.to_string() == other_text
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LString(self_text), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
self_text == &other_num.to_string()
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LPositiveInteger(self_num),
|
|
|
|
|
OwnedLiteral::LPositiveInteger(other_num),
|
|
|
|
|
) => self_num == other_num,
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
self_num == other_num
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LPositiveInteger(other_num)) => {
|
|
|
|
|
*self_num == (*other_num as f64)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LPositiveInteger(self_num), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
(*self_num as f64) == *other_num
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LNegativeInteger(other_num)) => {
|
|
|
|
|
*self_num == (*other_num as f64)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LNegativeInteger(self_num), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
(*self_num as f64) == *other_num
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LPositiveInteger(self_num),
|
|
|
|
|
OwnedLiteral::LNegativeInteger(other_num),
|
|
|
|
|
) => {
|
|
|
|
|
if *self_num < std::i64::MAX as u64 {
|
|
|
|
|
(*self_num as i64) == *other_num
|
|
|
|
|
} else {
|
|
|
|
|
false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LNegativeInteger(self_num),
|
|
|
|
|
OwnedLiteral::LPositiveInteger(other_num),
|
|
|
|
|
) => {
|
|
|
|
|
if *other_num < std::i64::MAX as u64 {
|
|
|
|
|
*self_num == (*other_num as i64)
|
|
|
|
|
} else {
|
|
|
|
|
false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -223,31 +261,67 @@ impl CompareContextElement for OwnedLiteral {
|
|
|
|
|
(OwnedLiteral::LString(self_text), OwnedLiteral::LString(other_text)) => {
|
|
|
|
|
self_text.partial_cmp(other_text)
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LPositiveInteger(self_num),
|
|
|
|
|
OwnedLiteral::LPositiveInteger(other_num),
|
|
|
|
|
) => self_num.partial_cmp(other_num),
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LNegativeInteger(self_num),
|
|
|
|
|
OwnedLiteral::LNegativeInteger(other_num),
|
|
|
|
|
) => self_num.partial_cmp(other_num),
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
self_num.partial_cmp(other_num)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LPositiveInteger(self_num), OwnedLiteral::LString(other_text)) => {
|
|
|
|
|
self_num.to_string().partial_cmp(other_text)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LString(self_text), OwnedLiteral::LPositiveInteger(other_num)) => {
|
|
|
|
|
self_text.partial_cmp(&other_num.to_string())
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LNegativeInteger(self_num), OwnedLiteral::LString(other_text)) => {
|
|
|
|
|
self_num.to_string().partial_cmp(other_text)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LString(self_text), OwnedLiteral::LNegativeInteger(other_num)) => {
|
|
|
|
|
self_text.partial_cmp(&other_num.to_string())
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LString(other_text)) => {
|
|
|
|
|
self_num.to_string().partial_cmp(other_text)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LString(self_text), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
self_text.partial_cmp(&other_num.to_string())
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LPositiveInteger(self_num),
|
|
|
|
|
OwnedLiteral::LPositiveInteger(other_num),
|
|
|
|
|
) => self_num.partial_cmp(other_num),
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
self_num.partial_cmp(other_num)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LPositiveInteger(self_num), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
(*self_num as f64).partial_cmp(other_num)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LPositiveInteger(other_num)) => {
|
|
|
|
|
self_num.partial_cmp(&(*other_num as f64))
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LNegativeInteger(self_num), OwnedLiteral::LFloat(other_num)) => {
|
|
|
|
|
(*self_num as f64).partial_cmp(other_num)
|
|
|
|
|
}
|
|
|
|
|
(OwnedLiteral::LFloat(self_num), OwnedLiteral::LNegativeInteger(other_num)) => {
|
|
|
|
|
self_num.partial_cmp(&(*other_num as f64))
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LPositiveInteger(self_num),
|
|
|
|
|
OwnedLiteral::LNegativeInteger(other_num),
|
|
|
|
|
) => {
|
|
|
|
|
if *self_num < std::i64::MAX as u64 {
|
|
|
|
|
(*self_num as i64).partial_cmp(other_num)
|
|
|
|
|
} else {
|
|
|
|
|
Some(Ordering::Greater)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
OwnedLiteral::LNegativeInteger(self_num),
|
|
|
|
|
OwnedLiteral::LPositiveInteger(other_num),
|
|
|
|
|
) => {
|
|
|
|
|
if *other_num < std::i64::MAX as u64 {
|
|
|
|
|
self_num.partial_cmp(&(*other_num as i64))
|
|
|
|
|
} else {
|
|
|
|
|
Some(Ordering::Less)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|