Implement comparison operators correctly
This commit is contained in:
parent
fb71881409
commit
98f597f00a
7
TODO.md
7
TODO.md
@ -2,6 +2,13 @@
|
|||||||
# TODO Items
|
# TODO Items
|
||||||
|
|
||||||
|
|
||||||
|
*A neat idea for pattern matching optimization would be if you could match on one of several things in a list
|
||||||
|
ex:
|
||||||
|
if x {
|
||||||
|
is (comp, LHSPat, RHSPat) if comp in ["==, "<"] -> ...
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
- https://nshipster.com/never/
|
- https://nshipster.com/never/
|
||||||
-https://cranelift.readthedocs.io/en/latest/?badge=latest<Paste>
|
-https://cranelift.readthedocs.io/en/latest/?badge=latest<Paste>
|
||||||
|
|
||||||
|
@ -47,6 +47,8 @@ impl BinOp {
|
|||||||
Period => ".",
|
Period => ".",
|
||||||
Pipe => "|",
|
Pipe => "|",
|
||||||
Slash => "/",
|
Slash => "/",
|
||||||
|
LAngleBracket => "<",
|
||||||
|
RAngleBracket => ">",
|
||||||
_ => return None
|
_ => return None
|
||||||
};
|
};
|
||||||
Some(BinOp::from_sigil(s))
|
Some(BinOp::from_sigil(s))
|
||||||
@ -67,10 +69,11 @@ impl BinOp {
|
|||||||
Period => ".",
|
Period => ".",
|
||||||
Pipe => "|",
|
Pipe => "|",
|
||||||
Slash => "/",
|
Slash => "/",
|
||||||
|
LAngleBracket => "<",
|
||||||
|
RAngleBracket => ">",
|
||||||
_ => return None
|
_ => return None
|
||||||
};
|
};
|
||||||
let default = 10_000_000;
|
Some(BINOPS.get(s).map(|x| x.2.clone()).expect("Custom operators not handled yet"))
|
||||||
Some(BINOPS.get(s).map(|x| x.2.clone()).unwrap_or(default))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,5 +123,10 @@ lazy_static! {
|
|||||||
"^" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
"^" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
"&" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
"&" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
"|" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
"|" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
|
">" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
|
">=" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
|
"<" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
|
"<=" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
|
"==" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -305,12 +305,29 @@ impl<'a> State<'a> {
|
|||||||
("&", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Nat(l & r)),
|
("&", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Nat(l & r)),
|
||||||
("|", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Nat(l | r)),
|
("|", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Nat(l | r)),
|
||||||
|
|
||||||
|
/* comparisons */
|
||||||
("==", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Bool(l == r)),
|
("==", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Bool(l == r)),
|
||||||
("==", &[Lit(Int(l)), Lit(Int(r))]) => Lit(Bool(l == r)),
|
("==", &[Lit(Int(l)), Lit(Int(r))]) => Lit(Bool(l == r)),
|
||||||
("==", &[Lit(Float(l)), Lit(Float(r))]) => Lit(Bool(l == r)),
|
("==", &[Lit(Float(l)), Lit(Float(r))]) => Lit(Bool(l == r)),
|
||||||
("==", &[Lit(Bool(l)), Lit(Bool(r))]) => Lit(Bool(l == r)),
|
("==", &[Lit(Bool(l)), Lit(Bool(r))]) => Lit(Bool(l == r)),
|
||||||
("==", &[Lit(StringLit(ref l)), Lit(StringLit(ref r))]) => Lit(Bool(l == r)),
|
("==", &[Lit(StringLit(ref l)), Lit(StringLit(ref r))]) => Lit(Bool(l == r)),
|
||||||
|
|
||||||
|
("<", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Bool(l < r)),
|
||||||
|
("<", &[Lit(Int(l)), Lit(Int(r))]) => Lit(Bool(l < r)),
|
||||||
|
("<", &[Lit(Float(l)), Lit(Float(r))]) => Lit(Bool(l < r)),
|
||||||
|
|
||||||
|
("<=", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Bool(l <= r)),
|
||||||
|
("<=", &[Lit(Int(l)), Lit(Int(r))]) => Lit(Bool(l <= r)),
|
||||||
|
("<=", &[Lit(Float(l)), Lit(Float(r))]) => Lit(Bool(l <= r)),
|
||||||
|
|
||||||
|
(">", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Bool(l > r)),
|
||||||
|
(">", &[Lit(Int(l)), Lit(Int(r))]) => Lit(Bool(l > r)),
|
||||||
|
(">", &[Lit(Float(l)), Lit(Float(r))]) => Lit(Bool(l > r)),
|
||||||
|
|
||||||
|
(">=", &[Lit(Nat(l)), Lit(Nat(r))]) => Lit(Bool(l >= r)),
|
||||||
|
(">=", &[Lit(Int(l)), Lit(Int(r))]) => Lit(Bool(l >= r)),
|
||||||
|
(">=", &[Lit(Float(l)), Lit(Float(r))]) => Lit(Bool(l >= r)),
|
||||||
|
|
||||||
/* prefix ops */
|
/* prefix ops */
|
||||||
("!", &[Lit(Bool(true))]) => Lit(Bool(false)),
|
("!", &[Lit(Bool(true))]) => Lit(Bool(false)),
|
||||||
("!", &[Lit(Bool(false))]) => Lit(Bool(true)),
|
("!", &[Lit(Bool(false))]) => Lit(Bool(true)),
|
||||||
|
Loading…
Reference in New Issue
Block a user