Add: floordiv

This commit is contained in:
GreasySlug 2022-10-09 22:47:39 +09:00
parent c7aa6bd904
commit 900a5bb38e
3 changed files with 13 additions and 0 deletions

View file

@ -52,6 +52,7 @@ fn try_get_op_kind_from_token(kind: TokenKind) -> EvalResult<OpKind> {
TokenKind::Minus => Ok(OpKind::Sub), TokenKind::Minus => Ok(OpKind::Sub),
TokenKind::Star => Ok(OpKind::Mul), TokenKind::Star => Ok(OpKind::Mul),
TokenKind::Slash => Ok(OpKind::Div), TokenKind::Slash => Ok(OpKind::Div),
TokenKind::FloorDiv => Ok(OpKind::FloorDiv),
TokenKind::Pow => Ok(OpKind::Pow), TokenKind::Pow => Ok(OpKind::Pow),
TokenKind::Mod => Ok(OpKind::Mod), TokenKind::Mod => Ok(OpKind::Mod),
TokenKind::DblEq => Ok(OpKind::Eq), TokenKind::DblEq => Ok(OpKind::Eq),
@ -78,6 +79,7 @@ fn op_to_name(op: OpKind) -> &'static str {
OpKind::Sub => "__sub__", OpKind::Sub => "__sub__",
OpKind::Mul => "__mul__", OpKind::Mul => "__mul__",
OpKind::Div => "__div__", OpKind::Div => "__div__",
OpKind::FloorDiv => "__floordiv__",
OpKind::Mod => "__mod__", OpKind::Mod => "__mod__",
OpKind::Pow => "__pow__", OpKind::Pow => "__pow__",
OpKind::Pos => "__pos__", OpKind::Pos => "__pos__",
@ -664,6 +666,13 @@ impl Context {
line!(), line!(),
)) ))
}), }),
FloorDiv => lhs.try_floordiv(rhs).ok_or_else(|| {
EvalErrors::from(EvalError::unreachable(
self.cfg.input.clone(),
fn_name!(),
line!(),
))
}),
Gt => lhs.try_gt(rhs).ok_or_else(|| { Gt => lhs.try_gt(rhs).ok_or_else(|| {
EvalErrors::from(EvalError::unreachable( EvalErrors::from(EvalError::unreachable(
self.cfg.input.clone(), self.cfg.input.clone(),

View file

@ -25,6 +25,7 @@ pub fn binop_to_dname(op: &str) -> &str {
"-" => "__sub__", "-" => "__sub__",
"*" => "__mul__", "*" => "__mul__",
"/" => "__div__", "/" => "__div__",
"//" => "__floordiv__",
"**" => "__pow__", "**" => "__pow__",
"%" => "__mod__", "%" => "__mod__",
".." => "__rng__", ".." => "__rng__",
@ -66,6 +67,7 @@ pub fn readable_name(name: &str) -> &str {
"__sub__" => "`-`", "__sub__" => "`-`",
"__mul__" => "`*`", "__mul__" => "`*`",
"__div__" => "`/`", "__div__" => "`/`",
"__floordiv__" => "`//`",
"__pow__" => "`**`", "__pow__" => "`**`",
"__mod__" => "`%`", "__mod__" => "`%`",
"__rng__" => "`..`", "__rng__" => "`..`",

View file

@ -17,6 +17,7 @@ pub enum OpKind {
Sub, Sub,
Mul, Mul,
Div, Div,
FloorDiv,
Pow, Pow,
Mod, Mod,
Pos, Pos,
@ -45,6 +46,7 @@ impl fmt::Display for OpKind {
Self::Sub => write!(f, "-"), Self::Sub => write!(f, "-"),
Self::Mul => write!(f, "*"), Self::Mul => write!(f, "*"),
Self::Div => write!(f, "/"), Self::Div => write!(f, "/"),
Self::FloorDiv => write!(f, "//"),
Self::Pow => write!(f, "**"), Self::Pow => write!(f, "**"),
Self::Mod => write!(f, "%"), Self::Mod => write!(f, "%"),
Self::Pos => write!(f, "+"), Self::Pos => write!(f, "+"),