annotate Python/marshal.c @ 4963:5ded2bc1908b legacy-trunk

"ported" Guido's embedding demo to the mac, and wrote some minimal notes on embedding on the mac.
author Jack Jansen <jack.jansen@cwi.nl>
date Wed, 15 Jan 1997 16:53:37 +0000
parents 186c2ad4abf3
children 267ed480ec1b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
2062
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 2052
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 2052
diff changeset
3 The Netherlands.
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
8 documentation for any purpose and without fee is hereby granted,
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
10 both that copyright notice and this permission notice appear in
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
15 permission.
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4403
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 /* Write Python objects to files and read them back.
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 This is intended for writing and reading compiled Python code only;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 a true persistent storage facility would be much harder, since
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 it would have to take circular links and sharing into account. */
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 #include "allobjects.h"
732
0338c7c9f08c Shut up lint.
Guido van Rossum <guido@python.org>
parents: 475
diff changeset
38 #include "modsupport.h"
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 #include "longintrepr.h"
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 #include "compile.h"
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 #include "marshal.h"
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 #include <errno.h>
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 #define TYPE_NULL '0'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 #define TYPE_NONE 'N'
4403
3b3f7c3f6da2 Ellipses -> Ellipsis rename (the dictionary really says that it should
Guido van Rossum <guido@python.org>
parents: 4039
diff changeset
47 #define TYPE_ELLIPSIS '.'
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 #define TYPE_INT 'i'
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
49 #define TYPE_INT64 'I'
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 #define TYPE_FLOAT 'f'
3323
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
51 #define TYPE_COMPLEX 'x'
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 #define TYPE_LONG 'l'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 #define TYPE_STRING 's'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 #define TYPE_TUPLE '('
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 #define TYPE_LIST '['
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 #define TYPE_DICT '{'
2844
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
57 #define TYPE_CODE 'c'
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 #define TYPE_UNKNOWN '?'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
60 typedef struct {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
61 FILE *fp;
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
62 int error;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
63 /* If fp == NULL, the following are valid: */
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
64 object *str;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
65 char *ptr;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
66 char *end;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
67 } WFILE;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
68
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
69 #define w_byte(c, p) if (((p)->fp)) putc((c), (p)->fp); \
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
70 else if ((p)->ptr != (p)->end) *(p)->ptr++ = (c); \
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
71 else w_more(c, p)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
73 static void
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
74 w_more(c, p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
75 char c;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
76 WFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
77 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
78 int size, newsize;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
79 if (p->str == NULL)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
80 return; /* An error already occurred */
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
81 size = getstringsize(p->str);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
82 newsize = size + 1024;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
83 if (resizestring(&p->str, newsize) != 0) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
84 p->ptr = p->end = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
85 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
86 else {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
87 p->ptr = GETSTRINGVALUE((stringobject *)p->str) + size;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
88 p->end = GETSTRINGVALUE((stringobject *)p->str) + newsize;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
89 *p->ptr++ = c;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
90 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
91 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
92
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
93 static void
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
94 w_string(s, n, p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
95 char *s;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
96 int n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
97 WFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
98 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
99 if (p->fp != NULL) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
100 fwrite(s, 1, n, p->fp);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
101 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
102 else {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
103 while (--n >= 0) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
104 w_byte(*s, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
105 s++;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
106 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
107 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
108 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
109
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
110 static void
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
111 w_short(x, p)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 int x;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
113 WFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
114 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
115 w_byte( x & 0xff, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
116 w_byte((x>> 8) & 0xff, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
117 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
118
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
119 static void
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
120 w_long(x, p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
121 long x;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
122 WFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
123 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
124 w_byte((int)( x & 0xff), p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
125 w_byte((int)((x>> 8) & 0xff), p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
126 w_byte((int)((x>>16) & 0xff), p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
127 w_byte((int)((x>>24) & 0xff), p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
128 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
129
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
130 #if SIZEOF_LONG > 4
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
131 static void
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
132 w_long64(x, p)
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
133 long x;
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
134 WFILE *p;
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
135 {
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
136 w_long(x, p);
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
137 w_long(x>>32, p);
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
138 }
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
139 #endif
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
140
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
141 static void
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
142 w_object(v, p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
143 object *v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
144 WFILE *p;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 {
2368
663aa059e29f hope to fix DEC Alpha gcc problems by declaring ints instead of longs
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
146 int i, n;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
147
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
148 if (v == NULL)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
149 w_byte(TYPE_NULL, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
150 else if (v == None)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
151 w_byte(TYPE_NONE, p);
4403
3b3f7c3f6da2 Ellipses -> Ellipsis rename (the dictionary really says that it should
Guido van Rossum <guido@python.org>
parents: 4039
diff changeset
152 else if (v == Py_Ellipsis)
3b3f7c3f6da2 Ellipses -> Ellipsis rename (the dictionary really says that it should
Guido van Rossum <guido@python.org>
parents: 4039
diff changeset
153 w_byte(TYPE_ELLIPSIS, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
154 else if (is_intobject(v)) {
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
155 long x = GETINTVALUE((intobject *)v);
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
156 #if SIZEOF_LONG > 4
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
157 long y = x>>31;
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
158 if (y && y != -1) {
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
159 w_byte(TYPE_INT64, p);
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
160 w_long64(x, p);
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
161 }
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
162 else
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
163 #endif
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
164 {
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
165 w_byte(TYPE_INT, p);
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
166 w_long(x, p);
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
167 }
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
168 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
169 else if (is_longobject(v)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
170 longobject *ob = (longobject *)v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
171 w_byte(TYPE_LONG, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
172 n = ob->ob_size;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
173 w_long((long)n, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
174 if (n < 0)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
175 n = -n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
176 for (i = 0; i < n; i++)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
177 w_short(ob->ob_digit[i], p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
178 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
179 else if (is_floatobject(v)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
180 extern void float_buf_repr PROTO((char *, floatobject *));
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
181 char buf[256]; /* Plenty to format any double */
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
182 float_buf_repr(buf, (floatobject *)v);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
183 n = strlen(buf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
184 w_byte(TYPE_FLOAT, p);
2368
663aa059e29f hope to fix DEC Alpha gcc problems by declaring ints instead of longs
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
185 w_byte(n, p);
663aa059e29f hope to fix DEC Alpha gcc problems by declaring ints instead of longs
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
186 w_string(buf, n, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
187 }
3323
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
188 #ifndef WITHOUT_COMPLEX
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
189 else if (is_complexobject(v)) {
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
190 extern void float_buf_repr PROTO((char *, floatobject *));
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
191 char buf[256]; /* Plenty to format any double */
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
192 floatobject *temp;
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
193 w_byte(TYPE_COMPLEX, p);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
194 temp = (floatobject*)newfloatobject(PyComplex_RealAsDouble(v));
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
195 float_buf_repr(buf, temp);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
196 DECREF(temp);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
197 n = strlen(buf);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
198 w_byte(n, p);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
199 w_string(buf, n, p);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
200 temp = (floatobject*)newfloatobject(PyComplex_ImagAsDouble(v));
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
201 float_buf_repr(buf, temp);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
202 DECREF(temp);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
203 n = strlen(buf);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
204 w_byte(n, p);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
205 w_string(buf, n, p);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
206 }
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
207 #endif
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
208 else if (is_stringobject(v)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
209 w_byte(TYPE_STRING, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
210 n = getstringsize(v);
2368
663aa059e29f hope to fix DEC Alpha gcc problems by declaring ints instead of longs
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
211 w_long((long)n, p);
663aa059e29f hope to fix DEC Alpha gcc problems by declaring ints instead of longs
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
212 w_string(getstringvalue(v), n, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
213 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
214 else if (is_tupleobject(v)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
215 w_byte(TYPE_TUPLE, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
216 n = gettuplesize(v);
2368
663aa059e29f hope to fix DEC Alpha gcc problems by declaring ints instead of longs
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
217 w_long((long)n, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
218 for (i = 0; i < n; i++) {
2503
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
219 w_object(GETTUPLEITEM(v, i), p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
220 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
221 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
222 else if (is_listobject(v)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
223 w_byte(TYPE_LIST, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
224 n = getlistsize(v);
2368
663aa059e29f hope to fix DEC Alpha gcc problems by declaring ints instead of longs
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
225 w_long((long)n, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
226 for (i = 0; i < n; i++) {
2368
663aa059e29f hope to fix DEC Alpha gcc problems by declaring ints instead of longs
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
227 w_object(getlistitem(v, i), p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
228 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
229 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
230 else if (is_dictobject(v)) {
1288
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
231 int pos;
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
232 object *key, *value;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
233 w_byte(TYPE_DICT, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
234 /* This one is NULL object terminated! */
1288
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
235 pos = 0;
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
236 while (mappinggetnext(v, &pos, &key, &value)) {
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
237 w_object(key, p);
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
238 w_object(value, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
239 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
240 w_object((object *)NULL, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
241 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
242 else if (is_codeobject(v)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
243 codeobject *co = (codeobject *)v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
244 w_byte(TYPE_CODE, p);
2844
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
245 w_short(co->co_argcount, p);
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
246 w_short(co->co_nlocals, p);
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
247 w_short(co->co_flags, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
248 w_object((object *)co->co_code, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
249 w_object(co->co_consts, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
250 w_object(co->co_names, p);
2844
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
251 w_object(co->co_varnames, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
252 w_object(co->co_filename, p);
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
253 w_object(co->co_name, p);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
254 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
255 else {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
256 w_byte(TYPE_UNKNOWN, p);
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
257 p->error = 1;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
258 }
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
260
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 void
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 wr_long(x, fp)
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 long x;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 FILE *fp;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
266 WFILE wf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
267 wf.fp = fp;
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
268 wf.error = 0;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
269 w_long(x, &wf);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
271
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 void
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
273 wr_object(x, fp)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
274 object *x;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 FILE *fp;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
277 WFILE wf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
278 wf.fp = fp;
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
279 wf.error = 0;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
280 w_object(x, &wf);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
282
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
283 typedef WFILE RFILE; /* Same struct with different invariants */
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
284
2503
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
285 #define rs_byte(p) (((p)->ptr != (p)->end) ? (unsigned char)*(p)->ptr++ : EOF)
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
286
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
287 #define r_byte(p) ((p)->fp ? getc((p)->fp) : rs_byte(p))
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
288
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
289 static int
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
290 r_string(s, n, p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
291 char *s;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
292 int n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
293 RFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
294 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
295 if (p->fp != NULL)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
296 return fread(s, 1, n, p->fp);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
297 if (p->end - p->ptr < n)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
298 n = p->end - p->ptr;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
299 memcpy(s, p->ptr, n);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
300 p->ptr += n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
301 return n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
302 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
303
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
304 static int
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
305 r_short(p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
306 RFILE *p;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 register short x;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
309 x = r_byte(p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
310 x |= r_byte(p) << 8;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 /* XXX If your short is > 16 bits, add sign-extension here!!! */
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 return x;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
314
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
315 static long
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
316 r_long(p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
317 RFILE *p;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 register long x;
2503
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
320 register FILE *fp = p->fp;
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
321 if (fp) {
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
322 x = getc(fp);
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
323 x |= (long)getc(fp) << 8;
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
324 x |= (long)getc(fp) << 16;
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
325 x |= (long)getc(fp) << 24;
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
326 }
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
327 else {
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
328 x = rs_byte(p);
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
329 x |= (long)rs_byte(p) << 8;
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
330 x |= (long)rs_byte(p) << 16;
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
331 x |= (long)rs_byte(p) << 24;
4dd1af0ddef0 various tuple related optimizations; remove unused b/w compat code from ceval.c
Guido van Rossum <guido@python.org>
parents: 2368
diff changeset
332 }
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
333 #if SIZEOF_LONG > 4
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
334 /* Sign extension for 64-bit machines */
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
335 x <<= (8*sizeof(long) - 32);
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
336 x >>= (8*sizeof(long) - 32);
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
337 #endif
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
338 return x;
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
339 }
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
340
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
341 static long
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
342 r_long64(p)
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
343 RFILE *p;
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
344 {
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
345 register long x;
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
346 x = r_long(p);
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
347 #if SIZEOF_LONG > 4
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
348 x = (x & 0xFFFFFFFF) | (r_long(p) << 32);
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
349 #else
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
350 if (r_long(p) != 0) {
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
351 object *f = sysget("stderr");
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
352 err_clear();
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
353 if (f != NULL)
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
354 writestring(
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
355 "Warning: un-marshal 64-bit int in 32-bit mode\n",
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
356 f);
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
357 }
4656
186c2ad4abf3 Better way to handle 64-bit ints, keeping gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4592
diff changeset
358 #endif
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
359 return x;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
360 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
361
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
362 static object *
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
363 r_object(p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
364 RFILE *p;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
365 {
3234
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
366 object *v, *v2;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
367 long i, n;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
368 int type = r_byte(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
369
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
370 switch (type) {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
371
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
372 case EOF:
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
373 err_setstr(EOFError, "EOF read where object expected");
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
374 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
375
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
376 case TYPE_NULL:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
377 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
378
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
379 case TYPE_NONE:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
380 INCREF(None);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
381 return None;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
382
4403
3b3f7c3f6da2 Ellipses -> Ellipsis rename (the dictionary really says that it should
Guido van Rossum <guido@python.org>
parents: 4039
diff changeset
383 case TYPE_ELLIPSIS:
3b3f7c3f6da2 Ellipses -> Ellipsis rename (the dictionary really says that it should
Guido van Rossum <guido@python.org>
parents: 4039
diff changeset
384 INCREF(Py_Ellipsis);
3b3f7c3f6da2 Ellipses -> Ellipsis rename (the dictionary really says that it should
Guido van Rossum <guido@python.org>
parents: 4039
diff changeset
385 return Py_Ellipsis;
3839
22e29b1747e1 Changes for slice and ellipses
Guido van Rossum <guido@python.org>
parents: 3766
diff changeset
386
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 case TYPE_INT:
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
388 return newintobject(r_long(p));
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
389
4592
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
390 case TYPE_INT64:
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
391 return newintobject(r_long64(p));
3bf9e2beaf8c Tentative changes to make this work better on 64-bit machines.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
392
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
393 case TYPE_LONG:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
394 {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
395 int size;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
396 longobject *ob;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
397 n = r_long(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 size = n<0 ? -n : n;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
399 ob = alloclongobject(size);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 if (ob == NULL)
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
401 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 ob->ob_size = n;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
403 for (i = 0; i < size; i++)
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
404 ob->ob_digit[i] = r_short(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 return (object *)ob;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
406 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
407
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
408 case TYPE_FLOAT:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
409 {
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
410 extern double atof PROTO((const char *));
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
411 char buf[256];
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
412 n = r_byte(p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
413 if (r_string(buf, (int)n, p) != n) {
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
414 err_setstr(EOFError,
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
415 "EOF read where object expected");
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
416 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
417 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
418 buf[n] = '\0';
1848
b724599401ff Merge back to main trunk
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
419 return newfloatobject(atof(buf));
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
420 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
421
3323
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
422 #ifndef WITHOUT_COMPLEX
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
423 case TYPE_COMPLEX:
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
424 {
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
425 extern double atof PROTO((const char *));
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
426 char buf[256];
3766
516490c8192c Py_complex; and WITHOUT_COMPLEX added to getargs.c
Guido van Rossum <guido@python.org>
parents: 3731
diff changeset
427 Py_complex c;
3323
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
428 n = r_byte(p);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
429 if (r_string(buf, (int)n, p) != n) {
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
430 err_setstr(EOFError,
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
431 "EOF read where object expected");
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
432 return NULL;
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
433 }
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
434 buf[n] = '\0';
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
435 c.real = atof(buf);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
436 n = r_byte(p);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
437 if (r_string(buf, (int)n, p) != n) {
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
438 err_setstr(EOFError,
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
439 "EOF read where object expected");
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
440 return NULL;
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
441 }
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
442 buf[n] = '\0';
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
443 c.imag = atof(buf);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
444 return newcomplexobject(c);
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
445 }
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
446 #endif
6098aaa8ae7f changes for complex numbers
Guido van Rossum <guido@python.org>
parents: 3234
diff changeset
447
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
448 case TYPE_STRING:
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
449 n = r_long(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
450 v = newsizedstringobject((char *)NULL, n);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
451 if (v != NULL) {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
452 if (r_string(getstringvalue(v), (int)n, p) != n) {
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
453 DECREF(v);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
454 v = NULL;
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
455 err_setstr(EOFError,
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
456 "EOF read where object expected");
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
457 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
458 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
459 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
460
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
461 case TYPE_TUPLE:
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
462 n = r_long(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
463 v = newtupleobject((int)n);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
464 if (v == NULL)
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
465 return v;
3234
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
466 for (i = 0; i < n; i++) {
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
467 v2 = r_object(p);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
468 if ( v2 == NULL ) {
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
469 DECREF(v);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
470 v = NULL;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
471 break;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
472 }
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
473 SETTUPLEITEM(v, (int)i, v2);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
474 }
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
475 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
476
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
477 case TYPE_LIST:
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
478 n = r_long(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
479 v = newlistobject((int)n);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
480 if (v == NULL)
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
481 return v;
3234
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
482 for (i = 0; i < n; i++) {
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
483 v2 = r_object(p);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
484 if ( v2 == NULL ) {
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
485 DECREF(v);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
486 v = NULL;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
487 break;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
488 }
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
489 setlistitem(v, (int)i, v2);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
490 }
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
491 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
492
279
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
493 case TYPE_DICT:
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
494 v = newdictobject();
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
495 if (v == NULL)
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
496 return NULL;
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
497 for (;;) {
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
498 object *key, *val;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
499 key = r_object(p);
279
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
500 if (key == NULL)
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
501 break; /* XXX Assume TYPE_NULL, not an error */
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
502 val = r_object(p);
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
503 if (val != NULL)
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
504 dict2insert(v, key, val);
279
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
505 DECREF(key);
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
506 XDECREF(val);
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
507 }
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
508 return v;
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
509
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
510 case TYPE_CODE:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
511 {
2844
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
512 int argcount = r_short(p);
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
513 int nlocals = r_short(p);
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
514 int flags = r_short(p);
3234
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
515 object *code = NULL;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
516 object *consts = NULL;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
517 object *names = NULL;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
518 object *varnames = NULL;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
519 object *filename = NULL;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
520 object *name = NULL;
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
521
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
522 code = r_object(p);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
523 if (code) consts = r_object(p);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
524 if (consts) names = r_object(p);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
525 if (names) varnames = r_object(p);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
526 if (varnames) filename = r_object(p);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
527 if (filename) name = r_object(p);
aafe7d634985 Made a bit more robust against out-of-memory situations
Jack Jansen <jack.jansen@cwi.nl>
parents: 3012
diff changeset
528
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
529 if (!err_occurred()) {
2844
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
530 v = (object *) newcodeobject(
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
531 argcount, nlocals, flags,
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
532 code, consts, names, varnames,
0261bf5b3819 keyword arguments and faster calls
Guido van Rossum <guido@python.org>
parents: 2503
diff changeset
533 filename, name);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
534 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
535 else
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
536 v = NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
537 XDECREF(code);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
538 XDECREF(consts);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
539 XDECREF(names);
3620
28c0df1ce284 Plug memory leak (variable names in code objects were being leaked!)
Guido van Rossum <guido@python.org>
parents: 3323
diff changeset
540 XDECREF(varnames);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
541 XDECREF(filename);
1929
f07d66c162cb Plug memory leak for code objects
Guido van Rossum <guido@python.org>
parents: 1848
diff changeset
542 XDECREF(name);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
543
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
544 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
545 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
546
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
547 default:
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
548 /* Bogus data got written, which isn't ideal.
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
549 This will let you keep working and recover. */
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
550 INCREF(None);
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
551 return None;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
552
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
553 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
554 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
555
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
556 long
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
557 rd_long(fp)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
558 FILE *fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
559 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
560 RFILE rf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
561 rf.fp = fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
562 return r_long(&rf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
563 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
564
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
565 object *
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
566 rd_object(fp)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
567 FILE *fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
568 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
569 RFILE rf;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 1929
diff changeset
570 if (err_occurred()) {
3012
6b9cb6634897 rd_object() with exception is fatal error
Guido van Rossum <guido@python.org>
parents: 2844
diff changeset
571 fatal("XXX rd_object called with exception set"); /* tmp */
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 1929
diff changeset
572 fprintf(stderr, "XXX rd_object called with exception set\n");
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 1929
diff changeset
573 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 1929
diff changeset
574 }
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
575 rf.fp = fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
576 return r_object(&rf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
577 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
578
1270
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
579 object *
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
580 rds_object(str, len)
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
581 char *str;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
582 int len;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
583 {
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
584 RFILE rf;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 1929
diff changeset
585 if (err_occurred()) {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 1929
diff changeset
586 fprintf(stderr, "XXX rds_object called with exception set\n");
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 1929
diff changeset
587 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 1929
diff changeset
588 }
1270
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
589 rf.fp = NULL;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
590 rf.str = NULL;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
591 rf.ptr = str;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
592 rf.end = str + len;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
593 return r_object(&rf);
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
594 }
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
595
4039
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
596 object *
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
597 PyMarshal_WriteObjectToString(x) /* wrs_object() */
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
598 object *x;
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
599 {
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
600 WFILE wf;
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
601 wf.fp = NULL;
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
602 wf.str = newsizedstringobject((char *)NULL, 50);
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
603 if (wf.str == NULL)
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
604 return NULL;
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
605 wf.ptr = GETSTRINGVALUE((stringobject *)wf.str);
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
606 wf.end = wf.ptr + getstringsize(wf.str);
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
607 wf.error = 0;
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
608 w_object(x, &wf);
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
609 if (wf.str != NULL)
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
610 resizestring(&wf.str,
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
611 (int) (wf.ptr - GETSTRINGVALUE((stringobject *)wf.str)));
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
612 if (wf.error) {
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
613 XDECREF(wf.str);
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
614 err_setstr(ValueError, "unmarshallable object");
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
615 return NULL;
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
616 }
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
617 return wf.str;
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
618 }
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
619
279
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
620 /* And an interface for Python programs... */
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
621
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
622 static object *
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
623 marshal_dump(self, args)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
624 object *self;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
625 object *args;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
626 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
627 WFILE wf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
628 object *x;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
629 object *f;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
630 if (!getargs(args, "(OO)", &x, &f))
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
631 return NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
632 if (!is_fileobject(f)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
633 err_setstr(TypeError, "marshal.dump() 2nd arg must be file");
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
634 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
635 }
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
636 wf.fp = getfilefile(f);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
637 wf.str = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
638 wf.ptr = wf.end = NULL;
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
639 wf.error = 0;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
640 w_object(x, &wf);
3731
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
641 if (wf.error) {
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
642 err_setstr(ValueError, "unmarshallable object");
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
643 return NULL;
de1cb33219e3 Jeremy's patches for more robust handling of unmarshallable types.
Guido van Rossum <guido@python.org>
parents: 3620
diff changeset
644 }
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
645 INCREF(None);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
646 return None;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
647 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
648
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
649 static object *
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
650 marshal_load(self, args)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
651 object *self;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
652 object *args;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
653 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
654 RFILE rf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
655 object *f;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 object *v;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
657 if (!getargs(args, "O", &f))
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
658 return NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
659 if (!is_fileobject(f)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
660 err_setstr(TypeError, "marshal.load() arg must be file");
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
661 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
662 }
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
663 rf.fp = getfilefile(f);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
664 rf.str = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
665 rf.ptr = rf.end = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
666 err_clear();
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
667 v = r_object(&rf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
668 if (err_occurred()) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
669 XDECREF(v);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
670 v = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
671 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
672 return v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
673 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
674
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
675 static object *
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
676 marshal_dumps(self, args)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
677 object *self;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
678 object *args;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
679 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
680 object *x;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
681 if (!getargs(args, "O", &x))
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
682 return NULL;
4039
23f280ab5409 Added *PyMarshal_WriteObjectToString() (moved the relevant code there
Guido van Rossum <guido@python.org>
parents: 3839
diff changeset
683 return PyMarshal_WriteObjectToString(x);
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
684 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
685
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
686 static object *
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
687 marshal_loads(self, args)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
688 object *self;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
689 object *args;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
690 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
691 RFILE rf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
692 object *v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
693 char *s;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
694 int n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
695 if (!getargs(args, "s#", &s, &n))
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
696 return NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
697 rf.fp = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
698 rf.str = args;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
699 rf.ptr = s;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
700 rf.end = s + n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
701 err_clear();
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
702 v = r_object(&rf);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
703 if (err_occurred()) {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
704 XDECREF(v);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
705 v = NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
706 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
707 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
708 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
709
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
710 static struct methodlist marshal_methods[] = {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
711 {"dump", marshal_dump},
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
712 {"load", marshal_load},
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
713 {"dumps", marshal_dumps},
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
714 {"loads", marshal_loads},
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
715 {NULL, NULL} /* sentinel */
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
716 };
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
717
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
718 void
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
719 initmarshal()
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
720 {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
721 (void) initmodule("marshal", marshal_methods);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
722 }