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_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 @@
         return p;
 }
 
+
 static void
 free_seq_exprs(asdl_seq *seq)
 {
@@ -1107,6 +1109,7 @@
         asdl_seq_free(seq);
 }
 
+
 void
 free_mod(mod_ty o)
 {
@@ -1533,6 +1536,76 @@
         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 @@
         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 @@
 	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;
-}
