Skip to content

Commit 3e5e9b6

Browse files
authored
Merge pull request #78 from vandycarlos/main
update cranelift dependencies to 0.125.3
2 parents e829a2a + 764cf2c commit 3e5e9b6

2 files changed

Lines changed: 19 additions & 24 deletions

File tree

‎Cargo.toml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ edition = "2024"
99

1010
[dependencies]
1111
peg = "0.8.1"
12-
cranelift = "0.118.0"
13-
cranelift-module = "0.118.0"
14-
cranelift-jit = "0.118.0"
15-
cranelift-native = "0.118.0"
12+
cranelift = "0.125.3"
13+
cranelift-module = "0.125.3"
14+
cranelift-jit = "0.125.3"
15+
cranelift-native = "0.125.3"

‎src/jit.rs‎

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::frontend::*;
2+
use cranelift::codegen::ir::BlockArg;
23
use cranelift::prelude::*;
34
use cranelift_jit::{JITBuilder, JITModule};
45
use cranelift_module::{DataDescription, Linkage, Module};
@@ -295,7 +296,9 @@ impl<'a> FunctionTranslator<'a> {
295296
}
296297

297298
// Jump to the merge block, passing it the block return value.
298-
self.builder.ins().jump(merge_block, &[then_return]);
299+
self.builder
300+
.ins()
301+
.jump(merge_block, &[BlockArg::Value(then_return)]);
299302

300303
self.builder.switch_to_block(else_block);
301304
self.builder.seal_block(else_block);
@@ -305,7 +308,9 @@ impl<'a> FunctionTranslator<'a> {
305308
}
306309

307310
// Jump to the merge block, passing it the block return value.
308-
self.builder.ins().jump(merge_block, &[else_return]);
311+
self.builder
312+
.ins()
313+
.jump(merge_block, &[BlockArg::Value(else_return)]);
309314

310315
// Switch to the merge block for subsequent statements.
311316
self.builder.switch_to_block(merge_block);
@@ -399,20 +404,18 @@ fn declare_variables(
399404
entry_block: Block,
400405
) -> HashMap<String, Variable> {
401406
let mut variables = HashMap::new();
402-
let mut index = 0;
403-
404407
for (i, name) in params.iter().enumerate() {
405408
// TODO: cranelift_frontend should really have an API to make it easy to set
406409
// up param variables.
407410
let val = builder.block_params(entry_block)[i];
408-
let var = declare_variable(int, builder, &mut variables, &mut index, name);
411+
let var = declare_variable(int, builder, &mut variables, name);
409412
builder.def_var(var, val);
410413
}
411414
let zero = builder.ins().iconst(int, 0);
412-
let return_variable = declare_variable(int, builder, &mut variables, &mut index, the_return);
415+
let return_variable = declare_variable(int, builder, &mut variables, the_return);
413416
builder.def_var(return_variable, zero);
414417
for expr in stmts {
415-
declare_variables_in_stmt(int, builder, &mut variables, &mut index, expr);
418+
declare_variables_in_stmt(int, builder, &mut variables, expr);
416419
}
417420

418421
variables
@@ -424,24 +427,23 @@ fn declare_variables_in_stmt(
424427
int: types::Type,
425428
builder: &mut FunctionBuilder,
426429
variables: &mut HashMap<String, Variable>,
427-
index: &mut usize,
428430
expr: &Expr,
429431
) {
430432
match *expr {
431433
Expr::Assign(ref name, _) => {
432-
declare_variable(int, builder, variables, index, name);
434+
declare_variable(int, builder, variables, name);
433435
}
434436
Expr::IfElse(ref _condition, ref then_body, ref else_body) => {
435437
for stmt in then_body {
436-
declare_variables_in_stmt(int, builder, variables, index, stmt);
438+
declare_variables_in_stmt(int, builder, variables, stmt);
437439
}
438440
for stmt in else_body {
439-
declare_variables_in_stmt(int, builder, variables, index, stmt);
441+
declare_variables_in_stmt(int, builder, variables, stmt);
440442
}
441443
}
442444
Expr::WhileLoop(ref _condition, ref loop_body) => {
443445
for stmt in loop_body {
444-
declare_variables_in_stmt(int, builder, variables, index, stmt);
446+
declare_variables_in_stmt(int, builder, variables, stmt);
445447
}
446448
}
447449
_ => (),
@@ -453,14 +455,7 @@ fn declare_variable(
453455
int: types::Type,
454456
builder: &mut FunctionBuilder,
455457
variables: &mut HashMap<String, Variable>,
456-
index: &mut usize,
457458
name: &str,
458459
) -> Variable {
459-
let var = Variable::new(*index);
460-
if !variables.contains_key(name) {
461-
variables.insert(name.into(), var);
462-
builder.declare_var(var, int);
463-
*index += 1;
464-
}
465-
var
460+
*variables.entry(name.into()).or_insert_with(|| builder.declare_var(int))
466461
}

0 commit comments

Comments
 (0)