feat(tvix/eval): track other type in NotCallable error kind
This makes for slightly nicer error messages if something isn't, well, callable. Change-Id: I821c8d7447b93aea9ccaaa52ed329de0cca4b18e Reviewed-on: https://cl.tvl.fyi/c/depot/+/6718 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
		
							parent
							
								
									8f2004d360
								
							
						
					
					
						commit
						489395448f
					
				
					 2 changed files with 9 additions and 6 deletions
				
			
		|  | @ -60,7 +60,7 @@ pub enum ErrorKind { | ||||||
|     VariableAlreadyDefined(Span), |     VariableAlreadyDefined(Span), | ||||||
| 
 | 
 | ||||||
|     /// Attempt to call something that is not callable.
 |     /// Attempt to call something that is not callable.
 | ||||||
|     NotCallable, |     NotCallable(&'static str), | ||||||
| 
 | 
 | ||||||
|     /// Infinite recursion encountered while forcing thunks.
 |     /// Infinite recursion encountered while forcing thunks.
 | ||||||
|     InfiniteRecursion, |     InfiniteRecursion, | ||||||
|  | @ -191,8 +191,11 @@ to a missing value in the attribute set(s) included via `with`."#, | ||||||
| 
 | 
 | ||||||
|             ErrorKind::VariableAlreadyDefined(_) => "variable has already been defined".to_string(), |             ErrorKind::VariableAlreadyDefined(_) => "variable has already been defined".to_string(), | ||||||
| 
 | 
 | ||||||
|             ErrorKind::NotCallable => { |             ErrorKind::NotCallable(other_type) => { | ||||||
|                 "this value is not callable (i.e. not a function or builtin)".to_string() |                 format!( | ||||||
|  |                     "only functions and builtins can be called, but this is a '{}'", | ||||||
|  |                     other_type | ||||||
|  |                 ) | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             ErrorKind::InfiniteRecursion => "infinite recursion encountered".to_string(), |             ErrorKind::InfiniteRecursion => "infinite recursion encountered".to_string(), | ||||||
|  | @ -261,7 +264,7 @@ to a missing value in the attribute set(s) included via `with`."#, | ||||||
|             ErrorKind::UnknownStaticVariable => "E010", |             ErrorKind::UnknownStaticVariable => "E010", | ||||||
|             ErrorKind::UnknownDynamicVariable(_) => "E011", |             ErrorKind::UnknownDynamicVariable(_) => "E011", | ||||||
|             ErrorKind::VariableAlreadyDefined(_) => "E012", |             ErrorKind::VariableAlreadyDefined(_) => "E012", | ||||||
|             ErrorKind::NotCallable => "E013", |             ErrorKind::NotCallable(_) => "E013", | ||||||
|             ErrorKind::InfiniteRecursion => "E014", |             ErrorKind::InfiniteRecursion => "E014", | ||||||
|             ErrorKind::ParseErrors(_) => "E015", |             ErrorKind::ParseErrors(_) => "E015", | ||||||
|             ErrorKind::DuplicateAttrsKey { .. } => "E016", |             ErrorKind::DuplicateAttrsKey { .. } => "E016", | ||||||
|  |  | ||||||
|  | @ -193,7 +193,7 @@ impl<'o> VM<'o> { | ||||||
|             Value::Thunk(t) => self.call_value(&t.value()), |             Value::Thunk(t) => self.call_value(&t.value()), | ||||||
| 
 | 
 | ||||||
|             // TODO: this isn't guaranteed to be a useful span, actually
 |             // TODO: this isn't guaranteed to be a useful span, actually
 | ||||||
|             _ => Err(self.error(ErrorKind::NotCallable)), |             other => Err(self.error(ErrorKind::NotCallable(other.type_of()))), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -499,7 +499,7 @@ impl<'o> VM<'o> { | ||||||
|                             frame.ip = CodeIdx(0); // reset instruction pointer to beginning
 |                             frame.ip = CodeIdx(0); // reset instruction pointer to beginning
 | ||||||
|                         } |                         } | ||||||
| 
 | 
 | ||||||
|                         _ => return Err(self.error(ErrorKind::NotCallable)), |                         _ => return Err(self.error(ErrorKind::NotCallable(callable.type_of()))), | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue