make cut_c default.

This commit is contained in:
Vítor Manuel de Morais Santos Costa 2010-01-15 15:09:18 +00:00
parent ffdf270a3d
commit af32dc1a9c
6 changed files with 24 additions and 21 deletions

View File

@ -18,11 +18,11 @@ struct cut_c_str{
#define CUT_C_STR_SIZE ((sizeof(struct cut_c_str))/(sizeof(CELL)))
#define EXTRA_CBACK_CUT_ARG(Type,Offset) \
((Type) (*(Type *)(((CELL *)Yap_REGS.CUT_C_TOP) - (((yamop *)Yap_REGS.CUT_C_TOP->try_userc_cut_yamop)->u.lds.extra)) + (Offset-1)))
((Type) (*(Type *)(((CELL *)Yap_REGS.CUT_C_TOP) - (((yamop *)Yap_REGS.CUT_C_TOP->try_userc_cut_yamop)->u.OtapFs.extra)) + (Offset-1)))
#define CUT_C_PUSH(YAMOP,S_YREG) \
{ \
if ((YAMOP)->u.lds.f){ \
if ((YAMOP)->u.OtapFs.f){ \
S_YREG = S_YREG - CUT_C_STR_SIZE; \
cut_c_str_ptr new_top = (cut_c_str_ptr) S_YREG; \
new_top->try_userc_cut_yamop = YAMOP; \
@ -38,8 +38,8 @@ struct cut_c_str{
#define POP_EXECUTE() \
cut_c_str_ptr TOP = Yap_REGS.CUT_C_TOP; \
CPredicate func = (CPredicate)((yamop *)TOP->try_userc_cut_yamop)->u.lds.f; \
PredEntry *pred = (PredEntry *)((yamop *)TOP->try_userc_cut_yamop)->u.lds.p; \
CPredicate func = (CPredicate)((yamop *)TOP->try_userc_cut_yamop)->u.OtapFs.f; \
PredEntry *pred = (PredEntry *)((yamop *)TOP->try_userc_cut_yamop)->u.OtapFs.p; \
YAP_Execute(pred,func); \
cut_c_pop();

View File

@ -49,7 +49,7 @@ DOCSDIR=$(SHAREDIR)/docs/yap
#
# check also optimisation options in INSTALL file.
#
YAP_EXTRAS=@YAP_EXTRAS@
YAP_EXTRAS=-DCUT_C=1 @YAP_EXTRAS@
YAPSTARTUP=startup.yss

View File

@ -14921,14 +14921,16 @@ YAP, in the initialization routine, with a call to
where @var{name} is the name of the predicate, @var{fn} is the C function
implementing the predicate and @var{arity} is its arity.
@findex YAP_UserBackCPredicate (C-Interface function)
@findex YAP_UserBackCPredicate (C-Interface function, deprecated)
@findex YAP_UserBackCutCPredicate (C-Interface function)
@findex YAP_PRESERVE_DATA (C-Interface function)
@findex YAP_PRESERVED_DATA (C-Interface function)
@findex YAP_cutsucceed (C-Interface function)
@findex YAP_cutfail (C-Interface function)
For the second kind of predicates we need two C functions. The first one
which is called when the predicate is first activated, and the second one
to be called on backtracking to provide (possibly) other solutions. Note
For the second kind of predicates we need three C functions. The first one
is called when the predicate is first activated; the second one
is called on backtracking to provide (possibly) other solutions; the
last one is called on pruning. Note
also that we normally also need to preserve some information to find out
the next solution.
@ -15050,25 +15052,26 @@ Backtrackable predicates should be declared to YAP, in a way
similar to what happened with deterministic ones, but using instead a
call to
@example
void YAP_UserBackCPredicate(char *@var{name},
int *@var{init}(), int *@var{cont}(),
void YAP_UserBackCutCPredicate(char *@var{name},
int *@var{init}(), int *@var{cont}(), int *@var{cut}(),
unsigned long int @var{arity}, unsigned int @var{sizeof});
@end example
@noindent
where @var{name} is a string with the name of the predicate, @var{init} and
@var{cont} are the C functions used to start and continue the execution of
the predicate, @var{arity} is the predicate arity, and @var{sizeof} is
the size of the data to be preserved in the stack. In this example, we
would have something like
where @var{name} is a string with the name of the predicate, @var{init},
@var{cont}, @var{cut} are the C functions used to start, continue and
when pruning the execution of the predicate, @var{arity} is the
predicate arity, and @var{sizeof} is the size of the data to be
preserved in the stack. In this example, we would have something like
@example
void
init_n100(void)
@{
YAP_UserBackCPredicate("n100", start_n100, continue_n100, 1, 1);
YAP_UserBackCutCPredicate("n100", start_n100, continue_n100, NULL, 1, 1);
@}
@end example
Notice that we do not actually need to do anything on receiving a cut in
this case.
@node Loading Objects, Save&Rest, Writing C, C-Interface
@section Loading Object Files

View File

@ -2088,7 +2088,7 @@ X_API void PL_register_foreign_in_module(const char *module, const char *name, i
nflags |= CArgsPredFlag;
}
if (flags & PL_FA_NONDETERMINISTIC) {
Yap_InitCPredBack((char *)name, arity, sizeof(struct foreign_context)/sizeof(CELL), (CPredicate)function, (CPredicate)function, UserCPredFlag|nflags);
Yap_InitCutCPredBack((char *)name, arity, sizeof(struct foreign_context)/sizeof(CELL), (CPredicate)function, (CPredicate)function, (CPredicate)function, UserCPredFlag|nflags);
} else {
UserCPredicate((char *)name,(CPredicate)function,arity,tmod,nflags);
}

@ -1 +1 @@
Subproject commit 5f7abe62fc770d680b78c3f3e8b65951c7004850
Subproject commit f6bb7821268b5c6df1ce83a9d60af1f90a9dd673

@ -1 +1 @@
Subproject commit 25bfaa3370ca6f6a2b23d8dcc6dda84a2773d40a
Subproject commit d661852f76fe24441d983ef6f4e60ba90cfe17c4