@@ -460,13 +460,13 @@ impl PythonArchEval {
460460 if !self . file_mode {
461461 deps. push ( vec ! [ ] ) ;
462462 }
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) ) ;
464464 Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
465465 deps = vec ! [ vec![ ] , vec![ ] ] ;
466466 if !self . file_mode {
467467 deps. push ( vec ! [ ] ) ;
468468 }
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) ) ;
470470 Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
471471 let mut take_value = false ;
472472 if let Some ( ( ref val_eval, ref _diags) ) = value_evaluations{
@@ -561,7 +561,7 @@ impl PythonArchEval {
561561 // Check the whole attribute chain, to see if we are in a field of the model that is valid
562562 // 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
563563 ' 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 ! [ ] ) ;
565565 for evaluation in assignee. 0 {
566566 let evaluation_symbol_ptr = evaluation. symbol . get_symbol_weak_transformed ( session, & mut None , & mut vec ! [ ] , None ) ;
567567 let Some ( sym_rc) = evaluation_symbol_ptr. upgrade_weak ( ) else {
@@ -627,7 +627,7 @@ impl PythonArchEval {
627627 fn load_base_classes ( & mut self , session : & mut SessionInfo , loc_sym : & Rc < RefCell < Symbol > > , class_stmt : & StmtClassDef ) {
628628 for base in class_stmt. bases ( ) {
629629 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) ;
631631 Symbol :: insert_dependencies ( & self . file , & mut deps, BuildSteps :: ARCH_EVAL ) ;
632632 self . diagnostics . extend ( eval_base. 1 ) ;
633633 let eval_base = eval_base. 0 ;
@@ -738,7 +738,9 @@ impl PythonArchEval {
738738 let ( eval, diags) = Evaluation :: eval_from_ast ( session,
739739 & arg. parameter . annotation . as_ref ( ) . unwrap ( ) ,
740740 self . sym_stack . last ( ) . unwrap ( ) . clone ( ) ,
741- & func_stmt. range . start ( ) , & mut deps) ;
741+ & func_stmt. range . start ( ) ,
742+ true ,
743+ & mut deps) ;
742744 Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
743745 let mut var_bw = function_sym. borrow_mut ( ) ;
744746 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 {
752754 let ( eval, diags) = Evaluation :: eval_from_ast ( session,
753755 arg. default . as_ref ( ) . unwrap ( ) ,
754756 self . sym_stack . last ( ) . unwrap ( ) . clone ( ) ,
755- & func_stmt. range . start ( ) , & mut deps) ;
757+ & func_stmt. range . start ( ) ,
758+ false ,
759+ & mut deps) ;
756760 Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
757761 let mut var_bw = function_sym. borrow_mut ( ) ;
758762 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 {
801805 let ( eval_iter_node, diags) = Evaluation :: eval_from_ast ( session,
802806 & for_stmt. iter ,
803807 self . sym_stack . last ( ) . unwrap ( ) . clone ( ) ,
804- & for_stmt. target . range ( ) . start ( ) , & mut deps) ;
808+ & for_stmt. target . range ( ) . start ( ) , false , & mut deps) ;
805809 Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
806810 self . diagnostics . extend ( diags) ;
807811 if eval_iter_node. len ( ) == 1 { //Only handle values that we are sure about
@@ -874,7 +878,7 @@ impl PythonArchEval {
874878 if !self . file_mode {
875879 deps. push ( vec ! [ ] ) ;
876880 }
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) ;
878882 Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
879883 self . diagnostics . extend ( diags) ;
880884 FunctionSymbol :: add_return_evaluations ( func, session, eval) ;
@@ -897,7 +901,7 @@ impl PythonArchEval {
897901 if !self . file_mode {
898902 deps. push ( vec ! [ ] ) ;
899903 }
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) ;
901905 Symbol :: insert_dependencies ( & self . file , & mut deps, self . current_step ) ;
902906 let mut evals = vec ! [ ] ;
903907 for eval in eval. iter ( ) {
@@ -953,13 +957,22 @@ impl PythonArchEval {
953957 if let Some ( returns_ann) = func_stmt. returns . as_ref ( ) {
954958 let file_sym = func_sym. borrow ( ) . get_file ( ) . and_then ( |file_weak| file_weak. upgrade ( ) ) ;
955959 let mut deps = vec ! [ vec![ ] , vec![ ] ] ;
956- let ( evaluations, diags) = Evaluation :: eval_from_ast (
960+ let ( mut evaluations, diags) = Evaluation :: eval_from_ast (
957961 session,
958962 & returns_ann,
959963 func_sym. borrow ( ) . parent ( ) . and_then ( |p| p. upgrade ( ) ) . unwrap ( ) ,
960964 max_infer,
965+ true ,
961966 & mut deps,
962967 ) ;
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+ }
963976 if file_sym. is_some ( ) {
964977 Symbol :: insert_dependencies ( & file_sym. as_ref ( ) . unwrap ( ) , & mut deps, BuildSteps :: ARCH_EVAL ) ;
965978 }
0 commit comments