@@ -460,13 +460,13 @@ impl PythonArchEval {
460
460
if !self . file_mode {
461
461
deps. push ( vec ! [ ] ) ;
462
462
}
463
- let mut ann_evaluations = assign. annotation . as_ref ( ) . map ( |annotation| Evaluation :: eval_from_ast ( session, annotation, parent. clone ( ) , & range. start ( ) , & mut deps) ) ;
463
+ let mut ann_evaluations = assign. annotation . as_ref ( ) . map ( |annotation| Evaluation :: eval_from_ast ( session, annotation, parent. clone ( ) , & range. start ( ) , true , & mut deps) ) ;
464
464
Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
465
465
deps = vec ! [ vec![ ] , vec![ ] ] ;
466
466
if !self . file_mode {
467
467
deps. push ( vec ! [ ] ) ;
468
468
}
469
- let value_evaluations = assign. value . as_ref ( ) . map ( |value| Evaluation :: eval_from_ast ( session, value, parent. clone ( ) , & range. start ( ) , & mut deps) ) ;
469
+ let value_evaluations = assign. value . as_ref ( ) . map ( |value| Evaluation :: eval_from_ast ( session, value, parent. clone ( ) , & range. start ( ) , false , & mut deps) ) ;
470
470
Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
471
471
let mut take_value = false ;
472
472
if let Some ( ( ref val_eval, ref _diags) ) = value_evaluations{
@@ -561,7 +561,7 @@ impl PythonArchEval {
561
561
// Check the whole attribute chain, to see if we are in a field of the model that is valid
562
562
// so for z.a.b.c, checks, z.a, z.a.b, z.a.b.c, if one of them is valid it is okay
563
563
' while_block: while matches ! ( expr, Expr :: Attribute ( _) ) {
564
- let assignee = Evaluation :: eval_from_ast ( session, & expr, self . sym_stack . last ( ) . unwrap ( ) . clone ( ) , & attr_expr. range . start ( ) , & mut vec ! [ ] ) ;
564
+ let assignee = Evaluation :: eval_from_ast ( session, & expr, self . sym_stack . last ( ) . unwrap ( ) . clone ( ) , & attr_expr. range . start ( ) , false , & mut vec ! [ ] ) ;
565
565
for evaluation in assignee. 0 {
566
566
let evaluation_symbol_ptr = evaluation. symbol . get_symbol_weak_transformed ( session, & mut None , & mut vec ! [ ] , None ) ;
567
567
let Some ( sym_rc) = evaluation_symbol_ptr. upgrade_weak ( ) else {
@@ -627,7 +627,7 @@ impl PythonArchEval {
627
627
fn load_base_classes ( & mut self , session : & mut SessionInfo , loc_sym : & Rc < RefCell < Symbol > > , class_stmt : & StmtClassDef ) {
628
628
for base in class_stmt. bases ( ) {
629
629
let mut deps = vec ! [ vec![ ] , vec![ ] ] ;
630
- let eval_base = Evaluation :: eval_from_ast ( session, base, self . sym_stack . last ( ) . unwrap ( ) . clone ( ) , & class_stmt. range ( ) . start ( ) , & mut deps) ;
630
+ let eval_base = Evaluation :: eval_from_ast ( session, base, self . sym_stack . last ( ) . unwrap ( ) . clone ( ) , & class_stmt. range ( ) . start ( ) , false , & mut deps) ;
631
631
Symbol :: insert_dependencies ( & self . file , & mut deps, BuildSteps :: ARCH_EVAL ) ;
632
632
self . diagnostics . extend ( eval_base. 1 ) ;
633
633
let eval_base = eval_base. 0 ;
@@ -738,7 +738,9 @@ impl PythonArchEval {
738
738
let ( eval, diags) = Evaluation :: eval_from_ast ( session,
739
739
& arg. parameter . annotation . as_ref ( ) . unwrap ( ) ,
740
740
self . sym_stack . last ( ) . unwrap ( ) . clone ( ) ,
741
- & func_stmt. range . start ( ) , & mut deps) ;
741
+ & func_stmt. range . start ( ) ,
742
+ true ,
743
+ & mut deps) ;
742
744
Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
743
745
let mut var_bw = function_sym. borrow_mut ( ) ;
744
746
let symbol = var_bw. as_func_mut ( ) . symbols . get ( & OYarn :: from ( arg. parameter . name . id . to_string ( ) ) ) . unwrap ( ) . get ( & 0 ) . unwrap ( ) . get ( 0 ) . unwrap ( ) ; //get first declaration
@@ -752,7 +754,9 @@ impl PythonArchEval {
752
754
let ( eval, diags) = Evaluation :: eval_from_ast ( session,
753
755
arg. default . as_ref ( ) . unwrap ( ) ,
754
756
self . sym_stack . last ( ) . unwrap ( ) . clone ( ) ,
755
- & func_stmt. range . start ( ) , & mut deps) ;
757
+ & func_stmt. range . start ( ) ,
758
+ false ,
759
+ & mut deps) ;
756
760
Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
757
761
let mut var_bw = function_sym. borrow_mut ( ) ;
758
762
let symbol = var_bw. as_func_mut ( ) . symbols . get ( & OYarn :: from ( arg. parameter . name . id . to_string ( ) ) ) . unwrap ( ) . get ( & 0 ) . unwrap ( ) . get ( 0 ) . unwrap ( ) ; //get first declaration
@@ -801,7 +805,7 @@ impl PythonArchEval {
801
805
let ( eval_iter_node, diags) = Evaluation :: eval_from_ast ( session,
802
806
& for_stmt. iter ,
803
807
self . sym_stack . last ( ) . unwrap ( ) . clone ( ) ,
804
- & for_stmt. target . range ( ) . start ( ) , & mut deps) ;
808
+ & for_stmt. target . range ( ) . start ( ) , false , & mut deps) ;
805
809
Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
806
810
self . diagnostics . extend ( diags) ;
807
811
if eval_iter_node. len ( ) == 1 { //Only handle values that we are sure about
@@ -874,7 +878,7 @@ impl PythonArchEval {
874
878
if !self . file_mode {
875
879
deps. push ( vec ! [ ] ) ;
876
880
}
877
- let ( eval, diags) = Evaluation :: eval_from_ast ( session, value, func. clone ( ) , & return_stmt. range . start ( ) , & mut deps) ;
881
+ let ( eval, diags) = Evaluation :: eval_from_ast ( session, value, func. clone ( ) , & return_stmt. range . start ( ) , false , & mut deps) ;
878
882
Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
879
883
self . diagnostics . extend ( diags) ;
880
884
FunctionSymbol :: add_return_evaluations ( func, session, eval) ;
@@ -897,7 +901,7 @@ impl PythonArchEval {
897
901
if !self . file_mode {
898
902
deps. push ( vec ! [ ] ) ;
899
903
}
900
- let ( eval, diags) = Evaluation :: eval_from_ast ( session, & item. context_expr , parent, & with_stmt. range . start ( ) , & mut deps) ;
904
+ let ( eval, diags) = Evaluation :: eval_from_ast ( session, & item. context_expr , parent, & with_stmt. range . start ( ) , false , & mut deps) ;
901
905
Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
902
906
let mut evals = vec ! [ ] ;
903
907
for eval in eval. iter ( ) {
@@ -953,13 +957,22 @@ impl PythonArchEval {
953
957
if let Some ( returns_ann) = func_stmt. returns . as_ref ( ) {
954
958
let file_sym = func_sym. borrow ( ) . get_file ( ) . and_then ( |file_weak| file_weak. upgrade ( ) ) ;
955
959
let mut deps = vec ! [ vec![ ] , vec![ ] ] ;
956
- let ( evaluations, diags) = Evaluation :: eval_from_ast (
960
+ let ( mut evaluations, diags) = Evaluation :: eval_from_ast (
957
961
session,
958
962
& returns_ann,
959
963
func_sym. borrow ( ) . parent ( ) . and_then ( |p| p. upgrade ( ) ) . unwrap ( ) ,
960
964
max_infer,
965
+ true ,
961
966
& mut deps,
962
967
) ;
968
+ for eval in evaluations. iter_mut ( ) { //as this is an evaluation, we need to set the instance to true
969
+ match eval. symbol . get_mut_symbol_ptr ( ) {
970
+ EvaluationSymbolPtr :: WEAK ( ref mut sym_weak) => {
971
+ sym_weak. instance = Some ( true ) ;
972
+ } ,
973
+ _ => { }
974
+ }
975
+ }
963
976
if file_sym. is_some ( ) {
964
977
Symbol :: insert_dependencies ( & file_sym. as_ref ( ) . unwrap ( ) , & mut deps, BuildSteps :: ARCH_EVAL ) ;
965
978
}
0 commit comments