Skip to content

Commit 7cf95e5

Browse files
olwangclaude
andcommitted
refactor(lowering): co-locate source-map emission in rust_lower/source_map.rs
Pure code-movement (no logic/behavior changes; generated-Rust bytes + source maps unchanged because call sites in the lowerer spine are untouched, so emit order is preserved). lowerer.rs 3,412 -> 3,124. Moved the source-map emission methods (record_source_marker, widen_generated_span, record_statement_source_map, record_block_source_map, record_expr_source_map) into source_map.rs as an impl RustLowerer block, co-located with the marker push/parse free fns they drive. Verified byte-identical to HEAD. Added the needed imports (ast::{Block, Expr,Stmt}, helpers::stmt_span, lowerer::match_pattern_span) and dropped the now- unused push_source_marker import from lowerer.rs. Verified: cargo test -p rsscript --no-run (default + native-jit) clean; clippy -p rsscript --tests -D warnings clean; static checker_lowering 229/0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 5a682a4 commit 7cf95e5

2 files changed

Lines changed: 296 additions & 289 deletions

File tree

crates/rsscript/src/rust_lower/lowerer.rs

Lines changed: 0 additions & 289 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use crate::syntax::ast::{
88

99
use super::helpers::*;
1010
use super::intrinsics::*;
11-
use super::source_map::push_source_marker;
1211
use super::types::{LoweredRust, RustSourceMapEntry};
1312

1413
pub(super) struct RustLowerer<'a> {
@@ -576,294 +575,6 @@ impl<'a> RustLowerer<'a> {
576575
out.push_str(&format!("{pad}}}\n"));
577576
}
578577

579-
pub(super) fn record_source_marker(
580-
&mut self,
581-
out: &mut String,
582-
indent: usize,
583-
kind: &str,
584-
span: &Span,
585-
) -> RustSourceMapEntry {
586-
let entry = push_source_marker(out, indent, kind, span);
587-
self.source_map.push(entry.clone());
588-
entry
589-
}
590-
591-
pub(super) fn widen_generated_span(&mut self, generated: &Span, line_count: usize) {
592-
for entry in &mut self.source_map {
593-
if entry.generated.file == generated.file
594-
&& entry.generated.line == generated.line
595-
&& entry.generated.column == generated.column
596-
{
597-
entry.generated.length = entry.generated.length.max(line_count.max(1));
598-
}
599-
}
600-
}
601-
602-
pub(super) fn record_statement_source_map(&mut self, statement: &Stmt, generated: &Span) {
603-
match statement {
604-
Stmt::Let(stmt) => {
605-
if let Some(value) = &stmt.value {
606-
self.record_expr_source_map(value, generated);
607-
}
608-
}
609-
Stmt::Return(stmt) => {
610-
if let Some(value) = &stmt.value {
611-
self.record_expr_source_map(value, generated);
612-
}
613-
}
614-
Stmt::With(stmt) => {
615-
self.source_map.push(RustSourceMapEntry {
616-
kind: "with".to_string(),
617-
source: stmt.span.clone(),
618-
generated: generated.clone(),
619-
..Default::default()
620-
});
621-
self.record_expr_source_map(&stmt.resource, generated);
622-
self.record_block_source_map(&stmt.body, generated);
623-
}
624-
Stmt::If(stmt) => {
625-
self.record_expr_source_map(&stmt.condition, generated);
626-
self.record_block_source_map(&stmt.then_body, generated);
627-
if let Some(else_body) = &stmt.else_body {
628-
self.record_block_source_map(else_body, generated);
629-
}
630-
}
631-
Stmt::Loop(stmt) => {
632-
if let Some(condition) = &stmt.condition {
633-
self.record_expr_source_map(condition, generated);
634-
}
635-
self.record_block_source_map(&stmt.body, generated);
636-
}
637-
Stmt::For(stmt) => {
638-
self.record_expr_source_map(&stmt.iterable, generated);
639-
self.record_block_source_map(&stmt.body, generated);
640-
}
641-
Stmt::TaskGroup(stmt) => {
642-
self.record_block_source_map(&stmt.body, generated);
643-
}
644-
Stmt::Select(stmt) => {
645-
for arm in &stmt.arms {
646-
self.record_expr_source_map(&arm.operation, generated);
647-
self.record_block_source_map(&arm.body, generated);
648-
}
649-
}
650-
Stmt::Match(stmt) => {
651-
self.record_expr_source_map(&stmt.value, generated);
652-
for arm in &stmt.arms {
653-
self.record_block_source_map(&arm.body, generated);
654-
}
655-
}
656-
Stmt::LetElse(stmt) => {
657-
self.record_expr_source_map(&stmt.value, generated);
658-
self.record_block_source_map(&stmt.else_body, generated);
659-
}
660-
Stmt::Assign(stmt) => {
661-
self.record_expr_source_map(&stmt.target, generated);
662-
self.record_expr_source_map(&stmt.value, generated);
663-
}
664-
Stmt::Expr(expr) => self.record_expr_source_map(expr, generated),
665-
Stmt::Break(_)
666-
| Stmt::Continue(_)
667-
| Stmt::MalformedWith(_)
668-
| Stmt::MalformedIf(_)
669-
| Stmt::MalformedLoop(_)
670-
| Stmt::MalformedFor(_)
671-
| Stmt::MalformedMatch(_)
672-
| Stmt::Unknown(_) => {}
673-
}
674-
}
675-
676-
pub(super) fn record_block_source_map(&mut self, block: &Block, generated: &Span) {
677-
for statement in &block.statements {
678-
self.source_map.push(RustSourceMapEntry {
679-
kind: "statement".to_string(),
680-
source: stmt_span(statement).clone(),
681-
generated: generated.clone(),
682-
..Default::default()
683-
});
684-
self.record_statement_source_map(statement, generated);
685-
}
686-
}
687-
688-
pub(super) fn record_expr_source_map(&mut self, expr: &Expr, generated: &Span) {
689-
match expr {
690-
Expr::Binary {
691-
left, right, span, ..
692-
} => {
693-
self.source_map.push(RustSourceMapEntry {
694-
kind: "binary".to_string(),
695-
source: span.clone(),
696-
generated: generated.clone(),
697-
..Default::default()
698-
});
699-
self.record_expr_source_map(left, generated);
700-
self.record_expr_source_map(right, generated);
701-
}
702-
Expr::Field { base, span, .. } => {
703-
self.source_map.push(RustSourceMapEntry {
704-
kind: "field_path".to_string(),
705-
source: span.clone(),
706-
generated: generated.clone(),
707-
..Default::default()
708-
});
709-
self.record_expr_source_map(base, generated);
710-
}
711-
Expr::Index { base, index, .. } => {
712-
self.record_expr_source_map(base, generated);
713-
self.record_expr_source_map(index, generated);
714-
}
715-
Expr::Call { callee, args, span } => {
716-
self.source_map.push(RustSourceMapEntry {
717-
kind: "call".to_string(),
718-
source: span.clone(),
719-
generated: generated.clone(),
720-
..Default::default()
721-
});
722-
if self.is_native_boundary_call(callee) {
723-
self.source_map.push(RustSourceMapEntry {
724-
kind: "native_call".to_string(),
725-
source: span.clone(),
726-
generated: generated.clone(),
727-
..Default::default()
728-
});
729-
}
730-
for arg in args {
731-
self.source_map.push(RustSourceMapEntry {
732-
kind: "named_arg".to_string(),
733-
source: arg.span.clone(),
734-
generated: generated.clone(),
735-
..Default::default()
736-
});
737-
self.record_expr_source_map(&arg.value, generated);
738-
}
739-
}
740-
Expr::Effect { value, .. } => self.record_expr_source_map(value, generated),
741-
Expr::Manage { value, span } => {
742-
self.source_map.push(RustSourceMapEntry {
743-
kind: "manage".to_string(),
744-
source: span.clone(),
745-
generated: generated.clone(),
746-
..Default::default()
747-
});
748-
self.record_expr_source_map(value, generated);
749-
}
750-
Expr::Spawn { value, span } => {
751-
self.source_map.push(RustSourceMapEntry {
752-
kind: "spawn".to_string(),
753-
source: span.clone(),
754-
generated: generated.clone(),
755-
..Default::default()
756-
});
757-
self.record_expr_source_map(value, generated);
758-
}
759-
Expr::Await { value, span } => {
760-
self.source_map.push(RustSourceMapEntry {
761-
kind: "await".to_string(),
762-
source: span.clone(),
763-
generated: generated.clone(),
764-
..Default::default()
765-
});
766-
self.record_expr_source_map(value, generated);
767-
}
768-
Expr::Try { value, span } => {
769-
self.source_map.push(RustSourceMapEntry {
770-
kind: "try".to_string(),
771-
source: span.clone(),
772-
generated: generated.clone(),
773-
..Default::default()
774-
});
775-
self.record_expr_source_map(value, generated);
776-
}
777-
Expr::Closure { body, span, .. } => {
778-
self.source_map.push(RustSourceMapEntry {
779-
kind: "closure".to_string(),
780-
source: span.clone(),
781-
generated: generated.clone(),
782-
..Default::default()
783-
});
784-
self.record_block_source_map(body, generated);
785-
}
786-
Expr::Match { value, arms, .. } => {
787-
self.record_expr_source_map(value, generated);
788-
for arm in arms {
789-
self.source_map.push(RustSourceMapEntry {
790-
kind: "match_pattern".to_string(),
791-
source: match_pattern_span(&arm.pattern),
792-
generated: generated.clone(),
793-
..Default::default()
794-
});
795-
self.record_block_source_map(&arm.body, generated);
796-
}
797-
}
798-
Expr::ObjectLiteral { fields, span } => {
799-
self.source_map.push(RustSourceMapEntry {
800-
kind: "object_literal".to_string(),
801-
source: span.clone(),
802-
generated: generated.clone(),
803-
..Default::default()
804-
});
805-
for field in fields {
806-
self.source_map.push(RustSourceMapEntry {
807-
kind: "object_literal_field".to_string(),
808-
source: field.span.clone(),
809-
generated: generated.clone(),
810-
..Default::default()
811-
});
812-
self.record_expr_source_map(&field.value, generated);
813-
}
814-
}
815-
Expr::MapLiteral { entries, span } => {
816-
self.source_map.push(RustSourceMapEntry {
817-
kind: "map_literal".to_string(),
818-
source: span.clone(),
819-
generated: generated.clone(),
820-
..Default::default()
821-
});
822-
for entry in entries {
823-
self.source_map.push(RustSourceMapEntry {
824-
kind: "map_literal_entry".to_string(),
825-
source: entry.span.clone(),
826-
generated: generated.clone(),
827-
..Default::default()
828-
});
829-
self.record_expr_source_map(&entry.key, generated);
830-
self.record_expr_source_map(&entry.value, generated);
831-
}
832-
}
833-
Expr::ArrayLiteral { items, span } => {
834-
self.source_map.push(RustSourceMapEntry {
835-
kind: "array_literal".to_string(),
836-
source: span.clone(),
837-
generated: generated.clone(),
838-
..Default::default()
839-
});
840-
for item in items {
841-
self.record_expr_source_map(item, generated);
842-
}
843-
}
844-
Expr::Ident(_, span) => self.source_map.push(RustSourceMapEntry {
845-
kind: "ident".to_string(),
846-
source: span.clone(),
847-
generated: generated.clone(),
848-
..Default::default()
849-
}),
850-
Expr::Number(_, span) => self.source_map.push(RustSourceMapEntry {
851-
kind: "number".to_string(),
852-
source: span.clone(),
853-
generated: generated.clone(),
854-
..Default::default()
855-
}),
856-
Expr::String(_, span) | Expr::MultilineString(_, span) => {
857-
self.source_map.push(RustSourceMapEntry {
858-
kind: "string".to_string(),
859-
source: span.clone(),
860-
generated: generated.clone(),
861-
..Default::default()
862-
})
863-
}
864-
Expr::Unknown(_) => {}
865-
}
866-
}
867578

868579
pub(super) fn is_native_boundary_call(&self, callee: &Callee) -> bool {
869580
let key = native_boundary_callee_key(callee);

0 commit comments

Comments
 (0)