Avoid code duplication for common Value trait implementations, r=ncalexan
Signed-off-by: Victor Porof <victor.porof@gmail.com>
This commit is contained in:
parent
1b26e23d02
commit
0d3b8e4b29
1 changed files with 27 additions and 42 deletions
|
@ -224,7 +224,7 @@ macro_rules! to_keyword {
|
||||||
/// Implements multiple is*, as*, into* and from* methods common to
|
/// Implements multiple is*, as*, into* and from* methods common to
|
||||||
/// both Value and SpannedValue.
|
/// both Value and SpannedValue.
|
||||||
macro_rules! def_common_value_methods {
|
macro_rules! def_common_value_methods {
|
||||||
( $t:tt, $tchild:tt ) => {
|
( $t:tt<$tchild:tt> ) => {
|
||||||
def_is!(is_nil, $t::Nil);
|
def_is!(is_nil, $t::Nil);
|
||||||
def_is!(is_boolean, $t::Boolean(_));
|
def_is!(is_boolean, $t::Boolean(_));
|
||||||
def_is!(is_integer, $t::Integer(_));
|
def_is!(is_integer, $t::Integer(_));
|
||||||
|
@ -394,13 +394,34 @@ macro_rules! def_common_value_display {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Value {
|
macro_rules! def_common_value_impl {
|
||||||
def_common_value_methods!(Value, Value);
|
( $t:tt<$tchild:tt> ) => {
|
||||||
|
impl $t {
|
||||||
|
def_common_value_methods!($t<$tchild>);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SpannedValue {
|
impl PartialOrd for $t {
|
||||||
def_common_value_methods!(SpannedValue, ValueAndSpan);
|
fn partial_cmp(&self, other: &$t) -> Option<Ordering> {
|
||||||
|
Some(self.cmp(other))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Ord for $t {
|
||||||
|
fn cmp(&self, other: &$t) -> Ordering {
|
||||||
|
def_common_value_ord!($t, self, other)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for $t {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> ::std::fmt::Result {
|
||||||
|
def_common_value_display!($t, self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def_common_value_impl!(Value<Value>);
|
||||||
|
def_common_value_impl!(SpannedValue<ValueAndSpan>);
|
||||||
|
|
||||||
impl ValueAndSpan {
|
impl ValueAndSpan {
|
||||||
pub fn without_spans(self) -> Value {
|
pub fn without_spans(self) -> Value {
|
||||||
|
@ -408,54 +429,18 @@ impl ValueAndSpan {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PartialOrd for Value {
|
|
||||||
fn partial_cmp(&self, other: &Value) -> Option<Ordering> {
|
|
||||||
Some(self.cmp(other))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PartialOrd for SpannedValue {
|
|
||||||
fn partial_cmp(&self, other: &SpannedValue) -> Option<Ordering> {
|
|
||||||
Some(self.cmp(other))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PartialOrd for ValueAndSpan {
|
impl PartialOrd for ValueAndSpan {
|
||||||
fn partial_cmp(&self, other: &ValueAndSpan) -> Option<Ordering> {
|
fn partial_cmp(&self, other: &ValueAndSpan) -> Option<Ordering> {
|
||||||
Some(self.cmp(other))
|
Some(self.cmp(other))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Ord for Value {
|
|
||||||
fn cmp(&self, other: &Value) -> Ordering {
|
|
||||||
def_common_value_ord!(Value, self, other)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Ord for SpannedValue {
|
|
||||||
fn cmp(&self, other: &SpannedValue) -> Ordering {
|
|
||||||
def_common_value_ord!(SpannedValue, self, other)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Ord for ValueAndSpan {
|
impl Ord for ValueAndSpan {
|
||||||
fn cmp(&self, other: &ValueAndSpan) -> Ordering {
|
fn cmp(&self, other: &ValueAndSpan) -> Ordering {
|
||||||
self.inner.cmp(&other.inner)
|
self.inner.cmp(&other.inner)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display for Value {
|
|
||||||
fn fmt(&self, f: &mut Formatter) -> ::std::fmt::Result {
|
|
||||||
def_common_value_display!(Value, self, f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Display for SpannedValue {
|
|
||||||
fn fmt(&self, f: &mut Formatter) -> ::std::fmt::Result {
|
|
||||||
def_common_value_display!(SpannedValue, self, f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Display for ValueAndSpan {
|
impl Display for ValueAndSpan {
|
||||||
fn fmt(&self, f: &mut Formatter) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut Formatter) -> ::std::fmt::Result {
|
||||||
self.inner.fmt(f)
|
self.inner.fmt(f)
|
||||||
|
|
Loading…
Reference in a new issue