annotate Python/marshal.c @ 1590:ac2e5cc29949 legacy-trunk

Added tests for missing host to open_http and open_gopher
author Guido van Rossum <guido@python.org>
date Mon, 18 Apr 1994 09:39:56 +0000
parents cd397266dc1c
children b724599401ff
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 /***********************************************************
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
2 Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum,
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
3 Amsterdam, 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
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 documentation for any purpose and without fee is hereby granted,
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
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 both that copyright notice and this permission notice appear in
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 Centrum or CWI not be used in advertising or publicity pertaining to
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 distribution of the software without specific, written prior permission.
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 ******************************************************************/
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 /* Write Python objects to files and read them back.
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 This is intended for writing and reading compiled Python code only;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 a true persistent storage facility would be much harder, since
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 it would have to take circular links and sharing into account. */
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 #include "allobjects.h"
732
0338c7c9f08c Shut up lint.
Guido van Rossum <guido@python.org>
parents: 475
diff changeset
31 #include "modsupport.h"
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 #include "longintrepr.h"
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 #include "compile.h"
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #include "marshal.h"
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 #include <errno.h>
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 #define TYPE_NULL '0'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 #define TYPE_NONE 'N'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 #define TYPE_INT 'i'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 #define TYPE_FLOAT 'f'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 #define TYPE_LONG 'l'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 #define TYPE_STRING 's'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 #define TYPE_TUPLE '('
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 #define TYPE_LIST '['
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 #define TYPE_DICT '{'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 #define TYPE_CODE 'C'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 #define TYPE_UNKNOWN '?'
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
50 typedef struct {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
51 FILE *fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
52 /* 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
53 object *str;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
54 char *ptr;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
55 char *end;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
56 } WFILE;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
57
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
58 #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
59 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
60 else w_more(c, p)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
62 static void
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
63 w_more(c, p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
64 char c;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
65 WFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
66 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
67 int size, newsize;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
68 if (p->str == NULL)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
69 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
70 size = getstringsize(p->str);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
71 newsize = size + 1024;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
72 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
73 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
74 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
75 else {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
76 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
77 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
78 *p->ptr++ = c;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
79 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
80 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
81
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
82 static void
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
83 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
84 char *s;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
85 int n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
86 WFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
87 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
88 if (p->fp != NULL) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
89 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
90 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
91 else {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
92 while (--n >= 0) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
93 w_byte(*s, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
94 s++;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
95 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
96 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
97 }
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 static void
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
100 w_short(x, p)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 int x;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
102 WFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
103 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
104 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
105 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
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 static void
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
109 w_long(x, p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
110 long x;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
111 WFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
112 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
113 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
114 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
115 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
116 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
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_object(v, p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
121 object *v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
122 WFILE *p;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
124 long i, n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
125
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
126 if (v == NULL)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
127 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
128 else if (v == None)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
129 w_byte(TYPE_NONE, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
130 else if (is_intobject(v)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
131 w_byte(TYPE_INT, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
132 w_long(getintvalue(v), p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
133 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
134 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
135 longobject *ob = (longobject *)v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
136 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
137 n = ob->ob_size;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
138 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
139 if (n < 0)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
140 n = -n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
141 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
142 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
143 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
144 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
145 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
146 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
147 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
148 n = strlen(buf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
149 w_byte(TYPE_FLOAT, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
150 w_byte((int)n, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
151 w_string(buf, (int)n, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
152 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
153 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
154 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
155 n = getstringsize(v);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
156 w_long(n, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
157 w_string(getstringvalue(v), (int)n, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
158 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
159 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
160 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
161 n = gettuplesize(v);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
162 w_long(n, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
163 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
164 w_object(gettupleitem(v, (int)i), p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
165 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
166 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
167 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
168 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
169 n = getlistsize(v);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
170 w_long(n, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
171 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
172 w_object(getlistitem(v, (int)i), p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
173 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
174 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
175 else if (is_dictobject(v)) {
1288
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
176 int pos;
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
177 object *key, *value;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
178 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
179 /* This one is NULL object terminated! */
1288
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
180 pos = 0;
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
181 while (mappinggetnext(v, &pos, &key, &value)) {
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
182 w_object(key, p);
9fed5726a36d Several changes in one:
Guido van Rossum <guido@python.org>
parents: 1270
diff changeset
183 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
184 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
185 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
186 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
187 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
188 codeobject *co = (codeobject *)v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
189 w_byte(TYPE_CODE, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
190 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
191 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
192 w_object(co->co_names, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
193 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
194 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
195 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
196 else {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
197 w_byte(TYPE_UNKNOWN, p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
198 }
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
200
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 void
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 wr_long(x, fp)
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 long x;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 FILE *fp;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
206 WFILE wf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
207 wf.fp = fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
208 w_long(x, &wf);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 void
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
212 wr_object(x, fp)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
213 object *x;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 FILE *fp;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
216 WFILE wf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
217 wf.fp = fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
218 w_object(x, &wf);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
220
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
221 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
222
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
223 #define r_byte(p) ((p)->fp ? getc((p)->fp) \
1270
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
224 : ((p)->ptr != (p)->end) ? \
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
225 (unsigned char)*(p)->ptr++ : EOF)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
226
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
227 static int
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
228 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
229 char *s;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
230 int n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
231 RFILE *p;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
232 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
233 if (p->fp != NULL)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
234 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
235 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
236 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
237 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
238 p->ptr += n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
239 return n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
240 }
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 static int
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
243 r_short(p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
244 RFILE *p;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 register short x;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
247 x = r_byte(p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
248 x |= r_byte(p) << 8;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 /* XXX If your short is > 16 bits, add sign-extension here!!! */
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 return x;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
252
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
253 static long
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
254 r_long(p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
255 RFILE *p;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 register long x;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
258 x = r_byte(p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
259 x |= (long)r_byte(p) << 8;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
260 x |= (long)r_byte(p) << 16;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
261 x |= (long)r_byte(p) << 24;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 /* XXX If your long is > 32 bits, add sign-extension here!!! */
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 return x;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 }
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 static object *
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
267 r_object(p)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
268 RFILE *p;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 object *v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 long i, n;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
272 int type = r_byte(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
273
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 switch (type) {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
275
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 case EOF:
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
277 err_setstr(EOFError, "EOF read where object expected");
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
279
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 case TYPE_NULL:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
282
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 case TYPE_NONE:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 INCREF(None);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 return None;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
286
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 case TYPE_INT:
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
288 return newintobject(r_long(p));
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
289
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 case TYPE_LONG:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
291 {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 int size;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 longobject *ob;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
294 n = r_long(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 size = n<0 ? -n : n;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 ob = alloclongobject(size);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
297 if (ob == NULL)
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 ob->ob_size = n;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 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
301 ob->ob_digit[i] = r_short(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 return (object *)ob;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
303 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
304
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 case TYPE_FLOAT:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 {
732
0338c7c9f08c Shut up lint.
Guido van Rossum <guido@python.org>
parents: 475
diff changeset
307 extern double strtod PROTO((const char *, char **));
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 char buf[256];
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 double res;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 char *end;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
311 n = r_byte(p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
312 if (r_string(buf, (int)n, p) != n) {
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
313 err_setstr(EOFError,
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 "EOF read where object expected");
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 buf[n] = '\0';
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 errno = 0;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 res = strtod(buf, &end);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 if (*end != '\0') {
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
321 err_setstr(ValueError, "bad float syntax");
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
322 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
323 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 if (errno != 0) {
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
325 err_setstr(ValueError,
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
326 "float constant too large");
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
327 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
328 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
329 return newfloatobject(res);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
330 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
331
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
332 case TYPE_STRING:
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
333 n = r_long(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
334 v = newsizedstringobject((char *)NULL, n);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
335 if (v != NULL) {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
336 if (r_string(getstringvalue(v), (int)n, p) != n) {
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
337 DECREF(v);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
338 v = NULL;
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
339 err_setstr(EOFError,
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 "EOF read where object expected");
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
343 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
344
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
345 case TYPE_TUPLE:
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
346 n = r_long(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
347 v = newtupleobject((int)n);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
348 if (v == NULL)
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
349 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
350 for (i = 0; i < n; i++)
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
351 settupleitem(v, (int)i, r_object(p));
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
352 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
353
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 case TYPE_LIST:
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
355 n = r_long(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
356 v = newlistobject((int)n);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
357 if (v == NULL)
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
358 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
359 for (i = 0; i < n; i++)
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
360 setlistitem(v, (int)i, r_object(p));
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
361 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
362
279
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
363 case TYPE_DICT:
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
364 v = newdictobject();
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
365 if (v == NULL)
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
366 return NULL;
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
367 for (;;) {
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
368 object *key, *val;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
369 key = r_object(p);
279
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
370 if (key == NULL)
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
371 break;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
372 val = r_object(p);
279
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
373 dict2insert(v, key, val);
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
374 DECREF(key);
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
375 XDECREF(val);
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
376 }
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
377 return v;
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
378
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
379 case TYPE_CODE:
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
380 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
381 object *code = r_object(p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
382 object *consts = r_object(p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
383 object *names = r_object(p);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
384 object *filename = r_object(p);
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
385 object *name = r_object(p);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
386 if (!err_occurred()) {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 v = (object *) newcodeobject(code,
1257
1cabc2b6c970 * Changed all copyright messages to include 1993.
Guido van Rossum <guido@python.org>
parents: 1191
diff changeset
388 consts, names, filename, name);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
390 else
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
391 v = NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
392 XDECREF(code);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
393 XDECREF(consts);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
394 XDECREF(names);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
395 XDECREF(filename);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
396
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
397 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
399
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 default:
475
e2c3463c4d91 Use new exceptions.
Guido van Rossum <guido@python.org>
parents: 341
diff changeset
401 err_setstr(TypeError, "read unknown object");
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
403
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
406
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
407 long
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
408 rd_long(fp)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
409 FILE *fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
410 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
411 RFILE rf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
412 rf.fp = fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
413 return r_long(&rf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
414 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
415
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
416 object *
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
417 rd_object(fp)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
418 FILE *fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
419 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
420 RFILE rf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
421 rf.fp = fp;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
422 return r_object(&rf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
423 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
424
1270
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
425 object *
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
426 rds_object(str, len)
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
427 char *str;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
428 int len;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
429 {
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
430 RFILE rf;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
431 rf.fp = NULL;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
432 rf.str = NULL;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
433 rf.ptr = str;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
434 rf.end = str + len;
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
435 return r_object(&rf);
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
436 }
14369a5e6167 Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
437
279
9c924f9c3b16 Add marshalling for dictionaries.
Guido van Rossum <guido@python.org>
parents: 272
diff changeset
438 /* And an interface for Python programs... */
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
439
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
440 static object *
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
441 marshal_dump(self, args)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
442 object *self;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
443 object *args;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
444 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
445 WFILE wf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
446 object *x;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
447 object *f;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
448 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
449 return NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
450 if (!is_fileobject(f)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
451 err_setstr(TypeError, "marshal.dump() 2nd arg must be file");
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
452 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
453 }
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
454 wf.fp = getfilefile(f);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
455 wf.str = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
456 wf.ptr = wf.end = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
457 w_object(x, &wf);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
458 INCREF(None);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
459 return None;
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
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
462 static object *
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
463 marshal_load(self, args)
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
464 object *self;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
465 object *args;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
466 {
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
467 RFILE rf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
468 object *f;
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
469 object *v;
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
470 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
471 return NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
472 if (!is_fileobject(f)) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
473 err_setstr(TypeError, "marshal.load() arg must be file");
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
474 return NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
475 }
1191
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
476 rf.fp = getfilefile(f);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
477 rf.str = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
478 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
479 err_clear();
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
480 v = r_object(&rf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
481 if (err_occurred()) {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
482 XDECREF(v);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
483 v = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
484 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
485 return v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
486 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
487
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
488 static object *
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
489 marshal_dumps(self, args)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
490 object *self;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
491 object *args;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
492 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
493 WFILE wf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
494 object *x;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
495 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
496 return NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
497 wf.fp = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
498 wf.str = newsizedstringobject((char *)NULL, 50);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
499 if (wf.str == NULL)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
500 return NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
501 wf.ptr = GETSTRINGVALUE((stringobject *)wf.str);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
502 wf.end = wf.ptr + getstringsize(wf.str);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
503 w_object(x, &wf);
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
504 if (wf.str != NULL)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
505 resizestring(&wf.str,
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
506 (int) (wf.ptr - GETSTRINGVALUE((stringobject *)wf.str)));
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
507 return wf.str;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
508 }
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
509
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
510 static object *
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
511 marshal_loads(self, args)
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
512 object *self;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
513 object *args;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
514 {
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
515 RFILE rf;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
516 object *v;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
517 char *s;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
518 int n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
519 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
520 return NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
521 rf.fp = NULL;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
522 rf.str = args;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
523 rf.ptr = s;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
524 rf.end = s + n;
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
525 err_clear();
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
526 v = r_object(&rf);
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
527 if (err_occurred()) {
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
528 XDECREF(v);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
529 v = NULL;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
530 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
531 return v;
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
532 }
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
533
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
534 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
535 {"dump", marshal_dump},
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
536 {"load", marshal_load},
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
537 {"dumps", marshal_dumps},
38f0054f44a7 Added separate main program for the Mac: macmain.c
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
538 {"loads", marshal_loads},
267
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
539 {NULL, NULL} /* sentinel */
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
540 };
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
541
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
542 void
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
543 initmarshal()
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 (void) initmodule("marshal", marshal_methods);
457661e47c7b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
546 }