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), | ||||
| 
 | ||||
|     /// Attempt to call something that is not callable.
 | ||||
|     NotCallable, | ||||
|     NotCallable(&'static str), | ||||
| 
 | ||||
|     /// Infinite recursion encountered while forcing thunks.
 | ||||
|     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::NotCallable => { | ||||
|                 "this value is not callable (i.e. not a function or builtin)".to_string() | ||||
|             ErrorKind::NotCallable(other_type) => { | ||||
|                 format!( | ||||
|                     "only functions and builtins can be called, but this is a '{}'", | ||||
|                     other_type | ||||
|                 ) | ||||
|             } | ||||
| 
 | ||||
|             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::UnknownDynamicVariable(_) => "E011", | ||||
|             ErrorKind::VariableAlreadyDefined(_) => "E012", | ||||
|             ErrorKind::NotCallable => "E013", | ||||
|             ErrorKind::NotCallable(_) => "E013", | ||||
|             ErrorKind::InfiniteRecursion => "E014", | ||||
|             ErrorKind::ParseErrors(_) => "E015", | ||||
|             ErrorKind::DuplicateAttrsKey { .. } => "E016", | ||||
|  |  | |||
|  | @ -193,7 +193,7 @@ impl<'o> VM<'o> { | |||
|             Value::Thunk(t) => self.call_value(&t.value()), | ||||
| 
 | ||||
|             // 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
 | ||||
|                         } | ||||
| 
 | ||||
|                         _ => 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