[pypy-commit] pypy nedbat-sandbox: Avoid a compile at startup by using our own marshalling of stat results, instead of calling into rmarshal to do it.
ned
noreply at buildbot.pypy.org
Wed Nov 30 04:06:26 CET 2011
Author: Ned Batchelder <ned at nedbatchelder.com>
Branch: nedbat-sandbox
Changeset: r50003:0cca0b181f5c
Date: 2011-11-29 22:00 -0500
http://bitbucket.org/pypy/pypy/changeset/0cca0b181f5c/
Log: Avoid a compile at startup by using our own marshalling of stat
results, instead of calling into rmarshal to do it.
diff --git a/pypy/translator/sandbox/sandlib.py b/pypy/translator/sandbox/sandlib.py
--- a/pypy/translator/sandbox/sandlib.py
+++ b/pypy/translator/sandbox/sandlib.py
@@ -50,6 +50,25 @@
marshal.dump(msg, g)
else:
marshal.dump(msg, g, 0)
+ elif resulttype is s_StatResult:
+ # Hand-coded marshal for stat results that mimics what rmarshal expects.
+ # marshal.dump(tuple(msg)) would have been too easy. rmarshal insists
+ # on 64-bit ints at places, even when the value fits in 32 bits.
+ import struct
+ st = tuple(msg)
+ fmt = "iIIiiiIfff"
+ buf = []
+ buf.append(struct.pack("<ci", '(', len(st)))
+ for c, v in zip(fmt, st):
+ if c == 'i':
+ buf.append(struct.pack("<ci", c, v))
+ elif c == 'I':
+ buf.append(struct.pack("<cq", c, v))
+ elif c == 'f':
+ fstr = "%g" % v
+ buf.append(struct.pack("<cB", c, len(fstr)))
+ buf.append(fstr)
+ g.write(''.join(buf))
else:
# use the exact result type for encoding
from pypy.rlib.rmarshal import get_marshaller
More information about the pypy-commit
mailing list