|  |  | @ -712,16 +712,16 @@ ADD_FUNCTION( | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		CHECK_ARG_COUNT_EVEN("hash-map", SIZE()); |  |  |  | 		CHECK_ARG_COUNT_EVEN("hash-map", SIZE()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		auto result = makePtr<HashMap>(); |  |  |  | 		Elements elements; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		for (auto it = begin; it != end; std::advance(it, 2)) { |  |  |  | 		for (auto it = begin; it != end; std::advance(it, 2)) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			result->add(*it, *(std::next(it))); |  |  |  | 			const ValuePtr& value = *(std::next(it)); // temporary instance to get around const
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			elements.insert_or_assign(HashMap::getKeyString(*it), value); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return result; |  |  |  | 		return makePtr<HashMap>(elements); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	}); |  |  |  | 	}); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // (assoc {:a 1 :b 2} :a 3 :c 1)
 |  |  |  | // (assoc {:a 1 :b 2} :a 3 :c 1) -> {:a 3 :b 2 :c 1}
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | ADD_FUNCTION( |  |  |  | ADD_FUNCTION( | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"assoc", |  |  |  | 	"assoc", | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
	
		
		
			
				
					|  |  | @ -732,15 +732,16 @@ ADD_FUNCTION( | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		CHECK_ARG_COUNT_EVEN("assoc", SIZE()); |  |  |  | 		CHECK_ARG_COUNT_EVEN("assoc", SIZE()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		auto result = makePtr<HashMap>(hash_map->elements()); |  |  |  | 		Elements elements(hash_map->elements()); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		for (auto it = begin; it != end; std::advance(it, 2)) { |  |  |  | 		for (auto it = begin; it != end; std::advance(it, 2)) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			result->add(*it, *(std::next(it))); |  |  |  | 			const ValuePtr& value = *(std::next(it)); // temporary instance to get around const
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			elements.insert_or_assign(HashMap::getKeyString(*it), value); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return result; |  |  |  | 		return makePtr<HashMap>(elements); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	}); |  |  |  | 	}); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | // (dissoc {:a 1 :b 2 :c 3} :a :c :d) -> {:b 2}
 | 
			
		
	
		
		
			
				
					
					|  |  |  | ADD_FUNCTION( |  |  |  | ADD_FUNCTION( | 
			
		
	
		
		
			
				
					
					|  |  |  | 	"dissoc", |  |  |  | 	"dissoc", | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
	
		
		
			
				
					|  |  | @ -749,13 +750,12 @@ ADD_FUNCTION( | 
			
		
	
		
		
			
				
					
					|  |  |  | 		VALUE_CAST(hash_map, HashMap, (*begin)); |  |  |  | 		VALUE_CAST(hash_map, HashMap, (*begin)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		begin++; |  |  |  | 		begin++; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		auto result = makePtr<HashMap>(hash_map->elements()); |  |  |  | 		Elements elements(hash_map->elements()); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		for (auto it = begin; it != end; ++it) { |  |  |  | 		for (auto it = begin; it != end; ++it) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			result->remove(*it); |  |  |  | 			elements.erase(HashMap::getKeyString(*it)); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return result; |  |  |  | 		return makePtr<HashMap>(elements); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	}); |  |  |  | 	}); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // (get {:kw "value"} :kw) -> "value"
 |  |  |  | // (get {:kw "value"} :kw) -> "value"
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |