mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 12:22:44 +00:00 
			
		
		
		
	LibJS: Throw error in Object::to_string() if string conversion fails
This commit is contained in:
		
							parent
							
								
									95abcc3722
								
							
						
					
					
						commit
						2c6e7dbd07
					
				
					 2 changed files with 14 additions and 3 deletions
				
			
		|  | @ -360,7 +360,13 @@ Value Object::to_string() const | ||||||
|         && to_string_property.is_object() |         && to_string_property.is_object() | ||||||
|         && to_string_property.as_object().is_function()) { |         && to_string_property.as_object().is_function()) { | ||||||
|         auto& to_string_function = static_cast<Function&>(to_string_property.as_object()); |         auto& to_string_function = static_cast<Function&>(to_string_property.as_object()); | ||||||
|         return const_cast<Object*>(this)->interpreter().call(to_string_function, const_cast<Object*>(this)); |         auto& interpreter = const_cast<Object*>(this)->interpreter(); | ||||||
|  |         auto string_value = interpreter.call(to_string_function, const_cast<Object*>(this)); | ||||||
|  |         if (!string_value.is_string()) | ||||||
|  |             interpreter.throw_exception<TypeError>("Cannot convert object to string"); | ||||||
|  |         if (interpreter.exception()) | ||||||
|  |             return {}; | ||||||
|  |         return string_value; | ||||||
|     } |     } | ||||||
|     return js_string(heap(), String::format("[object %s]", class_name())); |     return js_string(heap(), String::format("[object %s]", class_name())); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -69,8 +69,13 @@ String Value::to_string() const | ||||||
|         return String::format("%.4f", as_double()); |         return String::format("%.4f", as_double()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (is_object()) |     if (is_object()) { | ||||||
|         return as_object().to_primitive(Object::PreferredType::String).to_string(); |         auto primitive_value = as_object().to_primitive(Object::PreferredType::String); | ||||||
|  |         // FIXME: Maybe we should pass in the Interpreter& and call interpreter.exception() instead?
 | ||||||
|  |         if (primitive_value.is_empty()) | ||||||
|  |             return {}; | ||||||
|  |         return primitive_value.to_string(); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if (is_string()) |     if (is_string()) | ||||||
|         return m_value.as_string->string(); |         return m_value.as_string->string(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Linus Groh
						Linus Groh