1 /* List of all FSUBRs
2  * Bruno Haible 1990-2000
3  * Sam Steingold 2001-2007
4 
5 
6  A Special form defined by a declaration:
7    LISPSPECFORM(name,req_count,opt_count,body_flag)
8  in this file.
9  The same declaration (+ implementation) should be in control.d.
10 
11  name - the function name (a C identifier)
12  req_count - the number of required parameters
13  opt_count - the number of optional parameters
14  body_flag - either nobody or body
15 
16  Expander for the extern declaration: */
17 #define LISPSPECFORM_A(name,req_count,opt_count,body_flag)      \
18     extern fsubr_function_t C_##name;
19 
20 /* Expander for the declaration of the C function: */
21 #define LISPSPECFORM_B(name,req_count,opt_count,body_flag)      \
22     global Values C_##name (void)
23 
24 /* Expander for the declaration of the FSUBR table: */
25 #define LISPSPECFORM_C(name,req_count,opt_count,body_flag)      \
26     fsubr_t D_##name;
27 
28 /* Expander for the initialization of the FSUBR table: */
29 #define LISPSPECFORM_D(name,req_count,opt_count,body_flag)      \
30     &C_##name,
31 
32 /* Expander for the initialization of the FSUBR symbol: */
33 #define LISPSPECFORM_E(name,req_count,opt_count,body_flag)      \
34     { offsetof(struct symbol_tab_,S_##name), \
35       req_count,                  \
36       opt_count,                  \
37       (uintW)fsubr_##body_flag, \
38     },
39 #define LISPSPECFORM_F(name,req_count,opt_count,body_flag)      \
40     { S(name),                  \
41       req_count,                  \
42       opt_count,                  \
43       (uintW)fsubr_##body_flag, \
44     },
45 
46 /* Which expander is used, must be configured by the main file.
47  Default is   #define LISPSPECFORM LISPSPECFORM_B */
48 
49 /* ---------- CONTROL ---------- */
50 LISPSPECFORM(eval_when, 1,0,body)
51 LISPSPECFORM(quote, 1,0,nobody)
52 LISPSPECFORM(function, 1,1,nobody)
53 LISPSPECFORM(setq, 0,0,body)
54 LISPSPECFORM(psetq, 0,0,body)
55 LISPSPECFORM(progn, 0,0,body)
56 LISPSPECFORM(prog1, 1,0,body)
57 LISPSPECFORM(prog2, 2,0,body)
58 LISPSPECFORM(let, 1,0,body)
59 LISPSPECFORM(letstar, 1,0,body)
60 LISPSPECFORM(locally, 0,0,body)
61 LISPSPECFORM(compiler_let, 1,0,body)
62 LISPSPECFORM(progv, 2,0,body)
63 LISPSPECFORM(flet, 1,0,body)
64 LISPSPECFORM(labels, 1,0,body)
65 LISPSPECFORM(macrolet, 1,0,body)
66 LISPSPECFORM(function_macro_let, 1,0,body)
67 LISPSPECFORM(symbol_macrolet, 1,0,body)
68 LISPSPECFORM(if, 2,1,nobody)
69 LISPSPECFORM(when, 1,0,body)
70 LISPSPECFORM(unless, 1,0,body)
71 LISPSPECFORM(cond, 0,0,body)
72 LISPSPECFORM(case, 1,0,body)
73 LISPSPECFORM(block, 1,0,body)
74 LISPSPECFORM(return_from, 1,1,nobody)
75 LISPSPECFORM(tagbody, 0,0,body)
76 LISPSPECFORM(go, 1,0,nobody)
77 LISPSPECFORM(multiple_value_list, 1,0,nobody)
78 LISPSPECFORM(multiple_value_call, 1,0,body)
79 LISPSPECFORM(multiple_value_prog1, 1,0,body)
80 LISPSPECFORM(multiple_value_bind, 2,0,body)
81 LISPSPECFORM(multiple_value_setq, 2,0,nobody)
82 LISPSPECFORM(catch, 1,0,body)
83 LISPSPECFORM(unwind_protect, 1,0,body)
84 LISPSPECFORM(throw, 2,0,nobody)
85 LISPSPECFORM(declare, 0,0,body)
86 LISPSPECFORM(the, 2,0,nobody)
87 LISPSPECFORM(load_time_value, 1,1,nobody)
88 LISPSPECFORM(and, 0,0,body)
89 LISPSPECFORM(or, 0,0,body)
90 /* more FSUBRs are in INIT.LSP (%EXPAND-...) and in the Compiler (c-form)! */
91