summaryrefslogtreecommitdiff
path: root/src/parsers/bytecode.rs
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-03-01 18:05:54 +1300
committerBen Bridle <ben@derelict.engineering>2025-03-01 18:05:54 +1300
commitf2ed89083f5326a7a6f0a1720033d3388aa431fb (patch)
tree89065516d219ccacae4c1db7563e5931f8f72004 /src/parsers/bytecode.rs
parent566e71e73f6ec904629a0f938b4a13574533f47a (diff)
downloadtorque-asm-f2ed89083f5326a7a6f0a1720033d3388aa431fb.zip
Implement <= and >= operators for constant expressions
Diffstat (limited to 'src/parsers/bytecode.rs')
-rw-r--r--src/parsers/bytecode.rs26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/parsers/bytecode.rs b/src/parsers/bytecode.rs
index 6cdfd3a..ed16e22 100644
--- a/src/parsers/bytecode.rs
+++ b/src/parsers/bytecode.rs
@@ -103,18 +103,20 @@ impl<'a> BytecodeGenerator<'a> {
push!(self.resolve_expression(expr))
}
AssembledExpressionToken::Operator(operator) => match operator {
- Operator::Equal => { pop!(b); pop!(a); push!(truth!(a==b)) },
- Operator::NotEqual => { pop!(b); pop!(a); push!(truth!(a!=b)) },
- Operator::LessThan => { pop!(b); pop!(a); push!(truth!(a < b)) },
- Operator::GreaterThan => { pop!(b); pop!(a); push!(truth!(a > b)) },
- Operator::Add => { pop!(b); pop!(a); push!(a + b) },
- Operator::Subtract => { pop!(b); pop!(a); push!(a - b) },
- Operator::LeftShift => { pop!(b); pop!(a); push!(a << b) },
- Operator::RightShift => { pop!(b); pop!(a); push!(a >> b) },
- Operator::And => { pop!(b); pop!(a); push!(a & b) },
- Operator::Or => { pop!(b); pop!(a); push!(a | b) },
- Operator::Xor => { pop!(b); pop!(a); push!(a ^ b) },
- Operator::Not => { pop!(a); push!(!a) },
+ Operator::Equal => { pop!(b); pop!(a); push!(truth!(a==b)) },
+ Operator::NotEqual => { pop!(b); pop!(a); push!(truth!(a!=b)) },
+ Operator::LessThan => { pop!(b); pop!(a); push!(truth!(a < b)) },
+ Operator::GreaterThan => { pop!(b); pop!(a); push!(truth!(a > b)) },
+ Operator::LessThanEqual => { pop!(b); pop!(a); push!(truth!(a <= b)) },
+ Operator::GreaterThanEqual => { pop!(b); pop!(a); push!(truth!(a >= b)) },
+ Operator::Add => { pop!(b); pop!(a); push!(a + b) },
+ Operator::Subtract => { pop!(b); pop!(a); push!(a - b) },
+ Operator::LeftShift => { pop!(b); pop!(a); push!(a << b) },
+ Operator::RightShift => { pop!(b); pop!(a); push!(a >> b) },
+ Operator::And => { pop!(b); pop!(a); push!(a & b) },
+ Operator::Or => { pop!(b); pop!(a); push!(a | b) },
+ Operator::Xor => { pop!(b); pop!(a); push!(a ^ b) },
+ Operator::Not => { pop!(a); push!(!a) },
}
}
}