give immediates a sign & fix stuff
This commit is contained in:
@@ -47,13 +47,21 @@ impl Node for Code {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_imm(mut s: &str, span: Span) -> Result<u64, CompilerMsg> {
|
||||
pub fn parse_imm(mut s: &str, span: Span) -> Result<Imm, CompilerMsg> {
|
||||
let mut radix = 10;
|
||||
let mut mult = 1;
|
||||
if s.starts_with('-') {
|
||||
mult = -1;
|
||||
s = &s[1..];
|
||||
}
|
||||
if s.starts_with("0x") {
|
||||
radix = 16;
|
||||
s = &s[2..];
|
||||
}
|
||||
u64::from_str_radix(s, radix).map_err(|_| CompilerMsg::from(("invalid immediate", span)))
|
||||
let abs = u64::from_str_radix(s, radix)
|
||||
.map_err(|_| CompilerMsg::from(("invalid immediate", span)))?;
|
||||
let val = (abs as i128) * mult;
|
||||
Ok(Imm(val))
|
||||
}
|
||||
|
||||
pub fn parse_rmi(ctx: &mut crate::parser::ParseCtx) -> Result<RegImmMem, CompilerMsg> {
|
||||
|
||||
Reference in New Issue
Block a user