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