@@ -169,7 +169,7 @@ fn compile_lines(
169169 for ( i, line) in lines. iter ( ) . enumerate ( ) {
170170 match line {
171171 SimpleLine :: ForwardDeclaration { var } => {
172- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
172+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
173173 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
174174 compiler. stack_pos += 1 ;
175175 }
@@ -185,7 +185,7 @@ fn compile_lines(
185185
186186 if let VarOrConstMallocAccess :: Var ( var) = var {
187187 declared_vars. insert ( var. clone ( ) ) ;
188- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
188+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
189189 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
190190 compiler. stack_pos += 1 ;
191191 }
@@ -402,7 +402,7 @@ fn compile_lines(
402402 validate_vars_declared ( & [ index] , declared_vars) ?;
403403 if let SimpleExpr :: Var ( var) = res && !compiler. is_in_scope ( var) {
404404 declared_vars. insert ( var. clone ( ) ) ;
405- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
405+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
406406 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
407407 compiler. stack_pos += 1 ;
408408 }
@@ -442,7 +442,7 @@ fn compile_lines(
442442 validate_vars_declared ( args, declared_vars) ?;
443443 declared_vars. extend ( return_data. iter ( ) . cloned ( ) ) ;
444444 for var in return_data. iter ( ) {
445- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
445+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
446446 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
447447 compiler. stack_pos += 1 ;
448448 }
@@ -522,7 +522,7 @@ fn compile_lines(
522522 vectorized,
523523 vectorized_len,
524524 } => {
525- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
525+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
526526 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
527527 compiler. stack_pos += 1 ;
528528 declared_vars. insert ( var. clone ( ) ) ;
@@ -536,20 +536,18 @@ fn compile_lines(
536536 SimpleLine :: ConstMalloc { var, size, label } => {
537537 let size = size. naive_eval ( ) . unwrap ( ) . to_usize ( ) ; // TODO not very good;
538538 declared_vars. insert ( var. clone ( ) ) ;
539- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
539+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
540540 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
541541 compiler. stack_pos += 1 ;
542- current_scope_layout. const_mallocs . insert ( * label, compiler. stack_pos ) ;
543- handle_const_malloc ( declared_vars, & mut instructions, compiler, var, size, label) ;
544- compiler. stack_pos += size;
542+ handle_const_malloc ( & mut instructions, compiler, var, size, label) ;
545543 }
546544 SimpleLine :: DecomposeBits {
547545 var,
548546 to_decompose,
549547 label,
550548 } => {
551549 declared_vars. insert ( var. clone ( ) ) ;
552- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
550+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
553551 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
554552 compiler. stack_pos += 1 ;
555553
@@ -562,22 +560,20 @@ fn compile_lines(
562560 } ) ;
563561
564562 handle_const_malloc (
565- declared_vars,
566563 & mut instructions,
567564 compiler,
568565 var,
569566 F :: bits ( ) * to_decompose. len ( ) ,
570567 label,
571568 ) ;
572- compiler. stack_pos += F :: bits ( ) * to_decompose. len ( ) ;
573569 }
574570 SimpleLine :: DecomposeCustom {
575571 var,
576572 to_decompose,
577573 label,
578574 } => {
579575 declared_vars. insert ( var. clone ( ) ) ;
580- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
576+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
581577 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
582578 compiler. stack_pos += 1 ;
583579
@@ -590,17 +586,15 @@ fn compile_lines(
590586 } ) ;
591587
592588 handle_const_malloc (
593- declared_vars,
594589 & mut instructions,
595590 compiler,
596591 var,
597592 F :: bits ( ) * to_decompose. len ( ) ,
598593 label,
599594 ) ;
600- compiler. stack_pos += F :: bits ( ) * to_decompose. len ( ) ;
601595 }
602596 SimpleLine :: CounterHint { var } => {
603- let mut current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
597+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
604598 current_scope_layout. var_positions . insert ( var. clone ( ) , compiler. stack_pos ) ;
605599 compiler. stack_pos += 1 ;
606600 declared_vars. insert ( var. clone ( ) ) ;
@@ -640,13 +634,14 @@ fn compile_lines(
640634}
641635
642636fn handle_const_malloc (
643- declared_vars : & mut BTreeSet < Var > ,
644637 instructions : & mut Vec < IntermediateInstruction > ,
645638 compiler : & mut Compiler ,
646639 var : & Var ,
647640 size : usize ,
648641 label : & ConstMallocLabel ,
649642) {
643+ let current_scope_layout = compiler. stack_frame_layout . scopes . last_mut ( ) . unwrap ( ) ;
644+ current_scope_layout. const_mallocs . insert ( * label, compiler. stack_pos ) ;
650645 instructions. push ( IntermediateInstruction :: Computation {
651646 operation : Operation :: Add ,
652647 arg_a : IntermediateValue :: Constant ( compiler. stack_pos . into ( ) ) ,
@@ -655,6 +650,7 @@ fn handle_const_malloc(
655650 offset : compiler. get_offset ( & var. clone ( ) . into ( ) ) ,
656651 } ,
657652 } ) ;
653+ compiler. stack_pos += size;
658654}
659655
660656// Helper functions
0 commit comments