Fix two small bugs, add new example to test
This commit is contained in:
		
							parent
							
								
									c7aacfe756
								
							
						
					
					
						commit
						8f7b785664
					
				
							
								
								
									
										25
									
								
								examples/mutable_inner.reid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								examples/mutable_inner.reid
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | struct Game {} | ||||||
|  | 
 | ||||||
|  | impl Game { | ||||||
|  |     pub fn run_frame(&mut self) {} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | struct Platform { | ||||||
|  |     game: Game, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl Platform { | ||||||
|  |     pub fn new() -> Platform { | ||||||
|  |         return Platform { game: Game {} }; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn run_frame(&mut self) { | ||||||
|  |         *self.game.run_frame(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn main() -> i32 { | ||||||
|  |     let mut platform = Platform::new(); | ||||||
|  |     platform.run_frame(); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
| @ -171,8 +171,9 @@ impl FunctionDefinition { | |||||||
|         let scope_refs = ScopeTypeRefs::from(type_refs); |         let scope_refs = ScopeTypeRefs::from(type_refs); | ||||||
|         for param in &self.parameters { |         for param in &self.parameters { | ||||||
|             let param_t = state.or_else(param.ty.assert_unvague(), Vague(Unknown), self.signature()); |             let param_t = state.or_else(param.ty.assert_unvague(), Vague(Unknown), self.signature()); | ||||||
|  |             let mutable = matches!(param_t, TypeKind::Borrow(_, true)); | ||||||
|             let res = scope_refs |             let res = scope_refs | ||||||
|                 .new_var(param.name.clone(), false, ¶m_t) |                 .new_var(param.name.clone(), mutable, ¶m_t) | ||||||
|                 .or(Err(ErrorKind::VariableAlreadyDefined(param.name.clone()))); |                 .or(Err(ErrorKind::VariableAlreadyDefined(param.name.clone()))); | ||||||
|             state.ok(res, self.signature()); |             state.ok(res, self.signature()); | ||||||
|         } |         } | ||||||
| @ -605,7 +606,7 @@ impl Expression { | |||||||
|                             .parameters |                             .parameters | ||||||
|                             .get_mut(0) |                             .get_mut(0) | ||||||
|                             .expect("Unknown-type associated function NEEDS to always have at least one parameter!"); |                             .expect("Unknown-type associated function NEEDS to always have at least one parameter!"); | ||||||
|                         let param_ty = first_param.infer_types(state, type_refs).unwrap().resolve_deep(); |                         let param_ty = first_param.infer_types(state, type_refs)?.resolve_deep(); | ||||||
|                         *type_kind = state |                         *type_kind = state | ||||||
|                             .or_else( |                             .or_else( | ||||||
|                                 param_ty.ok_or(ErrorKind::CouldNotInferType(format!("{}", first_param))), |                                 param_ty.ok_or(ErrorKind::CouldNotInferType(format!("{}", first_param))), | ||||||
|  | |||||||
| @ -152,3 +152,8 @@ fn associated_functions() { | |||||||
|         Some(4), |         Some(4), | ||||||
|     ); |     ); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | #[test] | ||||||
|  | fn mutable_inner_functions() { | ||||||
|  |     test(include_str!("../../examples/mutable_inner.reid"), "test", Some(0)); | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user