Skip to content

Commit

Permalink
a
Browse files Browse the repository at this point in the history
  • Loading branch information
mahkoh committed Jun 27, 2020
1 parent cee0147 commit 6682b22
Show file tree
Hide file tree
Showing 16 changed files with 562 additions and 445 deletions.
1 change: 1 addition & 0 deletions src/diag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@ impl Diagnostic {
ErrorType::CannotStringifyNonInteger => {
format!("cannot stringify numbers that are not integers")
}
ErrorType::UnmatchedToken(tt) => format!("unmatched token `{}`", tt.as_str()),
};
self.common(msg.span, "error: ", &text);
self.trace(e, msg);
Expand Down
14 changes: 11 additions & 3 deletions src/eval/force.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ impl Elang {
let ctx = ErrorContext::EvalArithmetic(expr.id);

let num = |slf: &mut Self, v| match slf.get_int_(v) {
Ok(v) => Ok(v.clone()),
Ok(v) => Ok(v),
Err(mut e) => {
e.context.push(ctx);
Err(e)
Expand All @@ -136,7 +136,11 @@ impl Elang {
return self.error(denom, ErrorType::DivideByZero).ctx(ctx);
}
let res = &*numer / &*denom_;
if int { res.trunc() } else { res }
if int {
res.trunc()
} else {
res
}
}
ExprType::Mod { numer, denom, int } => {
let numer = num(self, numer)?;
Expand All @@ -145,7 +149,11 @@ impl Elang {
return self.error(denom, ErrorType::DivideByZero).ctx(ctx);
}
let res = &*numer % &*denom_;
if int { res.trunc() } else { res }
if int {
res.trunc()
} else {
res
}
}
ExprType::Neg { val } => (*num(self, val)?).clone().neg(),
_ => unreachable!(),
Expand Down
68 changes: 54 additions & 14 deletions src/eval/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,18 +123,58 @@ impl Elang {
ExprType::Mul { lhs, rhs } => {
bin!(|lhs, rhs| ExprType::Mul { lhs, rhs }, lhs, rhs)
}
ExprType::Div { numer, denom, int: true } => {
bin!(|numer, denom| ExprType::Div { numer, denom, int: true }, numer, denom)
}
ExprType::Mod { numer, denom, int: true } => {
bin!(|numer, denom| ExprType::Mod { numer, denom, int: true }, numer, denom)
}
ExprType::Div { numer, denom, int: false } => {
bin!(|numer, denom| ExprType::Div { numer, denom, int: false }, numer, denom)
}
ExprType::Mod { numer, denom, int: false } => {
bin!(|numer, denom| ExprType::Mod { numer, denom, int: false }, numer, denom)
}
ExprType::Div {
numer,
denom,
int: true,
} => bin!(
|numer, denom| ExprType::Div {
numer,
denom,
int: true
},
numer,
denom
),
ExprType::Mod {
numer,
denom,
int: true,
} => bin!(
|numer, denom| ExprType::Mod {
numer,
denom,
int: true
},
numer,
denom
),
ExprType::Div {
numer,
denom,
int: false,
} => bin!(
|numer, denom| ExprType::Div {
numer,
denom,
int: false
},
numer,
denom
),
ExprType::Mod {
numer,
denom,
int: false,
} => bin!(
|numer, denom| ExprType::Mod {
numer,
denom,
int: false
},
numer,
denom
),
ExprType::Gt { lhs, rhs } => {
bin!(|lhs, rhs| ExprType::Gt { lhs, rhs }, lhs, rhs)
}
Expand Down Expand Up @@ -303,7 +343,7 @@ impl Elang {
},
} => ExprType::Fn {
func: FnType::Normal {
param: Spanned::new(span, FnParam::Ident { param_name }),
param: span.span(FnParam::Ident { param_name }),
body: copy!(body),
},
},
Expand Down Expand Up @@ -334,7 +374,7 @@ impl Elang {
};
ExprType::Fn {
func: FnType::Normal {
param: Spanned::new(span, pat),
param: span.span(pat),
body: copy!(body),
},
}
Expand Down
Loading

0 comments on commit 6682b22

Please sign in to comment.