Fix token ranges for for-loops

This commit is contained in:
Sofia 2025-08-04 18:36:35 +03:00
parent 11d93e4adf
commit a9d5a4d03b
3 changed files with 12 additions and 11 deletions

View File

@ -16,7 +16,7 @@ BINARY="$(echo $1 | cut -d'.' -f1)"".out"
echo $1 echo $1
cargo run --example cli $@ && \ cargo run --features log_output --example cli $@ && \
./$BINARY ; echo "Return value: ""$?" ./$BINARY ; echo "Return value: ""$?"
## Command from: clang -v hello.o -o test ## Command from: clang -v hello.o -o test

View File

@ -761,6 +761,7 @@ pub fn analyze_block(
analyze_expr(context, source_module, expression, scope); analyze_expr(context, source_module, expression, scope);
} }
mir::StmtKind::While(WhileStatement { condition, block, .. }) => { mir::StmtKind::While(WhileStatement { condition, block, .. }) => {
dbg!(condition);
analyze_expr(context, source_module, condition, scope); analyze_expr(context, source_module, condition, scope);
analyze_block(context, source_module, block, scope); analyze_block(context, source_module, block, scope);
} }

View File

@ -235,7 +235,7 @@ impl ast::Block {
); );
let let_statement = mir::Statement( let let_statement = mir::Statement(
StmtKind::Let(counter_var.clone(), true, start.process(module_id)), StmtKind::Let(counter_var.clone(), true, start.process(module_id)),
counter_range.as_meta(module_id), start.1.as_meta(module_id),
); );
let statement_range = counter_range.clone() + start.1 + end.1 + block.2; let statement_range = counter_range.clone() + start.1 + end.1 + block.2;
@ -243,25 +243,25 @@ impl ast::Block {
StmtKind::Set( StmtKind::Set(
mir::Expression( mir::Expression(
mir::ExprKind::Variable(counter_var.clone()), mir::ExprKind::Variable(counter_var.clone()),
(start.1 + end.1).as_meta(module_id), counter_range.as_meta(module_id),
), ),
mir::Expression( mir::Expression(
mir::ExprKind::BinOp( mir::ExprKind::BinOp(
mir::BinaryOperator::Add, mir::BinaryOperator::Add,
Box::new(mir::Expression( Box::new(mir::Expression(
mir::ExprKind::Variable(counter_var.clone()), mir::ExprKind::Variable(counter_var.clone()),
(start.1 + end.1).as_meta(module_id), counter_range.as_meta(module_id),
)), )),
Box::new(mir::Expression( Box::new(mir::Expression(
mir::ExprKind::Literal(mir::Literal::Vague(mir::VagueLiteral::Number(1))), mir::ExprKind::Literal(mir::Literal::Vague(mir::VagueLiteral::Number(1))),
(start.1 + end.1).as_meta(module_id), counter_range.as_meta(module_id),
)), )),
mir::TypeKind::Vague(mir::VagueType::Unknown), mir::TypeKind::Vague(mir::VagueType::Unknown),
), ),
(start.1 + end.1).as_meta(module_id), counter_range.as_meta(module_id),
), ),
), ),
(start.1 + end.1).as_meta(module_id), counter_range.as_meta(module_id),
); );
let mut mir_block = block.into_mir(module_id); let mut mir_block = block.into_mir(module_id);
mir_block.statements.push(set_new); mir_block.statements.push(set_new);
@ -272,17 +272,17 @@ impl ast::Block {
mir::BinaryOperator::Cmp(mir::CmpOperator::LT), mir::BinaryOperator::Cmp(mir::CmpOperator::LT),
Box::new(mir::Expression( Box::new(mir::Expression(
mir::ExprKind::Variable(counter_var), mir::ExprKind::Variable(counter_var),
(start.1 + end.1).as_meta(module_id), counter_range.as_meta(module_id),
)), )),
Box::new(end.process(module_id)), Box::new(end.process(module_id)),
mir::TypeKind::Vague(mir::VagueType::Unknown), mir::TypeKind::Vague(mir::VagueType::Unknown),
), ),
(start.1 + end.1).as_meta(module_id), end.1.as_meta(module_id),
), ),
block: mir_block.clone(), block: mir_block.clone(),
meta: (start.1 + end.1 + block.2).as_meta(module_id), meta: (*counter_range + end.1 + block.2).as_meta(module_id),
}), }),
(start.1 + end.1 + block.2).as_meta(module_id), (*counter_range + end.1 + block.2).as_meta(module_id),
); );
let inner_scope = StmtKind::Expression(mir::Expression( let inner_scope = StmtKind::Expression(mir::Expression(