Go to the documentation of this file.
10 #define WFProve(A) { char *c=(A);if(!WFInput(c)) \
11 fprintf(stderr,"%s failed (%s, line %d)\n",c,__FILE__,__LINE__); }
15 #define NOTQUIET (!quietflag || verbose)
20 #define HEAP_ALLOC(A) (A *)heap_alloc(sizeof(A))
21 #define STACK_ALLOC(A) (A *)stack_alloc(sizeof(A))
23 #define UN_CODED (CODE)0L
31 #define FUNC_ARG(t) ((t)<match_date || (GENERIC)(t)>=heap_pointer)
42 #define DIGIT(C) (C>='0' && C<='9')
44 #define UPPER(C) ((C>='A' && C<='Z') || C=='_')
46 #define LOWER(C) (C>='a' && C<='z')
48 #define ISALPHA(C) (DIGIT(C) || UPPER(C) || LOWER(C))
52 #define SINGLE(C) (C=='(' || C==')' || C=='[' || C==']' || C=='{' || C=='`' || \
53 C=='}' || C==',' || C=='.' || C==';' || C=='@' || \
57 #define SYMBOL(C) (C=='#' || C=='$' || C=='%' || C=='&' || \
58 C=='*' || C=='+' || C=='-' || C=='>' || C=='/' || \
59 C==':' || C=='<' || C=='=' || \
60 C=='~' || C=='^' || C=='|' || C=='\\' || \
67 #define equ_tok(A,B) (!strcmp(A.type->keyword->symbol,B))
68 #define equ_tok3(A,B,Q) (Q?FALSE:equ_tok(A,B))
71 #define equ_tokch(A,B) (A.type->keyword->symbol[0]==B && A.type->keyword->symbol[1]==0)
72 #define equ_tokch3(A,B,Q) (Q?FALSE:equ_tokch(A,B))
76 #define equ_tokc(A,B) (B?equ_tokch(A,B):A.type->keyword->symbol[0]==0)
77 #define equ_tokc3(A,B,Q) (Q?FALSE:equ_tokc(A,B))
85 #define cut_to(C) { ptr_choice_point cp=choice_stack; \
86 while ((GENERIC)cp>(GENERIC)(C)) cp=cp->next; \
100 #define deref_ptr(P) while(P->coref) P=P->coref
103 #define noneval(T) (T->type==quote || T->type==listingsym || T->type==loadsym)
107 #define wl_const_1(S) ((S).value_1 ==NULL && (S).type!=variable)
108 #define wl_const_2(S) ((S).value_2 ==NULL && (S).type!=variable)
109 #define wl_const_3(S) ((S).value_3 ==NULL && (S).type!=variable)
111 #define equal_types(A,B) ((A)==(B))
113 #define is_top(T) ((T)!=NULL && (T)->type==top && (T)->attr_list==NULL)
127 #define VALID_RANGE(A) ((GENERIC)A>=mem_base && (GENERIC)A<mem_limit)
131 #define VALID_ADDRESS(A) ( VALID_RANGE(A) \
132 || (GENERIC)A==(GENERIC)&xevent_list \
133 || (GENERIC)A==(GENERIC)&xevent_existing \
134 || (GENERIC)A==(GENERIC)&var_tree \
137 #define VALID_ADDRESS(A) ( VALID_RANGE(A) \
138 || (GENERIC)A==(GENERIC)&var_tree \
142 #define stack_empty_list() stack_nil()
147 #define deref(P) {deref_ptr(P);if (deref_eval(P)) return TRUE;}
148 #define deref_void(P) {deref_ptr(P);deref_eval(P);}
149 #define deref_rec(P) {deref_ptr(P);if (deref_rec_eval(P)) return TRUE;}
150 #define deref_args(P,S) {deref_ptr(P);if (deref_args_eval(P,S)) return TRUE;}
151 #define deref_args_void(P) {deref_ptr(P);deref_args_eval(P);}
159 #define List_First(header) ((header)->First)
160 #define List_Last(header) ((header)->Last)
161 #define List_Next(header,RefAtom) ((*(header)->GetLinks)(RefAtom)->Next)
162 #define List_Prev(header,RefAtom) ((*(header)->GetLinks)(RefAtom)->Prev)
163 #define List_IsEmpty(header) (List_First(header)==NULL)
168 #define SETARG(args,i,the_feature,the_type,the_options) \
170 args[j].feature = the_feature; \
171 args[j].type = the_type; \
172 args[j].options = the_options; }
174 #define NARGS(args) (sizeof(args)/sizeof(psi_arg))
180 #define XPART(argi,vali,numi) \
181 if (argi->type == xwindow || argi->type == xpixmap) {\
182 vali = GetIntAttr (argi, "id"); \
188 #define XPART(argi,vali,numi) if (FALSE) ;
196 #define include_var_builtin(NBARGS) \
197 ptr_psi_term g, args[NBARGS]; \
200 long ii, success=TRUE, resi=FALSE
203 #define begin_builtin(FUNCNAME, NBARGS, NBARGSIN, TYPES) \
204 if (NBARGS > MAXNBARGS) \
205 Errorline ("in template: you have to increase MAXNBARGS at least to %d !\n", NBARGS); \
210 for (ii = 0; success && ii < NBARGS; ii++) \
211 success = get_arg (g, &args[ii], numbers[ii]); \
215 for (ii = 0; ii < NBARGS; ii++) \
218 deref_args (g, set_extra_args [NBARGS+1]); \
220 for (ii = 0; success && ii < NBARGS; ii++) \
222 success = matches (args[ii]->type, types[ii], &num[ii]); \
223 if (args[ii]->value_3 != NULL && num[ii]) \
224 if (types[ii] == integer) \
225 val[ii] = *(long *) args[ii]->value_3; \
227 if (types[ii] == real) \
228 val[ii] = *(REAL *) args[ii]->value_3; \
230 if (types[ii] == quoted_string) \
231 val[ii] = (long) args[ii]->value_3; \
233 Errorline ("in template: type %T not expected (built-in FUNCNAME).\n", types[ii]); \
235 if (args[ii]->type == lf_true) \
238 if (args[ii]->type == lf_false) \
241 XPART(args[ii],val[ii],num[ii]) \
248 for (ii = 0; ii < NBARGSIN; ii++) \
249 if (args[ii]->resid != NULL || !num[ii]) \
251 residuate (args[ii]); \
255 if (success && !resi) \
259 #define end_builtin() \
263 Errorline ("bad arguments in %P.\n", g); \
266 Errorline ("missing arguments in %P.\n", g); \
270 #define ARGS(args) args
273 #define PERUNIF(X) X,100.0*((double)X/(double)Aunif)
274 #define PERMERGE(X) X,100.0*((double)X/(double)Amerge)
278 #define HASH(A) (((long) A + ((long) A >> 3)) & (HASHSIZE-1))
281 #define ONHEAP(R) ((GENERIC)R>=heap_pointer)
284 #define NEW(A,TYPE) (heap_flag==HEAP \
292 : STACK_ALLOC(TYPE) \
296 #define HEAPDONE(R) (to_heap && ONHEAP(R))
299 #define ALIGNUP(X) { (X) = (GENERIC)( ((long) (X) + (ALIGN-1)) & ~(ALIGN-1) ); }