Removed trampoline for keycallback in subtermunify.
This commit is contained in:
		
							parent
							
								
									d81a138040
								
							
						
					
					
						commit
						499b4f8987
					
				
							
								
								
									
										25
									
								
								src/mgu.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/mgu.c
									
									
									
									
									
								
							| @ -287,6 +287,22 @@ unify (Term t1, Term t2, Termlist tl, int (*callback) (), void *state) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /**
 | ||||
|  * State for subterm unification call into keycallback | ||||
|  */ | ||||
| struct su_kcb_state | ||||
| { | ||||
|   int (*callback) (Termlist, Termlist); | ||||
|   Termlist keylist; | ||||
| }; | ||||
| 
 | ||||
| int | ||||
| keycallback (Termlist tl, struct su_kcb_state *ptr_kcb_state) | ||||
| { | ||||
|   assert (ptr_kcb_state != NULL); | ||||
|   return ptr_kcb_state->callback (tl, ptr_kcb_state->keylist); | ||||
| } | ||||
| 
 | ||||
| //! Subterm unification
 | ||||
| /**
 | ||||
|  * Try to unify (a subterm of) tbig with tsmall. | ||||
| @ -307,11 +323,10 @@ subtermUnify (Term tbig, Term tsmall, Termlist tl, Termlist keylist, | ||||
| 	      int (*callback) (Termlist, Termlist)) | ||||
| { | ||||
|   int proceed; | ||||
|   struct su_kcb_state kcb_state; | ||||
| 
 | ||||
|   int keycallback (Termlist tl) | ||||
|   { | ||||
|     return callback (tl, keylist); | ||||
|   } | ||||
|   kcb_state.callback = callback; | ||||
|   kcb_state.keylist = keylist; | ||||
| 
 | ||||
|   proceed = true; | ||||
| 
 | ||||
| @ -321,7 +336,7 @@ subtermUnify (Term tbig, Term tsmall, Termlist tl, Termlist keylist, | ||||
| 
 | ||||
|   // Three options:
 | ||||
|   // 1. simple unification
 | ||||
|   proceed = proceed && unify (tbig, tsmall, tl, keycallback, NULL); | ||||
|   proceed = proceed && unify (tbig, tsmall, tl, keycallback, &kcb_state); | ||||
| 
 | ||||
|   // [2/3]: complex
 | ||||
|   if (switches.intruder) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user