annotate lib-src/make-dump-id.c @ 5574:d4f334808463

Support inlining labels, bytecomp.el. lisp/ChangeLog addition: 2011-10-02 Aidan Kehoe <kehoea@parhasard.net> * bytecomp.el (byte-compile-initial-macro-environment): Add #'declare to this, so it doesn't need to rely on #'cl-compiling file to determine when we're byte-compiling. Update #'labels to support declaring labels inline, as Common Lisp requires. * bytecomp.el (byte-compile-function-form): Don't error if FUNCTION is quoting a non-lambda, non-symbol, just return it. * cl-extra.el (cl-macroexpand-all): If a label name has been quoted, expand to the label placeholder quoted with 'function. This allows the byte compiler to distinguish between uses of the placeholder as data and uses in contexts where it should be inlined. * cl-macs.el: * cl-macs.el (cl-do-proclaim): When proclaming something as inline, if it is bound as a label, don't modify the symbol's plist; instead, treat the first element of its placeholder constant vector as a place to store compile information. * cl-macs.el (declare): Leave processing declarations while compiling to the implementation of #'declare in byte-compile-initial-macro-environment. tests/ChangeLog addition: 2011-10-02 Aidan Kehoe <kehoea@parhasard.net> * automated/lisp-tests.el: * automated/lisp-tests.el (+): Test #'labels and inlining.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 02 Oct 2011 15:32:16 +0100
parents 308d34e9f07d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
1 /* Generate a unique dump-id for use with the portable dumper.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
2 Copyright (C) 2000 Olivier Galibert, Martin Buchholz
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
3
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
4 This file is part of XEmacs.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
5
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
6 XEmacs is free software: you can redistribute it and/or modify it
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
8 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
9 option) any later version.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
10
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
14 for more details.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
15
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
18
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
19 #include <config.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
20 #include <stdio.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
21 #include <stdlib.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
22 #include "../src/systime.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
23
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
24 #ifdef WIN32_NATIVE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
25 #include <sys/timeb.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
26
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
27 /* Emulate gettimeofday (Ulrich Leodolter, 1/11/95). */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
28 void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
29 gettimeofday (struct timeval *tv, struct timezone *tz)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
30 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
31 struct _timeb tb;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
32 _ftime (&tb);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
33
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
34 tv->tv_sec = tb.time;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
35 tv->tv_usec = tb.millitm * 1000L;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
36 if (tz)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
37 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
38 tz->tz_minuteswest = tb.timezone; /* minutes west of Greenwich */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
39 tz->tz_dsttime = tb.dstflag; /* type of dst correction */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
40 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
41 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
42 #endif
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
43
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
44 /* Generates an (extremely) pseudo random number for the dump-id */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
45 static unsigned int
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
46 generate_dump_id (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
47 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
48 EMACS_TIME thyme;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
49 EMACS_GET_TIME (thyme);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
50
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
51 return (unsigned int) (EMACS_SECS (thyme) ^ EMACS_USECS (thyme));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
52 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
53
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
54 int
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
55 main (int argc, char **argv)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
56 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
57 FILE *f;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
58
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
59 if ((f = fopen ("dump-id.c", "w")) == NULL)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
60 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
61 perror ("open dump-id.c");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
62 return EXIT_FAILURE;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
63 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
64
1688
034a2ddf5b6b [xemacs-hg @ 2003-09-16 03:57:54 by james]
james
parents: 1663
diff changeset
65 /* dump_id is declared as extern "C" in dumper.h */
034a2ddf5b6b [xemacs-hg @ 2003-09-16 03:57:54 by james]
james
parents: 1663
diff changeset
66 fputs ("extern\n", f);
034a2ddf5b6b [xemacs-hg @ 2003-09-16 03:57:54 by james]
james
parents: 1663
diff changeset
67 fputs ("#ifdef __cplusplus\n", f);
034a2ddf5b6b [xemacs-hg @ 2003-09-16 03:57:54 by james]
james
parents: 1663
diff changeset
68 fputs ("\"C\"\n", f);
034a2ddf5b6b [xemacs-hg @ 2003-09-16 03:57:54 by james]
james
parents: 1663
diff changeset
69 fputs ("#endif\n", f);
034a2ddf5b6b [xemacs-hg @ 2003-09-16 03:57:54 by james]
james
parents: 1663
diff changeset
70 fputs ("unsigned int dump_id;\n", f);
460
223736d75acb Import from CVS: tag r21-2-45
cvs
parents: 442
diff changeset
71 fprintf (f, "unsigned int dump_id = %uU;\n", generate_dump_id ());
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
72
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
73 if ((fclose (f)) != 0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
74 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
75 perror ("close dump-id.c");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
76 return EXIT_FAILURE;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
77 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
78
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
79 return EXIT_SUCCESS;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents:
diff changeset
80 }