give immediates a sign & fix stuff

This commit is contained in:
2026-06-12 17:08:42 -04:00
parent e199620856
commit 7280f7b071
7 changed files with 282 additions and 150 deletions
+10 -2
View File
@@ -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> {