Make sigil field private
This commit is contained in:
parent
e7cabb2a79
commit
4333563d03
@ -2,18 +2,21 @@ use std::rc::Rc;
|
|||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
pub struct BinOp {
|
pub struct BinOp {
|
||||||
pub sigil: Rc<String>
|
sigil: Rc<String>
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
pub struct PrefixOp {
|
pub struct PrefixOp {
|
||||||
pub sigil: Rc<String>
|
sigil: Rc<String>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BinOp {
|
impl BinOp {
|
||||||
pub fn from_sigil(sigil: Rc<String>) -> BinOp {
|
pub fn from_sigil(sigil: Rc<String>) -> BinOp {
|
||||||
BinOp { sigil }
|
BinOp { sigil }
|
||||||
}
|
}
|
||||||
|
pub fn sigil(&self) -> &Rc<String> {
|
||||||
|
&self.sigil
|
||||||
|
}
|
||||||
pub fn min_precedence() -> i32 {
|
pub fn min_precedence() -> i32 {
|
||||||
i32::min_value()
|
i32::min_value()
|
||||||
}
|
}
|
||||||
@ -31,6 +34,9 @@ impl PrefixOp {
|
|||||||
pub fn from_sigil(sigil: Rc<String>) -> PrefixOp {
|
pub fn from_sigil(sigil: Rc<String>) -> PrefixOp {
|
||||||
PrefixOp { sigil }
|
PrefixOp { sigil }
|
||||||
}
|
}
|
||||||
|
pub fn sigil(&self) -> &Rc<String> {
|
||||||
|
&self.sigil
|
||||||
|
}
|
||||||
pub fn is_prefix(op: &str) -> bool {
|
pub fn is_prefix(op: &str) -> bool {
|
||||||
match op {
|
match op {
|
||||||
"+" | "-" | "!" | "~" => true,
|
"+" | "-" | "!" | "~" => true,
|
||||||
|
@ -176,8 +176,9 @@ impl<'a> State<'a> {
|
|||||||
use self::FullyEvaluatedExpr::*;
|
use self::FullyEvaluatedExpr::*;
|
||||||
let evaled_lhs = self.eval_expr(*lhs)?;
|
let evaled_lhs = self.eval_expr(*lhs)?;
|
||||||
let evaled_rhs = self.eval_expr(*rhs)?;
|
let evaled_rhs = self.eval_expr(*rhs)?;
|
||||||
let sigil: &str = op.sigil.as_ref().as_str();
|
let sigil = op.sigil();
|
||||||
Ok(match (sigil, evaled_lhs, evaled_rhs) {
|
//let sigil: &str = op.sigil().as_ref().as_str();
|
||||||
|
Ok(match (sigil.as_str(), evaled_lhs, evaled_rhs) {
|
||||||
("+", UnsignedInt(l), UnsignedInt(r)) => UnsignedInt(l + r),
|
("+", UnsignedInt(l), UnsignedInt(r)) => UnsignedInt(l + r),
|
||||||
("++", Str(s1), Str(s2)) => Str(format!("{}{}", s1, s2)),
|
("++", Str(s1), Str(s2)) => Str(format!("{}{}", s1, s2)),
|
||||||
("-", UnsignedInt(l), UnsignedInt(r)) => UnsignedInt(l - r),
|
("-", UnsignedInt(l), UnsignedInt(r)) => UnsignedInt(l - r),
|
||||||
@ -191,10 +192,9 @@ impl<'a> State<'a> {
|
|||||||
fn eval_prefix_exp(&mut self, op: PrefixOp, expr: Box<Expression>) -> EvalResult<FullyEvaluatedExpr> {
|
fn eval_prefix_exp(&mut self, op: PrefixOp, expr: Box<Expression>) -> EvalResult<FullyEvaluatedExpr> {
|
||||||
use self::FullyEvaluatedExpr::*;
|
use self::FullyEvaluatedExpr::*;
|
||||||
let evaled_expr = self.eval_expr(*expr)?;
|
let evaled_expr = self.eval_expr(*expr)?;
|
||||||
|
let sigil = op.sigil();
|
||||||
|
|
||||||
let sigil: &str = op.sigil.as_ref().as_str();
|
Ok(match (sigil.as_str(), evaled_expr) {
|
||||||
|
|
||||||
Ok(match (sigil, evaled_expr) {
|
|
||||||
("!", Bool(true)) => Bool(false),
|
("!", Bool(true)) => Bool(false),
|
||||||
("!", Bool(false)) => Bool(true),
|
("!", Bool(false)) => Bool(true),
|
||||||
("-", UnsignedInt(n)) => SignedInt(-1*(n as i64)),
|
("-", UnsignedInt(n)) => SignedInt(-1*(n as i64)),
|
||||||
|
Loading…
Reference in New Issue
Block a user