feat(tazjin/rlox): Implement unary negation operator

Change-Id: I9a5bd3581d4ed05371651697ec496341eb7971ae
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2572
Reviewed-by: tazjin <mail@tazj.in>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2021-02-28 15:28:04 +02:00 committed by tazjin
parent 47ffa80711
commit 2d9456d247
5 changed files with 32 additions and 0 deletions

View file

@ -116,6 +116,10 @@ fn rule_for<T: Iterator<Item = Token>>(token: &TokenKind) -> ParseRule<T> {
ParseRule::new(Some(Compiler::literal), None, Precedence::None)
}
TokenKind::Bang => {
ParseRule::new(Some(Compiler::unary), None, Precedence::None)
}
_ => ParseRule::new(None, None, Precedence::None),
}
}
@ -168,6 +172,7 @@ impl<T: Iterator<Item = Token>> Compiler<T> {
// Emit operator instruction
match kind {
TokenKind::Bang => self.emit_op(OpCode::OpNot),
TokenKind::Minus => self.emit_op(OpCode::OpNegate),
_ => unreachable!("only called for unary operator tokens"),
}