| 
									
										
										
										
											2009-10-07 16:48:09 -04:00
										 |  |  | namespace factor | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct full_policy { | 
					
						
							| 
									
										
										
										
											2009-10-18 21:31:59 -04:00
										 |  |  | 	factor_vm *parent; | 
					
						
							| 
									
										
										
										
											2009-10-20 16:15:05 -04:00
										 |  |  | 	tenured_space *tenured; | 
					
						
							| 
									
										
										
										
											2009-10-07 16:48:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-25 00:02:58 -04:00
										 |  |  | 	explicit full_policy(factor_vm *parent_) : parent(parent_), tenured(parent->data->tenured) {} | 
					
						
							| 
									
										
										
										
											2009-10-07 16:48:09 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	bool should_copy_p(object *untagged) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return !tenured->contains_p(untagged); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-10-20 23:20:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void promoted_object(object *obj) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2009-11-23 19:51:08 -05:00
										 |  |  | 		tenured->set_marked_p(obj); | 
					
						
							|  |  |  | 		parent->mark_stack.push_back((cell)obj); | 
					
						
							| 
									
										
										
										
											2009-10-20 23:20:49 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void visited_object(object *obj) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if(!tenured->marked_p(obj)) | 
					
						
							| 
									
										
										
										
											2009-11-23 19:51:08 -05:00
										 |  |  | 			promoted_object(obj); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-20 23:20:49 -04:00
										 |  |  | struct full_collector : collector<tenured_space,full_policy> { | 
					
						
							| 
									
										
										
										
											2010-06-11 20:06:00 -04:00
										 |  |  | 	code_block_visitor<gc_workhorse<tenured_space,full_policy> > code_visitor; | 
					
						
							| 
									
										
										
										
											2009-10-07 16:48:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-25 00:02:58 -04:00
										 |  |  | 	explicit full_collector(factor_vm *parent_); | 
					
						
							| 
									
										
										
										
											2009-11-23 19:51:08 -05:00
										 |  |  | 	void trace_code_block(code_block *compiled); | 
					
						
							|  |  |  | 	void trace_context_code_blocks(); | 
					
						
							| 
									
										
										
										
											2011-10-30 21:41:48 -04:00
										 |  |  | 	void trace_code_roots(); | 
					
						
							| 
									
										
										
										
											2009-11-23 19:51:08 -05:00
										 |  |  | 	void trace_object_code_block(object *obj); | 
					
						
							| 
									
										
										
										
											2009-10-07 16:48:09 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |