diff options
author | Ben Bridle <ben@derelict.engineering> | 2025-03-01 18:05:54 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2025-03-01 18:05:54 +1300 |
commit | f2ed89083f5326a7a6f0a1720033d3388aa431fb (patch) | |
tree | 89065516d219ccacae4c1db7563e5931f8f72004 /src/parsers | |
parent | 566e71e73f6ec904629a0f938b4a13574533f47a (diff) | |
download | torque-asm-f2ed89083f5326a7a6f0a1720033d3388aa431fb.zip |
Implement <= and >= operators for constant expressions
Diffstat (limited to 'src/parsers')
-rw-r--r-- | src/parsers/bytecode.rs | 26 | ||||
-rw-r--r-- | src/parsers/expression.rs | 2 |
2 files changed, 16 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) }, } } } diff --git a/src/parsers/expression.rs b/src/parsers/expression.rs index f902858..e938881 100644 --- a/src/parsers/expression.rs +++ b/src/parsers/expression.rs @@ -20,6 +20,8 @@ pub fn parse_constant_expression(mut t: Tokeniser, source: SourceSpan) -> Expres "!=" => TokenVar::Operator(Operator::NotEqual), "<" => TokenVar::Operator(Operator::LessThan), ">" => TokenVar::Operator(Operator::GreaterThan), + "<=" => TokenVar::Operator(Operator::LessThanEqual), + ">=" => TokenVar::Operator(Operator::GreaterThanEqual), "+" => TokenVar::Operator(Operator::Add), "-" => TokenVar::Operator(Operator::Subtract), "<<" => TokenVar::Operator(Operator::LeftShift), |