Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > a89df24b3c34782b2b9adf0ab690227f > files > 15

dyalog-1.11.3-1mdv2008.1.i586.rpm

/* $Id: builtins.h 566 2006-11-06 17:20:50Z clerger $
 * Copyright (C) 1997, 2004, 2006 Eric de la Clergerie
 * ------------------------------------------------------------
 *
 *   BuilIns -- 
 *
 * ------------------------------------------------------------
 * Description
 *
 * ------------------------------------------------------------
 */

#ifndef READ_BUILTINS
#define READ_BUILTINS

#define Declare_Object_Initializer(f)		\
void (f)();

#define NOT_A_WAM_WORD      (fol_t) 0
#define True                (Bool) 1
#define False               (Bool) 0

#define Sk(n)               k_##n

#define S(n)                n,Sk(n)

#define Sdecl(n)				\
        fol_t     n;				\
        fkey_t    Sk(n)

#define Sinit(_n,_m)				\
        fol_t   _n=_m;				\
	fkey_t  Sk(_n)=Sk(_m)

#define Sproto               fol_t, fkey_t

#define SP(n)               fol_t n, fkey_t Sk(n)
    
#define Sassign(A,v,k)     (A=v,Sk(A)=k)

#define Deref( a )        if( FOL_DEREFP( a ) ) CLOSURE_UL_DEREF(a,Sk(a))

#define Loop_Deref( a )   if( FOL_DEREFP( a ) ) LOOP_DEREF(a,Sk(a))

#define Bind( t, l, X )   TRAIL_UBIND(X,Sk(X),t,l)

#define ImmediateBind( v , A) (FOLVARP(A) && ( Bind(v,Key0,A) , True ))

#define Get_Cst( n, A )				\
({						\
  Deref(A);					\
  ( A == n) || ImmediateBind( n, A);		\
})

#define Get_Nil( A )         Get_Cst( FOLNIL, A)
#define Get_Integer( n, A)   Get_Cst( n     , A)
#define Get_Char( c, A )     Get_Cst( c     , A)

#define Unif_Bind(a,ka,b,kb)      sfol_unif_bind(a,ka,b,kb)
#define Subs_Bind(a,ka,b,kb)      TRAIL_SBIND(a,ka,b,kb)

#define Unify(r,k,t,l)   sfol_unify(r,k,t,l)

#define Fail            return False
#define Succeed         return True
#define Key0            ((fkey_t) 0)

#define Trail           TRAIL_LAYER()
#define Untrail         untrail_layer()

#define SymbolName( s )      FOLSMB( s )->name

#define Convert_To_Atom( s )       FOLSMB_MAKE( FOLSMB_INDEX( s ), 0)
#define Create_Allocate_Atom( s )  find_folsmb(s,0)
#define Create_Atom( s )           find_folsmb(s,0)

#define Create_Pair( car, cdr )   folcmp_create_pair( car, cdr )

#define Functor_Arity(n,a)        find_folsmb(n,a)

#define System_Error(s)                         \
    ({                                          \
        perror(s);                              \
        exit(EXIT_FAILURE);                     \
    })

#define Fatal_Error( s, args...  )		\
     ({						\
       fprintf(stderr, s "\n", ## args);	\
       exit(EXIT_FAILURE);					\
     })

#define Deref_And_Fail_Unless(_X,_test)		\
     Deref(_X);					\
     if (!(_test)) Fail;


#define Unify_Or_Fail( r, k, t, l)		\
     if (!sfol_unify(r,k,t,l)) Fail

#define Subsume_Or_Fail( r, k, t, l)		\
     if (!sfol_subsume(r,k,t,l)) Fail

/**********************************************************************
 * For foreigns 
 **********************************************************************/

typedef int ForeignWord;

#ifdef DYAM_FILE
ForeignWord   foreign_bkt_counter;
ForeignWord *foreign_bkt_buffer;
#else
extern ForeignWord   foreign_bkt_counter;
extern ForeignWord *foreign_bkt_buffer;
#endif

#define Get_Choice_Counter()   foreign_bkt_counter
#define Get_Choice_Buffer(t)   ((t) foreign_bkt_buffer)
#define No_More_Choice()                       \
        LVALUE_C_CTL_TOP=REG_VALUE(((TrailWord *) R_B)-1);       \
        LVALUE_R_BC=REG_VALUE(R_B->bc) ;                         \
        LVALUE_R_B= REG_VALUE(R_B->prev)

typedef struct sfol {
    fol_t t;
    fkey_t k;
} * sfol_t;

#define SFOL_Deref( a )        if( FOL_DEREFP( a->t ) ) CLOSURE_UL_DEREF(a->t,a->k)

/**********************************************************************
 * Prototypes
 **********************************************************************/

//extern int    Chars_To_String( char*, Sproto);
//extern Bool String_To_Chars( char*, Sproto);

//extern fol_t  read_fol_number( char* );

#include "stream_supp.h"

extern void sfol_display( Sproto );
extern void sfol_fdisplay( StmInf *, Sproto );
extern void fol_display( fol_t );
extern void fol_fdisplay( StmInf *, fol_t);
extern void fol_print( fol_t );
extern void sfol_print( Sproto );
extern void subst_fdisplay( StmInf *, Sproto );
extern void subst_display( Sproto );
extern void callret_fdisplay( StmInf *, Sproto);

extern void Dyam_Remove_Choice();
extern void Dyam_Full_Choice(continuation_t fun, int n);

extern void DyALog_Assign_Display_Info( sfol_t );
extern Bool forest_indirect( obj_t );

#endif /* READ_BUILTINS */