Mercurial > hg > xemacs-beta
comparison src/eval.c @ 116:9f59509498e1 r20-1b10
Import from CVS: tag r20-1b10
| author | cvs |
|---|---|
| date | Mon, 13 Aug 2007 09:23:06 +0200 |
| parents | 1040fe1366ac |
| children | 538048ae2ab8 |
comparison
equal
deleted
inserted
replaced
| 115:f109f7dabbe2 | 116:9f59509498e1 |
|---|---|
| 38 #include "buffer.h" | 38 #include "buffer.h" |
| 39 #include "console.h" | 39 #include "console.h" |
| 40 #include "opaque.h" | 40 #include "opaque.h" |
| 41 | 41 |
| 42 struct backtrace *backtrace_list; | 42 struct backtrace *backtrace_list; |
| 43 | |
| 44 /* Note you must always fill all of the fields in a backtrace structure | |
| 45 before pushing them on the backtrace_list. The profiling code depends | |
| 46 on this. */ | |
| 47 | |
| 48 #define PUSH_BACKTRACE(bt) \ | |
| 49 do { (bt).next = backtrace_list; backtrace_list = &(bt); } while (0) | |
| 50 | |
| 51 #define POP_BACKTRACE(bt) \ | |
| 52 do { backtrace_list = (bt).next; } while (0) | |
| 43 | 53 |
| 44 /* This is the list of current catches (and also condition-cases). | 54 /* This is the list of current catches (and also condition-cases). |
| 45 This is a stack: the most recent catch is at the head of the | 55 This is a stack: the most recent catch is at the head of the |
| 46 list. Catches are created by declaring a 'struct catchtag' | 56 list. Catches are created by declaring a 'struct catchtag' |
| 47 locally, filling the .TAG field in with the tag, and doing | 57 locally, filling the .TAG field in with the tag, and doing |
| 2580 if (CONSP (final) || SUBRP (final) || COMPILED_FUNCTIONP (final)) | 2590 if (CONSP (final) || SUBRP (final) || COMPILED_FUNCTIONP (final)) |
| 2581 { | 2591 { |
| 2582 #ifdef EMACS_BTL | 2592 #ifdef EMACS_BTL |
| 2583 backtrace.id_number = 0; | 2593 backtrace.id_number = 0; |
| 2584 #endif | 2594 #endif |
| 2585 backtrace.next = backtrace_list; | |
| 2586 backtrace_list = &backtrace; | |
| 2587 backtrace.function = &Qcall_interactively; | 2595 backtrace.function = &Qcall_interactively; |
| 2588 backtrace.args = &cmd; | 2596 backtrace.args = &cmd; |
| 2589 backtrace.nargs = 1; | 2597 backtrace.nargs = 1; |
| 2590 backtrace.evalargs = 0; | 2598 backtrace.evalargs = 0; |
| 2591 backtrace.pdlcount = specpdl_depth (); | 2599 backtrace.pdlcount = specpdl_depth (); |
| 2592 backtrace.debug_on_exit = 0; | 2600 backtrace.debug_on_exit = 0; |
| 2601 PUSH_BACKTRACE (backtrace); | |
| 2593 | 2602 |
| 2594 final = Fcall_interactively (cmd, record, keys); | 2603 final = Fcall_interactively (cmd, record, keys); |
| 2595 | 2604 |
| 2596 backtrace_list = backtrace.next; | 2605 POP_BACKTRACE (backtrace); |
| 2597 return (final); | 2606 return (final); |
| 2598 } | 2607 } |
| 2599 else if (STRINGP (final) || VECTORP (final)) | 2608 else if (STRINGP (final) || VECTORP (final)) |
| 2600 { | 2609 { |
| 2601 return Fexecute_kbd_macro (final, prefixarg); | 2610 return Fexecute_kbd_macro (final, prefixarg); |
| 2915 | 2924 |
| 2916 #ifdef EMACS_BTL | 2925 #ifdef EMACS_BTL |
| 2917 backtrace.id_number = 0; | 2926 backtrace.id_number = 0; |
| 2918 #endif | 2927 #endif |
| 2919 backtrace.pdlcount = specpdl_depth_counter; | 2928 backtrace.pdlcount = specpdl_depth_counter; |
| 2920 backtrace.next = backtrace_list; | |
| 2921 backtrace_list = &backtrace; | |
| 2922 backtrace.function = &original_fun; /* This also protects them from gc */ | 2929 backtrace.function = &original_fun; /* This also protects them from gc */ |
| 2923 backtrace.args = &original_args; | 2930 backtrace.args = &original_args; |
| 2924 backtrace.nargs = UNEVALLED; | 2931 backtrace.nargs = UNEVALLED; |
| 2925 backtrace.evalargs = 1; | 2932 backtrace.evalargs = 1; |
| 2926 backtrace.debug_on_exit = 0; | 2933 backtrace.debug_on_exit = 0; |
| 2934 PUSH_BACKTRACE (backtrace); | |
| 2927 | 2935 |
| 2928 if (debug_on_next_call) | 2936 if (debug_on_next_call) |
| 2929 do_debug_on_call (Qt); | 2937 do_debug_on_call (Qt); |
| 2930 | 2938 |
| 2931 /* At this point, only original_fun and original_args | 2939 /* At this point, only original_fun and original_args |
| 2997 val = make_int (1); | 3005 val = make_int (1); |
| 2998 } | 3006 } |
| 2999 #endif | 3007 #endif |
| 3000 if (backtrace.debug_on_exit) | 3008 if (backtrace.debug_on_exit) |
| 3001 val = do_debug_on_exit (val); | 3009 val = do_debug_on_exit (val); |
| 3002 backtrace_list = backtrace.next; | 3010 POP_BACKTRACE (backtrace); |
| 3003 UNGCPRO; | 3011 UNGCPRO; |
| 3004 return (val); | 3012 return (val); |
| 3005 } | 3013 } |
| 3006 | 3014 |
| 3007 else | 3015 else |
| 3070 val = make_int (1); | 3078 val = make_int (1); |
| 3071 } | 3079 } |
| 3072 #endif | 3080 #endif |
| 3073 if (backtrace.debug_on_exit) | 3081 if (backtrace.debug_on_exit) |
| 3074 val = do_debug_on_exit (val); | 3082 val = do_debug_on_exit (val); |
| 3075 backtrace_list = backtrace.next; | 3083 POP_BACKTRACE (backtrace); |
| 3076 return (val); | 3084 return (val); |
| 3077 } | 3085 } |
| 3078 | 3086 |
| 3079 | 3087 |
| 3080 Lisp_Object | 3088 Lisp_Object |
| 3105 | 3113 |
| 3106 #ifdef EMACS_BTL | 3114 #ifdef EMACS_BTL |
| 3107 backtrace.id_number = 0; | 3115 backtrace.id_number = 0; |
| 3108 #endif | 3116 #endif |
| 3109 backtrace.pdlcount = specpdl_depth_counter; | 3117 backtrace.pdlcount = specpdl_depth_counter; |
| 3110 backtrace.next = backtrace_list; | |
| 3111 backtrace.function = &args[0]; | 3118 backtrace.function = &args[0]; |
| 3112 backtrace.args = &args[1]; | 3119 backtrace.args = &args[1]; |
| 3113 backtrace.nargs = nargs; | 3120 backtrace.nargs = nargs; |
| 3114 backtrace.evalargs = 0; | 3121 backtrace.evalargs = 0; |
| 3115 backtrace.debug_on_exit = 0; | 3122 backtrace.debug_on_exit = 0; |
| 3116 /* XEmacs: make sure this is done last so we don't get race | 3123 PUSH_BACKTRACE (backtrace); |
| 3117 conditions in the profiling code. */ | |
| 3118 backtrace_list = &backtrace; | |
| 3119 | 3124 |
| 3120 if (debug_on_next_call) | 3125 if (debug_on_next_call) |
| 3121 do_debug_on_call (Qlambda); | 3126 do_debug_on_call (Qlambda); |
| 3122 | 3127 |
| 3123 retry: | 3128 retry: |
| 3202 } | 3207 } |
| 3203 } | 3208 } |
| 3204 lisp_eval_depth--; | 3209 lisp_eval_depth--; |
| 3205 if (backtrace.debug_on_exit) | 3210 if (backtrace.debug_on_exit) |
| 3206 val = do_debug_on_exit (val); | 3211 val = do_debug_on_exit (val); |
| 3207 backtrace_list = backtrace.next; | 3212 POP_BACKTRACE (backtrace); |
| 3208 return val; | 3213 return val; |
| 3209 } | 3214 } |
| 3210 | 3215 |
| 3211 DEFUN ("funcall", Ffuncall, 1, MANY, 0, /* | 3216 DEFUN ("funcall", Ffuncall, 1, MANY, 0, /* |
| 3212 Call first argument as a function, passing remaining arguments to it. | 3217 Call first argument as a function, passing remaining arguments to it. |
