summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2005-11-13 19:14:20 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2005-11-13 19:14:20 (GMT)
commit7b5a604d247e8446dbcb208ab2b1e231eff1e9cf (patch)
tree4e5a45b76fbc7efe4f586318fe22ee40eb9aab18
parent497b19a8a2c1275709ad7490e4c11750ede026fb (diff)
downloadcpython-7b5a604d247e8446dbcb208ab2b1e231eff1e9cf.zip
cpython-7b5a604d247e8446dbcb208ab2b1e231eff1e9cf.tar.gz
cpython-7b5a604d247e8446dbcb208ab2b1e231eff1e9cf.tar.bz2
Whoops, checkin consistent versions of *all* files to stop polluting
a bunch of names
-rw-r--r--Include/Python-ast.h4
-rw-r--r--Include/asdl.h7
-rwxr-xr-xParser/asdl_c.py86
-rw-r--r--Python/Python-ast.c74
-rw-r--r--Python/asdl.c66
5 files changed, 158 insertions, 79 deletions
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index abc5bcb..9609141 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -34,6 +34,7 @@ typedef struct _keyword *keyword_ty;
typedef struct _alias *alias_ty;
+
struct _mod {
enum { Module_kind=1, Interactive_kind=2, Expression_kind=3,
Suite_kind=4 } kind;
@@ -326,6 +327,7 @@ struct _alias {
identifier asname;
};
+
mod_ty Module(asdl_seq * body);
mod_ty Interactive(asdl_seq * body);
mod_ty Expression(expr_ty body);
@@ -388,6 +390,7 @@ arguments_ty arguments(asdl_seq * args, identifier vararg, identifier kwarg,
asdl_seq * defaults);
keyword_ty keyword(identifier arg, expr_ty value);
alias_ty alias(identifier name, identifier asname);
+
void free_mod(mod_ty);
void free_stmt(stmt_ty);
void free_expr(expr_ty);
@@ -402,3 +405,4 @@ void free_excepthandler(excepthandler_ty);
void free_arguments(arguments_ty);
void free_keyword(keyword_ty);
void free_alias(alias_ty);
+
diff --git a/Include/asdl.h b/Include/asdl.h
index 8ad46fa..cf05967 100644
--- a/Include/asdl.h
+++ b/Include/asdl.h
@@ -44,11 +44,4 @@ void asdl_seq_free(asdl_seq *);
#endif
#define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size)
-/* Routines to marshal the basic types. */
-int marshal_write_int(PyObject **, int *, int);
-int marshal_write_bool(PyObject **, int *, bool);
-int marshal_write_identifier(PyObject **, int *, identifier);
-int marshal_write_string(PyObject **, int *, string);
-int marshal_write_object(PyObject **, int *, object);
-
#endif /* !Py_ASDL_H */
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index fa71c23..d056c36 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -367,7 +367,12 @@ def has_sequence(types, doing_specialization):
class StaticVisitor(PickleVisitor):
- '''Very simple, always emit this static code'''
+ CODE = '''Very simple, always emit this static code. Overide CODE'''
+
+ def visit(self, object):
+ self.emit(self.CODE, 0, reflow=False)
+
+class FreeUtilVisitor(StaticVisitor):
CODE = '''static void
free_seq_exprs(asdl_seq *seq)
@@ -390,10 +395,6 @@ free_seq_stmts(asdl_seq *seq)
}
'''
- def visit(self, object):
- self.emit(self.CODE, 0, reflow=False)
-
-
class FreeVisitor(PickleVisitor):
def func_begin(self, name, has_seq):
@@ -483,6 +484,77 @@ class FreeVisitor(PickleVisitor):
self.emit("free_%s((%s)%s);" % (field.type, ctype, value), depth)
+class MarshalUtilVisitor(StaticVisitor):
+
+ CODE = '''
+#define CHECKSIZE(BUF, OFF, MIN) { \\
+ int need = *(OFF) + MIN; \\
+ if (need >= PyString_GET_SIZE(*(BUF))) { \\
+ int newsize = PyString_GET_SIZE(*(BUF)) * 2; \\
+ if (newsize < need) \\
+ newsize = need; \\
+ if (_PyString_Resize((BUF), newsize) < 0) \\
+ return 0; \\
+ } \\
+}
+
+static int
+marshal_write_int(PyObject **buf, int *offset, int x)
+{
+ char *s;
+
+ CHECKSIZE(buf, offset, 4)
+ s = PyString_AS_STRING(*buf) + (*offset);
+ s[0] = (x & 0xff);
+ s[1] = (x >> 8) & 0xff;
+ s[2] = (x >> 16) & 0xff;
+ s[3] = (x >> 24) & 0xff;
+ *offset += 4;
+ return 1;
+}
+
+static int
+marshal_write_bool(PyObject **buf, int *offset, bool b)
+{
+ if (b)
+ marshal_write_int(buf, offset, 1);
+ else
+ marshal_write_int(buf, offset, 0);
+ return 1;
+}
+
+static int
+marshal_write_identifier(PyObject **buf, int *offset, identifier id)
+{
+ int l = PyString_GET_SIZE(id);
+ marshal_write_int(buf, offset, l);
+ CHECKSIZE(buf, offset, l);
+ memcpy(PyString_AS_STRING(*buf) + *offset,
+ PyString_AS_STRING(id), l);
+ *offset += l;
+ return 1;
+}
+
+static int
+marshal_write_string(PyObject **buf, int *offset, string s)
+{
+ int len = PyString_GET_SIZE(s);
+ marshal_write_int(buf, offset, len);
+ CHECKSIZE(buf, offset, len);
+ memcpy(PyString_AS_STRING(*buf) + *offset,
+ PyString_AS_STRING(s), len);
+ *offset += len;
+ return 1;
+}
+
+static int
+marshal_write_object(PyObject **buf, int *offset, object s)
+{
+ /* XXX */
+ return 0;
+}
+'''
+
class MarshalFunctionVisitor(PickleVisitor):
def func_begin(self, name, has_seq):
@@ -563,6 +635,7 @@ class ChainOfVisitors:
def visit(self, object):
for v in self.visitors:
v.visit(object)
+ v.emit("", 0)
def main(srcfile):
auto_gen_msg = '/* File automatically generated by %s */\n' % sys.argv[0]
@@ -595,8 +668,9 @@ def main(srcfile):
print >> f
v = ChainOfVisitors(MarshalPrototypeVisitor(f),
FunctionVisitor(f),
- StaticVisitor(f),
+ FreeUtilVisitor(f),
FreeVisitor(f),
+ MarshalUtilVisitor(f),
MarshalFunctionVisitor(f),
)
v.visit(mod)
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 677705c..14040ad 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -17,6 +17,7 @@ static int marshal_write_excepthandler(PyObject **, int *, excepthandler_ty);
static int marshal_write_arguments(PyObject **, int *, arguments_ty);
static int marshal_write_keyword(PyObject **, int *, keyword_ty);
static int marshal_write_alias(PyObject **, int *, alias_ty);
+
mod_ty
Module(asdl_seq * body)
{
@@ -1087,6 +1088,7 @@ alias(identifier name, identifier asname)
return p;
}
+
static void
free_seq_exprs(asdl_seq *seq)
{
@@ -1107,6 +1109,7 @@ free_seq_stmts(asdl_seq *seq)
asdl_seq_free(seq);
}
+
void
free_mod(mod_ty o)
{
@@ -1533,6 +1536,76 @@ free_alias(alias_ty o)
free(o);
}
+
+
+#define CHECKSIZE(BUF, OFF, MIN) { \
+ int need = *(OFF) + MIN; \
+ if (need >= PyString_GET_SIZE(*(BUF))) { \
+ int newsize = PyString_GET_SIZE(*(BUF)) * 2; \
+ if (newsize < need) \
+ newsize = need; \
+ if (_PyString_Resize((BUF), newsize) < 0) \
+ return 0; \
+ } \
+}
+
+static int
+marshal_write_int(PyObject **buf, int *offset, int x)
+{
+ char *s;
+
+ CHECKSIZE(buf, offset, 4)
+ s = PyString_AS_STRING(*buf) + (*offset);
+ s[0] = (x & 0xff);
+ s[1] = (x >> 8) & 0xff;
+ s[2] = (x >> 16) & 0xff;
+ s[3] = (x >> 24) & 0xff;
+ *offset += 4;
+ return 1;
+}
+
+static int
+marshal_write_bool(PyObject **buf, int *offset, bool b)
+{
+ if (b)
+ marshal_write_int(buf, offset, 1);
+ else
+ marshal_write_int(buf, offset, 0);
+ return 1;
+}
+
+static int
+marshal_write_identifier(PyObject **buf, int *offset, identifier id)
+{
+ int l = PyString_GET_SIZE(id);
+ marshal_write_int(buf, offset, l);
+ CHECKSIZE(buf, offset, l);
+ memcpy(PyString_AS_STRING(*buf) + *offset,
+ PyString_AS_STRING(id), l);
+ *offset += l;
+ return 1;
+}
+
+static int
+marshal_write_string(PyObject **buf, int *offset, string s)
+{
+ int len = PyString_GET_SIZE(s);
+ marshal_write_int(buf, offset, len);
+ CHECKSIZE(buf, offset, len);
+ memcpy(PyString_AS_STRING(*buf) + *offset,
+ PyString_AS_STRING(s), len);
+ *offset += len;
+ return 1;
+}
+
+static int
+marshal_write_object(PyObject **buf, int *offset, object s)
+{
+ /* XXX */
+ return 0;
+}
+
+
static int
marshal_write_mod(PyObject **buf, int *off, mod_ty o)
{
@@ -2286,3 +2359,4 @@ marshal_write_alias(PyObject **buf, int *off, alias_ty o)
return 1;
}
+
diff --git a/Python/asdl.c b/Python/asdl.c
index bb29857..efd345e 100644
--- a/Python/asdl.c
+++ b/Python/asdl.c
@@ -24,69 +24,3 @@ asdl_seq_free(asdl_seq *seq)
PyObject_Free(seq);
}
-#define CHECKSIZE(BUF, OFF, MIN) { \
- int need = *(OFF) + MIN; \
- if (need >= PyString_GET_SIZE(*(BUF))) { \
- int newsize = PyString_GET_SIZE(*(BUF)) * 2; \
- if (newsize < need) \
- newsize = need; \
- if (_PyString_Resize((BUF), newsize) < 0) \
- return 0; \
- } \
-}
-
-int
-marshal_write_int(PyObject **buf, int *offset, int x)
-{
- char *s;
-
- CHECKSIZE(buf, offset, 4)
- s = PyString_AS_STRING(*buf) + (*offset);
- s[0] = (x & 0xff);
- s[1] = (x >> 8) & 0xff;
- s[2] = (x >> 16) & 0xff;
- s[3] = (x >> 24) & 0xff;
- *offset += 4;
- return 1;
-}
-
-int
-marshal_write_bool(PyObject **buf, int *offset, bool b)
-{
- if (b)
- marshal_write_int(buf, offset, 1);
- else
- marshal_write_int(buf, offset, 0);
- return 1;
-}
-
-int
-marshal_write_identifier(PyObject **buf, int *offset, identifier id)
-{
- int l = PyString_GET_SIZE(id);
- marshal_write_int(buf, offset, l);
- CHECKSIZE(buf, offset, l);
- memcpy(PyString_AS_STRING(*buf) + *offset,
- PyString_AS_STRING(id), l);
- *offset += l;
- return 1;
-}
-
-int
-marshal_write_string(PyObject **buf, int *offset, string s)
-{
- int len = PyString_GET_SIZE(s);
- marshal_write_int(buf, offset, len);
- CHECKSIZE(buf, offset, len);
- memcpy(PyString_AS_STRING(*buf) + *offset,
- PyString_AS_STRING(s), len);
- *offset += len;
- return 1;
-}
-
-int
-marshal_write_object(PyObject **buf, int *offset, object s)
-{
- /* XXX */
- return 0;
-}